[SCM] spatialite branch, upstream, updated. upstream/3.0.0_beta20110817-2-g8a6703b

Francesco Paolo Lovergine frankie at debian.org
Wed Feb 22 13:00:05 UTC 2012


The following commit has been merged in the upstream branch:
commit 7592f3e0324f5610bdbb5ca67e4105c0b49cf0ad
Author: Francesco Paolo Lovergine <frankie at debian.org>
Date:   Fri Feb 17 16:53:34 2012 +0100

    Imported Upstream version 3.0.1

diff --git a/libspatialite/AUTHORS b/libspatialite/AUTHORS
index faf13f2..f963eb0 100644
--- a/libspatialite/AUTHORS
+++ b/libspatialite/AUTHORS
@@ -4,6 +4,8 @@ Alessandro Furieri <a.furieri at lqt.it>
 Contributors:
 Klaus Foerster <klaus.foerster at svg.cc>
 Luigi Costalli <luigi.costalli at gmail.com>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+Brad Hards <bradh at frogmouth.net>
 
 The Vanuatu Team - University of Toronto - Supervisor:
 Greg Wilson <gvwilson at cs.toronto.ca>
diff --git a/libspatialite/Doxyfile.in b/libspatialite/Doxyfile.in
new file mode 100644
index 0000000..4e9fc64
--- /dev/null
+++ b/libspatialite/Doxyfile.in
@@ -0,0 +1,1691 @@
+# Doxyfile 1.7.3
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# 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.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = SpatiaLite
+
+# 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         = @VERSION@
+
+# 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 an logo or 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)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# 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 comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+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 behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+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.
+
+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, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. 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 that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip 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.
+
+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 (the default)
+# will make doxygen 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.
+
+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.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT 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.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_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 and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+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.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If 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 namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = 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.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the 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.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = 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 default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to 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 default)
+# the group names will appear in their defined order.
+
+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 default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = 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.
+
+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.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# 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 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 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. See the manual for examples.
+
+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. The 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.
+
+LAYOUT_FILE            =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The 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 (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = src/headers/spatialite.h \
+			src/headers/spatialite/gaiaaux.h \
+			src/headers/spatialite/gaiaexif.h \
+			src/headers/spatialite/gaiageo.h \
+			src/headers/spatialite/gg_const.h \
+			src/headers/spatialite/gg_structs.h \
+			src/headers/spatialite/gg_core.h \
+			src/headers/spatialite/gg_mbr.h \
+			src/headers/spatialite/gg_formats.h \
+			src/headers/spatialite/gg_dynamic.h \
+			src/headers/spatialite/gg_advanced.h \
+			examples/examples.doxy \
+			mainpage.doxy
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. 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.
+
+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 pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+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
+
+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           = examples
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# 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 option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+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.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# 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.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet 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.
+# The allowed range is 0 to 359.
+
+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.
+
+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.
+
+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 NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the 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. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# 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, 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.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# 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.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, 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.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_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.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# 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.
+
+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.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+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
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, 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.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, 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.
+
+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.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [0,1..20])
+# 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.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# 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.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When 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.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# 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.
+
+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 before the changes have effect.
+
+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 prerendered 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 also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# 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.org site, so you can quickly see the result without installing
+# MathJax, but it is strongly recommended to install a local copy of MathJax
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# 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.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = 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. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# 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.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = 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.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE 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.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = 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.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS
+
+# 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.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) 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, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+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            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) 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.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will write a font called Helvetica to the output
+# directory and reference it in all dot files that doxygen generates.
+# When you want a differently looking font 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.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are 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.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, svg, gif or svg.
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# 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 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.
+
+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.
+
+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).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/libspatialite/Makefile.am b/libspatialite/Makefile.am
index 832a712..16ba1c5 100644
--- a/libspatialite/Makefile.am
+++ b/libspatialite/Makefile.am
@@ -2,9 +2,18 @@ ACLOCAL_AMFLAGS = -I m4
 
 AUTOMAKE_OPTIONS = dist-zip
 
-EXTRA_DIST = makefile.vc nmake.opt libspatialite.def
+EXTRA_DIST = makefile.vc nmake.opt mainpage.doxy README.coverage
 
-SUBDIRS = src
+SUBDIRS = src test examples
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = spatialite.pc
+
+coverage-init:
+	lcov --directory src --capture --initial --output-file libspatialite_cov.info
+
+coverage::
+	lcov --directory src --output-file libspatialite_cov.info --capture
+	genhtml -o covresults libspatialite_cov.info
+
+MOSTLYCLEANFILES = libspatialite_cov.info
diff --git a/libspatialite/Makefile.in b/libspatialite/Makefile.in
index 85aecf1..266f459 100644
--- a/libspatialite/Makefile.in
+++ b/libspatialite/Makefile.in
@@ -35,10 +35,11 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/spatialite.pc.in \
-	$(top_srcdir)/configure AUTHORS COPYING INSTALL config.guess \
-	config.sub depcomp install-sh ltmain.sh missing
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Doxyfile.in \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/spatialite.pc.in $(top_srcdir)/configure AUTHORS \
+	COPYING INSTALL config.guess config.sub depcomp install-sh \
+	ltmain.sh missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -46,7 +47,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES = spatialite.pc
+CONFIG_CLEAN_FILES = Doxyfile spatialite.pc
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
@@ -170,6 +171,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -202,6 +204,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +238,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -253,10 +255,11 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 ACLOCAL_AMFLAGS = -I m4
 AUTOMAKE_OPTIONS = dist-zip
-EXTRA_DIST = makefile.vc nmake.opt libspatialite.def
-SUBDIRS = src
+EXTRA_DIST = makefile.vc nmake.opt mainpage.doxy README.coverage
+SUBDIRS = src test examples
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = spatialite.pc
+MOSTLYCLEANFILES = libspatialite_cov.info
 all: all-recursive
 
 .SUFFIXES:
@@ -294,6 +297,8 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 $(am__aclocal_m4_deps):
+Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 spatialite.pc: $(top_builddir)/config.status $(srcdir)/spatialite.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 
@@ -660,6 +665,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
@@ -761,6 +767,13 @@ uninstall-am: uninstall-pkgconfigDATA
 	uninstall-pkgconfigDATA
 
 
+coverage-init:
+	lcov --directory src --capture --initial --output-file libspatialite_cov.info
+
+coverage::
+	lcov --directory src --output-file libspatialite_cov.info --capture
+	genhtml -o covresults libspatialite_cov.info
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/libspatialite/README b/libspatialite/README
index f0b6db5..9586b20 100644
--- a/libspatialite/README
+++ b/libspatialite/README
@@ -6,19 +6,19 @@ PLEASE read the following information.
 2 - Required dependencies
 3 - Build notes
   3.1: Building on Linux
-  3.2: Building on MacOsX
+  3.2: Building on Mac OS X
   3.3: Building on Windows
     3.3.1: using MinGW / MSYS
     3.3.2: using Visual Studio .NET
   
 =====================================================================
 
-1 - Installation:
+1. Installation:
 =================
 
 The default destination path prefix for installed files is /usr/local.
 Results from the installation script will be placed into subdirectories
-include and lib.  If this default path prefix is proper, then execute:
+include and lib.  If this default path prefix is appropriate, then execute:
 
     ./configure
 
@@ -40,32 +40,61 @@ their size:
 
     make install-strip
 
-2- Required dependencies:
+2. Required dependencies:
 =========================
     
 The main external dependencies needed in order to build 'libspatialite' 
-are the SQLITE3, PROJ.4 and GEOS devel-packages.
+are:
+ - SQLite 3 (http://www.sqlite.org)
+    This is a hard dependency - you can't build libspatialite without it. SQLite
+    version 3.7.3 or later is strongly preferred - if you have an earlier
+    version then you will need to pass --enable-geocallbacks=no to the
+    ./configure script.
+    
+ - PROJ.4 (http://trac.osgeo.org/proj/)
+    This is strongly recommended, unless you have a particular purpose in mind
+    for your libspatialite build, and know that you won't need it. It is usually
+    available as a package, and libspatialite is pretty flexible about versions.
+
+ - GEOS (http://trac.osgeo.org/geos/)
+    This is strongly recommended, unless you have a particular purpose in mind
+    for your libspatialite build, and know that you won't need it. It is usually
+    available as a package, but libspatialite will have more capability if you
+    use version 3.3.0 or later so make sure that the package is recent enough.
+    Use --enable-geosadvanced=no argument to the ./configure script if you want
+    to use an earlier version of GEOS.
+
+ - FreeXL (http://www.gaia-gis.it/FreeXL/)
+    This is recommended if you want to be able to import data from Microsoft
+    Excel format (.xls suffix) files. If you do not wish to use it, you will
+    need to pass --enable-freexl=no to the ./configure script. Version 0.0.4
+    or later is required.
+
+Note that you need development code (e.g. -dev packages on Debian Linux and 
+derivatives such as Ubuntu, or -devel packages on most other Linux
+distributions).
+
 
 ICONV [Windows]
 ---------------
-If building on Windows, then a further dependency has to be satisfied,
-the ICONV one.
-PLEASE NOTE: this one is not an issue when building on Linux or MacOsX,
-because these systems offers a "native" ICONV support (this latter being
-a standard system component).
+When building on Windows, then you also need to provide iconv to ensure that
+appropriate character set conversions are available. This dependency is not 
+usually an issue when building on Linux or Mac OS X, because these systems 
+provide iconv as a standard component.
+
 For Windows the preferred solution is to download and install the pre-built 
-ICONV binaries and related files from:
+iconv binaries and related files from:
 http://gnuwin32.sourceforge.net/packages/libiconv.htm
 
 3 - Build notes
 ===============
 
-3.1: Building on Linux
-----------------------
+3.1: Building on Linux and similar systems
+------------------------------------------
 
-Building 'libspatialite' on Linux does not require any special 
-setting; we'll suppose you have unpacked the sources as 
-./libspatialite-3.0.0
+Building libspatialite on Linux and similar systems such as BSD or other Unix
+variants does not require any special settings. If you have unpacked the sources
+as ./libspatialite-3.0.0, then the required steps are:
 
 # cd libspatialite-3.0.0
 # ./configure
@@ -74,13 +103,12 @@ setting; we'll suppose you have unpacked the sources as
 #     or (in order to save some disk space)
 # sudo make install-strip
 
-3.2: Building on MacOsX
------------------------
+3.2: Building on Mac OS X
+-------------------------
 
-Building 'libspatialite' on MacOsX is quite the same as for Linux.
-You simply have to set explicitly some ENV variable.
-We'll suppose you have unpacked the sources as 
-./libspatialite-3.0.0
+Building 'libspatialite' on Mac OS X very similar to Linux. You simply have to
+set explicitly some environment variables. If you have unpacked the sources as 
+./libspatialite-3.0.0, then the required steps are:
 
 # cd libspatialite-3.0.0
 # export "CFLAGS=-I/opt/local/include"
@@ -91,29 +119,27 @@ We'll suppose you have unpacked the sources as
 #     or (in order to save some disk space)
 # sudo make install-strip
 
-IMPORTANT NOTICE: this will build an executable for your
-specific platform. i.e. when building on a PPC Mac,
-resulting binary will be targeted to run on PPC anyway.
-And when building on Intel Mac, resulting binary will
-run on Intel target.
+IMPORTANT NOTICE: this will build an executable for your specific platform.
+That is, when building on a PPC Mac, the resulting binary will be be for PPC.
+Similarly, when building on Intel Mac, resulting binary will be for  Intel.
 
-3.3: building on Windows
+3.3: Building on Windows
 ------------------------
 
 On Windows systems you can choose using two different compilers:
 - MinGW / MSYS
-  this represents a smart porting of a minimalistic Linux-like
-  devel-toolkit
+  This represents a smart porting of a minimalistic Linux-like
+  development toolkit
 - Microsoft Visual Studio .NET
-  this one is the standard platform devel-toolkit
+  This is the standard platform development toolkit from Microsoft.
 
 3.3.1: using MinGW / MSYS
 -------------------------
 
-We suppose you have already installed the MinGW compiler and the MSYS shell.
+We assume that you have already installed the MinGW compiler and the MSYS shell.
 Building 'libspatialite' under Windows is then more or less like building
-on any other UNIX-like system. We'll suppose you have unpacked the sources as 
-C:\libspatialite-3.0.0
+on any other UNIX-like system. If you have unpacked the sources as 
+C:\libspatialite-3.0.0, then the required steps are:
 
 $ cd c:/libspatialite-3.0.0
 $ export "CFLAGS=-I/usr/local/include"
@@ -128,10 +154,10 @@ $ make install-strip
 3.3.2: using Microsoft Visual Studio .NET
 -----------------------------------------
 
-We suppose you have already installed Visual Studio enabling the command
-line tools [you are expected to use the command prompt shell].
-We'll suppose you have unpacked the sources as 
-C:\libspatialite-3.0.0
+We assume that you have already installed Visual Studio enabling the command
+line tools. Note that you are expected to the Visual Studio command prompt shell
+rather than the GUI build environment. If you have unpacked the sources as 
+C:\libspatialite-3.0.0, then the required steps are:
 
 > cd c:\libspatialite-3.0.0
 > nmake /f makefile.vc
@@ -141,8 +167,7 @@ Please note: standard definitions in 'makefile.vc' assumes:
 - enabling PROJ
 - disabling GEOS
 
-If you want to alter this 'basic' behaviour you have then to
-adapt 'makefile.vc'.
-The 'libspatialite-geos.def' file contains any external symbol
-to be exported from the DLL when you build including GEOS.
+If you want to alter the default behaviour then make modifications in 
+'makefile.vc'. Also note that 'libspatialite-geos.def' contains those external
+symbols to be exported from the DLL when you build GEOS.
 
diff --git a/libspatialite/README.coverage b/libspatialite/README.coverage
new file mode 100644
index 0000000..83a8ebb
--- /dev/null
+++ b/libspatialite/README.coverage
@@ -0,0 +1,12 @@
+Coverage testing
+----------------
+You need to have gcov and lcov installed.
+
+Process:
+1. Use --enable-gcov=yes with configure script
+2. Clean and rebuild.
+3. make coverage-init
+4. make check (or whatever other tests you want to check coverage for)
+5. make coverage
+6. check summary on command line output.
+7. review detailed coverage results in covresults/index.html
diff --git a/libspatialite/aclocal.m4 b/libspatialite/aclocal.m4
index 18abb73..8cf6fb3 100644
--- a/libspatialite/aclocal.m4
+++ b/libspatialite/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
@@ -22,7 +22,8 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -31,7 +32,8 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
 
 m4_define([_LT_COPYING], [dnl
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -58,7 +60,7 @@ m4_define([_LT_COPYING], [dnl
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 ])
 
-# serial 56 LT_INIT
+# serial 57 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -87,6 +89,7 @@ esac
 # ------------------
 AC_DEFUN([LT_INIT],
 [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
 AC_BEFORE([$0], [LT_LANG])dnl
 AC_BEFORE([$0], [LT_OUTPUT])dnl
 AC_BEFORE([$0], [LTDL_INIT])dnl
@@ -103,6 +106,8 @@ AC_REQUIRE([LTVERSION_VERSION])dnl
 AC_REQUIRE([LTOBSOLETE_VERSION])dnl
 m4_require([_LT_PROG_LTMAIN])dnl
 
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
 dnl Parse OPTIONS
 _LT_SET_OPTIONS([$0], [$1])
 
@@ -139,7 +144,7 @@ m4_defun([_LT_CC_BASENAME],
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 ])
 
 
@@ -159,6 +164,9 @@ m4_defun([_LT_FILEUTILS_DEFAULTS],
 m4_defun([_LT_SETUP],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl
@@ -181,10 +189,13 @@ _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
 dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
 m4_require([_LT_CMD_RELOAD])dnl
 m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
 m4_require([_LT_CMD_OLD_ARCHIVE])dnl
 m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
 # See if we are running on zsh, and set the options which allow our
@@ -200,7 +211,6 @@ fi
 _LT_CHECK_OBJDIR
 
 m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
 
 case $host_os in
 aix3*)
@@ -214,23 +224,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -271,6 +264,28 @@ _LT_CONFIG_COMMANDS
 ])# _LT_SETUP
 
 
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
 # _LT_PROG_LTMAIN
 # ---------------
 # Note that this code is called both from `configure', and `config.status'
@@ -423,7 +438,7 @@ m4_define([_lt_decl_all_varnames],
 # declaration there will have the same value as in `configure'.  VARNAME
 # must have a single quote delimited value for this to work.
 m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
 
 
 # _LT_CONFIG_STATUS_DECLARATIONS
@@ -433,7 +448,7 @@ m4_define([_LT_CONFIG_STATUS_DECLARE],
 # embedded single quotes properly.  In configure, this macro expands
 # each variable declared with _LT_DECL (and _LT_TAGDECL) into:
 #
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
 m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
 [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
     [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
@@ -532,12 +547,20 @@ LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -548,9 +571,9 @@ done
 # Double-quote double-evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -558,16 +581,38 @@ for var in lt_decl_all_varnames([[ \
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
 _LT_OUTPUT_LIBTOOL_INIT
 ])
 
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
 # ---------
@@ -577,20 +622,11 @@ _LT_OUTPUT_LIBTOOL_INIT
 AC_DEFUN([LT_OUTPUT],
 [: ${CONFIG_LT=./config.lt}
 AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
 
 cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
+lt_cl_silent=false
 exec AS_MESSAGE_LOG_FD>>config.log
 {
   echo
@@ -616,7 +652,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
 m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
 configured by $[0], generated by m4_PACKAGE_STRING.
 
-Copyright (C) 2008 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
@@ -661,15 +697,13 @@ chmod +x "$CONFIG_LT"
 # appending to config.log, which fails on DOS, as config.log is still kept
 # open by configure.  Here we exec the FD to /dev/null, effectively closing
 # config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
 ])# LT_OUTPUT
 
 
@@ -732,15 +766,12 @@ _LT_EOF
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
 
-  _LT_PROG_XSI_SHELLFNS
+  _LT_PROG_REPLACE_SHELLFNS
 
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 ],
@@ -846,11 +877,13 @@ AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
 AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
 AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
 AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
 dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
 dnl AC_DEFUN([AC_LIBTOOL_F77], [])
 dnl AC_DEFUN([AC_LIBTOOL_FC], [])
 dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
 
 
 # _LT_TAG_COMPILER
@@ -955,6 +988,31 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	[lt_cv_ld_exported_symbols_list=no])
 	LDFLAGS="$save_LDFLAGS"
     ])
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -982,7 +1040,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
     else
       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
     fi
-    if test "$DSYMUTIL" != ":"; then
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -1002,7 +1060,11 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
   _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -1010,7 +1072,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -1026,203 +1088,142 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   fi
 ])
 
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
 # Links a minimal program and checks the executable
 # for the system default hardcoded library path. In most cases,
 # this is /usr/lib:/lib, but when the MPI compilers are used
 # the location of the communication and MPI libs are included too.
 # If we don't find anything, use the default library path according
 # to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
 ])# _LT_SYS_MODULE_PATH_AIX
 
 
 # _LT_SHELL_INIT(ARG)
 # -------------------
 m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
 
 
 # _LT_PROG_ECHO_BACKSLASH
 # -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
 else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
 fi
 
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
 
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
 
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
 
-AC_SUBST(lt_ECHO)
-])
 _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
 ])# _LT_PROG_ECHO_BACKSLASH
 
 
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
 # _LT_ENABLE_LOCK
 # ---------------
 m4_defun([_LT_ENABLE_LOCK],
@@ -1251,7 +1252,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     if test "$lt_cv_prog_gnu_ld" = yes; then
       case `/usr/bin/file conftest.$ac_objext` in
@@ -1369,14 +1370,47 @@ need_locks="$enable_libtool_lock"
 ])# _LT_ENABLE_LOCK
 
 
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
 # _LT_CMD_OLD_ARCHIVE
 # -------------------
 m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
+[_LT_PROG_AR
 
 AC_CHECK_TOOL(STRIP, strip, :)
 test -z "$STRIP" && STRIP=:
@@ -1403,10 +1437,19 @@ if test -n "$RANLIB"; then
   esac
   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
 _LT_DECL([], [old_postinstall_cmds], [2])
 _LT_DECL([], [old_postuninstall_cmds], [2])
 _LT_TAGDECL([], [old_archive_cmds], [2],
     [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
 ])# _LT_CMD_OLD_ARCHIVE
 
 
@@ -1431,15 +1474,15 @@ AC_CACHE_CHECK([$1], [$2],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        $2=yes
@@ -1479,7 +1522,7 @@ AC_CACHE_CHECK([$1], [$2],
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          $2=yes
@@ -1542,6 +1585,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -1606,8 +1654,8 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -1658,7 +1706,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
+[#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -1699,7 +1747,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -1708,7 +1762,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -1884,16 +1942,16 @@ AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
@@ -2052,6 +2110,7 @@ m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_OBJDUMP])dnl
 m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
 	[], [
@@ -2060,16 +2119,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -2082,7 +2148,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -2102,7 +2168,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[[lt_foo]]++; }
   if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi])
@@ -2190,7 +2262,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -2221,8 +2293,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -2243,36 +2316,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -2359,6 +2479,19 @@ gnu*)
   hardcode_into_libs=yes
   ;;
 
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
 hpux9* | hpux10* | hpux11*)
   # Give a soname corresponding to the major version so that dld.sl refuses to
   # link against other versions.
@@ -2401,8 +2534,10 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[[3-9]]*)
@@ -2469,26 +2604,35 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -2500,18 +2644,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -2732,6 +2864,8 @@ _LT_DECL([], [library_names_spec], [1],
     The last name is the one that the linker finds with -lNAME]])
 _LT_DECL([], [soname_spec], [1],
     [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
 _LT_DECL([], [postinstall_cmds], [2],
     [Command to use after installation of a shared archive])
 _LT_DECL([], [postuninstall_cmds], [2],
@@ -2844,6 +2978,7 @@ AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 m4_require([_LT_DECL_SED])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
 
 AC_ARG_WITH([gnu-ld],
     [AS_HELP_STRING([--with-gnu-ld],
@@ -2965,6 +3100,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -2973,8 +3113,8 @@ case $host_os in
     fi
     ;;
 esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
 ])# _LT_CMD_RELOAD
 
 
@@ -3026,16 +3166,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -3065,6 +3207,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -3073,11 +3219,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -3103,7 +3249,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd* | netbsdelf*-gnu)
+netbsd*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
   else
@@ -3177,6 +3323,21 @@ tpf*)
   ;;
 esac
 ])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -3184,7 +3345,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 _LT_DECL([], [deplibs_check_method], [1],
     [Method to check whether dependent libraries are shared objects])
 _LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
 ])# _LT_CHECK_MAGIC_METHOD
 
 
@@ -3241,7 +3406,19 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
   AC_SUBST([DUMPBIN])
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -3254,13 +3431,13 @@ _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
 AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
   [lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
   cat conftest.out >&AS_MESSAGE_LOG_FD
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -3275,16 +3452,77 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AM_PROG_NM], [])
 dnl AC_DEFUN([AC_PROG_NM], [])
 
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
 
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
@@ -3311,7 +3549,12 @@ m4_defun([_LT_COMPILER_NO_RTTI],
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
 if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
 
   _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
     lt_cv_prog_compiler_rtti_exceptions,
@@ -3328,6 +3571,7 @@ _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
 m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
 AC_REQUIRE([LT_PATH_LD])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -3395,8 +3639,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3432,6 +3676,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -3453,7 +3698,7 @@ _LT_EOF
   if AC_TRY_EVAL(ac_compile); then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
 	mv -f "$nlist"T "$nlist"
@@ -3465,6 +3710,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -3476,7 +3733,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT@&t at _DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -3502,15 +3759,15 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
 	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
 	fi
@@ -3543,6 +3800,13 @@ else
   AC_MSG_RESULT(ok)
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
 _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
     [Take the output of nm and produce a listing of raw symbols and C names])
 _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
@@ -3553,6 +3817,8 @@ _LT_DECL([global_symbol_to_c_name_address],
 _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
     [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
 
 
@@ -3564,7 +3830,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
 _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
-AC_MSG_CHECKING([for $compiler option to produce PIC])
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -3615,6 +3880,11 @@ m4_if([$1], [CXX], [
       # DJGPP does not support shared libraries at all
       _LT_TAGVAR(lt_prog_compiler_pic, $1)=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
     interix[[3-9]]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -3664,6 +3934,12 @@ m4_if([$1], [CXX], [
 	  ;;
 	esac
 	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
       dgux*)
 	case $cc_basename in
 	  ec++*)
@@ -3753,8 +4029,8 @@ m4_if([$1], [CXX], [
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
@@ -3784,7 +4060,7 @@ m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
 	;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -3816,7 +4092,7 @@ m4_if([$1], [CXX], [
 	;;
       solaris*)
 	case $cc_basename in
-	  CC*)
+	  CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
@@ -3920,6 +4196,12 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -3962,6 +4244,13 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -4025,7 +4314,13 @@ m4_if([$1], [CXX], [
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
@@ -4037,25 +4332,25 @@ m4_if([$1], [CXX], [
         # All Alpha code is PIC.
         _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	*Sun\ C*)
+	  # Sun C 5.9
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	  ;;
 	esac
 	;;
@@ -4087,7 +4382,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
       *)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
@@ -4144,9 +4439,11 @@ case $host_os in
     _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
     ;;
 esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
 
 #
 # Check to make sure the PIC flag actually works.
@@ -4165,6 +4462,8 @@ fi
 _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
 	[Additional compiler flags for building library objects])
 
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
 #
 # Check to make sure the static flag actually works.
 #
@@ -4185,6 +4484,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
 m4_defun([_LT_LINKER_SHLIBS],
 [AC_REQUIRE([LT_PATH_LD])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -4193,30 +4493,35 @@ m4_require([_LT_TAG_COMPILER])dnl
 AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 m4_if([$1], [CXX], [
   _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   case $host_os in
   aix[[4-9]]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-  ;;
+    case $cc_basename in
+    cl*) ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
 ], [
   runpath_var=
   _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -4276,13 +4581,36 @@ dnl Note also adjust exclude_expsyms for C++ above.
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -4316,11 +4644,12 @@ dnl Note also adjust exclude_expsyms for C++ above.
 	_LT_TAGVAR(ld_shlibs, $1)=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -4356,10 +4685,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -4377,6 +4708,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
     interix[[3-9]]*)
       _LT_TAGVAR(hardcode_direct, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4402,15 +4738,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -4421,13 +4758,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
 	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -4443,17 +4784,17 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
 	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -4462,13 +4803,13 @@ _LT_EOF
       fi
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -4486,8 +4827,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4533,8 +4874,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4574,8 +4915,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -4637,7 +4980,6 @@ _LT_EOF
 	if test "$aix_use_runtimelinking" = yes; then
 	  shared_flag="$shared_flag "'${wl}-G'
 	fi
-	_LT_TAGVAR(link_all_deplibs, $1)=no
       else
 	# not using gcc
 	if test "$host_cpu" = ia64; then
@@ -4663,9 +5005,9 @@ _LT_EOF
 	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _LT_SYS_MODULE_PATH_AIX([$1])
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -4674,14 +5016,19 @@ _LT_EOF
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
+	 _LT_SYS_MODULE_PATH_AIX([$1])
 	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
 	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -4713,20 +5060,63 @@ _LT_EOF
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -4764,7 +5154,7 @@ _LT_EOF
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4772,7 +5162,7 @@ _LT_EOF
 
     hpux9*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -4787,8 +5177,8 @@ _LT_EOF
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -4806,16 +5196,16 @@ _LT_EOF
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -4827,7 +5217,14 @@ _LT_EOF
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
 	  ;;
 	esac
       fi
@@ -4855,19 +5252,34 @@ _LT_EOF
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4876,7 +5288,7 @@ _LT_EOF
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -4929,17 +5341,17 @@ _LT_EOF
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4949,13 +5361,13 @@ _LT_EOF
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -4968,9 +5380,9 @@ _LT_EOF
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -5146,36 +5558,38 @@ x|xyes)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
       ;;
     esac
   fi
@@ -5240,8 +5654,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
     to runtime path list])
 _LT_TAGDECL([], [link_all_deplibs], [0],
     [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
 _LT_TAGDECL([], [always_export_symbols], [0],
     [Set to "yes" if exported symbols are required])
 _LT_TAGDECL([], [export_symbols_cmds], [2],
@@ -5252,6 +5664,8 @@ _LT_TAGDECL([], [include_expsyms], [1],
     [Symbols that must always be exported])
 _LT_TAGDECL([], [prelink_cmds], [2],
     [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
 _LT_TAGDECL([], [file_list_spec], [1],
     [Specify filename containing input files])
 dnl FIXME: Not yet implemented
@@ -5341,37 +5755,22 @@ CC="$lt_save_CC"
 ])# _LT_LANG_C_CONFIG
 
 
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
 # _LT_LANG_CXX_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a C++ compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
 # the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
 
 AC_LANG_PUSH(C++)
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
@@ -5393,6 +5792,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -5424,6 +5825,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -5441,6 +5843,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -5462,8 +5865,8 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5495,7 +5898,7 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -5604,10 +6007,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          _LT_SYS_MODULE_PATH_AIX
+          _LT_SYS_MODULE_PATH_AIX([$1])
           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -5616,14 +6019,19 @@ if test "$_lt_caught_CXX_error" != yes; then
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
+	    _LT_SYS_MODULE_PATH_AIX([$1])
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
 	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	    # This is similar to how AIX traditionally builds its shared
 	    # libraries.
@@ -5653,28 +6061,75 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
       darwin* | rhapsody*)
         _LT_DARWIN_LINKER_FEATURES($1)
 	;;
@@ -5716,6 +6171,11 @@ if test "$_lt_caught_CXX_error" != yes; then
       gnu*)
         ;;
 
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
       hpux9*)
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
@@ -5740,11 +6200,11 @@ if test "$_lt_caught_CXX_error" != yes; then
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5805,7 +6265,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
 	    if test "$GXX" = yes; then
@@ -5815,10 +6275,10 @@ if test "$_lt_caught_CXX_error" != yes; then
 	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -5848,7 +6308,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -5859,9 +6319,9 @@ if test "$_lt_caught_CXX_error" != yes; then
           *)
 	    if test "$GXX" = yes; then
 	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
 	      fi
 	    fi
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
@@ -5890,7 +6350,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5927,26 +6387,26 @@ if test "$_lt_caught_CXX_error" != yes; then
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
 	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
 		$RANLIB $oldlib'
 	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
-	    *) # Version 6 will use weak symbols
+	    *) # Version 6 and above use weak symbols
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
@@ -5954,7 +6414,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
@@ -5973,9 +6433,9 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
-	  xl*)
+	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5995,13 +6455,13 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	      _LT_TAGVAR(compiler_needs_object, $1)=yes
 
 	      # Not sure whether something based on
 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
 	      # would be better.
-	      output_verbose_link_cmd='echo'
+	      output_verbose_link_cmd='func_echo_all'
 
 	      # Archives containing C++ object files must be created using
 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6070,7 +6530,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 	  fi
-	  output_verbose_link_cmd=echo
+	  output_verbose_link_cmd=func_echo_all
 	else
 	  _LT_TAGVAR(ld_shlibs, $1)=no
 	fi
@@ -6105,15 +6565,15 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    case $host in
 	      osf3*)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 		;;
 	      *)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
 	          $RM $lib.exp'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 		;;
@@ -6129,17 +6589,17 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 	      case $host in
 	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	      esac
 
@@ -6149,7 +6609,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      # Commands to make compiler produce verbose output that lists
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
 	    else
 	      # FIXME: insert proper C++ library support
@@ -6185,7 +6645,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
 	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -6206,7 +6666,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    esac
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
 
-	    output_verbose_link_cmd='echo'
+	    output_verbose_link_cmd='func_echo_all'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6226,14 +6686,14 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
 	        # platform.
@@ -6244,7 +6704,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
@@ -6298,6 +6758,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           CC*)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
 	    ;;
 	  *)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -6353,6 +6817,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -6367,6 +6832,29 @@ AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
 
 
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
 # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
 # ---------------------------------
 # Figure out "hidden" library dependencies from verbose
@@ -6375,6 +6863,7 @@ AC_LANG_POP
 # objects, libraries and library flags.
 m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
 # Dependencies to place before and after the object being linked:
 _LT_TAGVAR(predep_objects, $1)=
 _LT_TAGVAR(postdep_objects, $1)=
@@ -6425,6 +6914,13 @@ public class foo {
 };
 _LT_EOF
 ])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
 dnl Parse the compiler output and extract the necessary
 dnl objects, libraries and library flags.
 if AC_TRY_EVAL(ac_compile); then
@@ -6436,7 +6932,7 @@ if AC_TRY_EVAL(ac_compile); then
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -6445,13 +6941,22 @@ if AC_TRY_EVAL(ac_compile); then
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -6471,8 +6976,10 @@ if AC_TRY_EVAL(ac_compile); then
 	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -6508,6 +7015,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 m4_if([$1], [CXX],
@@ -6544,7 +7052,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -6588,32 +7096,16 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1],
 ])# _LT_SYS_HIDDEN_LIBDEPS
 
 
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
 # _LT_LANG_F77_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a Fortran 77 compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6632,6 +7124,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6671,7 +7165,9 @@ if test "$_lt_disable_F77" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -6725,38 +7221,24 @@ if test "$_lt_disable_F77" != yes; then
 
   GCC=$lt_save_GCC
   CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
 fi # test "$_lt_disable_F77" != yes
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
 
 
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
 # _LT_LANG_FC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for a Fortran compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6775,6 +7257,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6814,7 +7298,9 @@ if test "$_lt_disable_FC" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
   compiler=$CC
   GCC=$ac_cv_fc_compiler_gnu
 
@@ -6870,7 +7356,8 @@ if test "$_lt_disable_FC" != yes; then
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
 fi # test "$_lt_disable_FC" != yes
 
 AC_LANG_POP
@@ -6907,10 +7394,12 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=yes
 CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_TAGVAR(LD, $1)="$LD"
@@ -6920,6 +7409,8 @@ _LT_CC_BASENAME([$compiler])
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 
 if test -n "$compiler"; then
   _LT_COMPILER_NO_RTTI($1)
@@ -6935,7 +7426,8 @@ fi
 AC_LANG_RESTORE
 
 GCC=$lt_save_GCC
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
@@ -6970,9 +7462,11 @@ _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
 lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
 CC=${RC-"windres"}
+CFLAGS=
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_CC_BASENAME([$compiler])
@@ -6985,7 +7479,8 @@ fi
 
 GCC=$lt_save_GCC
 AC_LANG_RESTORE
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_RC_CONFIG
 
 
@@ -7044,6 +7539,15 @@ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
 AC_SUBST([OBJDUMP])
 ])
 
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
 
 # _LT_DECL_SED
 # ------------
@@ -7135,8 +7639,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -7175,222 +7679,177 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
 
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
 
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
 
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
 
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
 
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
 
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
 
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
 
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
 
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
 
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
 
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
     ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
     ;;
-  esac
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
 ])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
 
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 6 ltoptions.m4
+# serial 7 ltoptions.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
@@ -7505,7 +7964,7 @@ LT_OPTION_DEFINE([LT_INIT], [win32-dll],
 [enable_win32_dll=yes
 
 case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
   AC_CHECK_TOOL(AS, as, false)
   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
   AC_CHECK_TOOL(OBJDUMP, objdump, false)
@@ -7513,13 +7972,13 @@ case $host in
 esac
 
 test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
 
 test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
 
 test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
 ])# win32-dll
 
 AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
@@ -7877,31 +8336,31 @@ m4_define([lt_dict_filter],
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# Generated from ltversion.in.
+# @configure_input@
 
-# serial 3017 ltversion.m4
+# serial 3293 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
+m4_define([LT_PACKAGE_VERSION], [2.4])
+m4_define([LT_PACKAGE_REVISION], [1.3293])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
+[macro_version='2.4'
+macro_revision='1.3293'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
 
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 4 lt~obsolete.m4
+# serial 5 lt~obsolete.m4
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
@@ -7971,7 +8430,6 @@ m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
 m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
 m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
 m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
 m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
 m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
 m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
@@ -7984,6 +8442,13 @@ m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
 m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
 m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
 m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
 
 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
diff --git a/libspatialite/config.guess b/libspatialite/config.guess
index c2246a4..dc84c68 100755
--- a/libspatialite/config.guess
+++ b/libspatialite/config.guess
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
 #   Free Software Foundation, Inc.
 
-timestamp='2009-12-30'
+timestamp='2009-11-20'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -56,9 +56,8 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
diff --git a/libspatialite/config.sub b/libspatialite/config.sub
index c2d1257..2a55a50 100755
--- a/libspatialite/config.sub
+++ b/libspatialite/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
 #   Free Software Foundation, Inc.
 
-timestamp='2010-01-22'
+timestamp='2009-11-20'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -75,9 +75,8 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -381,8 +380,7 @@ case $basic_machine in
 	| sparclite-* \
 	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile-* | tilegx-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
 	| tron-* \
 	| ubicom32-* \
 	| v850-* | v850e-* | vax-* \
@@ -1087,11 +1085,6 @@ case $basic_machine in
 		basic_machine=tic6x-unknown
 		os=-coff
 		;;
-        # This must be matched before tile*.
-        tilegx*)
-		basic_machine=tilegx-unknown
-		os=-linux-gnu
-		;;
 	tile*)
 		basic_machine=tile-unknown
 		os=-linux-gnu
@@ -1442,8 +1435,6 @@ case $os in
 	-dicos*)
 		os=-dicos
 		;;
-        -nacl*)
-	        ;;
 	-none)
 		;;
 	*)
diff --git a/libspatialite/configure b/libspatialite/configure
index e9b2a79..256273d 100755
--- a/libspatialite/configure
+++ b/libspatialite/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for libspatialite 3.0.0-beta.
+# Generated by GNU Autoconf 2.68 for libspatialite 3.0.1.
 #
 # Report bugs to <a.furieri at lqt.it>.
 #
@@ -91,6 +91,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -173,7 +174,15 @@ test x\$exitcode = x0 || exit 1"
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
+test \$(( 1 + 1 )) = 2 || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
   if (eval "$as_required") 2>/dev/null; then :
   as_have_required=yes
 else
@@ -216,11 +225,18 @@ IFS=$as_save_IFS
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -528,155 +544,8 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 # Sed expression to map a string onto a valid variable name.
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
-
-
-# Check that we are running under the correct shell.
 SHELL=${CONFIG_SHELL-/bin/sh}
 
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-$*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "$0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
 
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
@@ -701,8 +570,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libspatialite'
 PACKAGE_TARNAME='libspatialite'
-PACKAGE_VERSION='3.0.0-beta'
-PACKAGE_STRING='libspatialite 3.0.0-beta'
+PACKAGE_VERSION='3.0.1'
+PACKAGE_STRING='libspatialite 3.0.1'
 PACKAGE_BUGREPORT='a.furieri at lqt.it'
 PACKAGE_URL=''
 
@@ -764,8 +633,9 @@ OTOOL
 LIPO
 NMEDIT
 DSYMUTIL
-lt_ECHO
+MANIFEST_TOOL
 RANLIB
+ac_ct_AR
 AR
 NM
 ac_ct_DUMPBIN
@@ -885,6 +755,7 @@ enable_static
 with_pic
 enable_fast_install
 with_gnu_ld
+with_sysroot
 enable_libtool_lock
 enable_mathsql
 enable_geocallbacks
@@ -894,6 +765,7 @@ enable_geosadvanced
 enable_iconv
 enable_freexl
 enable_epsg
+enable_gcov
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1312,7 +1184,7 @@ Try \`$0 --help' for more information"
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1450,7 +1322,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libspatialite 3.0.0-beta to adapt to many kinds of systems.
+\`configure' configures libspatialite 3.0.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1520,7 +1392,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libspatialite 3.0.0-beta:";;
+     short | recursive ) echo "Configuration of libspatialite 3.0.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1545,6 +1417,7 @@ Optional Features:
   --enable-iconv          enables ICONV inclusion [default=yes]
   --enable-freexl         enables FreeXL inclusion [default=yes]
   --enable-epsg           enables full EPSG dataset support [default=yes]
+  --enable-gcov           turn on code coverage analysis tools
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1552,6 +1425,8 @@ Optional Packages:
   --with-pic              try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
 
 Some influential environment variables:
   CC          C compiler command
@@ -1632,8 +1507,8 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libspatialite configure 3.0.0-beta
-generated by GNU Autoconf 2.67
+libspatialite configure 3.0.1
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1679,7 +1554,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1716,7 +1591,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1729,10 +1604,10 @@ fi
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1799,7 +1674,7 @@ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1808,7 +1683,7 @@ eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1849,7 +1724,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1863,7 +1738,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1881,7 +1756,7 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1918,7 +1793,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
@@ -1964,7 +1839,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1977,7 +1852,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2032,7 +1907,7 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -2068,7 +1943,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_cpp
@@ -2114,7 +1989,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
@@ -2128,7 +2003,7 @@ ac_fn_c_check_type ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -2169,15 +2044,15 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libspatialite $as_me 3.0.0-beta, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+It was created by libspatialite $as_me 3.0.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2435,7 +2310,7 @@ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
       || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -2580,7 +2455,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2667,11 +2542,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2757,7 +2632,7 @@ if test "$cross_compiling" != no; then
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2797,7 +2672,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2850,7 +2725,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2901,7 +2776,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2941,7 +2816,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2999,7 +2874,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libspatialite'
- VERSION='3.0.0-beta'
+ VERSION='3.0.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3136,7 +3011,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3176,7 +3051,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3229,7 +3104,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3269,7 +3144,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3328,7 +3203,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3372,7 +3247,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3427,7 +3302,7 @@ fi
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3542,7 +3417,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -3585,7 +3460,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -3644,7 +3519,7 @@ $as_echo "$ac_try_echo"; } >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -3655,7 +3530,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3696,7 +3571,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -3706,7 +3581,7 @@ OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3743,7 +3618,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3821,7 +3696,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3920,7 +3795,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -4056,7 +3931,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -4172,7 +4047,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -4184,7 +4059,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4247,7 +4122,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4314,7 +4189,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4444,7 +4319,7 @@ done
 for ac_header in stdlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDLIB_H 1
 _ACEOF
@@ -4458,7 +4333,7 @@ done
 for ac_header in stdio.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdio_h" = x""yes; then :
+if test "x$ac_cv_header_stdio_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDIO_H 1
 _ACEOF
@@ -4472,7 +4347,7 @@ done
 for ac_header in string.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
-if test "x$ac_cv_header_string_h" = x""yes; then :
+if test "x$ac_cv_header_string_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STRING_H 1
 _ACEOF
@@ -4486,7 +4361,7 @@ done
 for ac_header in memory.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "memory.h" "ac_cv_header_memory_h" "$ac_includes_default"
-if test "x$ac_cv_header_memory_h" = x""yes; then :
+if test "x$ac_cv_header_memory_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MEMORY_H 1
 _ACEOF
@@ -4500,7 +4375,7 @@ done
 for ac_header in math.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default"
-if test "x$ac_cv_header_math_h" = x""yes; then :
+if test "x$ac_cv_header_math_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MATH_H 1
 _ACEOF
@@ -4514,7 +4389,7 @@ done
 for ac_header in float.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = x""yes; then :
+if test "x$ac_cv_header_float_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FLOAT_H 1
 _ACEOF
@@ -4528,7 +4403,7 @@ done
 for ac_header in fcntl.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
-if test "x$ac_cv_header_fcntl_h" = x""yes; then :
+if test "x$ac_cv_header_fcntl_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FCNTL_H 1
 _ACEOF
@@ -4542,7 +4417,7 @@ done
 for ac_header in inttypes.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = x""yes; then :
+if test "x$ac_cv_header_inttypes_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_INTTYPES_H 1
 _ACEOF
@@ -4556,7 +4431,7 @@ done
 for ac_header in stddef.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
-if test "x$ac_cv_header_stddef_h" = x""yes; then :
+if test "x$ac_cv_header_stddef_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDDEF_H 1
 _ACEOF
@@ -4570,7 +4445,7 @@ done
 for ac_header in stdint.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = x""yes; then :
+if test "x$ac_cv_header_stdint_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDINT_H 1
 _ACEOF
@@ -4584,7 +4459,7 @@ done
 for ac_header in sys/time.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_time_h" = x""yes; then :
+if test "x$ac_cv_header_sys_time_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SYS_TIME_H 1
 _ACEOF
@@ -4598,7 +4473,7 @@ done
 for ac_header in unistd.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = x""yes; then :
+if test "x$ac_cv_header_unistd_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_UNISTD_H 1
 _ACEOF
@@ -4612,7 +4487,7 @@ done
 for ac_header in sqlite3.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default"
-if test "x$ac_cv_header_sqlite3_h" = x""yes; then :
+if test "x$ac_cv_header_sqlite3_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SQLITE3_H 1
 _ACEOF
@@ -4626,7 +4501,7 @@ done
 for ac_header in sqlite3ext.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "sqlite3ext.h" "ac_cv_header_sqlite3ext_h" "$ac_includes_default"
-if test "x$ac_cv_header_sqlite3ext_h" = x""yes; then :
+if test "x$ac_cv_header_sqlite3ext_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SQLITE3EXT_H 1
 _ACEOF
@@ -4656,7 +4531,7 @@ if test -z "$CXX"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -4700,7 +4575,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -4778,7 +4653,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4815,7 +4690,7 @@ ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
+if ${ac_cv_prog_cxx_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -4901,7 +4776,7 @@ depcc="$CXX"  am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -5034,7 +4909,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5074,7 +4949,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -5127,7 +5002,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5167,7 +5042,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5226,7 +5101,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5270,7 +5145,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -5325,7 +5200,7 @@ fi
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -5354,7 +5229,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5391,7 +5266,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -5469,7 +5344,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -5568,7 +5443,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -5703,7 +5578,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -5819,7 +5694,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -5844,7 +5719,7 @@ fi
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -5877,7 +5752,7 @@ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -5893,7 +5768,7 @@ fi
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -5911,7 +5786,7 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -5926,7 +5801,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -5945,13 +5820,13 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 enable_win32_dll=yes
 
 case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
 set dummy ${ac_tool_prefix}as; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AS+set}" = set; then :
+if ${ac_cv_prog_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AS"; then
@@ -5991,7 +5866,7 @@ if test -z "$ac_cv_prog_AS"; then
 set dummy as; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AS"; then
@@ -6043,7 +5918,7 @@ fi
 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DLLTOOL"; then
@@ -6083,7 +5958,7 @@ if test -z "$ac_cv_prog_DLLTOOL"; then
 set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DLLTOOL"; then
@@ -6135,7 +6010,7 @@ fi
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -6175,7 +6050,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 set dummy objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -6253,8 +6128,8 @@ esac
 
 
 
-macro_version='2.2.6b'
-macro_revision='1.3017'
+macro_version='2.4'
+macro_revision='1.3293'
 
 
 
@@ -6270,9 +6145,78 @@ macro_revision='1.3017'
 
 ltmain="$ac_aux_dir/ltmain.sh"
 
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -6354,7 +6298,7 @@ Xsed="$SED -e 1s/^X//"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+if ${ac_cv_path_FGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -6485,7 +6429,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -6525,7 +6469,7 @@ fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -6552,7 +6496,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then :
+if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -6605,14 +6549,17 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -6650,13 +6597,13 @@ fi
 fi
 if test -z "$DUMPBIN"; then
   ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  for ac_prog in dumpbin "link -dump"
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -6705,6 +6652,15 @@ esac
   fi
 fi
 
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -6719,18 +6675,18 @@ test -z "$NM" && NM=nm
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then :
+if ${lt_cv_nm_interface+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:6727: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6730: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6733: output\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6743,7 +6699,7 @@ $as_echo "$lt_cv_nm_interface" >&6; }
 # find the maximum length of command line arguments
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -6776,6 +6732,11 @@ else
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -6840,8 +6801,8 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -6883,8 +6844,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -6933,9 +6894,83 @@ esac
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then :
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_reload_flag='-r'
@@ -6949,6 +6984,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -6971,7 +7011,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -7011,7 +7051,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 set dummy objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -7067,7 +7107,7 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then :
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -7109,16 +7149,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -7148,6 +7190,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -7156,11 +7202,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -7186,7 +7232,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd* | netbsdelf*-gnu)
+netbsd*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
   else
@@ -7263,6 +7309,21 @@ esac
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
 $as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -7278,16 +7339,26 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
 
+
+
+
+
+
+
+
+
+
+
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7296,7 +7367,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7306,10 +7377,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7317,17 +7388,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7336,7 +7407,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7346,17 +7417,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_AR" = x; then
-    AR="false"
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7364,19 +7435,52 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    AR=$ac_ct_AR
+    DLLTOOL=$ac_ct_DLLTOOL
   fi
 else
-  AR="$ac_cv_prog_AR"
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
 fi
 
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
 
 
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
 
 
 
@@ -7384,15 +7488,17 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
 
 
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7401,7 +7507,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7411,27 +7517,196 @@ IFS=$as_save_IFS
 
 fi
 fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
+    test -n "$AR" && break
+  done
 fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_STRIP"; then
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -7487,7 +7762,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -7527,7 +7802,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -7598,6 +7873,18 @@ if test -n "$RANLIB"; then
   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 fi
 
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
 
 
 
@@ -7644,7 +7931,7 @@ compiler=$CC
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7705,8 +7992,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -7742,6 +8029,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -7767,8 +8055,8 @@ _LT_EOF
   test $ac_status = 0; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "$nlist"; then
@@ -7783,6 +8071,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -7794,7 +8094,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT_DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -7820,8 +8120,8 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
 	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
@@ -7831,8 +8131,8 @@ _LT_EOF
   test $ac_status = 0; } && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&5
 	fi
@@ -7869,6 +8169,19 @@ else
 $as_echo "ok" >&6; }
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
 
 
 
@@ -7889,6 +8202,42 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
 
 # Check whether --enable-libtool-lock was given.
 if test "${enable_libtool_lock+set}" = set; then :
@@ -7921,7 +8270,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 7924 "configure"' > conftest.$ac_ext
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -8015,7 +8364,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then :
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -8083,6 +8432,123 @@ esac
 
 need_locks="$enable_libtool_lock"
 
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
 
   case $host_os in
     rhapsody* | darwin*)
@@ -8091,7 +8557,7 @@ need_locks="$enable_libtool_lock"
 set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DSYMUTIL"; then
@@ -8131,7 +8597,7 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
 set dummy dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DSYMUTIL"; then
@@ -8183,7 +8649,7 @@ fi
 set dummy ${ac_tool_prefix}nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NMEDIT"; then
@@ -8223,7 +8689,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
 set dummy nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -8275,7 +8741,7 @@ fi
 set dummy ${ac_tool_prefix}lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -8315,7 +8781,7 @@ if test -z "$ac_cv_prog_LIPO"; then
 set dummy lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -8367,7 +8833,7 @@ fi
 set dummy ${ac_tool_prefix}otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -8407,7 +8873,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
 set dummy otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -8459,7 +8925,7 @@ fi
 set dummy ${ac_tool_prefix}otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -8499,7 +8965,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
 set dummy otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -8574,7 +9040,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
 $as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -8603,7 +9069,7 @@ fi
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_exported_symbols_list=no
@@ -8633,12 +9099,44 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-    case $host_os in
-    rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
@@ -8649,562 +9147,48 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
 	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
 	10.*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-
-for ac_header in dlfcn.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CXX"  am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CXXCPP needs to be expanded
-    for CXXCPP in "$CXX -E" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
-  CXXCPP=$ac_cv_prog_CXXCPP
-else
-  ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
 
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
 _ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
+
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
 
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-_lt_caught_CXX_error=yes; }
-fi
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-else
-  _lt_caught_CXX_error=yes
-fi
+
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
 
 
 
@@ -9360,6 +9344,7 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -9381,7 +9366,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
+if ${lt_cv_objdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -9409,19 +9394,6 @@ _ACEOF
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 case $host_os in
 aix3*)
   # AIX sometimes has problems with the GCC collect2 program.  For some
@@ -9434,23 +9406,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -9479,7 +9434,7 @@ for cc_temp in $compiler""; do
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
 # Only perform the check for file, if the check method requires it
@@ -9489,7 +9444,7 @@ file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9555,7 +9510,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
 $as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9684,11 +9639,16 @@ if test -n "$compiler"; then
 lt_prog_compiler_no_builtin_flag=
 
 if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -9704,15 +9664,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9707: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9711: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_rtti_exceptions=yes
@@ -9741,8 +9701,6 @@ fi
 lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   if test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -9790,6 +9748,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -9832,6 +9796,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -9894,7 +9865,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	lt_prog_compiler_pic='--shared'
 	lt_prog_compiler_static='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	lt_prog_compiler_wl='-Wl,'
@@ -9906,25 +9883,25 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
         # All Alpha code is PIC.
         lt_prog_compiler_static='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	lt_prog_compiler_wl='-Wl,'
 	lt_prog_compiler_pic='-qpic'
 	lt_prog_compiler_static='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_wl=''
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	*Sun\ C*)
+	  # Sun C 5.9
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl=''
+	  lt_prog_compiler_wl='-Wl,'
 	  ;;
 	esac
 	;;
@@ -9956,7 +9933,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-KPIC'
       lt_prog_compiler_static='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	lt_prog_compiler_wl='-Qoption ld ';;
       *)
 	lt_prog_compiler_wl='-Wl,';;
@@ -10013,13 +9990,17 @@ case $host_os in
     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
 #
 # Check to make sure the PIC flag actually works.
@@ -10027,7 +10008,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
 if test -n "$lt_prog_compiler_pic"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
@@ -10043,15 +10024,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10046: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:10050: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works=yes
@@ -10080,13 +10061,18 @@ fi
 
 
 
+
+
+
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -10099,7 +10085,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works=yes
@@ -10129,7 +10115,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -10148,16 +10134,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10151: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10155: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -10184,7 +10170,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -10203,16 +10189,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10206: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10210: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -10322,13 +10308,36 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs=no
-    ;;
   esac
 
   ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -10362,11 +10371,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
 	ld_shlibs=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -10402,10 +10412,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -10423,6 +10435,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
@@ -10448,15 +10465,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -10467,13 +10485,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  whole_archive_flag_spec=
 	  tmp_sharedflag='--shared' ;;
-	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  compiler_needs_object=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -10489,17 +10511,17 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
 	  hardcode_libdir_flag_spec=
 	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
-	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -10508,13 +10530,13 @@ _LT_EOF
       fi
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -10532,8 +10554,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -10579,8 +10601,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -10620,8 +10642,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -10683,7 +10707,6 @@ _LT_EOF
 	if test "$aix_use_runtimelinking" = yes; then
 	  shared_flag="$shared_flag "'${wl}-G'
 	fi
-	link_all_deplibs=no
       else
 	# not using gcc
 	if test "$host_cpu" = ia64; then
@@ -10709,7 +10732,13 @@ _LT_EOF
 	allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -10722,25 +10751,32 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
@@ -10749,7 +10785,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -10762,30 +10804,42 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
 	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  no_undefined_flag=' ${wl}-bernotok'
 	  allow_undefined_flag=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
 	  archive_cmds_need_lc=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -10817,20 +10871,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      allow_undefined_flag=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -10840,7 +10937,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  whole_archive_flag_spec=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec=''
+  fi
   link_all_deplibs=yes
   allow_undefined_flag="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -10848,7 +10949,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -10891,7 +10992,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
       hardcode_shlibpath_var=no
@@ -10899,7 +11000,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux9*)
       if test "$GCC" = yes; then
-	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -10914,8 +11015,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -10933,16 +11034,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -10954,7 +11055,46 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
 	  ;;
 	esac
       fi
@@ -10982,26 +11122,39 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-int foo(void) {}
+int foo (void) { return 0; }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -11010,7 +11163,7 @@ rm -f core conftest.err conftest.$ac_objext \
       link_all_deplibs=yes
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -11063,17 +11216,17 @@ rm -f core conftest.err conftest.$ac_objext \
       hardcode_libdir_flag_spec='-L$libdir'
       hardcode_minus_L=yes
       allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -11083,13 +11236,13 @@ rm -f core conftest.err conftest.$ac_objext \
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	hardcode_libdir_flag_spec='-rpath $libdir'
@@ -11102,9 +11255,9 @@ rm -f core conftest.err conftest.$ac_objext \
       no_undefined_flag=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -11292,44 +11445,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-	pic_flag=$lt_prog_compiler_pic
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag
-        allow_undefined_flag=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc=no
-        else
-	  archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
       ;;
     esac
   fi
@@ -11500,16 +11659,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -11522,7 +11688,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -11542,7 +11708,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[lt_foo]++; }
   if (lt_freq[lt_foo] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi
@@ -11630,7 +11802,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -11661,8 +11833,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -11683,36 +11856,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -11799,6 +12019,19 @@ gnu*)
   hardcode_into_libs=yes
   ;;
 
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
 hpux9* | hpux10* | hpux11*)
   # Give a soname corresponding to the major version so that dld.sl refuses to
   # link against other versions.
@@ -11841,8 +12074,10 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
@@ -11909,12 +12144,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -11927,23 +12167,31 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -11955,18 +12203,6 @@ rm -f core conftest.err conftest.$ac_objext \
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -12257,6 +12493,11 @@ fi
 
 
 
+
+
+
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
@@ -12329,7 +12570,7 @@ else
   # if libdl is installed we need to link against it
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12363,7 +12604,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
@@ -12377,12 +12618,12 @@ fi
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
+if test "x$ac_cv_func_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12416,16 +12657,16 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = x""yes; then :
+if test "x$ac_cv_func_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12459,12 +12700,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+if ${ac_cv_lib_svld_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12498,12 +12739,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12537,7 +12778,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -12578,7 +12819,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
 $as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then :
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12587,7 +12828,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12590 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12628,7 +12869,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12637,7 +12884,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12674,7 +12925,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then :
+if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12683,7 +12934,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12686 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12724,7 +12975,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12733,7 +12990,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12890,6 +13151,145 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 CC="$lt_save_CC"
 
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
 
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -12916,6 +13316,8 @@ module_cmds_CXX=
 module_expsym_cmds_CXX=
 link_all_deplibs_CXX=unknown
 old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
 no_undefined_flag_CXX=
 whole_archive_flag_spec_CXX=
 enable_shared_with_static_runtimes_CXX=no
@@ -12971,6 +13373,7 @@ $RM -r conftest*
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -12988,6 +13391,7 @@ $RM -r conftest*
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   compiler_CXX=$CC
   for cc_temp in $compiler""; do
@@ -12998,7 +13402,7 @@ $RM -r conftest*
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
   if test -n "$compiler"; then
@@ -13061,7 +13465,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -13101,7 +13505,7 @@ fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -13127,8 +13531,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
         export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13160,7 +13564,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -13270,7 +13674,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
           allow_undefined_flag_CXX='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+          if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -13283,26 +13693,33 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
 	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
@@ -13311,7 +13728,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	    if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -13324,30 +13747,42 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
 	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
 	    no_undefined_flag_CXX=' ${wl}-bernotok'
 	    allow_undefined_flag_CXX=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    whole_archive_flag_spec_CXX='$convenience'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
 	    archive_cmds_need_lc_CXX=yes
 	    # This is similar to how AIX traditionally builds its shared
 	    # libraries.
@@ -13377,28 +13812,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-        # as there is no search path for DLLs.
-        hardcode_libdir_flag_spec_CXX='-L$libdir'
-        allow_undefined_flag_CXX=unsupported
-        always_export_symbols_CXX=no
-        enable_shared_with_static_runtimes_CXX=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          ld_shlibs_CXX=no
-        fi
-        ;;
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX=' '
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=yes
+	  file_list_spec_CXX='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+	  enable_shared_with_static_runtimes_CXX=yes
+	  # Don't use ranlib
+	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
+	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=no
+	  enable_shared_with_static_runtimes_CXX=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    ld_shlibs_CXX=no
+	  fi
+	  ;;
+	esac
+	;;
       darwin* | rhapsody*)
 
 
@@ -13406,7 +13888,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
   hardcode_shlibpath_var_CXX=unsupported
-  whole_archive_flag_spec_CXX=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
   link_all_deplibs_CXX=yes
   allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -13414,7 +13900,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -13467,6 +13953,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       gnu*)
         ;;
 
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
       hpux9*)
         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
         hardcode_libdir_separator_CXX=:
@@ -13491,11 +13982,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               ld_shlibs_CXX=no
@@ -13556,7 +14047,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
 	    if test "$GXX" = yes; then
@@ -13566,10 +14057,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -13599,7 +14090,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -13610,9 +14101,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           *)
 	    if test "$GXX" = yes; then
 	      if test "$with_gnu_ld" = no; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	      else
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
 	      fi
 	    fi
 	    link_all_deplibs_CXX=yes
@@ -13641,7 +14132,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13678,26 +14169,26 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
-	    *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
 	      prelink_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      old_archive_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
 		$RANLIB $oldlib'
 	      archive_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      archive_expsym_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
-	    *) # Version 6 will use weak symbols
+	    *) # Version 6 and above use weak symbols
 	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
@@ -13705,7 +14196,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
 	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
@@ -13724,9 +14215,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
-	  xl*)
+	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
 	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13746,13 +14237,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
 	      hardcode_libdir_flag_spec_CXX='-R$libdir'
-	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	      compiler_needs_object_CXX=yes
 
 	      # Not sure whether something based on
 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
 	      # would be better.
-	      output_verbose_link_cmd='echo'
+	      output_verbose_link_cmd='func_echo_all'
 
 	      # Archives containing C++ object files must be created using
 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13821,7 +14312,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    export_dynamic_flag_spec_CXX='${wl}-E'
 	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 	  fi
-	  output_verbose_link_cmd=echo
+	  output_verbose_link_cmd=func_echo_all
 	else
 	  ld_shlibs_CXX=no
 	fi
@@ -13856,15 +14347,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    case $host in
 	      osf3*)
 	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
 		;;
 	      *)
 	        allow_undefined_flag_CXX=' -expect_unresolved \*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
 	          $RM $lib.exp'
 	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
 		;;
@@ -13880,17 +14371,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
 	      case $host in
 	        osf3*)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	        *)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	      esac
 
@@ -13900,7 +14391,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	      # Commands to make compiler produce verbose output that lists
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
 	    else
 	      # FIXME: insert proper C++ library support
@@ -13936,7 +14427,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
             archive_cmds_need_lc_CXX=yes
 	    no_undefined_flag_CXX=' -zdefs'
@@ -13957,7 +14448,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    esac
 	    link_all_deplibs_CXX=yes
 
-	    output_verbose_link_cmd='echo'
+	    output_verbose_link_cmd='func_echo_all'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13977,14 +14468,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
 	        # platform.
@@ -13995,7 +14486,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
 	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
@@ -14049,6 +14540,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           CC*)
 	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+	      '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+	      '"$reload_cmds_CXX"
 	    ;;
 	  *)
 	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -14110,6 +14605,13 @@ private:
 };
 _LT_EOF
 
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -14123,7 +14625,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -14132,13 +14634,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -14158,8 +14669,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
 	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -14195,6 +14708,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 case $host_os in
@@ -14230,7 +14744,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -14295,8 +14809,6 @@ fi
 lt_prog_compiler_pic_CXX=
 lt_prog_compiler_static_CXX=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -14346,6 +14858,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       # DJGPP does not support shared libraries at all
       lt_prog_compiler_pic_CXX=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
     interix[3-9]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -14395,6 +14912,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	  ;;
 	esac
 	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+	;;
       dgux*)
 	case $cc_basename in
 	  ec++*)
@@ -14484,8 +15006,8 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    lt_prog_compiler_pic_CXX=
 	    lt_prog_compiler_static_CXX='-non_shared'
 	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
 	    lt_prog_compiler_wl_CXX='-Wl,'
 	    lt_prog_compiler_pic_CXX='-qpic'
 	    lt_prog_compiler_static_CXX='-qstaticlink'
@@ -14515,7 +15037,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
 	;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -14547,7 +15069,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	;;
       solaris*)
 	case $cc_basename in
-	  CC*)
+	  CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
 	    lt_prog_compiler_pic_CXX='-KPIC'
 	    lt_prog_compiler_static_CXX='-Bstatic'
@@ -14612,10 +15134,17 @@ case $host_os in
     lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
 
 #
 # Check to make sure the PIC flag actually works.
@@ -14623,7 +15152,7 @@ $as_echo "$lt_prog_compiler_pic_CXX" >&6; }
 if test -n "$lt_prog_compiler_pic_CXX"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works_CXX=no
@@ -14639,15 +15168,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14642: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14646: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works_CXX=yes
@@ -14673,13 +15202,15 @@ fi
 
 
 
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_CXX=no
@@ -14692,7 +15223,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works_CXX=yes
@@ -14719,7 +15250,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14738,16 +15269,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14741: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14745: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
@@ -14771,7 +15302,7 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14790,16 +15321,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14793: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14797: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
@@ -14850,30 +15381,35 @@ fi
 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
   export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
   case $host_os in
   aix[4-9]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     export_symbols_cmds_CXX="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs_CXX=no
-  ;;
+    case $cc_basename in
+    cl*) ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
   *)
     export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
@@ -14905,44 +15441,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_CXX
-	pic_flag=$lt_prog_compiler_pic_CXX
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
-        allow_undefined_flag_CXX=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc_CXX=no
-        else
-	  archive_cmds_need_lc_CXX=yes
-        fi
-        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
       ;;
     esac
   fi
@@ -15099,7 +15641,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -15130,8 +15672,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -15152,36 +15695,82 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -15267,6 +15856,19 @@ gnu*)
   hardcode_into_libs=yes
   ;;
 
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
 hpux9* | hpux10* | hpux11*)
   # Give a soname corresponding to the major version so that dld.sl refuses to
   # link against other versions.
@@ -15309,8 +15911,10 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
@@ -15377,12 +15981,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -15395,23 +16004,31 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -15423,18 +16040,6 @@ rm -f core conftest.err conftest.$ac_objext \
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -15674,6 +16279,8 @@ fi
 
 
 
+
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action_CXX=
@@ -15721,6 +16328,7 @@ fi
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -15761,7 +16369,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # Checks for typedefs, structures, and compiler characteristics.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15840,7 +16448,7 @@ $as_echo "#define const /**/" >>confdefs.h
 fi
 
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = x""yes; then :
+if test "x$ac_cv_type_off_t" = xyes; then :
 
 else
 
@@ -15851,7 +16459,7 @@ _ACEOF
 fi
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -15863,7 +16471,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if test "${ac_cv_header_time+set}" = set; then :
+if ${ac_cv_header_time+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15898,7 +16506,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if test "${ac_cv_struct_tm+set}" = set; then :
+if ${ac_cv_struct_tm+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15933,7 +16541,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
 $as_echo_n "checking for working volatile... " >&6; }
-if test "${ac_cv_c_volatile+set}" = set; then :
+if ${ac_cv_c_volatile+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15969,7 +16577,7 @@ fi
 # Checks for library functions.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
-if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then :
+if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f conftest.sym conftest.file
@@ -16031,7 +16639,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5
 $as_echo_n "checking whether lstat accepts an empty string... " >&6; }
-if test "${ac_cv_func_lstat_empty_string_bug+set}" = set; then :
+if ${ac_cv_func_lstat_empty_string_bug+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -16077,7 +16685,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
-if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then :
+if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f conftest.sym conftest.file
@@ -16139,7 +16747,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
 $as_echo_n "checking for working memcmp... " >&6; }
-if test "${ac_cv_func_memcmp_working+set}" = set; then :
+if ${ac_cv_func_memcmp_working+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -16201,7 +16809,7 @@ esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
 $as_echo_n "checking whether stat accepts an empty string... " >&6; }
-if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then :
+if ${ac_cv_func_stat_empty_string_bug+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -16248,7 +16856,7 @@ fi
 for ac_func in strftime
 do :
   ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
-if test "x$ac_cv_func_strftime" = x""yes; then :
+if test "x$ac_cv_func_strftime" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STRFTIME 1
 _ACEOF
@@ -16257,7 +16865,7 @@ else
   # strftime is in -lintl on SCO UNIX.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
 $as_echo_n "checking for strftime in -lintl... " >&6; }
-if test "${ac_cv_lib_intl_strftime+set}" = set; then :
+if ${ac_cv_lib_intl_strftime+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16291,7 +16899,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
 $as_echo "$ac_cv_lib_intl_strftime" >&6; }
-if test "x$ac_cv_lib_intl_strftime" = x""yes; then :
+if test "x$ac_cv_lib_intl_strftime" = xyes; then :
   $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
 
 LIBS="-lintl $LIBS"
@@ -16316,7 +16924,7 @@ done
 # Checks for installed libraries
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_prepare_v2 in -lsqlite3" >&5
 $as_echo_n "checking for sqlite3_prepare_v2 in -lsqlite3... " >&6; }
-if test "${ac_cv_lib_sqlite3_sqlite3_prepare_v2+set}" = set; then :
+if ${ac_cv_lib_sqlite3_sqlite3_prepare_v2+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16350,7 +16958,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_prepare_v2" >&5
 $as_echo "$ac_cv_lib_sqlite3_sqlite3_prepare_v2" >&6; }
-if test "x$ac_cv_lib_sqlite3_sqlite3_prepare_v2" = x""yes; then :
+if test "x$ac_cv_lib_sqlite3_sqlite3_prepare_v2" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBSQLITE3 1
 _ACEOF
@@ -16358,11 +16966,11 @@ _ACEOF
   LIBS="-lsqlite3 $LIBS"
 
 else
-  as_fn_error $? "'libsqlite3' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libsqlite3' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 
-ac_config_files="$ac_config_files Makefile src/Makefile src/headers/Makefile src/gaiaaux/Makefile src/gaiaexif/Makefile src/gaiageo/Makefile src/spatialite/Makefile src/srsinit/Makefile src/virtualtext/Makefile spatialite.pc"
+ac_config_files="$ac_config_files Makefile src/Makefile src/headers/Makefile src/gaiaaux/Makefile src/gaiaexif/Makefile src/gaiageo/Makefile src/spatialite/Makefile src/shapefiles/Makefile src/srsinit/Makefile src/virtualtext/Makefile test/Makefile examples/Makefile Doxyfile spatialite.pc"
 
 
 #-----------------------------------------------------------------------
@@ -16397,7 +17005,7 @@ if test x"$enable_geocallbacks" != "xno"; then
   OMIT_GEOCALLBACKS_FLAGS=
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_rtree_geometry_callback in -lsqlite3" >&5
 $as_echo_n "checking for sqlite3_rtree_geometry_callback in -lsqlite3... " >&6; }
-if test "${ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback+set}" = set; then :
+if ${ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16431,7 +17039,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback" >&5
 $as_echo "$ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback" >&6; }
-if test "x$ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback" = x""yes; then :
+if test "x$ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBSQLITE3 1
 _ACEOF
@@ -16463,7 +17071,7 @@ if test x"$enable_proj" != "xno"; then
   for ac_header in proj_api.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "proj_api.h" "ac_cv_header_proj_api_h" "$ac_includes_default"
-if test "x$ac_cv_header_proj_api_h" = x""yes; then :
+if test "x$ac_cv_header_proj_api_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_PROJ_API_H 1
 _ACEOF
@@ -16476,7 +17084,7 @@ done
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pj_init_plus" >&5
 $as_echo_n "checking for library containing pj_init_plus... " >&6; }
-if test "${ac_cv_search_pj_init_plus+set}" = set; then :
+if ${ac_cv_search_pj_init_plus+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16510,11 +17118,11 @@ for ac_lib in '' proj; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_pj_init_plus+set}" = set; then :
+  if ${ac_cv_search_pj_init_plus+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_pj_init_plus+set}" = set; then :
+if ${ac_cv_search_pj_init_plus+:} false; then :
 
 else
   ac_cv_search_pj_init_plus=no
@@ -16529,7 +17137,7 @@ if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 else
-  as_fn_error $? "'libproj' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libproj' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 else
@@ -16553,7 +17161,7 @@ if test x"$enable_geos" != "xno"; then
   for ac_header in geos_c.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "geos_c.h" "ac_cv_header_geos_c_h" "$ac_includes_default"
-if test "x$ac_cv_header_geos_c_h" = x""yes; then :
+if test "x$ac_cv_header_geos_c_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GEOS_C_H 1
 _ACEOF
@@ -16566,7 +17174,7 @@ done
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GEOSTopologyPreserveSimplify" >&5
 $as_echo_n "checking for library containing GEOSTopologyPreserveSimplify... " >&6; }
-if test "${ac_cv_search_GEOSTopologyPreserveSimplify+set}" = set; then :
+if ${ac_cv_search_GEOSTopologyPreserveSimplify+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16600,11 +17208,11 @@ for ac_lib in '' geos_c; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_GEOSTopologyPreserveSimplify+set}" = set; then :
+  if ${ac_cv_search_GEOSTopologyPreserveSimplify+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_GEOSTopologyPreserveSimplify+set}" = set; then :
+if ${ac_cv_search_GEOSTopologyPreserveSimplify+:} false; then :
 
 else
   ac_cv_search_GEOSTopologyPreserveSimplify=no
@@ -16619,7 +17227,7 @@ if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 else
-  as_fn_error $? "'libgeos_c' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libgeos_c' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
   #-----------------------------------------------------------------------
@@ -16636,7 +17244,7 @@ fi
 	  GEOSADVANCED_FLAGS=-DGEOS_ADVANCED
 	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GEOSCoveredBy" >&5
 $as_echo_n "checking for library containing GEOSCoveredBy... " >&6; }
-if test "${ac_cv_search_GEOSCoveredBy+set}" = set; then :
+if ${ac_cv_search_GEOSCoveredBy+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16670,11 +17278,11 @@ for ac_lib in '' geos_c; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_GEOSCoveredBy+set}" = set; then :
+  if ${ac_cv_search_GEOSCoveredBy+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_GEOSCoveredBy+set}" = set; then :
+if ${ac_cv_search_GEOSCoveredBy+:} false; then :
 
 else
   ac_cv_search_GEOSCoveredBy=no
@@ -16716,7 +17324,7 @@ if test x"$enable_iconv" != "xno"; then
   for ac_header in iconv.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default"
-if test "x$ac_cv_header_iconv_h" = x""yes; then :
+if test "x$ac_cv_header_iconv_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_ICONV_H 1
 _ACEOF
@@ -16731,7 +17339,7 @@ done
 #  on older systems "libiconv()" lives in libiconv
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv" >&5
 $as_echo_n "checking for library containing iconv... " >&6; }
-if test "${ac_cv_search_iconv+set}" = set; then :
+if ${ac_cv_search_iconv+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16765,11 +17373,11 @@ for ac_lib in '' iconv; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_iconv+set}" = set; then :
+  if ${ac_cv_search_iconv+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_iconv+set}" = set; then :
+if ${ac_cv_search_iconv+:} false; then :
 
 else
   ac_cv_search_iconv=no
@@ -16786,7 +17394,7 @@ if test "$ac_res" != no; then :
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv" >&5
 $as_echo_n "checking for library containing libiconv... " >&6; }
-if test "${ac_cv_search_libiconv+set}" = set; then :
+if ${ac_cv_search_libiconv+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16820,11 +17428,11 @@ for ac_lib in '' iconv; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_libiconv+set}" = set; then :
+  if ${ac_cv_search_libiconv+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_libiconv+set}" = set; then :
+if ${ac_cv_search_libiconv+:} false; then :
 
 else
   ac_cv_search_libiconv=no
@@ -16839,14 +17447,14 @@ if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 else
-  as_fn_error $? "'libiconv' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libiconv' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing locale_charset" >&5
 $as_echo_n "checking for library containing locale_charset... " >&6; }
-if test "${ac_cv_search_locale_charset+set}" = set; then :
+if ${ac_cv_search_locale_charset+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16880,11 +17488,11 @@ for ac_lib in '' charset; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_locale_charset+set}" = set; then :
+  if ${ac_cv_search_locale_charset+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_locale_charset+set}" = set; then :
+if ${ac_cv_search_locale_charset+:} false; then :
 
 else
   ac_cv_search_locale_charset=no
@@ -16901,7 +17509,7 @@ if test "$ac_res" != no; then :
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing nl_langinfo" >&5
 $as_echo_n "checking for library containing nl_langinfo... " >&6; }
-if test "${ac_cv_search_nl_langinfo+set}" = set; then :
+if ${ac_cv_search_nl_langinfo+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16935,11 +17543,11 @@ for ac_lib in '' c; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_nl_langinfo+set}" = set; then :
+  if ${ac_cv_search_nl_langinfo+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_nl_langinfo+set}" = set; then :
+if ${ac_cv_search_nl_langinfo+:} false; then :
 
 else
   ac_cv_search_nl_langinfo=no
@@ -16954,7 +17562,7 @@ if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 else
-  as_fn_error $? "'libcharset' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libcharset' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 fi
@@ -16979,7 +17587,7 @@ if test x"$enable_freexl" != "xno"; then
   for ac_header in freexl.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "freexl.h" "ac_cv_header_freexl_h" "$ac_includes_default"
-if test "x$ac_cv_header_freexl_h" = x""yes; then :
+if test "x$ac_cv_header_freexl_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FREEXL_H 1
 _ACEOF
@@ -16992,7 +17600,7 @@ done
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing freexl_open" >&5
 $as_echo_n "checking for library containing freexl_open... " >&6; }
-if test "${ac_cv_search_freexl_open+set}" = set; then :
+if ${ac_cv_search_freexl_open+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -17026,11 +17634,11 @@ for ac_lib in '' freexl; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_freexl_open+set}" = set; then :
+  if ${ac_cv_search_freexl_open+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_freexl_open+set}" = set; then :
+if ${ac_cv_search_freexl_open+:} false; then :
 
 else
   ac_cv_search_freexl_open=no
@@ -17045,7 +17653,7 @@ if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 else
-  as_fn_error $? "'libfreexl' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libfreexl' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 else
@@ -17072,6 +17680,21 @@ fi
 
 #-----------------------------------------------------------------------
 
+
+#-----------------------------------------------------------------------
+#    --enable-gcov
+#
+# Check whether --enable-gcov was given.
+if test "${enable_gcov+set}" = set; then :
+  enableval=$enable_gcov;
+fi
+
+if test "x$enable_gcov" = "xyes"; then
+        CFLAGS=$CFLAGS" -fprofile-arcs -ftest-coverage -g"
+    GCOV_FLAGS="-lgcov"
+fi
+#-----------------------------------------------------------------------
+
 # Checking for MinGW
  if test "$target_alias" = "mingw32"; then
   MINGW_TRUE=
@@ -17155,10 +17778,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -17253,10 +17887,6 @@ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${MINGW_TRUE}" && test -z "${MINGW_FALSE}"; then
   as_fn_error $? "conditional \"MINGW\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -17266,7 +17896,7 @@ if test -z "${MACOSX_TRUE}" && test -z "${MACOSX_FALSE}"; then
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -17367,6 +17997,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -17673,8 +18304,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libspatialite $as_me 3.0.0-beta, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+This file was extended by libspatialite $as_me 3.0.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -17730,8 +18361,8 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libspatialite config.status 3.0.0-beta
-configured by $0, generated by GNU Autoconf 2.67,
+libspatialite config.status 3.0.1
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -17848,186 +18479,212 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 sed_quote_subst='$sed_quote_subst'
 double_quote_subst='$double_quote_subst'
 delay_variable_subst='$delay_variable_subst'
-AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
-LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
 
 LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
-for var in SED \
+for var in AS \
+DLLTOOL \
+OBJDUMP \
+SHELL \
+ECHO \
+SED \
 GREP \
 EGREP \
 FGREP \
@@ -18039,8 +18696,12 @@ lt_NL2SP \
 reload_flag \
 deplibs_check_method \
 file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+sharedlib_from_linklib_cmd \
 AR \
 AR_FLAGS \
+archiver_list_spec \
 STRIP \
 RANLIB \
 CC \
@@ -18050,14 +18711,14 @@ lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
+nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
 lt_prog_compiler_pic \
+lt_prog_compiler_wl \
 lt_prog_compiler_static \
 lt_cv_prog_compiler_c_o \
 need_locks \
+MANIFEST_TOOL \
 DSYMUTIL \
 NMEDIT \
 LIPO \
@@ -18073,7 +18734,6 @@ no_undefined_flag \
 hardcode_libdir_flag_spec \
 hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
-fix_srcfile_path \
 exclude_expsyms \
 include_expsyms \
 file_list_spec \
@@ -18081,6 +18741,7 @@ variables_saved_for_relink \
 libname_spec \
 library_names_spec \
 soname_spec \
+install_override_mode \
 finish_eval \
 old_striplib \
 striplib \
@@ -18091,10 +18752,11 @@ predeps \
 postdeps \
 compiler_lib_search_path \
 LD_CXX \
+reload_flag_CXX \
 compiler_CXX \
 lt_prog_compiler_no_builtin_flag_CXX \
-lt_prog_compiler_wl_CXX \
 lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
 lt_prog_compiler_static_CXX \
 lt_cv_prog_compiler_c_o_CXX \
 export_dynamic_flag_spec_CXX \
@@ -18106,7 +18768,6 @@ no_undefined_flag_CXX \
 hardcode_libdir_flag_spec_CXX \
 hardcode_libdir_flag_spec_ld_CXX \
 hardcode_libdir_separator_CXX \
-fix_srcfile_path_CXX \
 exclude_expsyms_CXX \
 include_expsyms_CXX \
 file_list_spec_CXX \
@@ -18116,9 +18777,9 @@ postdep_objects_CXX \
 predeps_CXX \
 postdeps_CXX \
 compiler_lib_search_path_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -18140,11 +18801,13 @@ module_cmds \
 module_expsym_cmds \
 export_symbols_cmds \
 prelink_cmds \
+postlink_cmds \
 postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
 sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
 old_archive_cmds_CXX \
 old_archive_from_new_cmds_CXX \
 old_archive_from_expsyms_cmds_CXX \
@@ -18153,10 +18816,11 @@ archive_expsym_cmds_CXX \
 module_cmds_CXX \
 module_expsym_cmds_CXX \
 export_symbols_cmds_CXX \
-prelink_cmds_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -18164,12 +18828,6 @@ prelink_cmds_CXX; do
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
-  ;;
-esac
-
 ac_aux_dir='$ac_aux_dir'
 xsi_shell='$xsi_shell'
 lt_shell_append='$lt_shell_append'
@@ -18209,11 +18867,15 @@ do
     "src/gaiaexif/Makefile") CONFIG_FILES="$CONFIG_FILES src/gaiaexif/Makefile" ;;
     "src/gaiageo/Makefile") CONFIG_FILES="$CONFIG_FILES src/gaiageo/Makefile" ;;
     "src/spatialite/Makefile") CONFIG_FILES="$CONFIG_FILES src/spatialite/Makefile" ;;
+    "src/shapefiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/shapefiles/Makefile" ;;
     "src/srsinit/Makefile") CONFIG_FILES="$CONFIG_FILES src/srsinit/Makefile" ;;
     "src/virtualtext/Makefile") CONFIG_FILES="$CONFIG_FILES src/virtualtext/Makefile" ;;
+    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;;
     "spatialite.pc") CONFIG_FILES="$CONFIG_FILES spatialite.pc" ;;
 
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -18235,9 +18897,10 @@ fi
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -18245,12 +18908,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -18272,7 +18936,7 @@ else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -18300,7 +18964,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -18348,7 +19012,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -18380,7 +19044,7 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -18420,7 +19084,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -18439,7 +19103,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -18448,7 +19112,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -18474,8 +19138,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -18611,21 +19275,22 @@ s&@INSTALL@&$ac_INSTALL&;t t
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -18754,7 +19419,8 @@ $as_echo X"$file" |
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -18787,13 +19453,13 @@ available_tags="CXX "
 # ### BEGIN LIBTOOL CONFIG
 
 # Assembler program.
-AS=$AS
+AS=$lt_AS
 
 # DLL creation program.
-DLLTOOL=$DLLTOOL
+DLLTOOL=$lt_DLLTOOL
 
 # Object dumper program.
-OBJDUMP=$OBJDUMP
+OBJDUMP=$lt_OBJDUMP
 
 # Which release of libtool.m4 was used?
 macro_version=$macro_version
@@ -18811,6 +19477,12 @@ pic_mode=$pic_mode
 # Whether or not to optimize for fast installation.
 fast_install=$enable_fast_install
 
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -18860,20 +19532,36 @@ SP2NL=$lt_lt_SP2NL
 # turn newlines into spaces.
 NL2SP=$lt_lt_NL2SP
 
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
 # Method to check whether dependent libraries are shared objects.
 deplibs_check_method=$lt_deplibs_check_method
 
-# Command to use when deplibs_check_method == "file_magic".
+# Command to use when deplibs_check_method = "file_magic".
 file_magic_cmd=$lt_file_magic_cmd
 
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
 # The archiver.
 AR=$lt_AR
+
+# Flags to create an archive.
 AR_FLAGS=$lt_AR_FLAGS
 
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
 # A symbol stripping program.
 STRIP=$lt_STRIP
 
@@ -18882,6 +19570,9 @@ RANLIB=$lt_RANLIB
 old_postinstall_cmds=$lt_old_postinstall_cmds
 old_postuninstall_cmds=$lt_old_postuninstall_cmds
 
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
 # A C compiler.
 LTCC=$lt_CC
 
@@ -18900,14 +19591,14 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
 
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
 
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
 
 # Used to examine libraries when file_magic_cmd begins with "file".
 MAGIC_CMD=$MAGIC_CMD
@@ -18915,6 +19606,9 @@ MAGIC_CMD=$MAGIC_CMD
 # Must we lock files when doing compilation?
 need_locks=$lt_need_locks
 
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
 # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
 DSYMUTIL=$lt_DSYMUTIL
 
@@ -18971,6 +19665,9 @@ library_names_spec=$lt_library_names_spec
 # The coded name of the library, if different from the real name.
 soname_spec=$lt_soname_spec
 
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
 # Command to use after installation of a shared archive.
 postinstall_cmds=$lt_postinstall_cmds
 
@@ -19010,6 +19707,10 @@ striplib=$lt_striplib
 # The linker used to build libraries.
 LD=$lt_LD
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds
 
@@ -19022,12 +19723,12 @@ with_gcc=$GCC
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static
 
@@ -19114,9 +19815,6 @@ inherit_rpath=$inherit_rpath
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols
 
@@ -19132,6 +19830,9 @@ include_expsyms=$lt_include_expsyms
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec
 
@@ -19178,212 +19879,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 
@@ -19395,6 +20053,10 @@ _LT_EOF
 # The linker used to build libraries.
 LD=$lt_LD_CXX
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds_CXX
 
@@ -19407,12 +20069,12 @@ with_gcc=$GCC_CXX
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic_CXX
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static_CXX
 
@@ -19499,9 +20161,6 @@ inherit_rpath=$inherit_rpath_CXX
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs_CXX
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_CXX
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols_CXX
 
@@ -19517,6 +20176,9 @@ include_expsyms=$lt_include_expsyms_CXX
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds_CXX
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec_CXX
 
diff --git a/libspatialite/configure.ac b/libspatialite/configure.ac
index c1fbc2b..d6a40ea 100644
--- a/libspatialite/configure.ac
+++ b/libspatialite/configure.ac
@@ -2,11 +2,11 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.61)
-AC_INIT(libspatialite, 3.0.0-beta, a.furieri at lqt.it)
+AC_INIT(libspatialite, 3.0.1, a.furieri at lqt.it)
 AC_LANG(C)
 AC_CONFIG_MACRO_DIR([m4])
 
-AM_INIT_AUTOMAKE
+AM_INIT_AUTOMAKE([foreign])
 AM_MAINTAINER_MODE
 
 # Checks for header files.
@@ -53,7 +53,7 @@ AC_FUNC_STRFTIME
 AC_CHECK_FUNCS([memset sqrt strcasecmp strerror strncasecmp strstr fdatasync ftruncate getcwd gettimeofday localtime_r memmove strerror])
 
 # Checks for installed libraries
-AC_CHECK_LIB(sqlite3,sqlite3_prepare_v2,,AC_MSG_ERROR(['libsqlite3' is required but it doesn't seems to be installed on this system.]),-lm)
+AC_CHECK_LIB(sqlite3,sqlite3_prepare_v2,,AC_MSG_ERROR(['libsqlite3' is required but it doesn't seem to be installed on this system.]),-lm)
 
 AC_CONFIG_FILES([Makefile \
 		src/Makefile \
@@ -62,8 +62,12 @@ AC_CONFIG_FILES([Makefile \
 		src/gaiaexif/Makefile \
 		src/gaiageo/Makefile \
 		src/spatialite/Makefile \
+		src/shapefiles/Makefile \
 		src/srsinit/Makefile \
 		src/virtualtext/Makefile \
+		test/Makefile \
+		examples/Makefile \
+		Doxyfile \
 		spatialite.pc])
 
 #-----------------------------------------------------------------------
@@ -104,7 +108,7 @@ AC_ARG_ENABLE(proj, [AS_HELP_STRING(
 if test x"$enable_proj" != "xno"; then
   OMIT_PROJ_FLAGS=
   AC_CHECK_HEADERS(proj_api.h,, [AC_MSG_ERROR([cannot find proj_api.h, bailing out])])
-  AC_SEARCH_LIBS(pj_init_plus,proj,,AC_MSG_ERROR(['libproj' is required but it doesn't seems to be installed on this system.]),-lm)
+  AC_SEARCH_LIBS(pj_init_plus,proj,,AC_MSG_ERROR(['libproj' is required but it doesn't seem to be installed on this system.]),-lm)
 else
   OMIT_PROJ_FLAGS=-DOMIT_PROJ
 fi
@@ -120,7 +124,7 @@ AC_ARG_ENABLE(geos, [AS_HELP_STRING(
 if test x"$enable_geos" != "xno"; then
   OMIT_GEOS_FLAGS=
   AC_CHECK_HEADERS(geos_c.h,, [AC_MSG_ERROR([cannot find geos_c.h, bailing out])])
-  AC_SEARCH_LIBS(GEOSTopologyPreserveSimplify,geos_c,,AC_MSG_ERROR(['libgeos_c' is required but it doesn't seems to be installed on this system.]),-lm -lgeos)
+  AC_SEARCH_LIBS(GEOSTopologyPreserveSimplify,geos_c,,AC_MSG_ERROR(['libgeos_c' is required but it doesn't seem to be installed on this system.]),-lm -lgeos)
   #-----------------------------------------------------------------------
   #   --enable-geosadvanced
   #
@@ -151,9 +155,9 @@ if test x"$enable_iconv" != "xno"; then
 # on some systems "iconv()" lives in libc. On others it lives in libiconv
 #  on older systems "libiconv()" lives in libiconv
   AC_SEARCH_LIBS(iconv,iconv,,
-    AC_SEARCH_LIBS(libiconv,iconv,,AC_MSG_ERROR(['libiconv' is required but it doesn't seems to be installed on this system.]),))
+    AC_SEARCH_LIBS(libiconv,iconv,,AC_MSG_ERROR(['libiconv' is required but it doesn't seem to be installed on this system.]),))
   AC_SEARCH_LIBS(locale_charset,charset,,
-    AC_SEARCH_LIBS(nl_langinfo,c,,AC_MSG_ERROR(['libcharset' is required but it doesn't seems to be installed on this system.]),))
+    AC_SEARCH_LIBS(nl_langinfo,c,,AC_MSG_ERROR(['libcharset' is required but it doesn't seem to be installed on this system.]),))
 else
   OMIT_ICONV_FLAGS=-DOMIT_ICONV
 fi
@@ -168,7 +172,7 @@ AC_ARG_ENABLE(freexl, [AS_HELP_STRING(
 if test x"$enable_freexl" != "xno"; then
   OMIT_FREEXL_FLAGS=
   AC_CHECK_HEADERS(freexl.h,, [AC_MSG_ERROR([cannot find freexl.h, bailing out])])
-  AC_SEARCH_LIBS(freexl_open,freexl,,AC_MSG_ERROR(['libfreexl' is required but it doesn't seems to be installed on this system.]),-lm)
+  AC_SEARCH_LIBS(freexl_open,freexl,,AC_MSG_ERROR(['libfreexl' is required but it doesn't seem to be installed on this system.]),-lm)
 else
   OMIT_FREEXL_FLAGS=-DOMIT_FREEXL
 fi
@@ -189,6 +193,18 @@ fi
 AC_SUBST(OMIT_EPSG_FLAGS)
 #-----------------------------------------------------------------------
 
+
+#-----------------------------------------------------------------------
+#    --enable-gcov
+#
+AC_ARG_ENABLE(gcov, AC_HELP_STRING([--enable-gcov],[turn on code coverage analysis tools]))
+if test "x$enable_gcov" = "xyes"; then
+    dnl Check for -fprofile-arcs and -ftest-coverage option
+    CFLAGS=$CFLAGS" -fprofile-arcs -ftest-coverage -g"
+    GCOV_FLAGS="-lgcov"
+fi
+#-----------------------------------------------------------------------
+
 # Checking for MinGW
 AM_CONDITIONAL([MINGW], [test "$target_alias" = "mingw32"])
 # Checking for Mac OsX
diff --git a/libspatialite/examples/Makefile.am b/libspatialite/examples/Makefile.am
new file mode 100644
index 0000000..823e92a
--- /dev/null
+++ b/libspatialite/examples/Makefile.am
@@ -0,0 +1,8 @@
+noinst_PROGRAMS = demo1 demo2 demo3 demo4
+
+AM_CFLAGS = -I at srcdir@/../src/headers @OMIT_GEOS_FLAGS@
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+
+EXTRA_DIST = examples.doxy
diff --git a/libspatialite/examples/Makefile.in b/libspatialite/examples/Makefile.in
new file mode 100644
index 0000000..8dfa88b
--- /dev/null
+++ b/libspatialite/examples/Makefile.in
@@ -0,0 +1,506 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = demo1$(EXEEXT) demo2$(EXEEXT) demo3$(EXEEXT) \
+	demo4$(EXEEXT)
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+demo1_SOURCES = demo1.c
+demo1_OBJECTS = demo1.$(OBJEXT)
+demo1_LDADD = $(LDADD)
+demo2_SOURCES = demo2.c
+demo2_OBJECTS = demo2.$(OBJEXT)
+demo2_LDADD = $(LDADD)
+demo3_SOURCES = demo3.c
+demo3_OBJECTS = demo3.$(OBJEXT)
+demo3_LDADD = $(LDADD)
+demo4_SOURCES = demo4.c
+demo4_OBJECTS = demo4.$(OBJEXT)
+demo4_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = demo1.c demo2.c demo3.c demo4.c
+DIST_SOURCES = demo1.c demo2.c demo3.c demo4.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -I at srcdir@/../src/headers @OMIT_GEOS_FLAGS@
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+EXTRA_DIST = examples.doxy
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+demo1$(EXEEXT): $(demo1_OBJECTS) $(demo1_DEPENDENCIES) 
+	@rm -f demo1$(EXEEXT)
+	$(LINK) $(demo1_OBJECTS) $(demo1_LDADD) $(LIBS)
+demo2$(EXEEXT): $(demo2_OBJECTS) $(demo2_DEPENDENCIES) 
+	@rm -f demo2$(EXEEXT)
+	$(LINK) $(demo2_OBJECTS) $(demo2_LDADD) $(LIBS)
+demo3$(EXEEXT): $(demo3_OBJECTS) $(demo3_DEPENDENCIES) 
+	@rm -f demo3$(EXEEXT)
+	$(LINK) $(demo3_OBJECTS) $(demo3_LDADD) $(LIBS)
+demo4$(EXEEXT): $(demo4_OBJECTS) $(demo4_DEPENDENCIES) 
+	@rm -f demo4$(EXEEXT)
+	$(LINK) $(demo4_OBJECTS) $(demo4_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo3.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo4.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/examples/demo1.c b/libspatialite/examples/demo1.c
new file mode 100644
index 0000000..bffc38a
--- /dev/null
+++ b/libspatialite/examples/demo1.c
@@ -0,0 +1,365 @@
+/* 
+
+demo1.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+ 
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+int
+main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    sqlite3_stmt *stmt;
+    gaiaGeomCollPtr geom;
+    char sql[256];
+    int i;
+    int ic;
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *err_msg = NULL;
+    int len;
+    char *table_name;
+    char **p_geotables = NULL;
+    int n_geotables = 0;
+    int row_no;
+    const void *blob;
+    int blob_size;
+    int geom_type;
+    double measure;
+
+
+    if (argc != 2)
+      {
+	  fprintf (stderr, "usage: %s test_db_path\n", argv[0]);
+	  return -1;
+      }
+
+
+
+/* 
+VERY IMPORTANT: 
+you must initialize the SpatiaLite extension [and related]
+BEFORE attempting to perform any other SQLite call 
+*/
+    spatialite_init (0);
+
+
+/* showing the SQLite version */
+    printf ("SQLite version: %s\n", sqlite3_libversion ());
+/* showing the SpatiaLite version */
+    printf ("SpatiaLite version: %s\n", spatialite_version ());
+    printf ("\n\n");
+
+
+
+/* 
+trying to connect the test DB: 
+- this demo was designed in order to connect the standard 
+  TEST-2.3.SQLITE sample DB
+- but you can try to use any SQLite/SpatiaLite DB at your will
+
+Please notice: we'll establish a READ ONLY connection 
+*/
+    ret = sqlite3_open_v2 (argv[1], &handle, SQLITE_OPEN_READONLY, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", argv[1], sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+
+/* 
+SQL query #1 
+we'll retrieve GEOMETRY tables from Spatial Metadata 
+we are assuming this query will return only few rows, 
+so this time we'll use the sqlite3_get_table() interface
+
+this interface is very simple to use
+the result set is returned as a rectangular array [rows/columns]
+allocated in a temporary memory storage
+so, this interface is well suited for small sized result sets,
+but performs badly when accessing a large sized resul set
+
+as a side effect, each column value is returned as text, and
+isn't possible at all to retrieve true column types
+(INTEGER, FLOAT ...)
+*/
+    strcpy (sql,
+	    "SELECT DISTINCT f_table_name FROM geometry_columns ORDER BY 1");
+    ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+			     &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  printf ("query#1 SQL error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+    if (n_rows > 1)
+      {
+/* first row always contains column names and is meaningless in this context */
+	  n_geotables = n_rows;
+/* allocating a dynamic pointer array to store geotable names */
+	  p_geotables = malloc (sizeof (char *) * n_geotables);
+	  for (i = 1; i <= n_rows; i++)
+	    {
+/* 
+now we'll fetch one row at each time [and we have only one column to fetch] 
+
+this one is is a simplified demo; but when writing a real application 
+you always must check for NULL values !!!!
+*/
+		table_name = results[(i * n_columns) + 0];
+/* and we'll store each geotable name into the dynamic pointer array */
+		len = strlen (table_name);
+		p_geotables[i - 1] = malloc (len + 1);
+		strcpy (p_geotables[i - 1], table_name);
+	    }
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+
+    for (i = 0; i < n_geotables; i++)
+      {
+/* now we'll scan each geotable we've found in Spatial Metadata */
+	  printf ("========= table '%s' ========================\n",
+		  p_geotables[i]);
+
+
+
+/*
+SQL query #2 
+we'll retrieve any column from the current geotable 
+we are assuming this query will return lots of rows, 
+so we have to use sqlite3_prepare_v2() interface
+
+this interface is a more complex one, but is well
+suited in order to access huge sized result sets
+and true value type control is supported
+*/
+	  sprintf (sql, "SELECT * FROM %s", p_geotables[i]);
+	  ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+	  if (ret != SQLITE_OK)
+	    {
+/* some error occurred */
+		printf ("query#2 SQL error: %s\n", sqlite3_errmsg (handle));
+		goto abort;
+	    }
+
+/* 
+the sqlite3_prepare_v2() call simply parses the SQL statement,
+checking for syntax validity, allocating internal structs etc
+but no result set row is really yet available
+*/
+
+/* we'll now save the #columns within the result set */
+	  n_columns = sqlite3_column_count (stmt);
+	  row_no = 0;
+
+
+	  while (1)
+	    {
+/* this is an infinite loop, intended to fetch any row */
+
+/* we are now trying to fetch the next available row */
+		ret = sqlite3_step (stmt);
+		if (ret == SQLITE_DONE)
+		  {
+/* there are no more rows to fetch - we can stop looping */
+		      break;
+		  }
+		if (ret == SQLITE_ROW)
+		  {
+/* ok, we've just fetched a valid row to process */
+		      row_no++;
+		      printf ("row #%d\n", row_no);
+
+
+		      for (ic = 0; ic < n_columns; ic++)
+			{
+/* 
+and now we'll fetch column values
+
+for each column we'll then get:
+- the column name
+- a column value, that can be of type: SQLITE_NULL, SQLITE_INTEGER, 
+ SQLITE_FLOAT, SQLITE_TEXT or SQLITE_BLOB, according to internal DB storage type
+*/
+			    printf ("\t%-10s = ",
+				    sqlite3_column_name (stmt, ic));
+			    switch (sqlite3_column_type (stmt, ic))
+			      {
+			      case SQLITE_NULL:
+				  printf ("NULL");
+				  break;
+			      case SQLITE_INTEGER:
+				  printf ("%d", sqlite3_column_int (stmt, ic));
+				  break;
+			      case SQLITE_FLOAT:
+				  printf ("%1.4f",
+					  sqlite3_column_double (stmt, ic));
+				  break;
+			      case SQLITE_TEXT:
+				  printf ("'%s'",
+					  sqlite3_column_text (stmt, ic));
+				  break;
+			      case SQLITE_BLOB:
+				  blob = sqlite3_column_blob (stmt, ic);
+				  blob_size = sqlite3_column_bytes (stmt, ic);
+
+/* checking if this BLOB actually is a GEOMETRY */
+				  geom =
+				      gaiaFromSpatiaLiteBlobWkb (blob,
+								 blob_size);
+				  if (!geom)
+				    {
+/* for sure this one is not a GEOMETRY */
+					printf ("BLOB [%d bytes]", blob_size);
+				    }
+				  else
+				    {
+					geom_type = gaiaGeometryType (geom);
+					if (geom_type == GAIA_UNKNOWN)
+					    printf ("EMPTY or NULL GEOMETRY");
+					else
+					  {
+					      char *geom_name;
+					      if (geom_type == GAIA_POINT)
+						  geom_name = "POINT";
+					      if (geom_type == GAIA_LINESTRING)
+						  geom_name = "LINESTRING";
+					      if (geom_type == GAIA_POLYGON)
+						  geom_name = "POLYGON";
+					      if (geom_type == GAIA_MULTIPOINT)
+						  geom_name = "MULTIPOINT";
+					      if (geom_type ==
+						  GAIA_MULTILINESTRING)
+						  geom_name = "MULTILINESTRING";
+					      if (geom_type ==
+						  GAIA_MULTIPOLYGON)
+						  geom_name = "MULTIPOLYGON";
+					      if (geom_type ==
+						  GAIA_GEOMETRYCOLLECTION)
+						  geom_name =
+						      "GEOMETRYCOLLECTION";
+					      printf ("%s SRID=%d", geom_name,
+						      geom->Srid);
+					      if (geom_type == GAIA_LINESTRING
+						  || geom_type ==
+						  GAIA_MULTILINESTRING)
+						{
+#ifndef OMIT_GEOS		/* GEOS is required */
+						    gaiaGeomCollLength (geom,
+									&measure);
+						    printf (" length=%1.2f",
+							    measure);
+#else
+						    printf
+							(" length=?? [no GEOS support available]");
+#endif /* GEOS enabled/disabled */
+						}
+					      if (geom_type == GAIA_POLYGON ||
+						  geom_type ==
+						  GAIA_MULTIPOLYGON)
+						{
+#ifndef OMIT_GEOS		/* GEOS is required */
+						    gaiaGeomCollArea (geom,
+								      &measure);
+						    printf (" area=%1.2f",
+							    measure);
+#else
+						    printf
+							("area=?? [no GEOS support available]");
+#endif /* GEOS enabled/disabled */
+						}
+					  }
+/* we have now to free the GEOMETRY */
+					gaiaFreeGeomColl (geom);
+				    }
+
+				  break;
+			      };
+			    printf ("\n");
+			}
+
+		      if (row_no >= 5)
+			{
+/* we'll exit the loop after the first 5 rows - this is only a demo :-) */
+			    break;
+			}
+		  }
+		else
+		  {
+/* some unexpected error occurred */
+		      printf ("sqlite3_step() error: %s\n",
+			      sqlite3_errmsg (handle));
+		      sqlite3_finalize (stmt);
+		      goto abort;
+		  }
+	    }
+/* we have now to finalize the query [memory cleanup] */
+	  sqlite3_finalize (stmt);
+	  printf ("\n\n");
+
+      }
+
+
+
+/* disconnecting the test DB */
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("close() error: %s\n", sqlite3_errmsg (handle));
+	  return -1;
+      }
+    printf ("\n\nsample successfully terminated\n");
+/* we have to free the dynamic pointer array used to store geotable names */
+    for (i = 0; i < n_geotables; i++)
+      {
+/* freeing each tablename */
+	  free (p_geotables[i]);
+      }
+    free (p_geotables);
+    return 0;
+
+  abort:
+    sqlite3_close (handle);
+    if (p_geotables)
+      {
+/* we have to free the dynamic pointer array used to store geotable names */
+	  for (i = 0; i < n_geotables; i++)
+	    {
+/* freeing each tablename */
+		free (p_geotables[i]);
+	    }
+	  free (p_geotables);
+      }
+    return -1;
+}
diff --git a/libspatialite/examples/demo2.c b/libspatialite/examples/demo2.c
new file mode 100644
index 0000000..d5abb5f
--- /dev/null
+++ b/libspatialite/examples/demo2.c
@@ -0,0 +1,539 @@
+/* 
+
+demo2.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+
+#include <geos_c.h>
+
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+static char *
+geom_type (int type)
+{
+/* utility function returning corresponding GeometryType as a string */
+    static char *name = "EMPTY / NULL GEOMETRY";
+    if (type == GAIA_POINT)
+	name = "POINT";
+    if (type == GAIA_LINESTRING)
+	name = "LINESTRING";
+    if (type == GAIA_POLYGON)
+	name = "POLYGON";
+    if (type == GAIA_MULTIPOINT)
+	name = "MULTIPOINT";
+    if (type == GAIA_MULTILINESTRING)
+	name = "MULTILINESTRING";
+    if (type == GAIA_MULTIPOLYGON)
+	name = "MULTIPOLYGON";
+    if (type == GAIA_GEOMETRYCOLLECTION)
+	name = "GEOMETRYCOLLECTION";
+    return name;
+}
+
+static void
+geometry_printout (gaiaGeomCollPtr geom)
+{
+/* utility function printing a generic Geometry object */
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int n_pts = 0;
+    int n_lns = 0;
+    int n_pgs = 0;
+    int cnt;
+    int iv;
+    int ir;
+    double x;
+    double y;
+
+
+/* we'll now count how many POINTs are there */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  n_pts++;
+	  pt = pt->Next;
+      }
+/* we'll now count how many LINESTRINGs are there */
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  n_lns++;
+	  ln = ln->Next;
+      }
+/* we'll now count how many POLYGONs are there */
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  n_pgs++;
+	  pg = pg->Next;
+      }
+
+
+
+    if (n_pts)
+      {
+/* printing POINTs coordinates */
+	  cnt = 0;
+	  pt = geom->FirstPoint;
+	  while (pt)
+	    {
+/* we'll now scan the linked list of POINTs */
+		printf ("\t\t\tPOINT %d/%d x=%1.4f y=%1.4f\n",
+			cnt, n_pts, pt->X, pt->Y);
+		cnt++;
+		pt = pt->Next;
+	    }
+      }
+
+
+    if (n_lns)
+      {
+/* printing LINESTRINGs coordinates */
+	  cnt = 0;
+	  ln = geom->FirstLinestring;
+	  while (ln)
+	    {
+/* we'll now scan the linked list of LINESTRINGs */
+		printf ("\t\t\tLINESTRING %d/%d has %d vertices\n",
+			cnt, n_lns, ln->Points);
+		for (iv = 0; iv < ln->Points; iv++)
+		  {
+/* we'll now retrieve coordinates for each vertex */
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      printf ("\t\t\t\tvertex %d/%d x=%1.4f y=%1.4f\n",
+			      iv, ln->Points, x, y);
+		  }
+		cnt++;
+		ln = ln->Next;
+	    }
+      }
+
+
+    if (n_pgs)
+      {
+/* printing POLYGONs coordinates */
+	  cnt = 0;
+	  pg = geom->FirstPolygon;
+	  while (pg)
+	    {
+/* we'll now scan the linked list of POLYGONs */
+		printf ("\t\t\tPOLYGON %d/%d has %d hole%c\n",
+			cnt, n_pgs, pg->NumInteriors,
+			(pg->NumInteriors == 1) ? ' ' : 's');
+
+/*
+now we'll print out the Exterior ring 
+[surely a POLYGON has an Exterior ring 
+*/
+		rng = pg->Exterior;
+		printf ("\t\t\t\tExteriorRing has %d vertices\n", rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+/* we'll now retrieve coordinates for each vertex */
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      printf ("\t\t\t\t\tvertex %d/%d x=%1.4f y=%1.4f\n",
+			      iv, rng->Points, x, y);
+		  }
+
+		for (ir = 0; ir < pg->NumInteriors; ir++)
+		  {
+/* 
+a POLYGON can contain an arbitrary number of Interior rings (including zero)
+*/
+		      rng = pg->Interiors + ir;
+		      printf ("\t\t\t\tInteriorRing %d/%d has %d vertices\n",
+			      ir, pg->NumInteriors, rng->Points);
+		      for (iv = 0; iv < rng->Points; iv++)
+			{
+/* we'll now retrieve coordinates for each vertex */
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			    printf
+				("\t\t\t\t\tvertex %d/%d x=%1.4f y=%1.4f\n",
+				 iv, rng->Points, x, y);
+			}
+		  }
+
+		cnt++;
+		pg = pg->Next;
+	    }
+      }
+}
+
+int
+main (int argc, char *argv[])
+{
+    gaiaGeomCollPtr geo_pt = NULL;
+    gaiaGeomCollPtr geo_ln = NULL;
+    gaiaGeomCollPtr geo_pg = NULL;
+    gaiaGeomCollPtr geo_mpt = NULL;
+    gaiaGeomCollPtr geo_mln = NULL;
+    gaiaGeomCollPtr geo_mpg = NULL;
+    gaiaGeomCollPtr geo_coll = NULL;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    gaiaOutBuffer wkt;
+    int ret;
+    sqlite3 *handle;
+
+
+/*
+
+this demo does not strictly require any DB connection to be established
+
+However you must initialize the SpatiaLite extension [and related]
+and you *must* establish a "fake" DB connection in order to 
+properly initialize SpatiaLite and GEOS libraries
+
+*/
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READONLY, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", ":memory:",
+		  sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+#ifndef OMIT_GEOS		/* GEOS must be enabled */
+
+/*
+Step #1
+creating and checking a POINT Geometry
+*/
+
+/* we'll allocate a Geometry object */
+    geo_pt = gaiaAllocGeomColl ();
+/* then we insert a POINT, directly passing its coordinates */
+    gaiaAddPointToGeomColl (geo_pt, 1.5, 2.75);
+/* now we'll print the main attributes for this geometry */
+    printf ("step#1: %s\t\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_pt)),
+	    gaiaDimension (geo_pt), gaiaIsValid (geo_pt));
+    geometry_printout (geo_pt);
+
+
+
+/*
+Step #2
+creating and checking a LINESTRING Geometry
+*/
+    geo_ln = gaiaAllocGeomColl ();
+/* then we insert a  LINESTRING, specifying how many vertices it contains */
+    line = gaiaAddLinestringToGeomColl (geo_ln, 5);
+/* 
+we've got a pointer referencing the linestring we've just inserted
+now we'll set coordinates for each vertex
+*/
+    gaiaSetPoint (line->Coords, 0, 1.0, 1.0);
+    gaiaSetPoint (line->Coords, 1, 2.0, 1.0);
+    gaiaSetPoint (line->Coords, 2, 2.0, 2.0);
+    gaiaSetPoint (line->Coords, 3, 100.0, 2.0);
+    gaiaSetPoint (line->Coords, 4, 100.0, 100.0);
+
+
+    printf ("\nstep#2: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_ln)),
+	    gaiaDimension (geo_ln), gaiaIsValid (geo_ln));
+    geometry_printout (geo_ln);
+
+
+
+/*
+Step #3
+creating and checking a POLYGON Geometry
+*/
+    geo_pg = gaiaAllocGeomColl ();
+/* 
+then we insert a  POLYGON, specifying:
+- how many vertices have to be allocated for the Exterior Ring
+- how many Interior Rings it has 
+*/
+    polyg = gaiaAddPolygonToGeomColl (geo_pg, 5, 2);
+/* 
+we've got a pointer referencing the polygon we've just inserted
+now we'll get a pointer referencing its Exterior ring
+*/
+    ring = polyg->Exterior;
+
+
+/* now we'll set coordinates for each Exterior ring vertex */
+    gaiaSetPoint (ring->Coords, 0, 0.0, 0.0);
+    gaiaSetPoint (ring->Coords, 1, 50.0, 0.0);
+    gaiaSetPoint (ring->Coords, 2, 50.0, 50.0);
+    gaiaSetPoint (ring->Coords, 3, 0.0, 50.0);
+/* please note: a Ring is a CLOSED figure, so last and first vertex have to be coincident */
+    gaiaSetPoint (ring->Coords, 4, 0.0, 0.0);
+
+
+/* 
+we'll now get a pointer referencing the FIRST interior ring,
+specifying how vertices have to be allocated
+*/
+    ring = gaiaAddInteriorRing (polyg, 0, 5);
+/* then setting coordinates for each Interior ring vertex */
+    gaiaSetPoint (ring->Coords, 0, 40.0, 40.0);
+    gaiaSetPoint (ring->Coords, 1, 41.0, 40.0);
+    gaiaSetPoint (ring->Coords, 2, 41.0, 41.0);
+    gaiaSetPoint (ring->Coords, 3, 40.0, 41.0);
+    gaiaSetPoint (ring->Coords, 4, 40.0, 40.0);
+
+
+/* 
+we'll now get a pointer referencing the SECOND interior ring,
+specifying how vertices have to be allocated
+*/
+    ring = gaiaAddInteriorRing (polyg, 1, 5);
+/* then setting coordinates for each Interior ring vertex */
+    gaiaSetPoint (ring->Coords, 0, 30.0, 30.0);
+    gaiaSetPoint (ring->Coords, 1, 31.0, 30.0);
+    gaiaSetPoint (ring->Coords, 2, 31.0, 31.0);
+    gaiaSetPoint (ring->Coords, 3, 30.0, 31.0);
+    gaiaSetPoint (ring->Coords, 4, 30.0, 30.0);
+
+
+    printf ("\nstep#3: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_pg)),
+	    gaiaDimension (geo_pg), gaiaIsValid (geo_pg));
+    geometry_printout (geo_pg);
+
+
+
+/*
+Step #4
+creating and checking a MULTIPOINT Geometry
+*/
+    geo_mpt = gaiaAllocGeomColl ();
+/* then we'll insert some POINTs */
+    gaiaAddPointToGeomColl (geo_mpt, 5.0, 5.0);
+    gaiaAddPointToGeomColl (geo_mpt, 15.0, 5.0);
+    gaiaAddPointToGeomColl (geo_mpt, 5.0, 15.0);
+    gaiaAddPointToGeomColl (geo_mpt, 25.0, 5.0);
+    gaiaAddPointToGeomColl (geo_mpt, 5.0, 25.0);
+    printf ("\nstep#4: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_mpt)),
+	    gaiaDimension (geo_mpt), gaiaIsValid (geo_mpt));
+    geometry_printout (geo_mpt);
+
+
+
+/*
+Step #5
+creating and checking a MULTILINESTRING Geometry
+*/
+    geo_mln = gaiaAllocGeomColl ();
+
+/* then we'll insert two LINESTRINGs */
+    line = gaiaAddLinestringToGeomColl (geo_mln, 2);
+    gaiaSetPoint (line->Coords, 0, 30.0, 10.0);
+    gaiaSetPoint (line->Coords, 1, 10.0, 30.0);
+
+    line = gaiaAddLinestringToGeomColl (geo_mln, 2);
+    gaiaSetPoint (line->Coords, 0, 40.0, 50.0);
+    gaiaSetPoint (line->Coords, 1, 50.0, 40.0);
+
+    printf ("\nstep#5: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_mln)),
+	    gaiaDimension (geo_mln), gaiaIsValid (geo_mln));
+    geometry_printout (geo_mln);
+
+
+
+/*
+Step #6
+creating and checking a MULTIPOLYGON Geometry
+*/
+    geo_mpg = gaiaAllocGeomColl ();
+
+/* then we'll insert two POLYGONs */
+    polyg = gaiaAddPolygonToGeomColl (geo_mpg, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 60.0, 60.0);
+    gaiaSetPoint (ring->Coords, 1, 70.0, 60.0);
+    gaiaSetPoint (ring->Coords, 2, 70.0, 70.0);
+    gaiaSetPoint (ring->Coords, 3, 60.0, 70.0);
+    gaiaSetPoint (ring->Coords, 4, 60.0, 60.0);
+
+    polyg = gaiaAddPolygonToGeomColl (geo_mpg, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 80.0, 80.0);
+    gaiaSetPoint (ring->Coords, 1, 90.0, 80.0);
+    gaiaSetPoint (ring->Coords, 2, 90.0, 90.0);
+    gaiaSetPoint (ring->Coords, 3, 80.0, 90.0);
+    gaiaSetPoint (ring->Coords, 4, 80.0, 80.0);
+
+    printf ("\nstep#6: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_mpg)),
+	    gaiaDimension (geo_mpg), gaiaIsValid (geo_mpg));
+    geometry_printout (geo_mpg);
+
+
+
+/*
+Step #7
+creating and checking a GEOMETRYCOLLECTION Geometry
+*/
+    geo_coll = gaiaAllocGeomColl ();
+
+/* then we'll insert two POINTs */
+    gaiaAddPointToGeomColl (geo_coll, 100.0, 100.0);
+    gaiaAddPointToGeomColl (geo_coll, 100.0, 0.0);
+
+/* then we'll insert two LINESTRINGs */
+    line = gaiaAddLinestringToGeomColl (geo_coll, 2);
+    gaiaSetPoint (line->Coords, 0, 130.0, 110.0);
+    gaiaSetPoint (line->Coords, 1, 110.0, 130.0);
+
+    line = gaiaAddLinestringToGeomColl (geo_coll, 2);
+    gaiaSetPoint (line->Coords, 0, 140.0, 150.0);
+    gaiaSetPoint (line->Coords, 1, 150.0, 140.0);
+
+/* then we'll insert two POLYGONs */
+    polyg = gaiaAddPolygonToGeomColl (geo_coll, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 160.0, 160.0);
+    gaiaSetPoint (ring->Coords, 1, 170.0, 160.0);
+    gaiaSetPoint (ring->Coords, 2, 170.0, 170.0);
+    gaiaSetPoint (ring->Coords, 3, 160.0, 170.0);
+    gaiaSetPoint (ring->Coords, 4, 160.0, 160.0);
+
+    polyg = gaiaAddPolygonToGeomColl (geo_coll, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 180.0, 180.0);
+    gaiaSetPoint (ring->Coords, 1, 190.0, 180.0);
+    gaiaSetPoint (ring->Coords, 2, 190.0, 190.0);
+    gaiaSetPoint (ring->Coords, 3, 180.0, 190.0);
+    gaiaSetPoint (ring->Coords, 4, 180.0, 180.0);
+
+    printf ("\nstep#7: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_coll)),
+	    gaiaDimension (geo_coll), gaiaIsValid (geo_coll));
+    geometry_printout (geo_coll);
+
+
+
+
+/*
+Step #8
+printing each geometry as Well Known Text (WKT)
+*/
+
+    printf ("\nstep#8: checking WKT representations\n");
+
+/* first we'll get the WKT corresponding to geometry */
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_pt);
+/* we have to check wkt is not NULL */
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+/* printing the WKT */
+	  printf ("\n%s\n", wkt.Buffer);
+
+/* finally freeing the wkt temporary storage allocation */
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_ln);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_pg);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_mpt);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_mln);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_mpg);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_coll);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+#else
+    printf ("no GEOS support available: skipping any test\n");
+#endif /* GEOS enabled/disabled */
+
+/* 
+memory cleanup
+we have to destroy each object using temporary storage before exit
+*/
+    if (geo_pt)
+	gaiaFreeGeomColl (geo_pt);
+    if (geo_ln)
+	gaiaFreeGeomColl (geo_ln);
+    if (geo_pg)
+	gaiaFreeGeomColl (geo_pg);
+    if (geo_mpt)
+	gaiaFreeGeomColl (geo_mpt);
+    if (geo_mln)
+	gaiaFreeGeomColl (geo_mln);
+    if (geo_mpg)
+	gaiaFreeGeomColl (geo_mpg);
+    if (geo_coll)
+	gaiaFreeGeomColl (geo_coll);
+    sqlite3_close (handle);
+    return 0;
+}
diff --git a/libspatialite/examples/demo3.c b/libspatialite/examples/demo3.c
new file mode 100644
index 0000000..0408d8a
--- /dev/null
+++ b/libspatialite/examples/demo3.c
@@ -0,0 +1,370 @@
+/* 
+
+demo3.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+ 
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+int
+main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    sqlite3_stmt *stmt;
+    char sql[256];
+    char *err_msg = NULL;
+    double x;
+    double y;
+    int pk;
+    int ix;
+    int iy;
+    gaiaGeomCollPtr geo = NULL;
+    unsigned char *blob;
+    int blob_size;
+    int i;
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *count;
+    clock_t t0;
+    clock_t t1;
+
+
+    if (argc != 2)
+      {
+	  fprintf (stderr, "usage: %s test_db_path\n", argv[0]);
+	  return -1;
+      }
+
+
+/* 
+VERY IMPORTANT: 
+you must initialize the SpatiaLite extension [and related]
+BEFORE attempting to perform any other SQLite call 
+*/
+    spatialite_init (0);
+
+
+/* showing the SQLite version */
+    printf ("SQLite version: %s\n", sqlite3_libversion ());
+/* showing the SpatiaLite version */
+    printf ("SpatiaLite version: %s\n", spatialite_version ());
+    printf ("\n\n");
+
+
+
+/* 
+trying to connect the test DB: 
+- this demo is intended to create a new, empty database
+*/
+    ret = sqlite3_open_v2 (argv[1], &handle,
+			   SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", argv[1], sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+
+/* 
+we are supposing this one is an empty database,
+so we have to create the Spatial Metadata
+*/
+    strcpy (sql, "SELECT InitSpatialMetadata()");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("InitSpatialMetadata() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+now we can create the test table
+for simplicity we'll define only one column, the primary key
+*/
+    strcpy (sql, "CREATE TABLE test (");
+    strcat (sql, "PK INTEGER NOT NULL PRIMARY KEY)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CREATE TABLE 'test' error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+... we'll add a Geometry column of POINT type to the test table 
+*/
+    strcpy (sql, "SELECT AddGeometryColumn('test', 'geom', 3003, 'POINT', 2)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("AddGeometryColumn() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+and finally we'll enable this geo-column to have a Spatial Index based on R*Tree
+*/
+    strcpy (sql, "SELECT CreateSpatialIndex('test', 'geom')");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CreateSpatialIndex() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+    printf
+	("\nnow we are going to insert 1 million POINTs; wait, please ...\n\n");
+
+    t0 = clock ();
+/*
+beginning a transaction
+
+*** this step is absolutely critical ***
+
+the SQLite engine is a TRANSACTIONAL one
+the whole batch of INSERTs has to be performed as an unique transaction,
+otherwise performance will be surely very poor
+*/
+    strcpy (sql, "BEGIN");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("BEGIN error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/* 
+preparing to populate the test table
+we'll use a Prepared Statement we can reuse in order to insert each row
+*/
+    strcpy (sql, "INSERT INTO test (pk, geom) VALUES (?, ?)");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("INSERT SQL error: %s\n", sqlite3_errmsg (handle));
+	  goto abort;
+      }
+
+    pk = 0;
+    for (ix = 0; ix < 1000; ix++)
+      {
+	  x = 1000000.0 + (ix * 10.0);
+	  for (iy = 0; iy < 1000; iy++)
+	    {
+/* this double loop will insert 1 million rows into the the test table */
+
+		y = 4000000.0 + (iy * 10.0);
+		pk++;
+		if ((pk % 25000) == 0)
+		  {
+		      t1 = clock ();
+		      printf ("insert row: %d\t\t[elapsed time: %1.3f]\n",
+			      pk, (double) (t1 - t0) / CLOCKS_PER_SEC);
+		  }
+
+/* preparing the geometry to insert */
+		geo = gaiaAllocGeomColl ();
+		geo->Srid = 3003;
+		gaiaAddPointToGeomColl (geo, x, y);
+
+/* transforming this geometry into the SpatiaLite BLOB format */
+		gaiaToSpatiaLiteBlobWkb (geo, &blob, &blob_size);
+
+/* we can now destroy the geometry object */
+		gaiaFreeGeomColl (geo);
+
+/* resetting Prepared Statement and bindings */
+		sqlite3_reset (stmt);
+		sqlite3_clear_bindings (stmt);
+
+/* binding parameters to Prepared Statement */
+		sqlite3_bind_int64 (stmt, 1, pk);
+		sqlite3_bind_blob (stmt, 2, blob, blob_size, free);
+
+/* performing actual row insert */
+		ret = sqlite3_step (stmt);
+		if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+		    ;
+		else
+		  {
+/* an unexpected error occurred */
+		      printf ("sqlite3_step() error: %s\n",
+			      sqlite3_errmsg (handle));
+		      sqlite3_finalize (stmt);
+		      goto abort;
+		  }
+
+	    }
+      }
+/* we have now to finalize the query [memory cleanup] */
+    sqlite3_finalize (stmt);
+
+
+
+/*
+committing the transaction
+
+*** this step is absolutely critical ***
+
+if we don't confirm the still pending transaction,
+any update will be lost
+*/
+    strcpy (sql, "COMMIT");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("COMMIT error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/*
+now we'll optimize the table
+*/
+    strcpy (sql, "ANALYZE test");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("ANALYZE error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - not using Spatial Index\n", ix);
+/* 
+now we'll perform the spatial query WITHOUT using the Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE MbrWithin(geom, BuildMbr(");
+	  strcat (sql, "1000400.5, 4000400.5, ");
+	  strcat (sql, "1000450.5, 4000450.5))");
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("NoSpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - using the R*Tree Spatial Index\n",
+		  ix);
+/* 
+now we'll perform the spatial query USING the R*Tree Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE MbrWithin(geom, BuildMbr(");
+	  strcat (sql, "1000400.5, 4000400.5, ");
+	  strcat (sql, "1000450.5, 4000450.5)) AND ROWID IN (");
+	  strcat (sql, "SELECT pkid FROM idx_test_geom WHERE ");
+	  strcat (sql, "xmin > 1000400.5 AND ");
+	  strcat (sql, "xmax < 1000450.5 AND ");
+	  strcat (sql, "ymin > 4000400.5 AND ");
+	  strcat (sql, "ymax < 4000450.5)");
+/*
+YES, this query is a very unhappy one
+the idea is simply to simulate exactly the same conditions as above
+*/
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("SpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+/* disconnecting the test DB */
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("close() error: %s\n", sqlite3_errmsg (handle));
+	  return -1;
+      }
+    printf ("\n\nsample successfully terminated\n");
+    return 0;
+
+  abort:
+    sqlite3_close (handle);
+    return -1;
+}
diff --git a/libspatialite/examples/demo4.c b/libspatialite/examples/demo4.c
new file mode 100644
index 0000000..2f341c2
--- /dev/null
+++ b/libspatialite/examples/demo4.c
@@ -0,0 +1,367 @@
+/* 
+
+demo4.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+int
+main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    sqlite3_stmt *stmt;
+    char sql[256];
+    char *err_msg = NULL;
+    double x;
+    double y;
+    int pk;
+    int ix;
+    int iy;
+    gaiaGeomCollPtr geo = NULL;
+    unsigned char *blob;
+    int blob_size;
+    int i;
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *count;
+    clock_t t0;
+    clock_t t1;
+
+
+    if (argc != 2)
+      {
+	  fprintf (stderr, "usage: %s test_db_path\n", argv[0]);
+	  return -1;
+      }
+
+
+/* 
+VERY IMPORTANT: 
+you must initialize the SpatiaLite extension [and related]
+BEFORE attempting to perform any other SQLite call 
+*/
+    spatialite_init (0);
+
+
+/* showing the SQLite version */
+    printf ("SQLite version: %s\n", sqlite3_libversion ());
+/* showing the SpatiaLite version */
+    printf ("SpatiaLite version: %s\n", spatialite_version ());
+    printf ("\n\n");
+
+
+
+/* 
+trying to connect the test DB: 
+- this demo is intended to create a new, empty database
+*/
+    ret = sqlite3_open_v2 (argv[1], &handle,
+			   SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", argv[1], sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+
+/* 
+we are supposing this one is an empty database,
+so we have to create the Spatial Metadata
+*/
+    strcpy (sql, "SELECT InitSpatialMetadata()");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  printf ("InitSpatialMetadata() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+now we can create the test table
+for simplicity we'll define only one column, the primary key
+*/
+    strcpy (sql, "CREATE TABLE test (");
+    strcat (sql, "PK INTEGER NOT NULL PRIMARY KEY)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CREATE TABLE 'test' error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+... we'll add a Geometry column of POINT type to the test table 
+*/
+    strcpy (sql, "SELECT AddGeometryColumn('test', 'geom', 3003, 'POINT', 2)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("AddGeometryColumn() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+and finally we'll enable this geo-column to have a Spatial Index based on MBR caching
+*/
+    strcpy (sql, "SELECT CreateMbrCache('test', 'geom')");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CreateMbrCache() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+    printf
+	("\nnow we are going to insert 1 million POINTs; wait, please ...\n\n");
+
+    t0 = clock ();
+/*
+beginning a transaction
+
+*** this step is absolutely critical ***
+
+the SQLite engine is a TRANSACTIONAL one
+the whole batch of INSERTs has to be performed as an unique transaction,
+otherwise performance will be surely very poor
+*/
+    strcpy (sql, "BEGIN");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("BEGIN error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/* 
+preparing to populate the test table
+we'll use a Prepared Statement we can reuse in order to insert each row
+*/
+    strcpy (sql, "INSERT INTO test (pk, geom) VALUES (?, ?)");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("INSERT SQL error: %s\n", sqlite3_errmsg (handle));
+	  goto abort;
+      }
+
+    pk = 0;
+    for (ix = 0; ix < 1000; ix++)
+      {
+	  x = 1000000.0 + (ix * 10.0);
+	  for (iy = 0; iy < 1000; iy++)
+	    {
+/* this double loop will insert 1 million rows into the the test table */
+
+		y = 4000000.0 + (iy * 10.0);
+		pk++;
+		if ((pk % 25000) == 0)
+		  {
+		      t1 = clock ();
+		      printf ("insert row: %d\t\t[elapsed time: %1.3f]\n",
+			      pk, (double) (t1 - t0) / CLOCKS_PER_SEC);
+		  }
+
+/* preparing the geometry to insert */
+		geo = gaiaAllocGeomColl ();
+		geo->Srid = 3003;
+		gaiaAddPointToGeomColl (geo, x, y);
+
+/* transforming this geometry into the SpatiaLite BLOB format */
+		gaiaToSpatiaLiteBlobWkb (geo, &blob, &blob_size);
+
+/* we can now destroy the geometry object */
+		gaiaFreeGeomColl (geo);
+
+/* resetting Prepared Statement and bindings */
+		sqlite3_reset (stmt);
+		sqlite3_clear_bindings (stmt);
+
+/* binding parameters to Prepared Statement */
+		sqlite3_bind_int64 (stmt, 1, pk);
+		sqlite3_bind_blob (stmt, 2, blob, blob_size, free);
+
+/* performing actual row insert */
+		ret = sqlite3_step (stmt);
+		if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+		    ;
+		else
+		  {
+/* an unexpected error occurred */
+		      printf ("sqlite3_step() error: %s\n",
+			      sqlite3_errmsg (handle));
+		      sqlite3_finalize (stmt);
+		      goto abort;
+		  }
+
+	    }
+      }
+/* we have now to finalize the query [memory cleanup] */
+    sqlite3_finalize (stmt);
+
+
+
+/*
+committing the transaction
+
+*** this step is absolutely critical ***
+
+if we don't confirm the still pending transaction,
+any update will be lost
+*/
+    strcpy (sql, "COMMIT");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("COMMIT error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/*
+now we'll optimize the table
+*/
+    strcpy (sql, "ANALYZE test");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("ANALYZE error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - not using Spatial Index\n", ix);
+/* 
+now we'll perform the spatial query WITHOUT using the Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE MbrWithin(geom, BuildMbr(");
+	  strcat (sql, "1000400.5, 4000400.5, ");
+	  strcat (sql, "1000450.5, 4000450.5))");
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("NoSpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - using the MBR cache Spatial Index\n",
+		  ix);
+/* 
+now we'll perform the spatial query USING the MBR cache Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE ROWID IN (");
+	  strcat (sql, "SELECT rowid FROM cache_test_geom WHERE ");
+	  strcat (sql,
+		  "mbr = FilterMbrWithin(1000400.5, 4000400.5, 1000450.5, 4000450.5))");
+
+/*
+YES, this query is a very unhappy one
+the idea is simply to simulate exactly the same conditions as above
+*/
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("SpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+/* disconnecting the test DB */
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("close() error: %s\n", sqlite3_errmsg (handle));
+	  return -1;
+      }
+    printf ("\n\nsample successfully terminated\n");
+    return 0;
+
+  abort:
+    sqlite3_close (handle);
+    return -1;
+}
diff --git a/libspatialite/examples/examples.doxy b/libspatialite/examples/examples.doxy
new file mode 100644
index 0000000..4ee1a33
--- /dev/null
+++ b/libspatialite/examples/examples.doxy
@@ -0,0 +1,421 @@
+/** \example demo1.c
+
+This is a sample C source showing how to use SQLite / SpatiaLite 
+from C. 
+
+This program shows the  basic functionality that will be required for most
+SpatiaLite programs:
+ - how to connect an SQLite+SpatiaLite database
+ - executing an SQL query 
+ - fetching values from a result set
+ - transforming BLOB-values into GEOMETRY
+ - elementary processing GEOMETRY 
+
+The typical output of this demo is shown below, when run against the sample
+database.
+\verbatim
+$ ./demo1 test-2.3.sqlite 
+SQLite version: 3.7.4
+SpatiaLite version: 3.0.0-beta1
+
+
+========= table 'HighWays' ========================
+row #1
+        PK_UID     = 1
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=8697.57
+row #2
+        PK_UID     = 2
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=39.79
+row #3
+        PK_UID     = 3
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=14610.39
+row #4
+        PK_UID     = 4
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=878.01
+row #5
+        PK_UID     = 5
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=10.05
+
+
+========= table 'Regions' ========================
+row #1
+        PK_UID     = 1
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=646397.81
+row #2
+        PK_UID     = 2
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=1290337.69
+row #3
+        PK_UID     = 3
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=8784619.92
+row #4
+        PK_UID     = 4
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=530524.68
+row #5
+        PK_UID     = 5
+        Name       = 'LIGURIA'
+        Geometry   = MULTIPOLYGON SRID=32632 area=5450277374.12
+
+
+========= table 'Towns' ========================
+row #1
+        PK_UID     = 1
+        Name       = 'Brozolo'
+        Peoples    = 435
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #2
+        PK_UID     = 2
+        Name       = 'Campiglione-Fenile'
+        Peoples    = 1284
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #3
+        PK_UID     = 3
+        Name       = 'Canischio'
+        Peoples    = 274
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #4
+        PK_UID     = 4
+        Name       = 'Cavagnolo'
+        Peoples    = 2281
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #5
+        PK_UID     = 5
+        Name       = 'Magliano Alfieri'
+        Peoples    = 1674
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+
+
+
+
+sample successfully terminated
+\endverbatim
+
+*/
+
+/** \example demo2.c
+
+This is a sample C source showing how to manipulate GEOMETRY within
+Spatialite. It essentially follows on from the functionality shown in the
+demo1.c example, and covers:
+ - creating geometries
+ - exploring geometries
+ - querying the basic properties of a geometry
+ 
+ Note that this does not require a database command line argument. Here is a
+ typical run:
+\verbatim
+$ ./demo2 
+step#1: POINT           Dimension=0 IsValid=1
+                        POINT 0/1 x=1.5000 y=2.7500
+
+step#2: LINESTRING      Dimension=1 IsValid=1
+                        LINESTRING 0/1 has 5 vertices
+                                vertex 0/5 x=1.0000 y=1.0000
+                                vertex 1/5 x=2.0000 y=1.0000
+                                vertex 2/5 x=2.0000 y=2.0000
+                                vertex 3/5 x=100.0000 y=2.0000
+                                vertex 4/5 x=100.0000 y=100.0000
+
+step#3: POLYGON Dimension=2 IsValid=1
+                        POLYGON 0/1 has 2 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=0.0000 y=0.0000
+                                        vertex 1/5 x=50.0000 y=0.0000
+                                        vertex 2/5 x=50.0000 y=50.0000
+                                        vertex 3/5 x=0.0000 y=50.0000
+                                        vertex 4/5 x=0.0000 y=0.0000
+                                InteriorRing 0/2 has 5 vertices
+                                        vertex 0/5 x=40.0000 y=40.0000
+                                        vertex 1/5 x=41.0000 y=40.0000
+                                        vertex 2/5 x=41.0000 y=41.0000
+                                        vertex 3/5 x=40.0000 y=41.0000
+                                        vertex 4/5 x=40.0000 y=40.0000
+                                InteriorRing 1/2 has 5 vertices
+                                        vertex 0/5 x=30.0000 y=30.0000
+                                        vertex 1/5 x=31.0000 y=30.0000
+                                        vertex 2/5 x=31.0000 y=31.0000
+                                        vertex 3/5 x=30.0000 y=31.0000
+                                        vertex 4/5 x=30.0000 y=30.0000
+
+step#4: MULTIPOINT      Dimension=0 IsValid=1
+                        POINT 0/5 x=5.0000 y=5.0000
+                        POINT 1/5 x=15.0000 y=5.0000
+                        POINT 2/5 x=5.0000 y=15.0000
+                        POINT 3/5 x=25.0000 y=5.0000
+                        POINT 4/5 x=5.0000 y=25.0000
+
+step#5: MULTILINESTRING Dimension=1 IsValid=1
+                        LINESTRING 0/2 has 2 vertices
+                                vertex 0/2 x=30.0000 y=10.0000
+                                vertex 1/2 x=10.0000 y=30.0000
+                        LINESTRING 1/2 has 2 vertices
+                                vertex 0/2 x=40.0000 y=50.0000
+                                vertex 1/2 x=50.0000 y=40.0000
+
+step#6: MULTIPOLYGON    Dimension=2 IsValid=1
+                        POLYGON 0/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=60.0000 y=60.0000
+                                        vertex 1/5 x=70.0000 y=60.0000
+                                        vertex 2/5 x=70.0000 y=70.0000
+                                        vertex 3/5 x=60.0000 y=70.0000
+                                        vertex 4/5 x=60.0000 y=60.0000
+                        POLYGON 1/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=80.0000 y=80.0000
+                                        vertex 1/5 x=90.0000 y=80.0000
+                                        vertex 2/5 x=90.0000 y=90.0000
+                                        vertex 3/5 x=80.0000 y=90.0000
+                                        vertex 4/5 x=80.0000 y=80.0000
+
+step#7: GEOMETRYCOLLECTION      Dimension=2 IsValid=1
+                        POINT 0/2 x=100.0000 y=100.0000
+                        POINT 1/2 x=100.0000 y=0.0000
+                        LINESTRING 0/2 has 2 vertices
+                                vertex 0/2 x=130.0000 y=110.0000
+                                vertex 1/2 x=110.0000 y=130.0000
+                        LINESTRING 1/2 has 2 vertices
+                                vertex 0/2 x=140.0000 y=150.0000
+                                vertex 1/2 x=150.0000 y=140.0000
+                        POLYGON 0/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=160.0000 y=160.0000
+                                        vertex 1/5 x=170.0000 y=160.0000
+                                        vertex 2/5 x=170.0000 y=170.0000
+                                        vertex 3/5 x=160.0000 y=170.0000
+                                        vertex 4/5 x=160.0000 y=160.0000
+                        POLYGON 1/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=180.0000 y=180.0000
+                                        vertex 1/5 x=190.0000 y=180.0000
+                                        vertex 2/5 x=190.0000 y=190.0000
+                                        vertex 3/5 x=180.0000 y=190.0000
+                                        vertex 4/5 x=180.0000 y=180.0000
+
+step#8: checking WKT representations
+
+GEOMETRYCOLLECTION(POINT(1.5 2.75))
+
+GEOMETRYCOLLECTION(LINESTRING(1 1, 2 1, 2 2, 100 2, 100 100))
+
+GEOMETRYCOLLECTION(POLYGON((0 0, 50 0, 50 50, 0 50, 0 0), (40 40, 41 40, 41 41, 40 41, 40 40), (30 30, 31 30, 31 31, 30 31, 30 30)))
+
+GEOMETRYCOLLECTION(POINT(5 5), POINT(15 5), POINT(5 15), POINT(25 5), POINT(5 25))
+
+GEOMETRYCOLLECTION(LINESTRING(30 10, 10 30), LINESTRING(40 50, 50 40))
+
+GEOMETRYCOLLECTION(POLYGON((60 60, 70 60, 70 70, 60 70, 60 60)), POLYGON((80 80, 90 80, 90 90, 80 90, 80 80)))
+
+GEOMETRYCOLLECTION(POINT(100 100), POINT(100 0), LINESTRING(130 110, 110 130), LINESTRING(140 150, 150 140), POLYGON((160 160, 170 160, 170 170, 160 170, 160 160)), POLYGON((180 180, 190 180, 190 190, 180 190, 180 180)))
+\endverbatim
+*/
+
+/** \example demo3.c
+
+This is a sample C source showing how to use the SQLite / SpatiaLite 
+Spatial Index [RTree].
+
+It follows on from demo1.c.
+
+The main steps in this example are:
+ - creating a new database
+ - creating a sample geo-table 
+ - inserting 1 million rows into this table
+ - performing some spatial queries without Spatial Indexing
+ - performing the same queries using the Spatial Index
+
+The typical output of this demo is shown below (where test.sqlite does not
+exist before the run).
+
+\verbatim
+$ ./demo3 test.sqlite
+SQLite version: 3.7.4
+SpatiaLite version: 3.0.0-beta1
+
+
+
+now we are going to insert 1 million POINTs; wait, please ...
+
+insert row: 25000               [elapsed time: 1.910]
+insert row: 50000               [elapsed time: 4.050]
+insert row: 75000               [elapsed time: 6.270]
+insert row: 100000              [elapsed time: 8.460]
+insert row: 125000              [elapsed time: 10.740]
+insert row: 150000              [elapsed time: 12.910]
+insert row: 175000              [elapsed time: 15.080]
+insert row: 200000              [elapsed time: 17.350]
+insert row: 225000              [elapsed time: 19.610]
+insert row: 250000              [elapsed time: 21.890]
+insert row: 275000              [elapsed time: 24.170]
+insert row: 300000              [elapsed time: 26.380]
+insert row: 325000              [elapsed time: 28.650]
+insert row: 350000              [elapsed time: 30.900]
+insert row: 375000              [elapsed time: 33.130]
+insert row: 400000              [elapsed time: 35.340]
+insert row: 425000              [elapsed time: 37.540]
+insert row: 450000              [elapsed time: 39.760]
+insert row: 475000              [elapsed time: 41.980]
+insert row: 500000              [elapsed time: 44.220]
+insert row: 525000              [elapsed time: 46.500]
+insert row: 550000              [elapsed time: 48.740]
+insert row: 575000              [elapsed time: 50.960]
+insert row: 600000              [elapsed time: 53.190]
+insert row: 625000              [elapsed time: 55.430]
+insert row: 650000              [elapsed time: 57.670]
+insert row: 675000              [elapsed time: 59.900]
+insert row: 700000              [elapsed time: 62.130]
+insert row: 725000              [elapsed time: 64.400]
+insert row: 750000              [elapsed time: 66.660]
+insert row: 775000              [elapsed time: 68.900]
+insert row: 800000              [elapsed time: 71.140]
+insert row: 825000              [elapsed time: 73.410]
+insert row: 850000              [elapsed time: 75.670]
+insert row: 875000              [elapsed time: 77.940]
+insert row: 900000              [elapsed time: 80.230]
+insert row: 925000              [elapsed time: 82.540]
+insert row: 950000              [elapsed time: 84.840]
+insert row: 975000              [elapsed time: 87.150]
+insert row: 1000000             [elapsed time: 89.450]
+
+performing test#0 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2700]
+
+performing test#1 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2700]
+
+performing test#2 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2900]
+
+performing test#0 - using the R*Tree Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#1 - using the R*Tree Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#2 - using the R*Tree Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+
+sample successfully terminated
+\endverbatim
+
+Note the significant difference in elapsed time associated with use of an 
+appropriate index.
+
+*/
+
+/** \example demo4.c
+
+This is a sample C source showing how to use the SQLite / SpatiaLite 
+Spatial Index [MbrCache].
+
+It is very similar to demo3.c, but uses a different indexing approach
+
+The main steps in this example are:
+ - creating a new database
+ - creating a sample geo-table 
+ - inserting 1 million rows into this table
+ - performing some spatial queries without Spatial Indexing
+ - performing the same queries using the Spatial Index
+
+The typical output of this demo is shown below (where test.sqlite does not
+exist before the run).
+
+\verbatim
+$ ./demo4 test.sqlite
+SQLite version: 3.7.4
+SpatiaLite version: 3.0.0-beta1
+
+
+
+now we are going to insert 1 million POINTs; wait, please ...
+
+insert row: 25000               [elapsed time: 0.370]
+insert row: 50000               [elapsed time: 0.820]
+insert row: 75000               [elapsed time: 1.280]
+insert row: 100000              [elapsed time: 1.750]
+insert row: 125000              [elapsed time: 2.210]
+insert row: 150000              [elapsed time: 2.690]
+insert row: 175000              [elapsed time: 3.180]
+insert row: 200000              [elapsed time: 3.670]
+insert row: 225000              [elapsed time: 4.210]
+insert row: 250000              [elapsed time: 4.720]
+insert row: 275000              [elapsed time: 5.240]
+insert row: 300000              [elapsed time: 5.780]
+insert row: 325000              [elapsed time: 6.330]
+insert row: 350000              [elapsed time: 6.910]
+insert row: 375000              [elapsed time: 7.510]
+insert row: 400000              [elapsed time: 8.120]
+insert row: 425000              [elapsed time: 8.750]
+insert row: 450000              [elapsed time: 9.420]
+insert row: 475000              [elapsed time: 10.120]
+insert row: 500000              [elapsed time: 10.850]
+insert row: 525000              [elapsed time: 11.610]
+insert row: 550000              [elapsed time: 12.390]
+insert row: 575000              [elapsed time: 13.200]
+insert row: 600000              [elapsed time: 14.040]
+insert row: 625000              [elapsed time: 14.900]
+insert row: 650000              [elapsed time: 15.790]
+insert row: 675000              [elapsed time: 16.700]
+insert row: 700000              [elapsed time: 17.650]
+insert row: 725000              [elapsed time: 18.620]
+insert row: 750000              [elapsed time: 19.610]
+insert row: 775000              [elapsed time: 20.650]
+insert row: 800000              [elapsed time: 21.700]
+insert row: 825000              [elapsed time: 22.760]
+insert row: 850000              [elapsed time: 23.860]
+insert row: 875000              [elapsed time: 25.060]
+insert row: 900000              [elapsed time: 26.290]
+insert row: 925000              [elapsed time: 27.480]
+insert row: 950000              [elapsed time: 28.760]
+insert row: 975000              [elapsed time: 30.020]
+insert row: 1000000             [elapsed time: 31.280]
+
+performing test#0 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2500]
+
+performing test#1 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2400]
+
+performing test#2 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2400]
+
+performing test#0 - using the MBR cache Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#1 - using the MBR cache Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#2 - using the MBR cache Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+
+sample successfully terminated
+\endverbatim
+
+As for demo3.c, note the significant speed difference between the indexed
+and non-indexed queries.
+*/
diff --git a/libspatialite/libspatialite-3.0.1/AUTHORS b/libspatialite/libspatialite-3.0.1/AUTHORS
new file mode 100644
index 0000000..f963eb0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/AUTHORS
@@ -0,0 +1,12 @@
+Original Author:
+Alessandro Furieri <a.furieri at lqt.it>
+
+Contributors:
+Klaus Foerster <klaus.foerster at svg.cc>
+Luigi Costalli <luigi.costalli at gmail.com>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+Brad Hards <bradh at frogmouth.net>
+
+The Vanuatu Team - University of Toronto - Supervisor:
+Greg Wilson <gvwilson at cs.toronto.ca>
+[you can find the complete team composition in gg_wkt.c]
diff --git a/libspatialite/COPYING b/libspatialite/libspatialite-3.0.1/COPYING
similarity index 100%
copy from libspatialite/COPYING
copy to libspatialite/libspatialite-3.0.1/COPYING
diff --git a/libspatialite/libspatialite-3.0.1/Doxyfile.in b/libspatialite/libspatialite-3.0.1/Doxyfile.in
new file mode 100644
index 0000000..4e9fc64
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/Doxyfile.in
@@ -0,0 +1,1691 @@
+# Doxyfile 1.7.3
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# 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.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = SpatiaLite
+
+# 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         = @VERSION@
+
+# 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 an logo or 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)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# 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 comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+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 behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+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.
+
+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, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. 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 that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip 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.
+
+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 (the default)
+# will make doxygen 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.
+
+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.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT 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.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_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 and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+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.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If 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 namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = 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.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the 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.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = 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 default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to 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 default)
+# the group names will appear in their defined order.
+
+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 default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = 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.
+
+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.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# 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 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 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. See the manual for examples.
+
+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. The 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.
+
+LAYOUT_FILE            =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The 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 (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = src/headers/spatialite.h \
+			src/headers/spatialite/gaiaaux.h \
+			src/headers/spatialite/gaiaexif.h \
+			src/headers/spatialite/gaiageo.h \
+			src/headers/spatialite/gg_const.h \
+			src/headers/spatialite/gg_structs.h \
+			src/headers/spatialite/gg_core.h \
+			src/headers/spatialite/gg_mbr.h \
+			src/headers/spatialite/gg_formats.h \
+			src/headers/spatialite/gg_dynamic.h \
+			src/headers/spatialite/gg_advanced.h \
+			examples/examples.doxy \
+			mainpage.doxy
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. 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.
+
+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 pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+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
+
+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           = examples
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# 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 option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+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.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# 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.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet 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.
+# The allowed range is 0 to 359.
+
+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.
+
+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.
+
+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 NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the 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. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# 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, 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.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# 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.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, 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.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_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.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# 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.
+
+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.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+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
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, 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.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, 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.
+
+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.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [0,1..20])
+# 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.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# 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.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When 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.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# 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.
+
+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 before the changes have effect.
+
+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 prerendered 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 also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# 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.org site, so you can quickly see the result without installing
+# MathJax, but it is strongly recommended to install a local copy of MathJax
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# 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.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = 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. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# 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.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = 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.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE 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.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = 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.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS
+
+# 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.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) 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, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+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            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) 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.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will write a font called Helvetica to the output
+# directory and reference it in all dot files that doxygen generates.
+# When you want a differently looking font 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.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are 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.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, svg, gif or svg.
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# 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 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.
+
+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.
+
+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).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/libspatialite/INSTALL b/libspatialite/libspatialite-3.0.1/INSTALL
similarity index 100%
copy from libspatialite/INSTALL
copy to libspatialite/libspatialite-3.0.1/INSTALL
diff --git a/libspatialite/libspatialite-3.0.1/Makefile.am b/libspatialite/libspatialite-3.0.1/Makefile.am
new file mode 100644
index 0000000..16ba1c5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/Makefile.am
@@ -0,0 +1,19 @@
+ACLOCAL_AMFLAGS = -I m4
+
+AUTOMAKE_OPTIONS = dist-zip
+
+EXTRA_DIST = makefile.vc nmake.opt mainpage.doxy README.coverage
+
+SUBDIRS = src test examples
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = spatialite.pc
+
+coverage-init:
+	lcov --directory src --capture --initial --output-file libspatialite_cov.info
+
+coverage::
+	lcov --directory src --output-file libspatialite_cov.info --capture
+	genhtml -o covresults libspatialite_cov.info
+
+MOSTLYCLEANFILES = libspatialite_cov.info
diff --git a/libspatialite/libspatialite-3.0.1/Makefile.in b/libspatialite/libspatialite-3.0.1/Makefile.in
new file mode 100644
index 0000000..266f459
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/Makefile.in
@@ -0,0 +1,779 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Doxyfile.in \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/spatialite.pc.in $(top_srcdir)/configure AUTHORS \
+	COPYING INSTALL config.guess config.sub depcomp install-sh \
+	ltmain.sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = Doxyfile spatialite.pc
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+DATA = $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I m4
+AUTOMAKE_OPTIONS = dist-zip
+EXTRA_DIST = makefile.vc nmake.opt mainpage.doxy README.coverage
+SUBDIRS = src test examples
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = spatialite.pc
+MOSTLYCLEANFILES = libspatialite_cov.info
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+spatialite.pc: $(top_builddir)/config.status $(srcdir)/spatialite.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@$(am__cd) '$(distuninstallcheck_dir)' \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pkgconfigDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-generic \
+	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+	dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+	distcheck distclean distclean-generic distclean-libtool \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am \
+	uninstall-pkgconfigDATA
+
+
+coverage-init:
+	lcov --directory src --capture --initial --output-file libspatialite_cov.info
+
+coverage::
+	lcov --directory src --output-file libspatialite_cov.info --capture
+	genhtml -o covresults libspatialite_cov.info
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/README b/libspatialite/libspatialite-3.0.1/README
new file mode 100644
index 0000000..9586b20
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/README
@@ -0,0 +1,173 @@
+  --------------------- libspatialite ------------------------
+
+PLEASE read the following information.
+
+1 - Installation
+2 - Required dependencies
+3 - Build notes
+  3.1: Building on Linux
+  3.2: Building on Mac OS X
+  3.3: Building on Windows
+    3.3.1: using MinGW / MSYS
+    3.3.2: using Visual Studio .NET
+  
+=====================================================================
+
+1. Installation:
+=================
+
+The default destination path prefix for installed files is /usr/local.
+Results from the installation script will be placed into subdirectories
+include and lib.  If this default path prefix is appropriate, then execute:
+
+    ./configure
+
+If another path prefix is required, then execute:
+
+    ./configure --prefix=/my/path
+
+In either case, the directory of the prefix path must exist and be
+writable by the installer.
+
+After executing configure, execute:
+
+    make
+    make install
+
+Or even better, you can *strip* any executable binary, in order
+to eliminate any debugging symbol, and thus widely reducing
+their size:
+
+    make install-strip
+
+2. Required dependencies:
+=========================
+    
+The main external dependencies needed in order to build 'libspatialite' 
+are:
+ - SQLite 3 (http://www.sqlite.org)
+    This is a hard dependency - you can't build libspatialite without it. SQLite
+    version 3.7.3 or later is strongly preferred - if you have an earlier
+    version then you will need to pass --enable-geocallbacks=no to the
+    ./configure script.
+    
+ - PROJ.4 (http://trac.osgeo.org/proj/)
+    This is strongly recommended, unless you have a particular purpose in mind
+    for your libspatialite build, and know that you won't need it. It is usually
+    available as a package, and libspatialite is pretty flexible about versions.
+
+ - GEOS (http://trac.osgeo.org/geos/)
+    This is strongly recommended, unless you have a particular purpose in mind
+    for your libspatialite build, and know that you won't need it. It is usually
+    available as a package, but libspatialite will have more capability if you
+    use version 3.3.0 or later so make sure that the package is recent enough.
+    Use --enable-geosadvanced=no argument to the ./configure script if you want
+    to use an earlier version of GEOS.
+
+ - FreeXL (http://www.gaia-gis.it/FreeXL/)
+    This is recommended if you want to be able to import data from Microsoft
+    Excel format (.xls suffix) files. If you do not wish to use it, you will
+    need to pass --enable-freexl=no to the ./configure script. Version 0.0.4
+    or later is required.
+
+Note that you need development code (e.g. -dev packages on Debian Linux and 
+derivatives such as Ubuntu, or -devel packages on most other Linux
+distributions).
+
+
+ICONV [Windows]
+---------------
+When building on Windows, then you also need to provide iconv to ensure that
+appropriate character set conversions are available. This dependency is not 
+usually an issue when building on Linux or Mac OS X, because these systems 
+provide iconv as a standard component.
+
+For Windows the preferred solution is to download and install the pre-built 
+iconv binaries and related files from:
+http://gnuwin32.sourceforge.net/packages/libiconv.htm
+
+3 - Build notes
+===============
+
+3.1: Building on Linux and similar systems
+------------------------------------------
+
+Building libspatialite on Linux and similar systems such as BSD or other Unix
+variants does not require any special settings. If you have unpacked the sources
+as ./libspatialite-3.0.0, then the required steps are:
+
+# cd libspatialite-3.0.0
+# ./configure
+# make
+# sudo make install
+#     or (in order to save some disk space)
+# sudo make install-strip
+
+3.2: Building on Mac OS X
+-------------------------
+
+Building 'libspatialite' on Mac OS X very similar to Linux. You simply have to
+set explicitly some environment variables. If you have unpacked the sources as 
+./libspatialite-3.0.0, then the required steps are:
+
+# cd libspatialite-3.0.0
+# export "CFLAGS=-I/opt/local/include"
+# export "LDFLAGS=-I/opt/local/lib"
+# ./configure 
+# make
+# sudo make install
+#     or (in order to save some disk space)
+# sudo make install-strip
+
+IMPORTANT NOTICE: this will build an executable for your specific platform.
+That is, when building on a PPC Mac, the resulting binary will be be for PPC.
+Similarly, when building on Intel Mac, resulting binary will be for  Intel.
+
+3.3: Building on Windows
+------------------------
+
+On Windows systems you can choose using two different compilers:
+- MinGW / MSYS
+  This represents a smart porting of a minimalistic Linux-like
+  development toolkit
+- Microsoft Visual Studio .NET
+  This is the standard platform development toolkit from Microsoft.
+
+3.3.1: using MinGW / MSYS
+-------------------------
+
+We assume that you have already installed the MinGW compiler and the MSYS shell.
+Building 'libspatialite' under Windows is then more or less like building
+on any other UNIX-like system. If you have unpacked the sources as 
+C:\libspatialite-3.0.0, then the required steps are:
+
+$ cd c:/libspatialite-3.0.0
+$ export "CFLAGS=-I/usr/local/include"
+$ export "LDFLAGS=-L/usr/local/lib"
+$ ./configure --target=mingw32
+$ make
+$ make install-strip
+$     or (in order to save some disk space)
+$ make install-strip
+
+
+3.3.2: using Microsoft Visual Studio .NET
+-----------------------------------------
+
+We assume that you have already installed Visual Studio enabling the command
+line tools. Note that you are expected to the Visual Studio command prompt shell
+rather than the GUI build environment. If you have unpacked the sources as 
+C:\libspatialite-3.0.0, then the required steps are:
+
+> cd c:\libspatialite-3.0.0
+> nmake /f makefile.vc
+> nmake /f makefile.vc install
+
+Please note: standard definitions in 'makefile.vc' assumes:
+- enabling PROJ
+- disabling GEOS
+
+If you want to alter the default behaviour then make modifications in 
+'makefile.vc'. Also note that 'libspatialite-geos.def' contains those external
+symbols to be exported from the DLL when you build GEOS.
+
diff --git a/libspatialite/libspatialite-3.0.1/README.coverage b/libspatialite/libspatialite-3.0.1/README.coverage
new file mode 100644
index 0000000..83a8ebb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/README.coverage
@@ -0,0 +1,12 @@
+Coverage testing
+----------------
+You need to have gcov and lcov installed.
+
+Process:
+1. Use --enable-gcov=yes with configure script
+2. Clean and rebuild.
+3. make coverage-init
+4. make check (or whatever other tests you want to check coverage for)
+5. make coverage
+6. check summary on command line output.
+7. review detailed coverage results in covresults/index.html
diff --git a/libspatialite/libspatialite-3.0.1/aclocal.m4 b/libspatialite/libspatialite-3.0.1/aclocal.m4
new file mode 100644
index 0000000..8cf6fb3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/aclocal.m4
@@ -0,0 +1,9422 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_REPLACE_SHELLFNS
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS="$save_LDFLAGS"
+    ])
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
+
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t at _DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*) ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX([$1])
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX([$1])
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX([$1])
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+	 case ${prev} in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
+
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
+
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
+
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
+
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3293 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4])
+m4_define([LT_PACKAGE_REVISION], [1.3293])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4'
+macro_revision='1.3293'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      [USE_MAINTAINER_MODE=$enableval],
+      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/libspatialite/libspatialite-3.0.1/config.guess b/libspatialite/libspatialite-3.0.1/config.guess
new file mode 100755
index 0000000..dc84c68
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/config.guess
@@ -0,0 +1,1501 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep -q __ELF__
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH="i386"
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH="x86_64"
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[456])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep -q __LP64__
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    *:Interix*:*)
+    	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=${UNAME_MACHINE}el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=${UNAME_MACHINE}
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-gnu
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/libspatialite/libspatialite-3.0.1/config.sub b/libspatialite/libspatialite-3.0.1/config.sub
new file mode 100755
index 0000000..2a55a50
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/config.sub
@@ -0,0 +1,1705 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray | -microblaze)
+		os=
+		basic_machine=$1
+		;;
+        -bluegene*)
+	        os=-cnk
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep | metag \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64octeon | mips64octeonel \
+	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| moxie \
+	| mt \
+	| msp430 \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k | z80)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64octeon-* | mips64octeonel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+	| tron-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-* | z80-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+        cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16)
+		basic_machine=cr16-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+        microblaze)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tile*)
+		basic_machine=tile-unknown
+		os=-linux-gnu
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+        -auroraux)
+	        os=-auroraux
+		;;
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* | -aros* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-dicos*)
+		os=-dicos
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+        mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-cnk*|-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/libspatialite/libspatialite-3.0.1/configure b/libspatialite/libspatialite-3.0.1/configure
new file mode 100755
index 0000000..256273d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/configure
@@ -0,0 +1,20243 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for libspatialite 3.0.1.
+#
+# Report bugs to <a.furieri at lqt.it>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf at gnu.org and a.furieri at lqt.it
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='libspatialite'
+PACKAGE_TARNAME='libspatialite'
+PACKAGE_VERSION='3.0.1'
+PACKAGE_STRING='libspatialite 3.0.1'
+PACKAGE_BUGREPORT='a.furieri at lqt.it'
+PACKAGE_URL=''
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+MACOSX_FALSE
+MACOSX_TRUE
+MINGW_FALSE
+MINGW_TRUE
+OMIT_EPSG_FLAGS
+OMIT_FREEXL_FLAGS
+OMIT_ICONV_FLAGS
+OMIT_GEOS_FLAGS
+GEOSADVANCED_FLAGS
+OMIT_PROJ_FLAGS
+OMIT_GEOCALLBACKS_FLAGS
+OMIT_MATHSQL_FLAGS
+LIBOBJS
+CXXCPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LN_S
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_mathsql
+enable_geocallbacks
+enable_proj
+enable_geos
+enable_geosadvanced
+enable_iconv
+enable_freexl
+enable_epsg
+enable_gcov
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CXX
+CXXFLAGS
+CCC
+CXXCPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures libspatialite 3.0.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/libspatialite]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of libspatialite 3.0.1:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-mathsql        enables SQL math functions [default=yes]
+  --enable-geocallbacks   enables geometry callbacks [default=yes]
+  --enable-proj           enables PROJ.4 inclusion [default=yes]
+  --enable-geos           enables GEOS inclusion [default=yes]
+  --enable-geosadvanced   enables GEOS advanced features [default=yes]
+  --enable-iconv          enables ICONV inclusion [default=yes]
+  --enable-freexl         enables FreeXL inclusion [default=yes]
+  --enable-epsg           enables full EPSG dataset support [default=yes]
+  --enable-gcov           turn on code coverage analysis tools
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <a.furieri at lqt.it>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+libspatialite configure 3.0.1
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------- ##
+## Report this to a.furieri at lqt.it ##
+## ------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by libspatialite $as_me 3.0.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='libspatialite'
+ VERSION='3.0.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# Checks for header files.
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in stdlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDLIB_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find stdlib.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in stdio.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdio_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDIO_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find stdio.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in string.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRING_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find string.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in memory.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "memory.h" "ac_cv_header_memory_h" "$ac_includes_default"
+if test "x$ac_cv_header_memory_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MEMORY_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find memory.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in math.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default"
+if test "x$ac_cv_header_math_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MATH_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find math.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in float.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
+if test "x$ac_cv_header_float_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_FLOAT_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find float.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in fcntl.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_FCNTL_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find fcntl.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in inttypes.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find inttypes.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in stddef.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
+if test "x$ac_cv_header_stddef_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDDEF_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find stddef.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in stdint.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find stdint.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in sys/time.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_TIME_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find sys/time.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in unistd.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_UNISTD_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find unistd.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in sqlite3.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default"
+if test "x$ac_cv_header_sqlite3_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SQLITE3_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find sqlite3.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+for ac_header in sqlite3ext.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sqlite3ext.h" "ac_cv_header_sqlite3ext_h" "$ac_includes_default"
+if test "x$ac_cv_header_sqlite3ext_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SQLITE3EXT_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find sqlite3ext.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+
+
+# Checks for programs.
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AS"; then
+  ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AS="${ac_tool_prefix}as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+  ac_ct_AS=$AS
+  # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AS"; then
+  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AS="as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AS" = x; then
+    AS="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AS=$ac_ct_AS
+  fi
+else
+  AS="$ac_cv_prog_AS"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+  ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4'
+macro_revision='1.3293'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[012]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+
+
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec=
+	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld='+b $libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    hardcode_direct_CXX=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    hardcode_minus_L_CXX=yes
+	    hardcode_libdir_flag_spec_CXX='-L$libdir'
+	    hardcode_libdir_separator_CXX=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	    allow_undefined_flag_CXX="-z nodefs"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    no_undefined_flag_CXX=' ${wl}-bernotok'
+	    allow_undefined_flag_CXX=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
+	    archive_cmds_need_lc_CXX=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  allow_undefined_flag_CXX=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX=' '
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=yes
+	  file_list_spec_CXX='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+	  enable_shared_with_static_runtimes_CXX=yes
+	  # Don't use ranlib
+	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
+	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=no
+	  enable_shared_with_static_runtimes_CXX=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    ld_shlibs_CXX=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[12]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+	hardcode_direct_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    link_all_deplibs_CXX=yes
+	    ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    archive_cmds_need_lc_CXX=no
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+	      prelink_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      old_archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      no_undefined_flag_CXX=' -zdefs'
+	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      compiler_needs_object_CXX=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  hardcode_libdir_flag_spec_CXX='-R$libdir'
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	ld_shlibs_CXX=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	  hardcode_direct_absolute_CXX=yes
+	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='${wl}-E'
+	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        allow_undefined_flag_CXX=' -expect_unresolved \*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+		;;
+	    esac
+
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	      hardcode_libdir_separator_CXX=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+	    no_undefined_flag_CXX=' -zdefs'
+	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    hardcode_libdir_flag_spec_CXX='-R$libdir'
+	    hardcode_shlibpath_var_CXX=no
+	    case $host_os in
+	      solaris2.[0-5] | solaris2.[0-5].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    link_all_deplibs_CXX=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[0-5] | solaris2.[0-5].*) ;;
+		*)
+		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	no_undefined_flag_CXX='${wl}-z,text'
+	allow_undefined_flag_CXX='${wl}-z,nodefs'
+	archive_cmds_need_lc_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+	hardcode_libdir_separator_CXX=':'
+	link_all_deplibs_CXX=yes
+	export_dynamic_flag_spec_CXX='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+	      '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+	      '"$reload_cmds_CXX"
+	    ;;
+	  *)
+	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+	 case ${prev} in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-qpic'
+	    lt_prog_compiler_static_CXX='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      lt_prog_compiler_pic_CXX='-KPIC'
+	      lt_prog_compiler_static_CXX='-Bstatic'
+	      lt_prog_compiler_wl_CXX='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*) ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if ${ac_cv_header_time+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_time=yes
+else
+  ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+				     int *p = &tm.tm_sec;
+				     return !p;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm=time.h
+else
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
+$as_echo_n "checking for working volatile... " >&6; }
+if ${ac_cv_c_volatile+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+volatile int x;
+int * volatile y = (int *) 0;
+return !x && !y;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_volatile=yes
+else
+  ac_cv_c_volatile=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5
+$as_echo "$ac_cv_c_volatile" >&6; }
+if test $ac_cv_c_volatile = no; then
+
+$as_echo "#define volatile /**/" >>confdefs.h
+
+fi
+
+
+# Checks for library functions.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
+if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+     /* Linux will dereference the symlink and fail, as required by POSIX.
+	That is better in the sense that it means we will not
+	have to compile and use the lstat wrapper.  */
+     return lstat ("conftest.sym/", &sbuf) == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_lstat_dereferences_slashed_symlink=yes
+else
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+else
+  # If the `ln -s' command failed, then we probably don't even
+  # have an lstat function.
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+
+cat >>confdefs.h <<_ACEOF
+#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
+_ACEOF
+
+
+if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
+  case " $LIBOBJS " in
+  *" lstat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5
+$as_echo_n "checking whether lstat accepts an empty string... " >&6; }
+if ${ac_cv_func_lstat_empty_string_bug+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_lstat_empty_string_bug=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+  return lstat ("", &sbuf) == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_lstat_empty_string_bug=no
+else
+  ac_cv_func_lstat_empty_string_bug=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_empty_string_bug" >&5
+$as_echo "$ac_cv_func_lstat_empty_string_bug" >&6; }
+if test $ac_cv_func_lstat_empty_string_bug = yes; then
+  case " $LIBOBJS " in
+  *" lstat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
+ ;;
+esac
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LSTAT_EMPTY_STRING_BUG 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
+if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+     /* Linux will dereference the symlink and fail, as required by POSIX.
+	That is better in the sense that it means we will not
+	have to compile and use the lstat wrapper.  */
+     return lstat ("conftest.sym/", &sbuf) == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_lstat_dereferences_slashed_symlink=yes
+else
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+else
+  # If the `ln -s' command failed, then we probably don't even
+  # have an lstat function.
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+
+cat >>confdefs.h <<_ACEOF
+#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
+_ACEOF
+
+
+if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
+  case " $LIBOBJS " in
+  *" lstat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
+$as_echo_n "checking for working memcmp... " >&6; }
+if ${ac_cv_func_memcmp_working+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_memcmp_working=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+  /* Some versions of memcmp are not 8-bit clean.  */
+  char c0 = '\100', c1 = '\200', c2 = '\201';
+  if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
+    return 1;
+
+  /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
+     or more and with at least one buffer not starting on a 4-byte boundary.
+     William Lewis provided this test program.   */
+  {
+    char foo[21];
+    char bar[21];
+    int i;
+    for (i = 0; i < 4; i++)
+      {
+	char *a = foo + i;
+	char *b = bar + i;
+	strcpy (a, "--------01111111");
+	strcpy (b, "--------10000000");
+	if (memcmp (a, b, 16) >= 0)
+	  return 1;
+      }
+    return 0;
+  }
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_memcmp_working=yes
+else
+  ac_cv_func_memcmp_working=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
+$as_echo "$ac_cv_func_memcmp_working" >&6; }
+test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
+  *" memcmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS memcmp.$ac_objext"
+ ;;
+esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
+$as_echo_n "checking whether stat accepts an empty string... " >&6; }
+if ${ac_cv_func_stat_empty_string_bug+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_stat_empty_string_bug=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+  return stat ("", &sbuf) == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_stat_empty_string_bug=no
+else
+  ac_cv_func_stat_empty_string_bug=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5
+$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; }
+if test $ac_cv_func_stat_empty_string_bug = yes; then
+  case " $LIBOBJS " in
+  *" stat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS stat.$ac_objext"
+ ;;
+esac
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STAT_EMPTY_STRING_BUG 1
+_ACEOF
+
+fi
+
+for ac_func in strftime
+do :
+  ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
+if test "x$ac_cv_func_strftime" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+else
+  # strftime is in -lintl on SCO UNIX.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
+$as_echo_n "checking for strftime in -lintl... " >&6; }
+if ${ac_cv_lib_intl_strftime+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strftime ();
+int
+main ()
+{
+return strftime ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_intl_strftime=yes
+else
+  ac_cv_lib_intl_strftime=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
+$as_echo "$ac_cv_lib_intl_strftime" >&6; }
+if test "x$ac_cv_lib_intl_strftime" = xyes; then :
+  $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+for ac_func in memset sqrt strcasecmp strerror strncasecmp strstr fdatasync ftruncate getcwd gettimeofday localtime_r memmove strerror
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+# Checks for installed libraries
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_prepare_v2 in -lsqlite3" >&5
+$as_echo_n "checking for sqlite3_prepare_v2 in -lsqlite3... " >&6; }
+if ${ac_cv_lib_sqlite3_sqlite3_prepare_v2+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsqlite3 -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sqlite3_prepare_v2 ();
+int
+main ()
+{
+return sqlite3_prepare_v2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_sqlite3_sqlite3_prepare_v2=yes
+else
+  ac_cv_lib_sqlite3_sqlite3_prepare_v2=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_prepare_v2" >&5
+$as_echo "$ac_cv_lib_sqlite3_sqlite3_prepare_v2" >&6; }
+if test "x$ac_cv_lib_sqlite3_sqlite3_prepare_v2" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSQLITE3 1
+_ACEOF
+
+  LIBS="-lsqlite3 $LIBS"
+
+else
+  as_fn_error $? "'libsqlite3' is required but it doesn't seem to be installed on this system." "$LINENO" 5
+fi
+
+
+ac_config_files="$ac_config_files Makefile src/Makefile src/headers/Makefile src/gaiaaux/Makefile src/gaiaexif/Makefile src/gaiageo/Makefile src/spatialite/Makefile src/shapefiles/Makefile src/srsinit/Makefile src/virtualtext/Makefile test/Makefile examples/Makefile Doxyfile spatialite.pc"
+
+
+#-----------------------------------------------------------------------
+#   --enable-mathsql
+#
+# Check whether --enable-mathsql was given.
+if test "${enable_mathsql+set}" = set; then :
+  enableval=$enable_mathsql;
+else
+  mathsql=yes
+fi
+
+if test x"$enable_mathsql" != "xno"; then
+  OMIT_MATHSQL_FLAGS=
+else
+  OMIT_MATHSQL_FLAGS=-DOMIT_MATHSQL
+fi
+
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-geocallbacks
+#
+# Check whether --enable-geocallbacks was given.
+if test "${enable_geocallbacks+set}" = set; then :
+  enableval=$enable_geocallbacks;
+else
+  geocallbacks=yes
+fi
+
+if test x"$enable_geocallbacks" != "xno"; then
+  OMIT_GEOCALLBACKS_FLAGS=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_rtree_geometry_callback in -lsqlite3" >&5
+$as_echo_n "checking for sqlite3_rtree_geometry_callback in -lsqlite3... " >&6; }
+if ${ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsqlite3 -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sqlite3_rtree_geometry_callback ();
+int
+main ()
+{
+return sqlite3_rtree_geometry_callback ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback=yes
+else
+  ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback" >&5
+$as_echo "$ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback" >&6; }
+if test "x$ac_cv_lib_sqlite3_sqlite3_rtree_geometry_callback" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSQLITE3 1
+_ACEOF
+
+  LIBS="-lsqlite3 $LIBS"
+
+else
+  as_fn_error $? "obsolete 'libsqlite3' (< v.3.7.3). please retry specifying: --disable-geocallbacks" "$LINENO" 5
+fi
+
+else
+  OMIT_GEOCALLBACKS_FLAGS=-DOMIT_GEOCALLBACKS
+fi
+
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-proj
+#
+# Check whether --enable-proj was given.
+if test "${enable_proj+set}" = set; then :
+  enableval=$enable_proj;
+else
+  proj=yes
+fi
+
+if test x"$enable_proj" != "xno"; then
+  OMIT_PROJ_FLAGS=
+  for ac_header in proj_api.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "proj_api.h" "ac_cv_header_proj_api_h" "$ac_includes_default"
+if test "x$ac_cv_header_proj_api_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_PROJ_API_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find proj_api.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pj_init_plus" >&5
+$as_echo_n "checking for library containing pj_init_plus... " >&6; }
+if ${ac_cv_search_pj_init_plus+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pj_init_plus ();
+int
+main ()
+{
+return pj_init_plus ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' proj; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib -lm $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_pj_init_plus=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_pj_init_plus+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_pj_init_plus+:} false; then :
+
+else
+  ac_cv_search_pj_init_plus=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pj_init_plus" >&5
+$as_echo "$ac_cv_search_pj_init_plus" >&6; }
+ac_res=$ac_cv_search_pj_init_plus
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  as_fn_error $? "'libproj' is required but it doesn't seem to be installed on this system." "$LINENO" 5
+fi
+
+else
+  OMIT_PROJ_FLAGS=-DOMIT_PROJ
+fi
+
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-geos
+#
+# Check whether --enable-geos was given.
+if test "${enable_geos+set}" = set; then :
+  enableval=$enable_geos;
+else
+  geos=yes
+fi
+
+if test x"$enable_geos" != "xno"; then
+  OMIT_GEOS_FLAGS=
+  for ac_header in geos_c.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "geos_c.h" "ac_cv_header_geos_c_h" "$ac_includes_default"
+if test "x$ac_cv_header_geos_c_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GEOS_C_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find geos_c.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GEOSTopologyPreserveSimplify" >&5
+$as_echo_n "checking for library containing GEOSTopologyPreserveSimplify... " >&6; }
+if ${ac_cv_search_GEOSTopologyPreserveSimplify+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char GEOSTopologyPreserveSimplify ();
+int
+main ()
+{
+return GEOSTopologyPreserveSimplify ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' geos_c; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib -lm -lgeos $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_GEOSTopologyPreserveSimplify=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_GEOSTopologyPreserveSimplify+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_GEOSTopologyPreserveSimplify+:} false; then :
+
+else
+  ac_cv_search_GEOSTopologyPreserveSimplify=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GEOSTopologyPreserveSimplify" >&5
+$as_echo "$ac_cv_search_GEOSTopologyPreserveSimplify" >&6; }
+ac_res=$ac_cv_search_GEOSTopologyPreserveSimplify
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  as_fn_error $? "'libgeos_c' is required but it doesn't seem to be installed on this system." "$LINENO" 5
+fi
+
+  #-----------------------------------------------------------------------
+  #   --enable-geosadvanced
+  #
+  # Check whether --enable-geosadvanced was given.
+if test "${enable_geosadvanced+set}" = set; then :
+  enableval=$enable_geosadvanced;
+else
+  geosadvanced=yes
+fi
+
+  if test x"$enable_geosadvanced" != "xno"; then
+	  GEOSADVANCED_FLAGS=-DGEOS_ADVANCED
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GEOSCoveredBy" >&5
+$as_echo_n "checking for library containing GEOSCoveredBy... " >&6; }
+if ${ac_cv_search_GEOSCoveredBy+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char GEOSCoveredBy ();
+int
+main ()
+{
+return GEOSCoveredBy ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' geos_c; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib -lm -lgeos $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_GEOSCoveredBy=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_GEOSCoveredBy+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_GEOSCoveredBy+:} false; then :
+
+else
+  ac_cv_search_GEOSCoveredBy=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GEOSCoveredBy" >&5
+$as_echo "$ac_cv_search_GEOSCoveredBy" >&6; }
+ac_res=$ac_cv_search_GEOSCoveredBy
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  as_fn_error $? "obsolete 'libgeos_c' (< v.3.3.0). please retry specifying: --disable-geosadvanced." "$LINENO" 5
+fi
+
+  else
+	  GEOSADVANCED_FLAGS=
+  fi
+
+else
+  OMIT_GEOS_FLAGS=-DOMIT_GEOS
+fi
+
+
+#-----------------------------------------------------------------------
+#   --enable-iconv
+#
+# Check whether --enable-iconv was given.
+if test "${enable_iconv+set}" = set; then :
+  enableval=$enable_iconv;
+else
+  geos=yes
+fi
+
+if test x"$enable_iconv" != "xno"; then
+  OMIT_ICONV_FLAGS=
+  for ac_header in iconv.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default"
+if test "x$ac_cv_header_iconv_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ICONV_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find iconv.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+# on some systems "iconv()" lives in libc. On others it lives in libiconv
+#  on older systems "libiconv()" lives in libiconv
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv" >&5
+$as_echo_n "checking for library containing iconv... " >&6; }
+if ${ac_cv_search_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char iconv ();
+int
+main ()
+{
+return iconv ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' iconv; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_iconv=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_iconv+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_iconv+:} false; then :
+
+else
+  ac_cv_search_iconv=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv" >&5
+$as_echo "$ac_cv_search_iconv" >&6; }
+ac_res=$ac_cv_search_iconv
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv" >&5
+$as_echo_n "checking for library containing libiconv... " >&6; }
+if ${ac_cv_search_libiconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char libiconv ();
+int
+main ()
+{
+return libiconv ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' iconv; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_libiconv=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_libiconv+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_libiconv+:} false; then :
+
+else
+  ac_cv_search_libiconv=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv" >&5
+$as_echo "$ac_cv_search_libiconv" >&6; }
+ac_res=$ac_cv_search_libiconv
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  as_fn_error $? "'libiconv' is required but it doesn't seem to be installed on this system." "$LINENO" 5
+fi
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing locale_charset" >&5
+$as_echo_n "checking for library containing locale_charset... " >&6; }
+if ${ac_cv_search_locale_charset+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char locale_charset ();
+int
+main ()
+{
+return locale_charset ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' charset; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_locale_charset=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_locale_charset+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_locale_charset+:} false; then :
+
+else
+  ac_cv_search_locale_charset=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_locale_charset" >&5
+$as_echo "$ac_cv_search_locale_charset" >&6; }
+ac_res=$ac_cv_search_locale_charset
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing nl_langinfo" >&5
+$as_echo_n "checking for library containing nl_langinfo... " >&6; }
+if ${ac_cv_search_nl_langinfo+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char nl_langinfo ();
+int
+main ()
+{
+return nl_langinfo ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' c; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_nl_langinfo=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_nl_langinfo+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_nl_langinfo+:} false; then :
+
+else
+  ac_cv_search_nl_langinfo=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_nl_langinfo" >&5
+$as_echo "$ac_cv_search_nl_langinfo" >&6; }
+ac_res=$ac_cv_search_nl_langinfo
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  as_fn_error $? "'libcharset' is required but it doesn't seem to be installed on this system." "$LINENO" 5
+fi
+
+fi
+
+else
+  OMIT_ICONV_FLAGS=-DOMIT_ICONV
+fi
+
+
+#-----------------------------------------------------------------------
+#   --enable-freexl
+#
+# Check whether --enable-freexl was given.
+if test "${enable_freexl+set}" = set; then :
+  enableval=$enable_freexl;
+else
+  proj=yes
+fi
+
+if test x"$enable_freexl" != "xno"; then
+  OMIT_FREEXL_FLAGS=
+  for ac_header in freexl.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "freexl.h" "ac_cv_header_freexl_h" "$ac_includes_default"
+if test "x$ac_cv_header_freexl_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_FREEXL_H 1
+_ACEOF
+
+else
+  as_fn_error $? "cannot find freexl.h, bailing out" "$LINENO" 5
+fi
+
+done
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing freexl_open" >&5
+$as_echo_n "checking for library containing freexl_open... " >&6; }
+if ${ac_cv_search_freexl_open+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char freexl_open ();
+int
+main ()
+{
+return freexl_open ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' freexl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib -lm $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_freexl_open=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_freexl_open+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_freexl_open+:} false; then :
+
+else
+  ac_cv_search_freexl_open=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_freexl_open" >&5
+$as_echo "$ac_cv_search_freexl_open" >&6; }
+ac_res=$ac_cv_search_freexl_open
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  as_fn_error $? "'libfreexl' is required but it doesn't seem to be installed on this system." "$LINENO" 5
+fi
+
+else
+  OMIT_FREEXL_FLAGS=-DOMIT_FREEXL
+fi
+
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-epsg
+#
+# Check whether --enable-epsg was given.
+if test "${enable_epsg+set}" = set; then :
+  enableval=$enable_epsg;
+else
+  epsg=yes
+fi
+
+if test x"$enable_epsg" != "xno"; then
+  OMIT_EPSG_FLAGS=
+else
+  OMIT_EPSG_FLAGS=-DOMIT_EPSG
+fi
+
+#-----------------------------------------------------------------------
+
+
+#-----------------------------------------------------------------------
+#    --enable-gcov
+#
+# Check whether --enable-gcov was given.
+if test "${enable_gcov+set}" = set; then :
+  enableval=$enable_gcov;
+fi
+
+if test "x$enable_gcov" = "xyes"; then
+        CFLAGS=$CFLAGS" -fprofile-arcs -ftest-coverage -g"
+    GCOV_FLAGS="-lgcov"
+fi
+#-----------------------------------------------------------------------
+
+# Checking for MinGW
+ if test "$target_alias" = "mingw32"; then
+  MINGW_TRUE=
+  MINGW_FALSE='#'
+else
+  MINGW_TRUE='#'
+  MINGW_FALSE=
+fi
+
+# Checking for Mac OsX
+ if test "$target_alias" = "macosx"; then
+  MACOSX_TRUE=
+  MACOSX_FALSE='#'
+else
+  MACOSX_TRUE='#'
+  MACOSX_FALSE=
+fi
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+	g
+	s/^\n//
+	s/\n/ /g
+	p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MINGW_TRUE}" && test -z "${MINGW_FALSE}"; then
+  as_fn_error $? "conditional \"MINGW\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MACOSX_TRUE}" && test -z "${MACOSX_FALSE}"; then
+  as_fn_error $? "conditional \"MACOSX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by libspatialite $as_me 3.0.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Configuration commands:
+$config_commands
+
+Report bugs to <a.furieri at lqt.it>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+libspatialite config.status 3.0.1
+configured by $0, generated by GNU Autoconf 2.68,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h |  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in AS \
+DLLTOOL \
+OBJDUMP \
+SHELL \
+ECHO \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/headers/Makefile") CONFIG_FILES="$CONFIG_FILES src/headers/Makefile" ;;
+    "src/gaiaaux/Makefile") CONFIG_FILES="$CONFIG_FILES src/gaiaaux/Makefile" ;;
+    "src/gaiaexif/Makefile") CONFIG_FILES="$CONFIG_FILES src/gaiaexif/Makefile" ;;
+    "src/gaiageo/Makefile") CONFIG_FILES="$CONFIG_FILES src/gaiageo/Makefile" ;;
+    "src/spatialite/Makefile") CONFIG_FILES="$CONFIG_FILES src/spatialite/Makefile" ;;
+    "src/shapefiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/shapefiles/Makefile" ;;
+    "src/srsinit/Makefile") CONFIG_FILES="$CONFIG_FILES src/srsinit/Makefile" ;;
+    "src/virtualtext/Makefile") CONFIG_FILES="$CONFIG_FILES src/virtualtext/Makefile" ;;
+    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;;
+    "spatialite.pc") CONFIG_FILES="$CONFIG_FILES spatialite.pc" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X "  :F $CONFIG_FILES      :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Assembler program.
+AS=$lt_AS
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$lt_OBJDUMP
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/libspatialite/libspatialite-3.0.1/configure.ac b/libspatialite/libspatialite-3.0.1/configure.ac
new file mode 100644
index 0000000..d6a40ea
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/configure.ac
@@ -0,0 +1,213 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.61)
+AC_INIT(libspatialite, 3.0.1, a.furieri at lqt.it)
+AC_LANG(C)
+AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE([foreign])
+AM_MAINTAINER_MODE
+
+# Checks for header files.
+AC_CHECK_HEADERS(stdlib.h,, [AC_MSG_ERROR([cannot find stdlib.h, bailing out])])
+AC_CHECK_HEADERS(stdio.h,, [AC_MSG_ERROR([cannot find stdio.h, bailing out])])
+AC_CHECK_HEADERS(string.h,, [AC_MSG_ERROR([cannot find string.h, bailing out])])
+AC_CHECK_HEADERS(memory.h,, [AC_MSG_ERROR([cannot find memory.h, bailing out])])
+AC_CHECK_HEADERS(math.h,, [AC_MSG_ERROR([cannot find math.h, bailing out])])
+AC_CHECK_HEADERS(float.h,, [AC_MSG_ERROR([cannot find float.h, bailing out])])
+AC_CHECK_HEADERS(fcntl.h,, [AC_MSG_ERROR([cannot find fcntl.h, bailing out])])
+AC_CHECK_HEADERS(inttypes.h,, [AC_MSG_ERROR([cannot find inttypes.h, bailing out])])
+AC_CHECK_HEADERS(stddef.h,, [AC_MSG_ERROR([cannot find stddef.h, bailing out])])
+AC_CHECK_HEADERS(stdint.h,, [AC_MSG_ERROR([cannot find stdint.h, bailing out])])
+AC_CHECK_HEADERS(sys/time.h,, [AC_MSG_ERROR([cannot find sys/time.h, bailing out])])
+AC_CHECK_HEADERS(unistd.h,, [AC_MSG_ERROR([cannot find unistd.h, bailing out])])
+AC_CHECK_HEADERS(sqlite3.h,, [AC_MSG_ERROR([cannot find sqlite3.h, bailing out])])
+AC_CHECK_HEADERS(sqlite3ext.h,, [AC_MSG_ERROR([cannot find sqlite3ext.h, bailing out])])
+
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_LIBTOOL_WIN32_DLL
+AC_PROG_LIBTOOL
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+AC_C_VOLATILE
+
+# Checks for library functions.
+AC_FUNC_LSTAT
+AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+AC_FUNC_MEMCMP
+AC_FUNC_STAT
+AC_FUNC_STRFTIME
+AC_CHECK_FUNCS([memset sqrt strcasecmp strerror strncasecmp strstr fdatasync ftruncate getcwd gettimeofday localtime_r memmove strerror])
+
+# Checks for installed libraries
+AC_CHECK_LIB(sqlite3,sqlite3_prepare_v2,,AC_MSG_ERROR(['libsqlite3' is required but it doesn't seem to be installed on this system.]),-lm)
+
+AC_CONFIG_FILES([Makefile \
+		src/Makefile \
+		src/headers/Makefile \
+		src/gaiaaux/Makefile \
+		src/gaiaexif/Makefile \
+		src/gaiageo/Makefile \
+		src/spatialite/Makefile \
+		src/shapefiles/Makefile \
+		src/srsinit/Makefile \
+		src/virtualtext/Makefile \
+		test/Makefile \
+		examples/Makefile \
+		Doxyfile \
+		spatialite.pc])
+
+#-----------------------------------------------------------------------
+#   --enable-mathsql
+#
+AC_ARG_ENABLE(mathsql, [AS_HELP_STRING(
+  [--enable-mathsql], [enables SQL math functions [default=yes]])],
+  [], [mathsql=yes])
+if test x"$enable_mathsql" != "xno"; then
+  OMIT_MATHSQL_FLAGS=
+else
+  OMIT_MATHSQL_FLAGS=-DOMIT_MATHSQL
+fi
+AC_SUBST(OMIT_MATHSQL_FLAGS)
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-geocallbacks
+#
+AC_ARG_ENABLE(geocallbacks, [AS_HELP_STRING(
+  [--enable-geocallbacks], [enables geometry callbacks [default=yes]])],
+  [], [geocallbacks=yes])
+if test x"$enable_geocallbacks" != "xno"; then
+  OMIT_GEOCALLBACKS_FLAGS=
+  AC_CHECK_LIB(sqlite3,sqlite3_rtree_geometry_callback,,AC_MSG_ERROR([obsolete 'libsqlite3' (< v.3.7.3). please retry specifying: --disable-geocallbacks]),-lm)
+else
+  OMIT_GEOCALLBACKS_FLAGS=-DOMIT_GEOCALLBACKS
+fi
+AC_SUBST(OMIT_GEOCALLBACKS_FLAGS)
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-proj
+#
+AC_ARG_ENABLE(proj, [AS_HELP_STRING(
+  [--enable-proj], [enables PROJ.4 inclusion [default=yes]])],
+  [], [proj=yes])
+if test x"$enable_proj" != "xno"; then
+  OMIT_PROJ_FLAGS=
+  AC_CHECK_HEADERS(proj_api.h,, [AC_MSG_ERROR([cannot find proj_api.h, bailing out])])
+  AC_SEARCH_LIBS(pj_init_plus,proj,,AC_MSG_ERROR(['libproj' is required but it doesn't seem to be installed on this system.]),-lm)
+else
+  OMIT_PROJ_FLAGS=-DOMIT_PROJ
+fi
+AC_SUBST(OMIT_PROJ_FLAGS)
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-geos
+#
+AC_ARG_ENABLE(geos, [AS_HELP_STRING(
+  [--enable-geos], [enables GEOS inclusion [default=yes]])],
+  [], [geos=yes])
+if test x"$enable_geos" != "xno"; then
+  OMIT_GEOS_FLAGS=
+  AC_CHECK_HEADERS(geos_c.h,, [AC_MSG_ERROR([cannot find geos_c.h, bailing out])])
+  AC_SEARCH_LIBS(GEOSTopologyPreserveSimplify,geos_c,,AC_MSG_ERROR(['libgeos_c' is required but it doesn't seem to be installed on this system.]),-lm -lgeos)
+  #-----------------------------------------------------------------------
+  #   --enable-geosadvanced
+  #
+  AC_ARG_ENABLE(geosadvanced, [AS_HELP_STRING(
+	  [--enable-geosadvanced], [enables GEOS advanced features [default=yes]])],
+	  [], [geosadvanced=yes])
+  if test x"$enable_geosadvanced" != "xno"; then
+	  GEOSADVANCED_FLAGS=-DGEOS_ADVANCED
+	  AC_SEARCH_LIBS(GEOSCoveredBy,geos_c,,AC_MSG_ERROR([obsolete 'libgeos_c' (< v.3.3.0). please retry specifying: --disable-geosadvanced.]),-lm -lgeos)
+  else
+	  GEOSADVANCED_FLAGS=
+  fi
+	  AC_SUBST(GEOSADVANCED_FLAGS)
+else
+  OMIT_GEOS_FLAGS=-DOMIT_GEOS
+fi
+AC_SUBST(OMIT_GEOS_FLAGS)
+
+#-----------------------------------------------------------------------
+#   --enable-iconv
+#
+AC_ARG_ENABLE(iconv, [AS_HELP_STRING(
+  [--enable-iconv], [enables ICONV inclusion [default=yes]])],
+  [], [geos=yes])
+if test x"$enable_iconv" != "xno"; then
+  OMIT_ICONV_FLAGS=
+  AC_CHECK_HEADERS(iconv.h,, [AC_MSG_ERROR([cannot find iconv.h, bailing out])])
+# on some systems "iconv()" lives in libc. On others it lives in libiconv
+#  on older systems "libiconv()" lives in libiconv
+  AC_SEARCH_LIBS(iconv,iconv,,
+    AC_SEARCH_LIBS(libiconv,iconv,,AC_MSG_ERROR(['libiconv' is required but it doesn't seem to be installed on this system.]),))
+  AC_SEARCH_LIBS(locale_charset,charset,,
+    AC_SEARCH_LIBS(nl_langinfo,c,,AC_MSG_ERROR(['libcharset' is required but it doesn't seem to be installed on this system.]),))
+else
+  OMIT_ICONV_FLAGS=-DOMIT_ICONV
+fi
+AC_SUBST(OMIT_ICONV_FLAGS)
+
+#-----------------------------------------------------------------------
+#   --enable-freexl
+#
+AC_ARG_ENABLE(freexl, [AS_HELP_STRING(
+  [--enable-freexl], [enables FreeXL inclusion [default=yes]])],
+  [], [proj=yes])
+if test x"$enable_freexl" != "xno"; then
+  OMIT_FREEXL_FLAGS=
+  AC_CHECK_HEADERS(freexl.h,, [AC_MSG_ERROR([cannot find freexl.h, bailing out])])
+  AC_SEARCH_LIBS(freexl_open,freexl,,AC_MSG_ERROR(['libfreexl' is required but it doesn't seem to be installed on this system.]),-lm)
+else
+  OMIT_FREEXL_FLAGS=-DOMIT_FREEXL
+fi
+AC_SUBST(OMIT_FREEXL_FLAGS)
+#-----------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+#   --enable-epsg
+#
+AC_ARG_ENABLE(epsg, [AS_HELP_STRING(
+  [--enable-epsg], [enables full EPSG dataset support [default=yes]])],
+  [], [epsg=yes])
+if test x"$enable_epsg" != "xno"; then
+  OMIT_EPSG_FLAGS=
+else
+  OMIT_EPSG_FLAGS=-DOMIT_EPSG
+fi
+AC_SUBST(OMIT_EPSG_FLAGS)
+#-----------------------------------------------------------------------
+
+
+#-----------------------------------------------------------------------
+#    --enable-gcov
+#
+AC_ARG_ENABLE(gcov, AC_HELP_STRING([--enable-gcov],[turn on code coverage analysis tools]))
+if test "x$enable_gcov" = "xyes"; then
+    dnl Check for -fprofile-arcs and -ftest-coverage option
+    CFLAGS=$CFLAGS" -fprofile-arcs -ftest-coverage -g"
+    GCOV_FLAGS="-lgcov"
+fi
+#-----------------------------------------------------------------------
+
+# Checking for MinGW
+AM_CONDITIONAL([MINGW], [test "$target_alias" = "mingw32"])
+# Checking for Mac OsX
+AM_CONDITIONAL([MACOSX], [test "$target_alias" = "macosx"])
+
+AC_OUTPUT
diff --git a/libspatialite/depcomp b/libspatialite/libspatialite-3.0.1/depcomp
similarity index 100%
copy from libspatialite/depcomp
copy to libspatialite/libspatialite-3.0.1/depcomp
diff --git a/libspatialite/libspatialite-3.0.1/examples/Makefile.am b/libspatialite/libspatialite-3.0.1/examples/Makefile.am
new file mode 100644
index 0000000..823e92a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/examples/Makefile.am
@@ -0,0 +1,8 @@
+noinst_PROGRAMS = demo1 demo2 demo3 demo4
+
+AM_CFLAGS = -I at srcdir@/../src/headers @OMIT_GEOS_FLAGS@
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+
+EXTRA_DIST = examples.doxy
diff --git a/libspatialite/libspatialite-3.0.1/examples/Makefile.in b/libspatialite/libspatialite-3.0.1/examples/Makefile.in
new file mode 100644
index 0000000..8dfa88b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/examples/Makefile.in
@@ -0,0 +1,506 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = demo1$(EXEEXT) demo2$(EXEEXT) demo3$(EXEEXT) \
+	demo4$(EXEEXT)
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+demo1_SOURCES = demo1.c
+demo1_OBJECTS = demo1.$(OBJEXT)
+demo1_LDADD = $(LDADD)
+demo2_SOURCES = demo2.c
+demo2_OBJECTS = demo2.$(OBJEXT)
+demo2_LDADD = $(LDADD)
+demo3_SOURCES = demo3.c
+demo3_OBJECTS = demo3.$(OBJEXT)
+demo3_LDADD = $(LDADD)
+demo4_SOURCES = demo4.c
+demo4_OBJECTS = demo4.$(OBJEXT)
+demo4_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = demo1.c demo2.c demo3.c demo4.c
+DIST_SOURCES = demo1.c demo2.c demo3.c demo4.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -I at srcdir@/../src/headers @OMIT_GEOS_FLAGS@
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+EXTRA_DIST = examples.doxy
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+demo1$(EXEEXT): $(demo1_OBJECTS) $(demo1_DEPENDENCIES) 
+	@rm -f demo1$(EXEEXT)
+	$(LINK) $(demo1_OBJECTS) $(demo1_LDADD) $(LIBS)
+demo2$(EXEEXT): $(demo2_OBJECTS) $(demo2_DEPENDENCIES) 
+	@rm -f demo2$(EXEEXT)
+	$(LINK) $(demo2_OBJECTS) $(demo2_LDADD) $(LIBS)
+demo3$(EXEEXT): $(demo3_OBJECTS) $(demo3_DEPENDENCIES) 
+	@rm -f demo3$(EXEEXT)
+	$(LINK) $(demo3_OBJECTS) $(demo3_LDADD) $(LIBS)
+demo4$(EXEEXT): $(demo4_OBJECTS) $(demo4_DEPENDENCIES) 
+	@rm -f demo4$(EXEEXT)
+	$(LINK) $(demo4_OBJECTS) $(demo4_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo3.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/demo4.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/examples/demo1.c b/libspatialite/libspatialite-3.0.1/examples/demo1.c
new file mode 100644
index 0000000..bffc38a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/examples/demo1.c
@@ -0,0 +1,365 @@
+/* 
+
+demo1.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+ 
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+int
+main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    sqlite3_stmt *stmt;
+    gaiaGeomCollPtr geom;
+    char sql[256];
+    int i;
+    int ic;
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *err_msg = NULL;
+    int len;
+    char *table_name;
+    char **p_geotables = NULL;
+    int n_geotables = 0;
+    int row_no;
+    const void *blob;
+    int blob_size;
+    int geom_type;
+    double measure;
+
+
+    if (argc != 2)
+      {
+	  fprintf (stderr, "usage: %s test_db_path\n", argv[0]);
+	  return -1;
+      }
+
+
+
+/* 
+VERY IMPORTANT: 
+you must initialize the SpatiaLite extension [and related]
+BEFORE attempting to perform any other SQLite call 
+*/
+    spatialite_init (0);
+
+
+/* showing the SQLite version */
+    printf ("SQLite version: %s\n", sqlite3_libversion ());
+/* showing the SpatiaLite version */
+    printf ("SpatiaLite version: %s\n", spatialite_version ());
+    printf ("\n\n");
+
+
+
+/* 
+trying to connect the test DB: 
+- this demo was designed in order to connect the standard 
+  TEST-2.3.SQLITE sample DB
+- but you can try to use any SQLite/SpatiaLite DB at your will
+
+Please notice: we'll establish a READ ONLY connection 
+*/
+    ret = sqlite3_open_v2 (argv[1], &handle, SQLITE_OPEN_READONLY, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", argv[1], sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+
+/* 
+SQL query #1 
+we'll retrieve GEOMETRY tables from Spatial Metadata 
+we are assuming this query will return only few rows, 
+so this time we'll use the sqlite3_get_table() interface
+
+this interface is very simple to use
+the result set is returned as a rectangular array [rows/columns]
+allocated in a temporary memory storage
+so, this interface is well suited for small sized result sets,
+but performs badly when accessing a large sized resul set
+
+as a side effect, each column value is returned as text, and
+isn't possible at all to retrieve true column types
+(INTEGER, FLOAT ...)
+*/
+    strcpy (sql,
+	    "SELECT DISTINCT f_table_name FROM geometry_columns ORDER BY 1");
+    ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+			     &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  printf ("query#1 SQL error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+    if (n_rows > 1)
+      {
+/* first row always contains column names and is meaningless in this context */
+	  n_geotables = n_rows;
+/* allocating a dynamic pointer array to store geotable names */
+	  p_geotables = malloc (sizeof (char *) * n_geotables);
+	  for (i = 1; i <= n_rows; i++)
+	    {
+/* 
+now we'll fetch one row at each time [and we have only one column to fetch] 
+
+this one is is a simplified demo; but when writing a real application 
+you always must check for NULL values !!!!
+*/
+		table_name = results[(i * n_columns) + 0];
+/* and we'll store each geotable name into the dynamic pointer array */
+		len = strlen (table_name);
+		p_geotables[i - 1] = malloc (len + 1);
+		strcpy (p_geotables[i - 1], table_name);
+	    }
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+
+    for (i = 0; i < n_geotables; i++)
+      {
+/* now we'll scan each geotable we've found in Spatial Metadata */
+	  printf ("========= table '%s' ========================\n",
+		  p_geotables[i]);
+
+
+
+/*
+SQL query #2 
+we'll retrieve any column from the current geotable 
+we are assuming this query will return lots of rows, 
+so we have to use sqlite3_prepare_v2() interface
+
+this interface is a more complex one, but is well
+suited in order to access huge sized result sets
+and true value type control is supported
+*/
+	  sprintf (sql, "SELECT * FROM %s", p_geotables[i]);
+	  ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+	  if (ret != SQLITE_OK)
+	    {
+/* some error occurred */
+		printf ("query#2 SQL error: %s\n", sqlite3_errmsg (handle));
+		goto abort;
+	    }
+
+/* 
+the sqlite3_prepare_v2() call simply parses the SQL statement,
+checking for syntax validity, allocating internal structs etc
+but no result set row is really yet available
+*/
+
+/* we'll now save the #columns within the result set */
+	  n_columns = sqlite3_column_count (stmt);
+	  row_no = 0;
+
+
+	  while (1)
+	    {
+/* this is an infinite loop, intended to fetch any row */
+
+/* we are now trying to fetch the next available row */
+		ret = sqlite3_step (stmt);
+		if (ret == SQLITE_DONE)
+		  {
+/* there are no more rows to fetch - we can stop looping */
+		      break;
+		  }
+		if (ret == SQLITE_ROW)
+		  {
+/* ok, we've just fetched a valid row to process */
+		      row_no++;
+		      printf ("row #%d\n", row_no);
+
+
+		      for (ic = 0; ic < n_columns; ic++)
+			{
+/* 
+and now we'll fetch column values
+
+for each column we'll then get:
+- the column name
+- a column value, that can be of type: SQLITE_NULL, SQLITE_INTEGER, 
+ SQLITE_FLOAT, SQLITE_TEXT or SQLITE_BLOB, according to internal DB storage type
+*/
+			    printf ("\t%-10s = ",
+				    sqlite3_column_name (stmt, ic));
+			    switch (sqlite3_column_type (stmt, ic))
+			      {
+			      case SQLITE_NULL:
+				  printf ("NULL");
+				  break;
+			      case SQLITE_INTEGER:
+				  printf ("%d", sqlite3_column_int (stmt, ic));
+				  break;
+			      case SQLITE_FLOAT:
+				  printf ("%1.4f",
+					  sqlite3_column_double (stmt, ic));
+				  break;
+			      case SQLITE_TEXT:
+				  printf ("'%s'",
+					  sqlite3_column_text (stmt, ic));
+				  break;
+			      case SQLITE_BLOB:
+				  blob = sqlite3_column_blob (stmt, ic);
+				  blob_size = sqlite3_column_bytes (stmt, ic);
+
+/* checking if this BLOB actually is a GEOMETRY */
+				  geom =
+				      gaiaFromSpatiaLiteBlobWkb (blob,
+								 blob_size);
+				  if (!geom)
+				    {
+/* for sure this one is not a GEOMETRY */
+					printf ("BLOB [%d bytes]", blob_size);
+				    }
+				  else
+				    {
+					geom_type = gaiaGeometryType (geom);
+					if (geom_type == GAIA_UNKNOWN)
+					    printf ("EMPTY or NULL GEOMETRY");
+					else
+					  {
+					      char *geom_name;
+					      if (geom_type == GAIA_POINT)
+						  geom_name = "POINT";
+					      if (geom_type == GAIA_LINESTRING)
+						  geom_name = "LINESTRING";
+					      if (geom_type == GAIA_POLYGON)
+						  geom_name = "POLYGON";
+					      if (geom_type == GAIA_MULTIPOINT)
+						  geom_name = "MULTIPOINT";
+					      if (geom_type ==
+						  GAIA_MULTILINESTRING)
+						  geom_name = "MULTILINESTRING";
+					      if (geom_type ==
+						  GAIA_MULTIPOLYGON)
+						  geom_name = "MULTIPOLYGON";
+					      if (geom_type ==
+						  GAIA_GEOMETRYCOLLECTION)
+						  geom_name =
+						      "GEOMETRYCOLLECTION";
+					      printf ("%s SRID=%d", geom_name,
+						      geom->Srid);
+					      if (geom_type == GAIA_LINESTRING
+						  || geom_type ==
+						  GAIA_MULTILINESTRING)
+						{
+#ifndef OMIT_GEOS		/* GEOS is required */
+						    gaiaGeomCollLength (geom,
+									&measure);
+						    printf (" length=%1.2f",
+							    measure);
+#else
+						    printf
+							(" length=?? [no GEOS support available]");
+#endif /* GEOS enabled/disabled */
+						}
+					      if (geom_type == GAIA_POLYGON ||
+						  geom_type ==
+						  GAIA_MULTIPOLYGON)
+						{
+#ifndef OMIT_GEOS		/* GEOS is required */
+						    gaiaGeomCollArea (geom,
+								      &measure);
+						    printf (" area=%1.2f",
+							    measure);
+#else
+						    printf
+							("area=?? [no GEOS support available]");
+#endif /* GEOS enabled/disabled */
+						}
+					  }
+/* we have now to free the GEOMETRY */
+					gaiaFreeGeomColl (geom);
+				    }
+
+				  break;
+			      };
+			    printf ("\n");
+			}
+
+		      if (row_no >= 5)
+			{
+/* we'll exit the loop after the first 5 rows - this is only a demo :-) */
+			    break;
+			}
+		  }
+		else
+		  {
+/* some unexpected error occurred */
+		      printf ("sqlite3_step() error: %s\n",
+			      sqlite3_errmsg (handle));
+		      sqlite3_finalize (stmt);
+		      goto abort;
+		  }
+	    }
+/* we have now to finalize the query [memory cleanup] */
+	  sqlite3_finalize (stmt);
+	  printf ("\n\n");
+
+      }
+
+
+
+/* disconnecting the test DB */
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("close() error: %s\n", sqlite3_errmsg (handle));
+	  return -1;
+      }
+    printf ("\n\nsample successfully terminated\n");
+/* we have to free the dynamic pointer array used to store geotable names */
+    for (i = 0; i < n_geotables; i++)
+      {
+/* freeing each tablename */
+	  free (p_geotables[i]);
+      }
+    free (p_geotables);
+    return 0;
+
+  abort:
+    sqlite3_close (handle);
+    if (p_geotables)
+      {
+/* we have to free the dynamic pointer array used to store geotable names */
+	  for (i = 0; i < n_geotables; i++)
+	    {
+/* freeing each tablename */
+		free (p_geotables[i]);
+	    }
+	  free (p_geotables);
+      }
+    return -1;
+}
diff --git a/libspatialite/libspatialite-3.0.1/examples/demo2.c b/libspatialite/libspatialite-3.0.1/examples/demo2.c
new file mode 100644
index 0000000..d5abb5f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/examples/demo2.c
@@ -0,0 +1,539 @@
+/* 
+
+demo2.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+
+#include <geos_c.h>
+
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+static char *
+geom_type (int type)
+{
+/* utility function returning corresponding GeometryType as a string */
+    static char *name = "EMPTY / NULL GEOMETRY";
+    if (type == GAIA_POINT)
+	name = "POINT";
+    if (type == GAIA_LINESTRING)
+	name = "LINESTRING";
+    if (type == GAIA_POLYGON)
+	name = "POLYGON";
+    if (type == GAIA_MULTIPOINT)
+	name = "MULTIPOINT";
+    if (type == GAIA_MULTILINESTRING)
+	name = "MULTILINESTRING";
+    if (type == GAIA_MULTIPOLYGON)
+	name = "MULTIPOLYGON";
+    if (type == GAIA_GEOMETRYCOLLECTION)
+	name = "GEOMETRYCOLLECTION";
+    return name;
+}
+
+static void
+geometry_printout (gaiaGeomCollPtr geom)
+{
+/* utility function printing a generic Geometry object */
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int n_pts = 0;
+    int n_lns = 0;
+    int n_pgs = 0;
+    int cnt;
+    int iv;
+    int ir;
+    double x;
+    double y;
+
+
+/* we'll now count how many POINTs are there */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  n_pts++;
+	  pt = pt->Next;
+      }
+/* we'll now count how many LINESTRINGs are there */
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  n_lns++;
+	  ln = ln->Next;
+      }
+/* we'll now count how many POLYGONs are there */
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  n_pgs++;
+	  pg = pg->Next;
+      }
+
+
+
+    if (n_pts)
+      {
+/* printing POINTs coordinates */
+	  cnt = 0;
+	  pt = geom->FirstPoint;
+	  while (pt)
+	    {
+/* we'll now scan the linked list of POINTs */
+		printf ("\t\t\tPOINT %d/%d x=%1.4f y=%1.4f\n",
+			cnt, n_pts, pt->X, pt->Y);
+		cnt++;
+		pt = pt->Next;
+	    }
+      }
+
+
+    if (n_lns)
+      {
+/* printing LINESTRINGs coordinates */
+	  cnt = 0;
+	  ln = geom->FirstLinestring;
+	  while (ln)
+	    {
+/* we'll now scan the linked list of LINESTRINGs */
+		printf ("\t\t\tLINESTRING %d/%d has %d vertices\n",
+			cnt, n_lns, ln->Points);
+		for (iv = 0; iv < ln->Points; iv++)
+		  {
+/* we'll now retrieve coordinates for each vertex */
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      printf ("\t\t\t\tvertex %d/%d x=%1.4f y=%1.4f\n",
+			      iv, ln->Points, x, y);
+		  }
+		cnt++;
+		ln = ln->Next;
+	    }
+      }
+
+
+    if (n_pgs)
+      {
+/* printing POLYGONs coordinates */
+	  cnt = 0;
+	  pg = geom->FirstPolygon;
+	  while (pg)
+	    {
+/* we'll now scan the linked list of POLYGONs */
+		printf ("\t\t\tPOLYGON %d/%d has %d hole%c\n",
+			cnt, n_pgs, pg->NumInteriors,
+			(pg->NumInteriors == 1) ? ' ' : 's');
+
+/*
+now we'll print out the Exterior ring 
+[surely a POLYGON has an Exterior ring 
+*/
+		rng = pg->Exterior;
+		printf ("\t\t\t\tExteriorRing has %d vertices\n", rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+/* we'll now retrieve coordinates for each vertex */
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      printf ("\t\t\t\t\tvertex %d/%d x=%1.4f y=%1.4f\n",
+			      iv, rng->Points, x, y);
+		  }
+
+		for (ir = 0; ir < pg->NumInteriors; ir++)
+		  {
+/* 
+a POLYGON can contain an arbitrary number of Interior rings (including zero)
+*/
+		      rng = pg->Interiors + ir;
+		      printf ("\t\t\t\tInteriorRing %d/%d has %d vertices\n",
+			      ir, pg->NumInteriors, rng->Points);
+		      for (iv = 0; iv < rng->Points; iv++)
+			{
+/* we'll now retrieve coordinates for each vertex */
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			    printf
+				("\t\t\t\t\tvertex %d/%d x=%1.4f y=%1.4f\n",
+				 iv, rng->Points, x, y);
+			}
+		  }
+
+		cnt++;
+		pg = pg->Next;
+	    }
+      }
+}
+
+int
+main (int argc, char *argv[])
+{
+    gaiaGeomCollPtr geo_pt = NULL;
+    gaiaGeomCollPtr geo_ln = NULL;
+    gaiaGeomCollPtr geo_pg = NULL;
+    gaiaGeomCollPtr geo_mpt = NULL;
+    gaiaGeomCollPtr geo_mln = NULL;
+    gaiaGeomCollPtr geo_mpg = NULL;
+    gaiaGeomCollPtr geo_coll = NULL;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    gaiaOutBuffer wkt;
+    int ret;
+    sqlite3 *handle;
+
+
+/*
+
+this demo does not strictly require any DB connection to be established
+
+However you must initialize the SpatiaLite extension [and related]
+and you *must* establish a "fake" DB connection in order to 
+properly initialize SpatiaLite and GEOS libraries
+
+*/
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READONLY, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", ":memory:",
+		  sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+#ifndef OMIT_GEOS		/* GEOS must be enabled */
+
+/*
+Step #1
+creating and checking a POINT Geometry
+*/
+
+/* we'll allocate a Geometry object */
+    geo_pt = gaiaAllocGeomColl ();
+/* then we insert a POINT, directly passing its coordinates */
+    gaiaAddPointToGeomColl (geo_pt, 1.5, 2.75);
+/* now we'll print the main attributes for this geometry */
+    printf ("step#1: %s\t\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_pt)),
+	    gaiaDimension (geo_pt), gaiaIsValid (geo_pt));
+    geometry_printout (geo_pt);
+
+
+
+/*
+Step #2
+creating and checking a LINESTRING Geometry
+*/
+    geo_ln = gaiaAllocGeomColl ();
+/* then we insert a  LINESTRING, specifying how many vertices it contains */
+    line = gaiaAddLinestringToGeomColl (geo_ln, 5);
+/* 
+we've got a pointer referencing the linestring we've just inserted
+now we'll set coordinates for each vertex
+*/
+    gaiaSetPoint (line->Coords, 0, 1.0, 1.0);
+    gaiaSetPoint (line->Coords, 1, 2.0, 1.0);
+    gaiaSetPoint (line->Coords, 2, 2.0, 2.0);
+    gaiaSetPoint (line->Coords, 3, 100.0, 2.0);
+    gaiaSetPoint (line->Coords, 4, 100.0, 100.0);
+
+
+    printf ("\nstep#2: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_ln)),
+	    gaiaDimension (geo_ln), gaiaIsValid (geo_ln));
+    geometry_printout (geo_ln);
+
+
+
+/*
+Step #3
+creating and checking a POLYGON Geometry
+*/
+    geo_pg = gaiaAllocGeomColl ();
+/* 
+then we insert a  POLYGON, specifying:
+- how many vertices have to be allocated for the Exterior Ring
+- how many Interior Rings it has 
+*/
+    polyg = gaiaAddPolygonToGeomColl (geo_pg, 5, 2);
+/* 
+we've got a pointer referencing the polygon we've just inserted
+now we'll get a pointer referencing its Exterior ring
+*/
+    ring = polyg->Exterior;
+
+
+/* now we'll set coordinates for each Exterior ring vertex */
+    gaiaSetPoint (ring->Coords, 0, 0.0, 0.0);
+    gaiaSetPoint (ring->Coords, 1, 50.0, 0.0);
+    gaiaSetPoint (ring->Coords, 2, 50.0, 50.0);
+    gaiaSetPoint (ring->Coords, 3, 0.0, 50.0);
+/* please note: a Ring is a CLOSED figure, so last and first vertex have to be coincident */
+    gaiaSetPoint (ring->Coords, 4, 0.0, 0.0);
+
+
+/* 
+we'll now get a pointer referencing the FIRST interior ring,
+specifying how vertices have to be allocated
+*/
+    ring = gaiaAddInteriorRing (polyg, 0, 5);
+/* then setting coordinates for each Interior ring vertex */
+    gaiaSetPoint (ring->Coords, 0, 40.0, 40.0);
+    gaiaSetPoint (ring->Coords, 1, 41.0, 40.0);
+    gaiaSetPoint (ring->Coords, 2, 41.0, 41.0);
+    gaiaSetPoint (ring->Coords, 3, 40.0, 41.0);
+    gaiaSetPoint (ring->Coords, 4, 40.0, 40.0);
+
+
+/* 
+we'll now get a pointer referencing the SECOND interior ring,
+specifying how vertices have to be allocated
+*/
+    ring = gaiaAddInteriorRing (polyg, 1, 5);
+/* then setting coordinates for each Interior ring vertex */
+    gaiaSetPoint (ring->Coords, 0, 30.0, 30.0);
+    gaiaSetPoint (ring->Coords, 1, 31.0, 30.0);
+    gaiaSetPoint (ring->Coords, 2, 31.0, 31.0);
+    gaiaSetPoint (ring->Coords, 3, 30.0, 31.0);
+    gaiaSetPoint (ring->Coords, 4, 30.0, 30.0);
+
+
+    printf ("\nstep#3: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_pg)),
+	    gaiaDimension (geo_pg), gaiaIsValid (geo_pg));
+    geometry_printout (geo_pg);
+
+
+
+/*
+Step #4
+creating and checking a MULTIPOINT Geometry
+*/
+    geo_mpt = gaiaAllocGeomColl ();
+/* then we'll insert some POINTs */
+    gaiaAddPointToGeomColl (geo_mpt, 5.0, 5.0);
+    gaiaAddPointToGeomColl (geo_mpt, 15.0, 5.0);
+    gaiaAddPointToGeomColl (geo_mpt, 5.0, 15.0);
+    gaiaAddPointToGeomColl (geo_mpt, 25.0, 5.0);
+    gaiaAddPointToGeomColl (geo_mpt, 5.0, 25.0);
+    printf ("\nstep#4: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_mpt)),
+	    gaiaDimension (geo_mpt), gaiaIsValid (geo_mpt));
+    geometry_printout (geo_mpt);
+
+
+
+/*
+Step #5
+creating and checking a MULTILINESTRING Geometry
+*/
+    geo_mln = gaiaAllocGeomColl ();
+
+/* then we'll insert two LINESTRINGs */
+    line = gaiaAddLinestringToGeomColl (geo_mln, 2);
+    gaiaSetPoint (line->Coords, 0, 30.0, 10.0);
+    gaiaSetPoint (line->Coords, 1, 10.0, 30.0);
+
+    line = gaiaAddLinestringToGeomColl (geo_mln, 2);
+    gaiaSetPoint (line->Coords, 0, 40.0, 50.0);
+    gaiaSetPoint (line->Coords, 1, 50.0, 40.0);
+
+    printf ("\nstep#5: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_mln)),
+	    gaiaDimension (geo_mln), gaiaIsValid (geo_mln));
+    geometry_printout (geo_mln);
+
+
+
+/*
+Step #6
+creating and checking a MULTIPOLYGON Geometry
+*/
+    geo_mpg = gaiaAllocGeomColl ();
+
+/* then we'll insert two POLYGONs */
+    polyg = gaiaAddPolygonToGeomColl (geo_mpg, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 60.0, 60.0);
+    gaiaSetPoint (ring->Coords, 1, 70.0, 60.0);
+    gaiaSetPoint (ring->Coords, 2, 70.0, 70.0);
+    gaiaSetPoint (ring->Coords, 3, 60.0, 70.0);
+    gaiaSetPoint (ring->Coords, 4, 60.0, 60.0);
+
+    polyg = gaiaAddPolygonToGeomColl (geo_mpg, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 80.0, 80.0);
+    gaiaSetPoint (ring->Coords, 1, 90.0, 80.0);
+    gaiaSetPoint (ring->Coords, 2, 90.0, 90.0);
+    gaiaSetPoint (ring->Coords, 3, 80.0, 90.0);
+    gaiaSetPoint (ring->Coords, 4, 80.0, 80.0);
+
+    printf ("\nstep#6: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_mpg)),
+	    gaiaDimension (geo_mpg), gaiaIsValid (geo_mpg));
+    geometry_printout (geo_mpg);
+
+
+
+/*
+Step #7
+creating and checking a GEOMETRYCOLLECTION Geometry
+*/
+    geo_coll = gaiaAllocGeomColl ();
+
+/* then we'll insert two POINTs */
+    gaiaAddPointToGeomColl (geo_coll, 100.0, 100.0);
+    gaiaAddPointToGeomColl (geo_coll, 100.0, 0.0);
+
+/* then we'll insert two LINESTRINGs */
+    line = gaiaAddLinestringToGeomColl (geo_coll, 2);
+    gaiaSetPoint (line->Coords, 0, 130.0, 110.0);
+    gaiaSetPoint (line->Coords, 1, 110.0, 130.0);
+
+    line = gaiaAddLinestringToGeomColl (geo_coll, 2);
+    gaiaSetPoint (line->Coords, 0, 140.0, 150.0);
+    gaiaSetPoint (line->Coords, 1, 150.0, 140.0);
+
+/* then we'll insert two POLYGONs */
+    polyg = gaiaAddPolygonToGeomColl (geo_coll, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 160.0, 160.0);
+    gaiaSetPoint (ring->Coords, 1, 170.0, 160.0);
+    gaiaSetPoint (ring->Coords, 2, 170.0, 170.0);
+    gaiaSetPoint (ring->Coords, 3, 160.0, 170.0);
+    gaiaSetPoint (ring->Coords, 4, 160.0, 160.0);
+
+    polyg = gaiaAddPolygonToGeomColl (geo_coll, 5, 0);
+    ring = polyg->Exterior;
+    gaiaSetPoint (ring->Coords, 0, 180.0, 180.0);
+    gaiaSetPoint (ring->Coords, 1, 190.0, 180.0);
+    gaiaSetPoint (ring->Coords, 2, 190.0, 190.0);
+    gaiaSetPoint (ring->Coords, 3, 180.0, 190.0);
+    gaiaSetPoint (ring->Coords, 4, 180.0, 180.0);
+
+    printf ("\nstep#7: %s\tDimension=%d IsValid=%d\n",
+	    geom_type (gaiaGeometryType (geo_coll)),
+	    gaiaDimension (geo_coll), gaiaIsValid (geo_coll));
+    geometry_printout (geo_coll);
+
+
+
+
+/*
+Step #8
+printing each geometry as Well Known Text (WKT)
+*/
+
+    printf ("\nstep#8: checking WKT representations\n");
+
+/* first we'll get the WKT corresponding to geometry */
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_pt);
+/* we have to check wkt is not NULL */
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+/* printing the WKT */
+	  printf ("\n%s\n", wkt.Buffer);
+
+/* finally freeing the wkt temporary storage allocation */
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_ln);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_pg);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_mpt);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_mln);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_mpg);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+
+    gaiaOutBufferInitialize (&wkt);
+    gaiaOutWkt (&wkt, geo_coll);
+    if (wkt.Error == 0 && wkt.Buffer != NULL)
+      {
+	  printf ("\n%s\n", wkt.Buffer);
+	  gaiaOutBufferReset (&wkt);
+      }
+
+#else
+    printf ("no GEOS support available: skipping any test\n");
+#endif /* GEOS enabled/disabled */
+
+/* 
+memory cleanup
+we have to destroy each object using temporary storage before exit
+*/
+    if (geo_pt)
+	gaiaFreeGeomColl (geo_pt);
+    if (geo_ln)
+	gaiaFreeGeomColl (geo_ln);
+    if (geo_pg)
+	gaiaFreeGeomColl (geo_pg);
+    if (geo_mpt)
+	gaiaFreeGeomColl (geo_mpt);
+    if (geo_mln)
+	gaiaFreeGeomColl (geo_mln);
+    if (geo_mpg)
+	gaiaFreeGeomColl (geo_mpg);
+    if (geo_coll)
+	gaiaFreeGeomColl (geo_coll);
+    sqlite3_close (handle);
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/examples/demo3.c b/libspatialite/libspatialite-3.0.1/examples/demo3.c
new file mode 100644
index 0000000..0408d8a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/examples/demo3.c
@@ -0,0 +1,370 @@
+/* 
+
+demo3.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+ 
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+int
+main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    sqlite3_stmt *stmt;
+    char sql[256];
+    char *err_msg = NULL;
+    double x;
+    double y;
+    int pk;
+    int ix;
+    int iy;
+    gaiaGeomCollPtr geo = NULL;
+    unsigned char *blob;
+    int blob_size;
+    int i;
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *count;
+    clock_t t0;
+    clock_t t1;
+
+
+    if (argc != 2)
+      {
+	  fprintf (stderr, "usage: %s test_db_path\n", argv[0]);
+	  return -1;
+      }
+
+
+/* 
+VERY IMPORTANT: 
+you must initialize the SpatiaLite extension [and related]
+BEFORE attempting to perform any other SQLite call 
+*/
+    spatialite_init (0);
+
+
+/* showing the SQLite version */
+    printf ("SQLite version: %s\n", sqlite3_libversion ());
+/* showing the SpatiaLite version */
+    printf ("SpatiaLite version: %s\n", spatialite_version ());
+    printf ("\n\n");
+
+
+
+/* 
+trying to connect the test DB: 
+- this demo is intended to create a new, empty database
+*/
+    ret = sqlite3_open_v2 (argv[1], &handle,
+			   SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", argv[1], sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+
+/* 
+we are supposing this one is an empty database,
+so we have to create the Spatial Metadata
+*/
+    strcpy (sql, "SELECT InitSpatialMetadata()");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("InitSpatialMetadata() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+now we can create the test table
+for simplicity we'll define only one column, the primary key
+*/
+    strcpy (sql, "CREATE TABLE test (");
+    strcat (sql, "PK INTEGER NOT NULL PRIMARY KEY)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CREATE TABLE 'test' error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+... we'll add a Geometry column of POINT type to the test table 
+*/
+    strcpy (sql, "SELECT AddGeometryColumn('test', 'geom', 3003, 'POINT', 2)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("AddGeometryColumn() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+and finally we'll enable this geo-column to have a Spatial Index based on R*Tree
+*/
+    strcpy (sql, "SELECT CreateSpatialIndex('test', 'geom')");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CreateSpatialIndex() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+    printf
+	("\nnow we are going to insert 1 million POINTs; wait, please ...\n\n");
+
+    t0 = clock ();
+/*
+beginning a transaction
+
+*** this step is absolutely critical ***
+
+the SQLite engine is a TRANSACTIONAL one
+the whole batch of INSERTs has to be performed as an unique transaction,
+otherwise performance will be surely very poor
+*/
+    strcpy (sql, "BEGIN");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("BEGIN error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/* 
+preparing to populate the test table
+we'll use a Prepared Statement we can reuse in order to insert each row
+*/
+    strcpy (sql, "INSERT INTO test (pk, geom) VALUES (?, ?)");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("INSERT SQL error: %s\n", sqlite3_errmsg (handle));
+	  goto abort;
+      }
+
+    pk = 0;
+    for (ix = 0; ix < 1000; ix++)
+      {
+	  x = 1000000.0 + (ix * 10.0);
+	  for (iy = 0; iy < 1000; iy++)
+	    {
+/* this double loop will insert 1 million rows into the the test table */
+
+		y = 4000000.0 + (iy * 10.0);
+		pk++;
+		if ((pk % 25000) == 0)
+		  {
+		      t1 = clock ();
+		      printf ("insert row: %d\t\t[elapsed time: %1.3f]\n",
+			      pk, (double) (t1 - t0) / CLOCKS_PER_SEC);
+		  }
+
+/* preparing the geometry to insert */
+		geo = gaiaAllocGeomColl ();
+		geo->Srid = 3003;
+		gaiaAddPointToGeomColl (geo, x, y);
+
+/* transforming this geometry into the SpatiaLite BLOB format */
+		gaiaToSpatiaLiteBlobWkb (geo, &blob, &blob_size);
+
+/* we can now destroy the geometry object */
+		gaiaFreeGeomColl (geo);
+
+/* resetting Prepared Statement and bindings */
+		sqlite3_reset (stmt);
+		sqlite3_clear_bindings (stmt);
+
+/* binding parameters to Prepared Statement */
+		sqlite3_bind_int64 (stmt, 1, pk);
+		sqlite3_bind_blob (stmt, 2, blob, blob_size, free);
+
+/* performing actual row insert */
+		ret = sqlite3_step (stmt);
+		if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+		    ;
+		else
+		  {
+/* an unexpected error occurred */
+		      printf ("sqlite3_step() error: %s\n",
+			      sqlite3_errmsg (handle));
+		      sqlite3_finalize (stmt);
+		      goto abort;
+		  }
+
+	    }
+      }
+/* we have now to finalize the query [memory cleanup] */
+    sqlite3_finalize (stmt);
+
+
+
+/*
+committing the transaction
+
+*** this step is absolutely critical ***
+
+if we don't confirm the still pending transaction,
+any update will be lost
+*/
+    strcpy (sql, "COMMIT");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("COMMIT error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/*
+now we'll optimize the table
+*/
+    strcpy (sql, "ANALYZE test");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("ANALYZE error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - not using Spatial Index\n", ix);
+/* 
+now we'll perform the spatial query WITHOUT using the Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE MbrWithin(geom, BuildMbr(");
+	  strcat (sql, "1000400.5, 4000400.5, ");
+	  strcat (sql, "1000450.5, 4000450.5))");
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("NoSpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - using the R*Tree Spatial Index\n",
+		  ix);
+/* 
+now we'll perform the spatial query USING the R*Tree Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE MbrWithin(geom, BuildMbr(");
+	  strcat (sql, "1000400.5, 4000400.5, ");
+	  strcat (sql, "1000450.5, 4000450.5)) AND ROWID IN (");
+	  strcat (sql, "SELECT pkid FROM idx_test_geom WHERE ");
+	  strcat (sql, "xmin > 1000400.5 AND ");
+	  strcat (sql, "xmax < 1000450.5 AND ");
+	  strcat (sql, "ymin > 4000400.5 AND ");
+	  strcat (sql, "ymax < 4000450.5)");
+/*
+YES, this query is a very unhappy one
+the idea is simply to simulate exactly the same conditions as above
+*/
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("SpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+/* disconnecting the test DB */
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("close() error: %s\n", sqlite3_errmsg (handle));
+	  return -1;
+      }
+    printf ("\n\nsample successfully terminated\n");
+    return 0;
+
+  abort:
+    sqlite3_close (handle);
+    return -1;
+}
diff --git a/libspatialite/libspatialite-3.0.1/examples/demo4.c b/libspatialite/libspatialite-3.0.1/examples/demo4.c
new file mode 100644
index 0000000..2f341c2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/examples/demo4.c
@@ -0,0 +1,367 @@
+/* 
+
+demo4.c
+
+Author: Sandro Furieri a-furieri at lqt.it
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+/*
+these headers are required in order to support
+SQLite/SpatiaLite
+*/
+#include <sqlite3.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+int
+main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    sqlite3_stmt *stmt;
+    char sql[256];
+    char *err_msg = NULL;
+    double x;
+    double y;
+    int pk;
+    int ix;
+    int iy;
+    gaiaGeomCollPtr geo = NULL;
+    unsigned char *blob;
+    int blob_size;
+    int i;
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *count;
+    clock_t t0;
+    clock_t t1;
+
+
+    if (argc != 2)
+      {
+	  fprintf (stderr, "usage: %s test_db_path\n", argv[0]);
+	  return -1;
+      }
+
+
+/* 
+VERY IMPORTANT: 
+you must initialize the SpatiaLite extension [and related]
+BEFORE attempting to perform any other SQLite call 
+*/
+    spatialite_init (0);
+
+
+/* showing the SQLite version */
+    printf ("SQLite version: %s\n", sqlite3_libversion ());
+/* showing the SpatiaLite version */
+    printf ("SpatiaLite version: %s\n", spatialite_version ());
+    printf ("\n\n");
+
+
+
+/* 
+trying to connect the test DB: 
+- this demo is intended to create a new, empty database
+*/
+    ret = sqlite3_open_v2 (argv[1], &handle,
+			   SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("cannot open '%s': %s\n", argv[1], sqlite3_errmsg (handle));
+	  sqlite3_close (handle);
+	  return -1;
+      }
+
+
+
+/* 
+we are supposing this one is an empty database,
+so we have to create the Spatial Metadata
+*/
+    strcpy (sql, "SELECT InitSpatialMetadata()");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  printf ("InitSpatialMetadata() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+now we can create the test table
+for simplicity we'll define only one column, the primary key
+*/
+    strcpy (sql, "CREATE TABLE test (");
+    strcat (sql, "PK INTEGER NOT NULL PRIMARY KEY)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CREATE TABLE 'test' error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+... we'll add a Geometry column of POINT type to the test table 
+*/
+    strcpy (sql, "SELECT AddGeometryColumn('test', 'geom', 3003, 'POINT', 2)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("AddGeometryColumn() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+/*
+and finally we'll enable this geo-column to have a Spatial Index based on MBR caching
+*/
+    strcpy (sql, "SELECT CreateMbrCache('test', 'geom')");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("CreateMbrCache() error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+    printf
+	("\nnow we are going to insert 1 million POINTs; wait, please ...\n\n");
+
+    t0 = clock ();
+/*
+beginning a transaction
+
+*** this step is absolutely critical ***
+
+the SQLite engine is a TRANSACTIONAL one
+the whole batch of INSERTs has to be performed as an unique transaction,
+otherwise performance will be surely very poor
+*/
+    strcpy (sql, "BEGIN");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("BEGIN error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/* 
+preparing to populate the test table
+we'll use a Prepared Statement we can reuse in order to insert each row
+*/
+    strcpy (sql, "INSERT INTO test (pk, geom) VALUES (?, ?)");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("INSERT SQL error: %s\n", sqlite3_errmsg (handle));
+	  goto abort;
+      }
+
+    pk = 0;
+    for (ix = 0; ix < 1000; ix++)
+      {
+	  x = 1000000.0 + (ix * 10.0);
+	  for (iy = 0; iy < 1000; iy++)
+	    {
+/* this double loop will insert 1 million rows into the the test table */
+
+		y = 4000000.0 + (iy * 10.0);
+		pk++;
+		if ((pk % 25000) == 0)
+		  {
+		      t1 = clock ();
+		      printf ("insert row: %d\t\t[elapsed time: %1.3f]\n",
+			      pk, (double) (t1 - t0) / CLOCKS_PER_SEC);
+		  }
+
+/* preparing the geometry to insert */
+		geo = gaiaAllocGeomColl ();
+		geo->Srid = 3003;
+		gaiaAddPointToGeomColl (geo, x, y);
+
+/* transforming this geometry into the SpatiaLite BLOB format */
+		gaiaToSpatiaLiteBlobWkb (geo, &blob, &blob_size);
+
+/* we can now destroy the geometry object */
+		gaiaFreeGeomColl (geo);
+
+/* resetting Prepared Statement and bindings */
+		sqlite3_reset (stmt);
+		sqlite3_clear_bindings (stmt);
+
+/* binding parameters to Prepared Statement */
+		sqlite3_bind_int64 (stmt, 1, pk);
+		sqlite3_bind_blob (stmt, 2, blob, blob_size, free);
+
+/* performing actual row insert */
+		ret = sqlite3_step (stmt);
+		if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+		    ;
+		else
+		  {
+/* an unexpected error occurred */
+		      printf ("sqlite3_step() error: %s\n",
+			      sqlite3_errmsg (handle));
+		      sqlite3_finalize (stmt);
+		      goto abort;
+		  }
+
+	    }
+      }
+/* we have now to finalize the query [memory cleanup] */
+    sqlite3_finalize (stmt);
+
+
+
+/*
+committing the transaction
+
+*** this step is absolutely critical ***
+
+if we don't confirm the still pending transaction,
+any update will be lost
+*/
+    strcpy (sql, "COMMIT");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("COMMIT error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+
+/*
+now we'll optimize the table
+*/
+    strcpy (sql, "ANALYZE test");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* an error occurred */
+	  printf ("ANALYZE error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  goto abort;
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - not using Spatial Index\n", ix);
+/* 
+now we'll perform the spatial query WITHOUT using the Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE MbrWithin(geom, BuildMbr(");
+	  strcat (sql, "1000400.5, 4000400.5, ");
+	  strcat (sql, "1000450.5, 4000450.5))");
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("NoSpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+    for (ix = 0; ix < 3; ix++)
+      {
+	  printf ("\nperforming test#%d - using the MBR cache Spatial Index\n",
+		  ix);
+/* 
+now we'll perform the spatial query USING the MBR cache Spatial Index
+we'll loop 3 times in order to avoid buffering-caching side effects
+*/
+	  strcpy (sql, "SELECT Count(*) FROM test ");
+	  strcat (sql, "WHERE ROWID IN (");
+	  strcat (sql, "SELECT rowid FROM cache_test_geom WHERE ");
+	  strcat (sql,
+		  "mbr = FilterMbrWithin(1000400.5, 4000400.5, 1000450.5, 4000450.5))");
+
+/*
+YES, this query is a very unhappy one
+the idea is simply to simulate exactly the same conditions as above
+*/
+	  t0 = clock ();
+	  ret = sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+				   &err_msg);
+	  if (ret != SQLITE_OK)
+	    {
+/* an error occurred */
+		printf ("SpatialIndex SQL error: %s\n", err_msg);
+		sqlite3_free (err_msg);
+		goto abort;
+	    }
+	  count = "";
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = results[(i * n_columns) + 0];
+	    }
+	  t1 = clock ();
+	  printf ("Count(*) = %d\t\t[elapsed time: %1.4f]\n", atoi (count),
+		  (double) (t1 - t0) / CLOCKS_PER_SEC);
+/* we can now free the table results */
+	  sqlite3_free_table (results);
+      }
+
+
+/* disconnecting the test DB */
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK)
+      {
+	  printf ("close() error: %s\n", sqlite3_errmsg (handle));
+	  return -1;
+      }
+    printf ("\n\nsample successfully terminated\n");
+    return 0;
+
+  abort:
+    sqlite3_close (handle);
+    return -1;
+}
diff --git a/libspatialite/libspatialite-3.0.1/examples/examples.doxy b/libspatialite/libspatialite-3.0.1/examples/examples.doxy
new file mode 100644
index 0000000..4ee1a33
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/examples/examples.doxy
@@ -0,0 +1,421 @@
+/** \example demo1.c
+
+This is a sample C source showing how to use SQLite / SpatiaLite 
+from C. 
+
+This program shows the  basic functionality that will be required for most
+SpatiaLite programs:
+ - how to connect an SQLite+SpatiaLite database
+ - executing an SQL query 
+ - fetching values from a result set
+ - transforming BLOB-values into GEOMETRY
+ - elementary processing GEOMETRY 
+
+The typical output of this demo is shown below, when run against the sample
+database.
+\verbatim
+$ ./demo1 test-2.3.sqlite 
+SQLite version: 3.7.4
+SpatiaLite version: 3.0.0-beta1
+
+
+========= table 'HighWays' ========================
+row #1
+        PK_UID     = 1
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=8697.57
+row #2
+        PK_UID     = 2
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=39.79
+row #3
+        PK_UID     = 3
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=14610.39
+row #4
+        PK_UID     = 4
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=878.01
+row #5
+        PK_UID     = 5
+        Name       = 'Unknown'
+        Geometry   = LINESTRING SRID=32632 length=10.05
+
+
+========= table 'Regions' ========================
+row #1
+        PK_UID     = 1
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=646397.81
+row #2
+        PK_UID     = 2
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=1290337.69
+row #3
+        PK_UID     = 3
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=8784619.92
+row #4
+        PK_UID     = 4
+        Name       = 'VENETO'
+        Geometry   = MULTIPOLYGON SRID=32632 area=530524.68
+row #5
+        PK_UID     = 5
+        Name       = 'LIGURIA'
+        Geometry   = MULTIPOLYGON SRID=32632 area=5450277374.12
+
+
+========= table 'Towns' ========================
+row #1
+        PK_UID     = 1
+        Name       = 'Brozolo'
+        Peoples    = 435
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #2
+        PK_UID     = 2
+        Name       = 'Campiglione-Fenile'
+        Peoples    = 1284
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #3
+        PK_UID     = 3
+        Name       = 'Canischio'
+        Peoples    = 274
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #4
+        PK_UID     = 4
+        Name       = 'Cavagnolo'
+        Peoples    = 2281
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+row #5
+        PK_UID     = 5
+        Name       = 'Magliano Alfieri'
+        Peoples    = 1674
+        LocalCounc = 1
+        County     = 0
+        Region     = 0
+        Geometry   = POINT SRID=32632
+
+
+
+
+sample successfully terminated
+\endverbatim
+
+*/
+
+/** \example demo2.c
+
+This is a sample C source showing how to manipulate GEOMETRY within
+Spatialite. It essentially follows on from the functionality shown in the
+demo1.c example, and covers:
+ - creating geometries
+ - exploring geometries
+ - querying the basic properties of a geometry
+ 
+ Note that this does not require a database command line argument. Here is a
+ typical run:
+\verbatim
+$ ./demo2 
+step#1: POINT           Dimension=0 IsValid=1
+                        POINT 0/1 x=1.5000 y=2.7500
+
+step#2: LINESTRING      Dimension=1 IsValid=1
+                        LINESTRING 0/1 has 5 vertices
+                                vertex 0/5 x=1.0000 y=1.0000
+                                vertex 1/5 x=2.0000 y=1.0000
+                                vertex 2/5 x=2.0000 y=2.0000
+                                vertex 3/5 x=100.0000 y=2.0000
+                                vertex 4/5 x=100.0000 y=100.0000
+
+step#3: POLYGON Dimension=2 IsValid=1
+                        POLYGON 0/1 has 2 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=0.0000 y=0.0000
+                                        vertex 1/5 x=50.0000 y=0.0000
+                                        vertex 2/5 x=50.0000 y=50.0000
+                                        vertex 3/5 x=0.0000 y=50.0000
+                                        vertex 4/5 x=0.0000 y=0.0000
+                                InteriorRing 0/2 has 5 vertices
+                                        vertex 0/5 x=40.0000 y=40.0000
+                                        vertex 1/5 x=41.0000 y=40.0000
+                                        vertex 2/5 x=41.0000 y=41.0000
+                                        vertex 3/5 x=40.0000 y=41.0000
+                                        vertex 4/5 x=40.0000 y=40.0000
+                                InteriorRing 1/2 has 5 vertices
+                                        vertex 0/5 x=30.0000 y=30.0000
+                                        vertex 1/5 x=31.0000 y=30.0000
+                                        vertex 2/5 x=31.0000 y=31.0000
+                                        vertex 3/5 x=30.0000 y=31.0000
+                                        vertex 4/5 x=30.0000 y=30.0000
+
+step#4: MULTIPOINT      Dimension=0 IsValid=1
+                        POINT 0/5 x=5.0000 y=5.0000
+                        POINT 1/5 x=15.0000 y=5.0000
+                        POINT 2/5 x=5.0000 y=15.0000
+                        POINT 3/5 x=25.0000 y=5.0000
+                        POINT 4/5 x=5.0000 y=25.0000
+
+step#5: MULTILINESTRING Dimension=1 IsValid=1
+                        LINESTRING 0/2 has 2 vertices
+                                vertex 0/2 x=30.0000 y=10.0000
+                                vertex 1/2 x=10.0000 y=30.0000
+                        LINESTRING 1/2 has 2 vertices
+                                vertex 0/2 x=40.0000 y=50.0000
+                                vertex 1/2 x=50.0000 y=40.0000
+
+step#6: MULTIPOLYGON    Dimension=2 IsValid=1
+                        POLYGON 0/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=60.0000 y=60.0000
+                                        vertex 1/5 x=70.0000 y=60.0000
+                                        vertex 2/5 x=70.0000 y=70.0000
+                                        vertex 3/5 x=60.0000 y=70.0000
+                                        vertex 4/5 x=60.0000 y=60.0000
+                        POLYGON 1/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=80.0000 y=80.0000
+                                        vertex 1/5 x=90.0000 y=80.0000
+                                        vertex 2/5 x=90.0000 y=90.0000
+                                        vertex 3/5 x=80.0000 y=90.0000
+                                        vertex 4/5 x=80.0000 y=80.0000
+
+step#7: GEOMETRYCOLLECTION      Dimension=2 IsValid=1
+                        POINT 0/2 x=100.0000 y=100.0000
+                        POINT 1/2 x=100.0000 y=0.0000
+                        LINESTRING 0/2 has 2 vertices
+                                vertex 0/2 x=130.0000 y=110.0000
+                                vertex 1/2 x=110.0000 y=130.0000
+                        LINESTRING 1/2 has 2 vertices
+                                vertex 0/2 x=140.0000 y=150.0000
+                                vertex 1/2 x=150.0000 y=140.0000
+                        POLYGON 0/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=160.0000 y=160.0000
+                                        vertex 1/5 x=170.0000 y=160.0000
+                                        vertex 2/5 x=170.0000 y=170.0000
+                                        vertex 3/5 x=160.0000 y=170.0000
+                                        vertex 4/5 x=160.0000 y=160.0000
+                        POLYGON 1/2 has 0 holes
+                                ExteriorRing has 5 vertices
+                                        vertex 0/5 x=180.0000 y=180.0000
+                                        vertex 1/5 x=190.0000 y=180.0000
+                                        vertex 2/5 x=190.0000 y=190.0000
+                                        vertex 3/5 x=180.0000 y=190.0000
+                                        vertex 4/5 x=180.0000 y=180.0000
+
+step#8: checking WKT representations
+
+GEOMETRYCOLLECTION(POINT(1.5 2.75))
+
+GEOMETRYCOLLECTION(LINESTRING(1 1, 2 1, 2 2, 100 2, 100 100))
+
+GEOMETRYCOLLECTION(POLYGON((0 0, 50 0, 50 50, 0 50, 0 0), (40 40, 41 40, 41 41, 40 41, 40 40), (30 30, 31 30, 31 31, 30 31, 30 30)))
+
+GEOMETRYCOLLECTION(POINT(5 5), POINT(15 5), POINT(5 15), POINT(25 5), POINT(5 25))
+
+GEOMETRYCOLLECTION(LINESTRING(30 10, 10 30), LINESTRING(40 50, 50 40))
+
+GEOMETRYCOLLECTION(POLYGON((60 60, 70 60, 70 70, 60 70, 60 60)), POLYGON((80 80, 90 80, 90 90, 80 90, 80 80)))
+
+GEOMETRYCOLLECTION(POINT(100 100), POINT(100 0), LINESTRING(130 110, 110 130), LINESTRING(140 150, 150 140), POLYGON((160 160, 170 160, 170 170, 160 170, 160 160)), POLYGON((180 180, 190 180, 190 190, 180 190, 180 180)))
+\endverbatim
+*/
+
+/** \example demo3.c
+
+This is a sample C source showing how to use the SQLite / SpatiaLite 
+Spatial Index [RTree].
+
+It follows on from demo1.c.
+
+The main steps in this example are:
+ - creating a new database
+ - creating a sample geo-table 
+ - inserting 1 million rows into this table
+ - performing some spatial queries without Spatial Indexing
+ - performing the same queries using the Spatial Index
+
+The typical output of this demo is shown below (where test.sqlite does not
+exist before the run).
+
+\verbatim
+$ ./demo3 test.sqlite
+SQLite version: 3.7.4
+SpatiaLite version: 3.0.0-beta1
+
+
+
+now we are going to insert 1 million POINTs; wait, please ...
+
+insert row: 25000               [elapsed time: 1.910]
+insert row: 50000               [elapsed time: 4.050]
+insert row: 75000               [elapsed time: 6.270]
+insert row: 100000              [elapsed time: 8.460]
+insert row: 125000              [elapsed time: 10.740]
+insert row: 150000              [elapsed time: 12.910]
+insert row: 175000              [elapsed time: 15.080]
+insert row: 200000              [elapsed time: 17.350]
+insert row: 225000              [elapsed time: 19.610]
+insert row: 250000              [elapsed time: 21.890]
+insert row: 275000              [elapsed time: 24.170]
+insert row: 300000              [elapsed time: 26.380]
+insert row: 325000              [elapsed time: 28.650]
+insert row: 350000              [elapsed time: 30.900]
+insert row: 375000              [elapsed time: 33.130]
+insert row: 400000              [elapsed time: 35.340]
+insert row: 425000              [elapsed time: 37.540]
+insert row: 450000              [elapsed time: 39.760]
+insert row: 475000              [elapsed time: 41.980]
+insert row: 500000              [elapsed time: 44.220]
+insert row: 525000              [elapsed time: 46.500]
+insert row: 550000              [elapsed time: 48.740]
+insert row: 575000              [elapsed time: 50.960]
+insert row: 600000              [elapsed time: 53.190]
+insert row: 625000              [elapsed time: 55.430]
+insert row: 650000              [elapsed time: 57.670]
+insert row: 675000              [elapsed time: 59.900]
+insert row: 700000              [elapsed time: 62.130]
+insert row: 725000              [elapsed time: 64.400]
+insert row: 750000              [elapsed time: 66.660]
+insert row: 775000              [elapsed time: 68.900]
+insert row: 800000              [elapsed time: 71.140]
+insert row: 825000              [elapsed time: 73.410]
+insert row: 850000              [elapsed time: 75.670]
+insert row: 875000              [elapsed time: 77.940]
+insert row: 900000              [elapsed time: 80.230]
+insert row: 925000              [elapsed time: 82.540]
+insert row: 950000              [elapsed time: 84.840]
+insert row: 975000              [elapsed time: 87.150]
+insert row: 1000000             [elapsed time: 89.450]
+
+performing test#0 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2700]
+
+performing test#1 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2700]
+
+performing test#2 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2900]
+
+performing test#0 - using the R*Tree Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#1 - using the R*Tree Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#2 - using the R*Tree Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+
+sample successfully terminated
+\endverbatim
+
+Note the significant difference in elapsed time associated with use of an 
+appropriate index.
+
+*/
+
+/** \example demo4.c
+
+This is a sample C source showing how to use the SQLite / SpatiaLite 
+Spatial Index [MbrCache].
+
+It is very similar to demo3.c, but uses a different indexing approach
+
+The main steps in this example are:
+ - creating a new database
+ - creating a sample geo-table 
+ - inserting 1 million rows into this table
+ - performing some spatial queries without Spatial Indexing
+ - performing the same queries using the Spatial Index
+
+The typical output of this demo is shown below (where test.sqlite does not
+exist before the run).
+
+\verbatim
+$ ./demo4 test.sqlite
+SQLite version: 3.7.4
+SpatiaLite version: 3.0.0-beta1
+
+
+
+now we are going to insert 1 million POINTs; wait, please ...
+
+insert row: 25000               [elapsed time: 0.370]
+insert row: 50000               [elapsed time: 0.820]
+insert row: 75000               [elapsed time: 1.280]
+insert row: 100000              [elapsed time: 1.750]
+insert row: 125000              [elapsed time: 2.210]
+insert row: 150000              [elapsed time: 2.690]
+insert row: 175000              [elapsed time: 3.180]
+insert row: 200000              [elapsed time: 3.670]
+insert row: 225000              [elapsed time: 4.210]
+insert row: 250000              [elapsed time: 4.720]
+insert row: 275000              [elapsed time: 5.240]
+insert row: 300000              [elapsed time: 5.780]
+insert row: 325000              [elapsed time: 6.330]
+insert row: 350000              [elapsed time: 6.910]
+insert row: 375000              [elapsed time: 7.510]
+insert row: 400000              [elapsed time: 8.120]
+insert row: 425000              [elapsed time: 8.750]
+insert row: 450000              [elapsed time: 9.420]
+insert row: 475000              [elapsed time: 10.120]
+insert row: 500000              [elapsed time: 10.850]
+insert row: 525000              [elapsed time: 11.610]
+insert row: 550000              [elapsed time: 12.390]
+insert row: 575000              [elapsed time: 13.200]
+insert row: 600000              [elapsed time: 14.040]
+insert row: 625000              [elapsed time: 14.900]
+insert row: 650000              [elapsed time: 15.790]
+insert row: 675000              [elapsed time: 16.700]
+insert row: 700000              [elapsed time: 17.650]
+insert row: 725000              [elapsed time: 18.620]
+insert row: 750000              [elapsed time: 19.610]
+insert row: 775000              [elapsed time: 20.650]
+insert row: 800000              [elapsed time: 21.700]
+insert row: 825000              [elapsed time: 22.760]
+insert row: 850000              [elapsed time: 23.860]
+insert row: 875000              [elapsed time: 25.060]
+insert row: 900000              [elapsed time: 26.290]
+insert row: 925000              [elapsed time: 27.480]
+insert row: 950000              [elapsed time: 28.760]
+insert row: 975000              [elapsed time: 30.020]
+insert row: 1000000             [elapsed time: 31.280]
+
+performing test#0 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2500]
+
+performing test#1 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2400]
+
+performing test#2 - not using Spatial Index
+Count(*) = 25           [elapsed time: 1.2400]
+
+performing test#0 - using the MBR cache Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#1 - using the MBR cache Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+performing test#2 - using the MBR cache Spatial Index
+Count(*) = 25           [elapsed time: 0.0000]
+
+
+sample successfully terminated
+\endverbatim
+
+As for demo3.c, note the significant speed difference between the indexed
+and non-indexed queries.
+*/
diff --git a/libspatialite/install-sh b/libspatialite/libspatialite-3.0.1/install-sh
similarity index 100%
copy from libspatialite/install-sh
copy to libspatialite/libspatialite-3.0.1/install-sh
diff --git a/libspatialite/libspatialite-3.0.1/ltmain.sh b/libspatialite/libspatialite-3.0.1/ltmain.sh
new file mode 100755
index 0000000..aa5624c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/ltmain.sh
@@ -0,0 +1,9636 @@
+
+# libtool (GNU libtool) 2.4
+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
+#
+# MODE must be one of the following:
+#
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
+#
+# Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4
+TIMESTAMP=""
+package_revision=1.3293
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# NLS nuisances: We save the old values to restore during execute mode.
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+	  export $lt_var
+	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+	fi"
+done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+$lt_unset CDPATH
+
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+
+
+: ${CP="cp -f"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" 	$lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
+
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
+
+# The name of this program:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+	# list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+	IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "$my_tmpdir"
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+	my_arg=`$ECHO "$1" | $SED \
+	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+	    $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+	s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
+        s/^# //
+	s/^# *$//
+	s/\$progname/'$progname'/
+	p
+    }' < "$progpath"
+    echo
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
+func_help ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
+        s/^# //
+	s/^# *$//
+	s*\$progname*'$progname'*
+	s*\$host*'"$host"'*
+	s*\$SHELL*'"$SHELL"'*
+	s*\$LTCC*'"$LTCC"'*
+	s*\$LTCFLAGS*'"$LTCFLAGS"'*
+	s*\$LD*'"$LD"'*
+	s/\$with_gnu_ld/'"$with_gnu_ld"'/
+	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+	p
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    $opt_debug
+
+    func_error "missing argument for $1."
+    exit_cmd=exit
+}
+
+
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
+
+
+
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+nonopt=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+	taglist="$taglist $tagname"
+
+	# Evaluate the configuration.  Be careful to quote the path
+	# and the sed script, to avoid splitting on whitespace, but
+	# also don't use non-portable quotes within backquotes within
+	# quotes we have to do it in 2 steps:
+	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+	eval "$extractedcf"
+      else
+	func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
+    opt="$1"
+    shift
+    case $opt in
+      --debug|-x)	opt_debug='set -x'
+			func_echo "enabling shell trace mode"
+			$opt_debug
+			;;
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
+			;;
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
+			shift
+			;;
+      --preserve-dup-deps)
+			opt_preserve_dup_deps=:
+			;;
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
+			opt_silent=false
+func_append preserve_args " $opt"
+			;;
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
+			shift
+			;;
+
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
+      # Separate optargs to long options:
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
+    esac
+  done
+
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+      ;;
+  esac
+
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
+
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
+    fi
+
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
+
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
+
+
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
+
+
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+	for lalib_p_l in 1 2 3 4
+	do
+	    read lalib_p_line
+	    case "$lalib_p_line" in
+		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+	    esac
+	done
+	exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)	. "$1" ;;
+    *)		. "./$1" ;;
+    esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	func_append_quoted CC_quoted "$arg"
+      done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	      # Double-quote args containing other shell metacharacters.
+	      func_append_quoted CC_quoted "$arg"
+	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
+	    case "$@ " in
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  func_echo "unable to infer tagged configuration"
+	  func_fatal_error "specify a tag with \`--tag'"
+#	else
+#	  func_verbose "using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  test -n "$libobj" && \
+	    func_fatal_error "you cannot specify \`-o' more than once"
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-pie | -fpie | -fPIE)
+          func_append pie_flag " $arg"
+	  continue
+	  ;;
+
+	-shared | -static | -prefer-pic | -prefer-non-pic)
+	  func_append later " $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  func_stripname '-Wc,' '' "$arg"
+	  args=$func_stripname_result
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+	  for arg in $args; do
+	    IFS="$save_ifs"
+	    func_append_quoted lastarg "$arg"
+	  done
+	  IFS="$save_ifs"
+	  func_stripname ' ' '' "$lastarg"
+	  lastarg=$func_stripname_result
+
+	  # Add the arguments to base_compile.
+	  func_append base_compile " $lastarg"
+	  continue
+	  ;;
+
+	*)
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_append_quoted base_compile "$lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+	func_basename "$srcfile"
+	libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	continue
+	;;
+
+      -static)
+	build_libtool_libs=no
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+      func_append removelist " $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    func_append removelist " $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $qsrcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	func_append command " -o $lobj"
+      fi
+
+      func_show_eval_locale "$command"	\
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	func_show_eval '$MV "$output_obj" "$lobj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+	suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $qsrcfile$pie_flag"
+      else
+	command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	func_append command " -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      func_append command "$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	func_show_eval '$MV "$output_obj" "$obj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+	removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $opt_mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$opt_mode'"
+        ;;
+    esac
+
+    echo
+    $ECHO "Try \`$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $opt_dlopen; do
+      test -f "$file" \
+	|| func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+	func_source "$file"
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && \
+	    func_warning "\`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  func_append dir "/$objdir"
+	else
+	  if test ! -f "$dir/$dlname"; then
+	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+	;;
+
+      *)
+	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -* | *.la | *.lo ) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if func_ltwrapper_script_p "$file"; then
+	  func_source "$file"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	elif func_ltwrapper_executable_p "$file"; then
+	  func_ltwrapper_scriptname "$file"
+	  func_source "$func_ltwrapper_scriptname_result"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_append_quoted args "$file"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+	eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+	      else
+		$lt_unset $lt_var
+	      fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+	echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libs=
+    libdirs=
+    admincmds=
+
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
+
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
+
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
+    exit $EXIT_SUCCESS
+}
+
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       case $nonopt in *shtool*) :;; *) false;; esac; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    no_mode=:
+    for arg
+    do
+      arg2=
+      if test -n "$dest"; then
+	func_append files " $dest"
+	dest=$arg
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
+	;;
+      -g | -m | -o)
+	prev=$arg
+	;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*)
+	;;
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
+	  prev=
+	else
+	  dest=$arg
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	func_fatal_help "no file or destination specified"
+      else
+	func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+	func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  func_fatal_help "\`$destdir' must be an absolute directory name"
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	func_append staticlibs " $file"
+	;;
+
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$file' is not a valid libtool archive"
+
+	library_names=
+	old_library=
+	relink_command=
+	func_source "$file"
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append current_libdirs " $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append future_libdirs " $libdir" ;;
+	  esac
+	fi
+
+	func_dirname "$file" "/" ""
+	dir="$func_dirname_result"
+	func_append dir "$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  test "$inst_prefix_dir" = "$destdir" && \
+	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  func_warning "relinking \`$file'"
+	  func_show_eval "$relink_command" \
+	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names; shift
+	if test -n "$1"; then
+	  realname="$1"
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+	      'exit $?'
+	  tstripme="$stripme"
+	  case $host_os in
+	  cygwin* | mingw* | pw32* | cegcc*)
+	    case $realname in
+	    *.dll.a)
+	      tstripme=""
+	      ;;
+	    esac
+	    ;;
+	  esac
+	  if test -n "$tstripme" && test -n "$striplib"; then
+	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
+	    for linkname
+	    do
+	      test "$linkname" != "$realname" \
+		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  func_execute_cmds "$postinstall_cmds" 'exit $?'
+	fi
+
+	# Install the pseudo-library for information purposes.
+	func_basename "$file"
+	name="$func_basename_result"
+	instname="$dir/$name"i
+	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  func_lo2o "$destfile"
+	  staticdest=$func_lo2o_result
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	test -n "$destfile" && \
+	  func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  func_lo2o "$file"
+	  staticobj=$func_lo2o_result
+	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      func_stripname '' '.exe' "$file"
+	      file=$func_stripname_result
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin* | *mingw*)
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      wrapper=$func_ltwrapper_scriptname_result
+	    else
+	      func_stripname '' '.exe' "$file"
+	      wrapper=$func_stripname_result
+	    fi
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if func_ltwrapper_script_p "$wrapper"; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  func_source "$wrapper"
+
+	  # Check the variables that should have been set.
+	  test -z "$generated_by_libtool_version" && \
+	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      func_source "$lib"
+	    fi
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      func_warning "\`$lib' has not been installed in \`$libdir'"
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  func_source "$wrapper"
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    $opt_dry_run || {
+	      if test "$finalize" = yes; then
+	        tmpdir=`func_mktempdir`
+		func_basename "$file$stripped_ext"
+		file="$func_basename_result"
+	        outputname="$tmpdir/$file"
+	        # Replace the output file specification.
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+	        $opt_silent || {
+	          func_quote_for_expand "$relink_command"
+		  eval "func_echo $func_quote_for_expand_result"
+	        }
+	        if eval "$relink_command"; then :
+	          else
+		  func_error "error: relink \`$file' with the above command before installing it"
+		  $opt_dry_run || ${RM}r "$tmpdir"
+		  continue
+	        fi
+	        file="$outputname"
+	      else
+	        func_warning "cannot relink \`$file'"
+	      fi
+	    }
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyway
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    func_stripname '' '.exe' "$destfile"
+	    destfile=$func_stripname_result
+	    ;;
+	  esac
+	  ;;
+	esac
+	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+	$opt_dry_run || if test -n "$outputname"; then
+	  ${RM}r "$tmpdir"
+	fi
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	my_dlsyms="${my_outputname}S.c"
+      else
+	func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+	# Discover the nlist of each of the dlfiles.
+	nlist="$output_objdir/${my_outputname}.nm"
+
+	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+	# Parse the name list into a source file.
+	func_verbose "creating $output_objdir/$my_dlsyms"
+
+	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+	if test "$dlself" = yes; then
+	  func_verbose "generating symbol list for \`$output'"
+
+	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+	  # Add our own program objects to the symbol list.
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	  for progfile in $progfiles; do
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -n "$exclude_expsyms"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  if test -n "$export_symbols_regex"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  # Prepare the list of exported symbols
+	  if test -z "$export_symbols"; then
+	    export_symbols="$output_objdir/$outputname.exp"
+	    $opt_dry_run || {
+	      $RM $export_symbols
+	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      case $host in
+	      *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+	        ;;
+	      esac
+	    }
+	  else
+	    $opt_dry_run || {
+	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	      case $host in
+	        *cygwin* | *mingw* | *cegcc* )
+	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+	          ;;
+	      esac
+	    }
+	  fi
+	fi
+
+	for dlprefile in $dlprefiles; do
+	  func_verbose "extracting global C symbols from \`$dlprefile'"
+	  func_basename "$dlprefile"
+	  name="$func_basename_result"
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
+	done
+
+	$opt_dry_run || {
+	  # Make sure we have at least an empty file.
+	  test -f "$nlist" || : > "$nlist"
+
+	  if test -n "$exclude_expsyms"; then
+	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	    $MV "$nlist"T "$nlist"
+	  fi
+
+	  # Try sorting and uniquifying the output.
+	  if $GREP -v "^: " < "$nlist" |
+	      if sort -k 3 </dev/null >/dev/null 2>&1; then
+		sort -k 3
+	      else
+		sort +2
+	      fi |
+	      uniq > "$nlist"S; then
+	    :
+	  else
+	    $GREP -v "^: " < "$nlist" > "$nlist"S
+	  fi
+
+	  if test -f "$nlist"S; then
+	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+	  else
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	  fi
+
+	  echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+	  case $need_lib_prefix in
+	  no)
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  *)
+	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  esac
+	  echo >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	} # !$opt_dry_run
+
+	pic_flag_for_symtable=
+	case "$compile_command " in
+	*" -static "*) ;;
+	*)
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+	  *-*-hpux*)
+	    pic_flag_for_symtable=" $pic_flag"  ;;
+	  *)
+	    if test "X$my_pic_p" != Xno; then
+	      pic_flag_for_symtable=" $pic_flag"
+	    fi
+	    ;;
+	  esac
+	  ;;
+	esac
+	symtab_cflags=
+	for arg in $LTCFLAGS; do
+	  case $arg in
+	  -pie | -fpie | -fPIE) ;;
+	  *) func_append symtab_cflags " $arg" ;;
+	  esac
+	done
+
+	# Now compile the dynamic symbol file.
+	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+	# Clean up the generated files.
+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+	# Transform the symbol file into the correct name.
+	symfileobj="$output_objdir/${my_outputname}S.$objext"
+	case $host in
+	*cygwin* | *mingw* | *cegcc* )
+	  if test -f "$output_objdir/$my_outputname.def"; then
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	  else
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  fi
+	  ;;
+	*)
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  ;;
+	esac
+	;;
+      *)
+	func_fatal_error "unknown suffix for \`$my_dlsyms'"
+	;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+	$SED -n -e '
+	    1,100{
+		/ I /{
+		    s,.*,import,
+		    p
+		    q
+		}
+	    }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+	*) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+	*" $my_xlib_u "*)
+	  func_arith $extracted_serial + 1
+	  extracted_serial=$func_arith_result
+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
+	*) break ;;
+	esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+	func_verbose "Extracting $my_xabs"
+	# Do not bother doing anything if just a dry run
+	$opt_dry_run || {
+	  darwin_orig_dir=`pwd`
+	  cd $my_xdir || exit $?
+	  darwin_archive=$my_xabs
+	  darwin_curdir=`pwd`
+	  darwin_base_archive=`basename "$darwin_archive"`
+	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+	  if test -n "$darwin_arches"; then
+	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+	    darwin_arch=
+	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+	    for darwin_arch in  $darwin_arches ; do
+	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+	      cd "$darwin_curdir"
+	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+	    done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+	    darwin_file=
+	    darwin_files=
+	    for darwin_file in $darwin_filelist; do
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+	      $LIPO -create -output "$darwin_file" $darwin_files
+	    done # $darwin_filelist
+	    $RM -rf unfat-$$
+	    cd "$darwin_orig_dir"
+	  else
+	    cd $darwin_orig_dir
+	    func_extract_an_archive "$my_xdir" "$my_xabs"
+	  fi # $darwin_arches
+	} # !$opt_dry_run
+	;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+	;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+	func_emit_wrapper_arg1=${1-no}
+
+	$ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  for lt_wr_arg
+  do
+    case \$lt_wr_arg in
+    --lt-*) ;;
+    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+    esac
+    shift
+  done
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+	  $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$ECHO \"\$relink_command_output\" >&2
+	$RM \"\$progdir/\$file\"
+	exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+	else
+	  $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	$ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+      func_exec_program \${1+\"\$@\"}
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+	cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+*/
+EOF
+	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+	    cat <<EOF
+volatile const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_path "$temp_rpath"
+	      cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test -n "$dllsearchpath"; then
+              func_to_host_path "$dllsearchpath:"
+	      cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test "$fast_install" = yes; then
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+	    else
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+	    fi
+
+
+	    cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  newargz = XMALLOC (char *, argc + 1);
+
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+	{
+EOF
+	    case "$host" in
+	      *mingw* | *cygwin* )
+		# make stdout use "unix" line endings
+		echo "          setmode(1,_O_BINARY);"
+		;;
+	      esac
+
+	    cat <<"EOF"
+	  lt_dump_script (stdout);
+	  return 0;
+	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
+EOF
+
+	    cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+	    cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+	    case $host_os in
+	      mingw*)
+	    cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+	*p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+	*p = '/';
+      }
+  }
+EOF
+	    ;;
+	    esac
+
+	    cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
+  for (i = 0; i < newargc; i++)
+    {
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
+    }
+
+EOF
+
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
+      return 127;
+    }
+  return rval;
+EOF
+		;;
+	      *)
+		cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+		;;
+	    esac
+
+	    cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+			  string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+	return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+	{
+	  concat_name = xstrdup (wrapper);
+	  if (check_executable (concat_name))
+	    return concat_name;
+	  XFREE (concat_name);
+	}
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+	has_slash = 1;
+	break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+	{
+	  for (p = path; *p; p = p_next)
+	    {
+	      const char *q;
+	      size_t p_len;
+	      for (q = p; *q; q++)
+		if (IS_PATH_SEPARATOR (*q))
+		  break;
+	      p_len = q - p;
+	      p_next = (*q == '\0' ? q : q + 1);
+	      if (p_len == 0)
+		{
+		  /* empty path: current directory */
+		  if (getcwd (tmp, LT_PATHMAX) == NULL)
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
+		  tmp_len = strlen (tmp);
+		  concat_name =
+		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, tmp, tmp_len);
+		  concat_name[tmp_len] = '/';
+		  strcpy (concat_name + tmp_len + 1, wrapper);
+		}
+	      else
+		{
+		  concat_name =
+		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, p, p_len);
+		  concat_name[p_len] = '/';
+		  strcpy (concat_name + p_len + 1, wrapper);
+		}
+	      if (check_executable (concat_name))
+		return concat_name;
+	      XFREE (concat_name);
+	    }
+	}
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
+      if (lstat (tmp_pathspec, &s) == 0)
+	{
+	  if (S_ISLNK (s.st_mode) != 0)
+	    {
+	      has_symlinks = 1;
+	      break;
+	    }
+
+	  /* search backwards for last DIR_SEPARATOR */
+	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    p--;
+	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    {
+	      /* no more DIR_SEPARATORS left */
+	      break;
+	    }
+	  *p = '\0';
+	}
+      else
+	{
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
+	}
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+	*str = '\0';
+    }
+  return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
+	       const char *message, va_list ap)
+{
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+  va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+              $SED -e 's/\([\\"]\)/\\\1/g' \
+	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
+
+            cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    bindir=
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	break
+	;;
+      -all-static | -static | -static-libtool-libs)
+	case $arg in
+	-all-static)
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    func_warning "complete static linking is impossible in this configuration"
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	-static)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=built
+	  ;;
+	-static-libtool-libs)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	esac
+	build_libtool_libs=no
+	build_old_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  func_append compile_command " @OUTPUT@"
+	  func_append finalize_command " @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    func_append compile_command " @SYMFILE@"
+	    func_append finalize_command " @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      func_append dlfiles " $arg"
+	    else
+	      func_append dlprefiles " $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  test -f "$arg" \
+	    || func_fatal_error "symbol file \`$arg' does not exist"
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	framework)
+	  case $host in
+	    *-*-darwin*)
+	      case "$deplibs " in
+		*" $qarg.ltframework "*) ;;
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
+		   ;;
+	      esac
+	      ;;
+	  esac
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat "$save_arg"`
+	    do
+#	      func_append moreargs " $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if func_lalib_unsafe_p "$arg"; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		func_source "$arg"
+
+		if test -z "$pic_object" ||
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none &&
+		   test "$non_pic_object" = none; then
+		  func_fatal_error "cannot find name of object for \`$arg'"
+		fi
+
+		# Extract subdirectory from the argument.
+		func_dirname "$arg" "/" ""
+		xdir="$func_dirname_result"
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      func_append dlfiles " $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    func_append dlprefiles " $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  func_append libobjs " $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  func_append non_pic_objects " $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		else
+		  # If the PIC object exists, use it instead.
+		  # $xdir was prepended to $pic_object above.
+		  non_pic_object="$pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if $opt_dry_run; then
+		  # Extract subdirectory from the argument.
+		  func_dirname "$arg" "/" ""
+		  xdir="$func_dirname_result"
+
+		  func_lo2o "$arg"
+		  pic_object=$xdir$objdir/$func_lo2o_result
+		  non_pic_object=$xdir$func_lo2o_result
+		  func_append libobjs " $pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+	        else
+		  func_fatal_error "\`$arg' is not a valid libtool object"
+		fi
+	      fi
+	    done
+	  else
+	    func_fatal_error "link input file \`$arg' does not exist"
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    func_fatal_error "only absolute run-paths are allowed"
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) func_append rpath " $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) func_append xrpath " $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	shrext)
+	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	weak)
+	  func_append weak_libs " $arg"
+	  prev=
+	  continue
+	  ;;
+	xcclinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xcompiler)
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
+	  prev=
+	  func_append compile_command " $wl$qarg"
+	  func_append finalize_command " $wl$qarg"
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  # See comment for -static flag below, for more details.
+	  func_append compile_command " $link_static_flag"
+	  func_append finalize_command " $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  func_fatal_error "more than one -exported-symbols argument is not allowed"
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -framework)
+	prev=framework
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
+	  if test "$#" -gt 0; then
+	    func_fatal_error "require no space between \`-L' and \`$1'"
+	  else
+	    func_fatal_error "need path for \`-L' option"
+	  fi
+	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  test -z "$absdir" && \
+	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
+	*)
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  ::) dllsearchpath=$dir;;
+	  *) func_append dllsearchpath ":$dir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    func_append deplibs " System.ltframework"
+	    continue
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	func_append deplibs " $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	prev=xcompiler
+	continue
+	;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	case "$new_inherited_linker_flags " in
+	    *" $arg "*) ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
+	esac
+	continue
+	;;
+
+      -multi_module)
+	single_module="${wl}-multi_module"
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # and Darwin in order for the loader to find any dlls it needs.
+	  func_warning "\`-no-install' is ignored for $host"
+	  func_warning "assuming \`-no-fast-install' instead"
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	func_stripname '-R' '' "$arg"
+	dir=$func_stripname_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
+	*)
+	  func_fatal_error "only absolute run-paths are allowed"
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) func_append xrpath " $dir" ;;
+	esac
+	continue
+	;;
+
+      -shared)
+	# The effects of -shared are defined in a previous loop.
+	continue
+	;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -static | -static-libtool-libs)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -weak)
+        prev=weak
+	continue
+	;;
+
+      -Wc,*)
+	func_stripname '-Wc,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Wl,*)
+	func_stripname '-Wl,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # -msg_* for osf cc
+      -msg_*)
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      *.$objext)
+	# A standard object.
+	func_append objs " $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if func_lalib_unsafe_p "$arg"; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  func_source "$arg"
+
+	  if test -z "$pic_object" ||
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none &&
+	     test "$non_pic_object" = none; then
+	    func_fatal_error "cannot find name of object for \`$arg'"
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  func_dirname "$arg" "/" ""
+	  xdir="$func_dirname_result"
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		func_append dlfiles " $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      func_append dlprefiles " $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    func_append libobjs " $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    func_append non_pic_objects " $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  else
+	    # If the PIC object exists, use it instead.
+	    # $xdir was prepended to $pic_object above.
+	    non_pic_object="$pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if $opt_dry_run; then
+	    # Extract subdirectory from the argument.
+	    func_dirname "$arg" "/" ""
+	    xdir="$func_dirname_result"
+
+	    func_lo2o "$arg"
+	    pic_object=$xdir$objdir/$func_lo2o_result
+	    non_pic_object=$xdir$func_lo2o_result
+	    func_append libobjs " $pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  else
+	    func_fatal_error "\`$arg' is not a valid libtool object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	func_resolve_sysroot "$arg"
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  func_append dlfiles " $func_resolve_sysroot_result"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  func_append dlprefiles " $func_resolve_sysroot_result"
+	  prev=
+	else
+	  func_append deplibs " $func_resolve_sysroot_result"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_preserve_dup_deps ; then
+	case "$libs " in
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	esac
+      fi
+      func_append libs " $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+	  esac
+	  func_append pre_post_deps " $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+	passes="conv dlpreopen link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+	## FIXME: Find the place where the list is rebuilt in the wrong
+	##        order, and fix it there properly
+        tmp_deplibs=
+	for deplib in $deplibs; do
+	  tmp_deplibs="$deplib $tmp_deplibs"
+	done
+	deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+	# Collect and forward deplibs of preopened libtool libs
+	for lib in $dlprefiles; do
+	  # Ignore non-libtool-libs
+	  dependency_libs=
+	  func_resolve_sysroot "$lib"
+	  case $lib in
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
+	  esac
+
+	  # Collect preopened libtool deplibs, except any this library
+	  # has declared as weak libs
+	  for deplib in $dependency_libs; do
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
+	    case " $weak_libs " in
+	    *" $deplib_base "*) ;;
+	    *) func_append deplibs " $deplib" ;;
+	    esac
+	  done
+	done
+	libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    func_append compiler_flags " $deplib"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    func_warning "\`-l' is ignored for archives/objects"
+	    continue
+	  fi
+	  func_stripname '-l' '' "$deplib"
+	  name=$func_stripname_result
+	  if test "$linkmode" = lib; then
+	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+	  else
+	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+	  fi
+	  for searchdir in $searchdirs; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if func_lalib_p "$lib"; then
+		  library_names=
+		  old_library=
+		  func_source "$lib"
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    func_dirname "$lib" "" "."
+		    ladir="$func_dirname_result"
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+		;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	*.ltframework)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  *)
+	    func_warning "\`-L' is ignored for archives/objects"
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    func_stripname '-R' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) func_append xrpath " $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    # Linking convenience modules into shared libraries is allowed,
+	    # but linking other static libraries is non-portable.
+	    case " $dlpreconveniencelibs " in
+	    *" $deplib "*) ;;
+	    *)
+	      valid_a_lib=no
+	      case $deplibs_check_method in
+		match_pattern*)
+		  set dummy $deplibs_check_method; shift
+		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+		    | $EGREP "$match_pattern_regex" > /dev/null; then
+		    valid_a_lib=yes
+		  fi
+		;;
+		pass_all)
+		  valid_a_lib=yes
+		;;
+	      esac
+	      if test "$valid_a_lib" != yes; then
+		echo
+		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
+	      else
+		echo
+		$ECHO "*** Warning: Linking the shared library $output against the"
+		$ECHO "*** static library $deplib is not portable!"
+		deplibs="$deplib $deplibs"
+	      fi
+	      ;;
+	    esac
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      func_append newdlprefiles " $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      func_append newdlfiles " $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+	fi
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$lib" \
+	  || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+	func_dirname "$lib" "" "."
+	ladir="$func_dirname_result"
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	inherited_linker_flags=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+	avoidtemprpath=
+
+
+	# Read the .la file
+	func_source "$lib"
+
+	# Convert "-framework foo" to "foo.ltframework"
+	if test -n "$inherited_linker_flags"; then
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+	    case " $new_inherited_linker_flags " in
+	      *" $tmp_inherited_linker_flag "*) ;;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+	    esac
+	  done
+	fi
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      func_fatal_error "cannot find name of link library for \`$lib'"
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    func_fatal_error "\`$lib' is not a convenience library"
+	  fi
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    deplibs="$deplib $deplibs"
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
+	if test -z "$linklib"; then
+	  func_fatal_error "cannot find name of link library for \`$lib'"
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    func_append dlprefiles " $lib $dependency_libs"
+	  else
+	    func_append newdlfiles " $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    func_warning "cannot determine absolute directory name of \`$ladir'"
+	    func_warning "passing it literally to the linker, although it might fail"
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	func_basename "$lib"
+	laname="$func_basename_result"
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    func_warning "library \`$lib' was moved."
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
+	  fi
+	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+	else
+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  else
+	    dir="$ladir/$objdir"
+	    absdir="$abs_ladir/$objdir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  fi
+	fi # $installed = yes
+	func_stripname 'lib' '.la' "$laname"
+	name=$func_stripname_result
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir" && test "$linkmode" = prog; then
+	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  func_append newlib_search_path " $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) func_stripname '-L' '' "$deplib"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
+		 ;;
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { { test "$prefer_static_libs" = no ||
+	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
+	       test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath:" in
+	      *"$absdir:"*) ;;
+	      *) func_append temp_rpath "$absdir:" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	use_static_libs=$prefer_static_libs
+	if test "$use_static_libs" = built && test "$installed" = yes; then
+	  use_static_libs=no
+	fi
+	if test -n "$library_names" &&
+	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+	  case $host in
+	  *cygwin* | *mingw* | *cegcc*)
+	      # No point in relinking DLLs because paths are not encoded
+	      func_append notinst_deplibs " $lib"
+	      need_relink=no
+	    ;;
+	  *)
+	    if test "$installed" = no; then
+	      func_append notinst_deplibs " $lib"
+	      need_relink=yes
+	    fi
+	    ;;
+	  esac
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on some
+	  # systems (darwin).  Don't bleat about dlopened modules though!
+	  dlopenmodule=""
+	  for dlpremoduletest in $dlprefiles; do
+	    if test "X$dlpremoduletest" = "X$lib"; then
+	      dlopenmodule="$dlpremoduletest"
+	      break
+	    fi
+	  done
+	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+	    echo
+	    if test "$linkmode" = prog; then
+	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $ECHO "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    shift
+	    realname="$1"
+	    shift
+	    libname=`eval "\\$ECHO \"$libname_spec\""`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw* | *cegcc*)
+	        func_arith $current - $age
+		major=$func_arith_result
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    func_basename "$soroot"
+	    soname="$func_basename_result"
+	    func_stripname 'lib' '.dll' "$soname"
+	    newlib=libimp-$func_stripname_result.a
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      func_verbose "extracting exported symbol list from \`$soname'"
+	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      func_verbose "generating import library for \`$soname'"
+	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+		    *-*-unixware7*) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a (non-dlopened) module then we can not
+		    # link against it, someone is ignoring the earlier warnings
+		    if /usr/bin/file -L $add 2> /dev/null |
+			 $GREP ": [^:]* bundle" >/dev/null ; then
+		      if test "X$dlopenmodule" != "X$lib"; then
+			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
+			if test -z "$old_library" ; then
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
+			else
+			  add="$dir/$old_library"
+			fi
+		      elif test -n "$old_library"; then
+			add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes &&
+	         test "$hardcode_direct_absolute" = no; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case $libdir in
+		    [\\/]*)
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      func_fatal_configuration "unsupported hardcode properties"
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes &&
+		 test "$hardcode_minus_L" != yes &&
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes &&
+	       test "$hardcode_direct_absolute" = no; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+		add="$inst_prefix_dir$libdir/$linklib"
+	      else
+		add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case $libdir in
+		  [\\/]*)
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    echo
+	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) func_stripname '-R' '' "$libdir"
+	           temp_xrpath=$func_stripname_result
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) func_append xrpath " $temp_xrpath";;
+		   esac;;
+	      *) func_append temp_deplibs " $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  func_append newlib_search_path " $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $func_resolve_sysroot_result"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      path=
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
+	        func_dirname "$deplib" "" "."
+		dir=$func_dirname_result
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    func_warning "cannot determine absolute directory name of \`$dir'"
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if $GREP "^installed=no" $deplib > /dev/null; then
+		case $host in
+		*-*-darwin*)
+		  depdepl=
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$absdir/$objdir/$depdepl" ; then
+		      depdepl="$absdir/$objdir/$depdepl"
+		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+		      path=
+		    fi
+		  fi
+		  ;;
+		*)
+		  path="-L$absdir/$objdir"
+		  ;;
+		esac
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  test -z "$libdir" && \
+		    func_fatal_error "\`$deplib' is not a valid libtool archive"
+		  test "$absdir" != "$libdir" && \
+		    func_warning "\`$deplib' seems to be moved"
+
+		  path="-L$absdir"
+		fi
+		;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$path $deplibs" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+	if test "$linkmode" = "prog"; then
+	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+	else
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) func_append lib_search_path " $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) func_append tmp_libs " $deplib" ;;
+	      esac
+	      ;;
+	    *) func_append tmp_libs " $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  func_append tmp_libs " $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+	func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      func_append objs "$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	func_stripname 'lib' '.la' "$outputname"
+	name=$func_stripname_result
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	test "$module" = no && \
+	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  func_stripname '' '.la' "$outputname"
+	  name=$func_stripname_result
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  func_stripname '' '.la' "$outputname"
+	  libname=$func_stripname_result
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+	else
+	  echo
+	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+	  $ECHO "*** objects $objs is not portable!"
+	  func_append libobjs " $objs"
+	fi
+      fi
+
+      test "$dlself" != no && \
+	func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+	func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	test -n "$vinfo" && \
+	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+	test -n "$release" && \
+	  func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	shift
+	IFS="$save_ifs"
+
+	test -n "$7" && \
+	  func_fatal_help "too many parameters to \`-version-info'"
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$1"
+	  number_minor="$2"
+	  number_revision="$3"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  darwin|linux|osf|windows|none)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|qnx|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_minor"
+	    lt_irix_increment=no
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$1"
+	  revision="$2"
+	  age="$3"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "CURRENT \`$current' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $revision in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "REVISION \`$revision' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $age in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "AGE \`$age' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  func_arith $current + 1
+	  minor_current=$func_arith_result
+	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	irix | nonstopux)
+	  if test "X$lt_irix_increment" = "Xno"; then
+	    func_arith $current - $age
+	  else
+	    func_arith $current - $age + 1
+	  fi
+	  major=$func_arith_result
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    func_arith $revision - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    func_arith $current - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  func_append verstring ":${current}.0"
+	  ;;
+
+	qnx)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  func_arith $current - $age
+	  major=$func_arith_result
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  func_fatal_configuration "unknown library version type \`$version_type'"
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    func_warning "undefined symbols not allowed in $host shared libraries"
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_append libobjs " $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$opt_mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$ECHO "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext | *.gcno)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+		 then
+		   continue
+		 fi
+	       fi
+	       func_append removelist " $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	test -n "$removelist" && \
+	  func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	func_append oldlibs " $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) func_append dlfiles " $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) func_append dlprefiles " $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    func_append deplibs " System.ltframework"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    ;;
+	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      func_append deplibs " -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $opt_dry_run || $RM conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $opt_dry_run || $RM conftest
+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    func_append newdeplibs " $i"
+		    i=""
+		    ;;
+		  esac
+		fi
+		if test -n "$i" ; then
+		  libname=`eval "\\$ECHO \"$libname_spec\""`
+		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		  set dummy $deplib_matches; shift
+		  deplib_match=$1
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    func_append newdeplibs " $i"
+		  else
+		    droppeddeps=yes
+		    echo
+		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		$opt_dry_run || $RM conftest
+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      func_append newdeplibs " $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval "\\$ECHO \"$libname_spec\""`
+		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		    set dummy $deplib_matches; shift
+		    deplib_match=$1
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      func_append newdeplibs " $i"
+		    else
+		      droppeddeps=yes
+		      echo
+		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  echo
+		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method; shift
+	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null |
+			 $GREP " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+			 $SED -e 10q |
+			 $EGREP "$file_magic_regex" > /dev/null; then
+			func_append newdeplibs " $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method; shift
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+		       $EGREP "$match_pattern_regex" > /dev/null; then
+		      func_append newdeplibs " $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+	    done
+	  fi
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	    ;;
+	  esac
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library with the System framework
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+	*-*-darwin*)
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		func_append dep_rpath " $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_apped perm_rpath " $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	    else
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	    fi
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      func_append rpath "$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	shift
+	realname="$1"
+	shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	linknames=
+	for link
+	do
+	  func_append linknames " $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	test "X$libobjs" = "X " && libobjs=
+
+	delfiles=
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+	  export_symbols="$output_objdir/$libname.uexp"
+	  func_append delfiles " $export_symbols"
+	fi
+
+	orig_export_symbols=
+	case $host_os in
+	cygwin* | mingw* | cegcc*)
+	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+	    # exporting using user supplied symfile
+	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+	      # and it's NOT already a .def file. Must figure out
+	      # which of the given symbols are data symbols and tag
+	      # them as such. So, trigger use of export_symbols_cmds.
+	      # export_symbols gets reassigned inside the "prepare
+	      # the list of exported symbols" if statement, so the
+	      # include_expsyms logic still works.
+	      orig_export_symbols="$export_symbols"
+	      export_symbols=
+	      always_export_symbols=yes
+	    fi
+	  fi
+	  ;;
+	esac
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    func_verbose "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $opt_dry_run || $RM $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd1 in $cmds; do
+	      IFS="$save_ifs"
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
+		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
+		skipped_export=false
+	      else
+		# The command line is too long to execute in one step.
+		func_verbose "using reloadable object file for export list..."
+		skipped_export=:
+		# Break out early, otherwise skipped_export may be
+		# set to false by a later but shorter cmd.
+		break
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  tmp_export_symbols="$export_symbols"
+	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	fi
+
+	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+	  # The given exports_symbols file has to be filtered, so filter it.
+	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	  # 's' commands which not all seds can handle. GNU sed should be fine
+	  # though. Also, the filter scales superlinearly with the number of
+	  # global variables. join(1) would be nice here, but unfortunately
+	  # isn't a blessed tool.
+	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	  export_symbols=$output_objdir/$libname.def
+	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+	  case " $convenience " in
+	  *" $test_deplib "*) ;;
+	  *)
+	    func_append tmp_deplibs " $test_deplib"
+	    ;;
+	  esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec" &&
+	    test "$compiler_needs_object" = yes &&
+	    test -z "$libobjs"; then
+	    # extract the archives, so we have objects to list.
+	    # TODO: could optimize this to just extract one archive.
+	    whole_archive_flag_spec=
+	  fi
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    func_append generated " $gentop"
+
+	    func_extract_archives $gentop $convenience
+	    func_append libobjs " $func_extract_archives_result"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  func_append linker_flags " $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    eval test_cmds=\"$archive_expsym_cmds\"
+	    cmds=$archive_expsym_cmds
+	  else
+	    eval test_cmds=\"$archive_cmds\"
+	    cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" &&
+	   func_len " $test_cmds" &&
+	   len=$func_len_result &&
+	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise
+	  # or, if using GNU ld and skipped_export is not :, use a linker
+	  # script.
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+	  func_basename "$output"
+	  output_la=$func_basename_result
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  last_robj=
+	  k=1
+
+	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+	    output=${output_objdir}/${output_la}.lnkscript
+	    func_verbose "creating GNU ld script: $output"
+	    echo 'INPUT (' > $output
+	    for obj in $save_libobjs
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
+	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+	    output=${output_objdir}/${output_la}.lnk
+	    func_verbose "creating linker input file list: $output"
+	    : > $output
+	    set x $save_libobjs
+	    shift
+	    firstobj=
+	    if test "$compiler_needs_object" = yes; then
+	      firstobj="$1 "
+	      shift
+	    fi
+	    for obj
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+	  else
+	    if test -n "$save_libobjs"; then
+	      func_verbose "creating reloadable object files..."
+	      output=$output_objdir/$output_la-${k}.$objext
+	      eval test_cmds=\"$reload_cmds\"
+	      func_len " $test_cmds"
+	      len0=$func_len_result
+	      len=$len0
+
+	      # Loop over the list of objects to be linked.
+	      for obj in $save_libobjs
+	      do
+		func_len " $obj"
+		func_arith $len + $func_len_result
+		len=$func_arith_result
+		if test "X$objlist" = X ||
+		   test "$len" -lt "$max_cmd_len"; then
+		  func_append objlist " $obj"
+		else
+		  # The command $test_cmds is almost too long, add a
+		  # command to the queue.
+		  if test "$k" -eq 1 ; then
+		    # The first file doesn't have a previous command to add.
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
+		  else
+		    # All subsequent reloadable object files will link in
+		    # the last one created.
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+		  fi
+		  last_robj=$output_objdir/$output_la-${k}.$objext
+		  func_arith $k + 1
+		  k=$func_arith_result
+		  output=$output_objdir/$output_la-${k}.$objext
+		  objlist=" $obj"
+		  func_len " $last_robj"
+		  func_arith $len0 + $func_len_result
+		  len=$func_arith_result
+		fi
+	      done
+	      # Handle the remaining objects by creating one last
+	      # reloadable object file.  All subsequent reloadable object
+	      # files will link in the last one created.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+	      if test -n "$last_robj"; then
+	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+	      fi
+	      func_append delfiles " $output"
+
+	    else
+	      output=
+	    fi
+
+	    if ${skipped_export-false}; then
+	      func_verbose "generating symbol list for \`$libname.la'"
+	      export_symbols="$output_objdir/$libname.exp"
+	      $opt_dry_run || $RM $export_symbols
+	      libobjs=$output
+	      # Append the command to create the export file.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+	      if test -n "$last_robj"; then
+		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+	      fi
+	    fi
+
+	    test -n "$save_libobjs" &&
+	      func_verbose "creating a temporary reloadable object file: $output"
+
+	    # Loop through the commands generated above and execute them.
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $concat_cmds; do
+	      IFS="$save_ifs"
+	      $opt_silent || {
+		  func_quote_for_expand "$cmd"
+		  eval "func_echo $func_quote_for_expand_result"
+	      }
+	      $opt_dry_run || eval "$cmd" || {
+		lt_exit=$?
+
+		# Restore the uninstalled library and exit
+		if test "$opt_mode" = relink; then
+		  ( cd "$output_objdir" && \
+		    $RM "${realname}T" && \
+		    $MV "${realname}U" "$realname" )
+		fi
+
+		exit $lt_exit
+	      }
+	    done
+	    IFS="$save_ifs"
+
+	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+
+          if ${skipped_export-false}; then
+	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	      tmp_export_symbols="$export_symbols"
+	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	    fi
+
+	    if test -n "$orig_export_symbols"; then
+	      # The given exports_symbols file has to be filtered, so filter it.
+	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	      # 's' commands which not all seds can handle. GNU sed should be fine
+	      # though. Also, the filter scales superlinearly with the number of
+	      # global variables. join(1) would be nice here, but unfortunately
+	      # isn't a blessed tool.
+	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	      export_symbols=$output_objdir/$libname.def
+	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	    fi
+	  fi
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	      cmds=$archive_expsym_cmds
+	    else
+	      cmds=$archive_cmds
+	    fi
+	  fi
+	fi
+
+	if test -n "$delfiles"; then
+	  # Append the command to remove temporary files to $cmds.
+	  eval cmds=\"\$cmds~\$RM $delfiles\"
+	fi
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append libobjs " $func_extract_archives_result"
+	  test "X$libobjs" = "X " && libobjs=
+	fi
+
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $opt_silent || {
+	    func_quote_for_expand "$cmd"
+	    eval "func_echo $func_quote_for_expand_result"
+	  }
+	  $opt_dry_run || eval "$cmd" || {
+	    lt_exit=$?
+
+	    # Restore the uninstalled library and exit
+	    if test "$opt_mode" = relink; then
+	      ( cd "$output_objdir" && \
+	        $RM "${realname}T" && \
+		$MV "${realname}U" "$realname" )
+	    fi
+
+	    exit $lt_exit
+	  }
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+	  if test -n "$convenience"; then
+	    if test -z "$whole_archive_flag_spec"; then
+	      func_show_eval '${RM}r "$gentop"'
+	    fi
+	  fi
+
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+	test -n "$objs$old_deplibs" && \
+	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+	libobj=$output
+	func_lo2o "$libobj"
+	obj=$func_lo2o_result
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+	else
+	  gentop="$output_objdir/${obj}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $convenience
+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+	fi
+      fi
+
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+	func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) func_stripname '' '.exe' "$output"
+	          output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+	&& test "$dlopen_self" = unknown \
+	&& test "$dlopen_self_static" = unknown && \
+	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+	# Don't allow lazy linking, it breaks C++ global constructors
+	# But is supposedly fixed on 10.4 or later (yay!).
+	if test "$tagname" = CXX ; then
+	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+	    10.[0123])
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
+	    ;;
+	  esac
+	fi
+	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $compile_deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $compile_deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append perm_rpath " $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  ::) dllsearchpath=$libdir;;
+	  *) func_append dllsearchpath ":$libdir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+	func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+	# Replace the output file specification.
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	exit_status=0
+	func_show_eval "$link_command" 'exit_status=$?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	# Delete the generated files.
+	if test -f "$output_objdir/${outputname}S.${objext}"; then
+	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+	fi
+
+	exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$opt_dry_run || $RM $output
+	# Link the executable and exit
+	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	func_warning "this platform does not like uninstalled shared libraries"
+	func_warning "\`$output' will be relinked during installation"
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    func_quote_for_eval "$var_value"
+	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) func_stripname '' '.exe' "$output"
+	         output=$func_stripname_result ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    func_stripname '' '.exe' "$outputname"
+	    outputname=$func_stripname_result ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    func_dirname_and_basename "$output" "" "."
+	    output_name=$func_basename_result
+	    output_path=$func_dirname_result
+	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
+	    cwrapper="$output_path/$output_name.exe"
+	    $RM $cwrappersource $cwrapper
+	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_cwrapperexe_src > $cwrappersource
+
+	    # The wrapper executable is built using the $host compiler,
+	    # because it contains $host paths and files. If cross-
+	    # compiling, it, like the target executable, must be
+	    # executed on the $host or under an emulation environment.
+	    $opt_dry_run || {
+	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+	      $STRIP $cwrapper
+	    }
+
+	    # Now, create the wrapper script for func_source use:
+	    func_ltwrapper_scriptname $cwrapper
+	    $RM $func_ltwrapper_scriptname_result
+	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+	    $opt_dry_run || {
+	      # note: this script will not be executed, so do not chmod.
+	      if test "x$build" = "x$host" ; then
+		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+	      else
+		func_emit_wrapper no > $func_ltwrapper_scriptname_result
+	      fi
+	    }
+	  ;;
+	  * )
+	    $RM $output
+	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_wrapper no > $output
+	    chmod +x $output
+	  ;;
+	esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save $symfileobj"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	  if test "$preload" = yes && test -f "$symfileobj"; then
+	    func_append oldobjs " $symfileobj"
+	  fi
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	func_append generated " $gentop"
+
+	func_extract_archives $gentop $addlibs
+	func_append oldobjs " $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+	cmds=$old_archive_from_new_cmds
+      else
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append oldobjs " $func_extract_archives_result"
+	fi
+
+	# POSIX demands no paths to be encoded in archives.  We have
+	# to avoid creating archives with duplicate basenames if we
+	# might have to extract them afterwards, e.g., when creating a
+	# static archive out of a convenience library, or when linking
+	# the entirety of a libtool archive into another (currently
+	# not supported by libtool).
+	if (for obj in $oldobjs
+	    do
+	      func_basename "$obj"
+	      $ECHO "$func_basename_result"
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	  :
+	else
+	  echo "copying selected object files to avoid basename conflicts..."
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+	  func_mkdir_p "$gentop"
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  counter=1
+	  for obj in $save_oldobjs
+	  do
+	    func_basename "$obj"
+	    objbase="$func_basename_result"
+	    case " $oldobjs " in
+	    " ") oldobjs=$obj ;;
+	    *[\ /]"$objbase "*)
+	      while :; do
+		# Make sure we don't pick an alternate name that also
+		# overlaps.
+		newobj=lt$counter-$objbase
+		func_arith $counter + 1
+		counter=$func_arith_result
+		case " $oldobjs " in
+		*[\ /]"$newobj "*) ;;
+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+		esac
+	      done
+	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
+	      ;;
+	    *) func_append oldobjs " $obj" ;;
+	    esac
+	  done
+	fi
+	eval cmds=\"$old_archive_cmds\"
+
+	func_len " $cmds"
+	len=$func_len_result
+	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  func_verbose "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  eval test_cmds=\"$old_archive_cmds\"
+	  func_len " $test_cmds"
+	  len0=$func_len_result
+	  len=$len0
+	  for obj in $save_oldobjs
+	  do
+	    func_len " $obj"
+	    func_arith $len + $func_len_result
+	    len=$func_arith_result
+	    func_append objlist " $obj"
+	    if test "$len" -lt "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+		RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	      len=$len0
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  func_quote_for_eval "$var_value"
+	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		func_basename "$deplib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$deplib' is not a valid libtool archive"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
+		;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+
+	    for lib in $dlfiles; do
+	      case $lib in
+	      *.la)
+	        func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      *) func_append newdlfiles " $lib" ;;
+	      esac
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+	      *.la)
+		# Only pass preopened files to the pseudo-archive (for
+		# eventual linking with the app. that links it) if we
+		# didn't already link the preopened objects directly into
+		# the library:
+		func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      esac
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlfiles " $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlprefiles " $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $RM $output
+	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
+	  esac
+	  $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $ECHO >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+	odir="$objdir"
+      else
+	odir="$dir/$objdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$opt_mode" = uninstall && odir="$dir"
+
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
+	case " $rmdirs " in
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+	 { test -h "$file"; } >/dev/null 2>&1 ||
+	 test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if func_lalib_p "$file"; then
+	  func_source $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    func_append rmfiles " $odir/$n"
+	  done
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+	  case "$opt_mode" in
+	  clean)
+	    case " $library_names " in
+	    *" $dlname "*) ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+	    esac
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+	    ;;
+	  uninstall)
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	    ;;
+	  esac
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if func_lalib_p "$file"; then
+
+	  # Read the .lo file
+	  func_source $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" &&
+	     test "$pic_object" != none; then
+	    func_append rmfiles " $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" &&
+	     test "$non_pic_object" != none; then
+	    func_append rmfiles " $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$opt_mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    func_stripname '' '.exe' "$file"
+	    file=$func_stripname_result
+	    func_stripname '' '.exe' "$name"
+	    noexename=$func_stripname_result
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    func_append rmfiles " $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if func_ltwrapper_p "$file"; then
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      relink_command=
+	      func_source $func_ltwrapper_scriptname_result
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
+	    else
+	      relink_command=
+	      func_source $dir/$noexename
+	    fi
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      func_append rmfiles " $odir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      func_append rmfiles " $odir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$opt_mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$opt_mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/libspatialite/libspatialite-3.0.1/mainpage.doxy b/libspatialite/libspatialite-3.0.1/mainpage.doxy
new file mode 100644
index 0000000..7ee1114
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/mainpage.doxy
@@ -0,0 +1,140 @@
+/** \mainpage Introduction
+
+\section Generalities
+
+SpatiaLite is an open source library intended to extend basic SQLite
+core in order to support full fledged Spatial SQL capabilities.
+
+\n\n SQLite is intrinsically simple and lighweight:
+- a single ligthweight library implementing the full SQL engine.
+- standard SQL implementation: almost complete SQL-92.
+- no complex client/server architecture.
+- a whole database simply corresponds to a single monolithic file 
+  [no size limits].
+- any DB-file can be safely exchanged across different platforms, because
+  the internal architecture is universally portable.
+- no installation, no configuration.
+
+SpatiaLite is smoothly integrated into SQLite so to deploy a
+complete and powerfull Spatial DBMS [mostly OGC-SFS compliant].
+\n All this fully preserving the lightness and simplicity typical
+of SQLite itself.
+\n That's not all: SpatiaLite supports direct SQL access to several
+commonly used \e external \e datasources, this including:
+- ESRI \b Shapefiles.
+- \b DBF Archive Files.
+- \b TXT/CSV structured text files.
+- \b Spreadsheets [.xls format].
+
+And SpatiaLite actively supports many alternative standard Geometry notations:
+- \b WKT [Well Known Text] and \b WKB [Well Known Binary].
+- PostGIS own \b EWKT and \b EWKB [Extended WKT / WKB].
+- \b GML [Geography Markup Language, both v2 and v3].
+- \b KML [Keyhole Markup Language, used by Google Maps and Google Earth].
+- \b GeoJSON [Geometry Java Script Object Notation].
+- \b SVG [Scalable Vector Graphics].
+
+Conclusion: using SQLite + SpatiaLite you can deploy an
+alternative Spatial DBMS roughly equivalent to PostgreSQL + PostGIS.
+\n The main difference between them isn't in powerness, but mainly
+relies on architecture:
+- PostgrSQL + PostGIS fully supports a client/server architecture.
+  \n This is well fit for complex and sophisticated Spatial Data 
+  infrastructures, but surely implies a certain degree of complexity.
+- SQLite + SpatiaLite supports a much more simplest personal architecture.
+  \n This is most appropriate for desktop, stand-alone, personal activities.
+
+Choosing the one or the other simply depends on your very specific
+requirements:
+- no one is better than the other one:
+  they are simply optimized for different envoronments.
+- both them can roughly support the same Spatial Data processing capabilities.
+- feel free to choose the best fit one accordingly to your effective goals.
+
+\section Building
+
+Building and installing the SpatiaLite library is straightforward:
+\verbatim
+./configure
+make
+make install
+\endverbatim
+
+Please note: SpatiaLite depends on the following open source libraries:
+- GNU \b ICONV
+  \n locale charset encodings support
+- \b GEOS
+  \n Geometry engine
+- \b PROJ.4
+  \n Spatial Reference System handling [coordinate re-projection]
+- \b FreeXL
+  \n Spreadsheet input support [.xls format]
+
+The library comes in two different flavors:
+- \b libspatialite
+  \n standard, canonical library: the best and safest way to deploy SpatiaLite.
+  \n this obviously depends on \e external \b libsqlite: thus ensuring full
+  coherence between libraries.
+  \n warmly reccomended, mostly on Unix-like systems.\n
+- \b libspatialite-amalgamation
+  \n The whole library is \e amalgamated into a single monolithic file
+  and includes an \e internal \e private \e copy of \b libsqlite.
+  \n Using the \e amalgamated library may strongly simplify any following
+  installation process, and nicely supports \b static \b linkage.
+  \n Anyway, you can safely apply the \e amalgamated approch only to 
+  self-standing apps.
+  \n Attempting to use the \e amalgated library on complex frameworks or on 
+  data connectors / language bindings 
+  \n may easily cause serious conflicts.
+
+\section Deployment
+
+You can deploy SpatiaLite in two alternative ways:
+- you can load the SpatiaLite library as a \b dynamic \b extension to SQLite.
+  \n This allows SQLite to support SQL Spatial Data [Geometry] and SQL 
+  Spatial Functions.
+  \n Theorically, any generic tool or language connector supporting SQLite
+  can support this \e extension mechanism;
+  \n sadly enough, sometimes this feature is intentionally disabled:
+  I'm sorry for you if this is your specific case.
+  \n\n How to load SpatiaLite as a dynamic extension to SQLite:
+\verbatim
+SELECT load_extension('spatialite_dynamic_library_name');
+\endverbatim
+  \n
+- you can directly link the SpatiaLite library to any application of your own.
+  \n This allows you to ship a complete, powerfull, self-contained Spatial 
+  SQL engine directly supporting your app.
+  \n And such Spatial SQL engine doesn't requires any installation or 
+  configuration at all.
+  \n That's not all: linking the SpatiaLite to your own C/C++ code you aren't
+  simply constrained to use SQL: 
+  \n adopting this approach you can directly access the complete C API.
+  \n\n Linking SpatiaLite to your own code is usually simple:
+\verbatim
+gcc my_program.c -o my_program -lspatialite
+\endverbatim
+  \n On some systems you may have to provide a slightly more complex arrangement:
+\verbatim
+gcc -I/usr/local/include my_program.c -o my_program \
+  -L/usr/local/lib -lpsatialite -lsqlite -lgeos_c -lgeos \
+  -lproj -lfreexl -liconv -lm -lstdc++
+\endverbatim
+  \n SpatiaLite also provides pkg-config support, so you can also do
+\verbatim
+gcc -I/usr/local/include my_program.c -o my_program \
+  `pkg-config --libs spatialite`
+\endverbatim
+
+
+\section License
+
+SpatiaLite is licensed under the MPL tri-license terms: you are free to choose 
+the best-fit license between:
+ - the MPL 1.1
+ - the GPL v2.0 or any subsequent version
+ - the LGPL v2.1  or any subsequent version
+
+Enjoy, and happy coding
+*/
+
diff --git a/libspatialite/libspatialite-3.0.1/makefile.vc b/libspatialite/libspatialite-3.0.1/makefile.vc
new file mode 100644
index 0000000..7114adc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/makefile.vc
@@ -0,0 +1,70 @@
+# $Id: makefile.vc 2010/11/09 Sandro Furieri $
+#
+# NMAKE Makefile to build libspatialite on Windows
+#
+!INCLUDE nmake.opt
+
+LIBOBJ = src\gaiaaux\gg_sqlaux.obj src\gaiaaux\gg_utf8.obj \
+	src\gaiaexif\gaia_exif.obj src\gaiageo\gg_advanced.obj \
+	src\gaiageo\gg_endian.obj src\gaiageo\gg_geodesic.obj \
+	src\gaiageo\gg_geometries.obj src\gaiageo\gg_geoscvt.obj \
+	src\gaiageo\gg_relations.obj src\gaiageo\gg_shape.obj \
+	src\gaiageo\gg_transform.obj src\gaiageo\gg_wkb.obj \
+	src\gaiageo\gg_wkt.obj src\spatialite\mbrcache.obj \
+	src\shapefiles\shapefiles.obj \
+	src\spatialite\spatialite.obj src\spatialite\virtualdbf.obj \
+	src\spatialite\virtualfdo.obj src\spatialite\virtualnetwork.obj \
+	src\spatialite\virtualshape.obj src\srsinit\srs_init.obj \
+	src\versioninfo\version.obj src\virtualtext\virtualtext.obj
+SPATIALITE_DLL = spatialite$(VERSION).dll
+
+CFLAGS = /nologo -IC:\OSGeo4W\include -I.\src\headers $(OPTFLAGS)
+
+default:	all
+
+all: spatialite.lib spatialite_i.lib
+#$(EXIF_LOADER_EXE)
+
+spatialite.lib:	$(LIBOBJ)
+	if exist spatialite.lib del spatialite.lib
+	lib /out:spatialite.lib $(LIBOBJ)
+
+$(SPATIALITE_DLL):	spatialite_i.lib
+
+spatialite_i.lib:     $(LIBOBJ)
+	link /debug /dll /out:$(SPATIALITE_DLL) \
+		/implib:spatialite_i.lib $(LIBOBJ) \
+		C:\OSGeo4W\lib\proj_i.lib C:\OSGeo4W\lib\geos_c_i.lib \
+		C:\OSGeo4w\lib\freexl.lib C:\OSGeo4w\lib\iconv.lib \
+		C:\OSGeo4W\lib\sqlite_i.lib
+	if exist $(SPATIALITE_DLL).manifest mt -manifest \
+		$(SPATIALITE_DLL).manifest -outputresource:$(SPATIALITE_DLL);2
+		
+.c.obj:
+	$(CC) $(CFLAGS) /c $*.c /Fo$@
+	
+clean:
+	del *.dll
+	del *.exp
+	del *.manifest
+	del *.lib
+	del src\gaiaaux\*.obj
+	del src\gaiaexif\*.obj
+	del src\gaiageo\*.obj
+	del src\spatialite\*.obj
+	del src\srsinit\*.obj
+	del src\versioninfo\*.obj
+	del src\virtualtext\*.obj
+	del *.pdb
+
+install: all
+	-mkdir $(INSTDIR)
+	-mkdir $(INSTDIR)\bin
+	-mkdir $(INSTDIR)\lib
+	-mkdir $(INSTDIR)\include
+	-mkdir $(INSTDIR)\include\spatialite
+	copy *.dll $(INSTDIR)\bin
+	copy *.lib $(INSTDIR)\lib
+	copy src\headers\*.h $(INSTDIR)\include
+	copy src\headers\spatialite\*.h $(INSTDIR)\include\spatialite
+	
diff --git a/libspatialite/missing b/libspatialite/libspatialite-3.0.1/missing
similarity index 100%
copy from libspatialite/missing
copy to libspatialite/libspatialite-3.0.1/missing
diff --git a/libspatialite/libspatialite-3.0.1/nmake.opt b/libspatialite/libspatialite-3.0.1/nmake.opt
new file mode 100644
index 0000000..36afd4a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/nmake.opt
@@ -0,0 +1,14 @@
+# Directory tree where SpatiaLite will be installed.
+INSTDIR=C:\OSGeo4W
+
+# Uncomment the first for an optimized build, or the second for debug.
+OPTFLAGS=	/nologo /Ox /fp:precise /W3 /MD /D_CRT_SECURE_NO_WARNINGS \
+		/D_LARGE_FILE=1 /D_FILE_OFFSET_BITS=64 /D_LARGEFILE_SOURCE=1 \
+		/DSQLITE_ENABLE_RTREE=1 /DYY_NO_UNISTD_H=1 /DDLL_EXPORT \
+		/DVERSION=\"3.0.1\"
+#OPTFLAGS=	/nologo /Zi /MD /Fdspatialite.pdb /DDLL_EXPORT
+
+# Set the version number for the DLL.  Normally we leave this blank since
+# we want software that is dynamically loading the DLL to have no problem
+# with version numbers.
+VERSION=
diff --git a/libspatialite/libspatialite-3.0.1/spatialite.pc.in b/libspatialite/libspatialite-3.0.1/spatialite.pc.in
new file mode 100644
index 0000000..f00fd8c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/spatialite.pc.in
@@ -0,0 +1,12 @@
+# Package Information for pkg-config
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: spatialite
+Description: Spatial SQL database engine based on SQLite
+Version: @VERSION@
+Libs: -L${libdir} -lspatialite -lsqlite3 -lm
+Cflags: -I${includedir}
diff --git a/libspatialite/libspatialite-3.0.1/src/Makefile.am b/libspatialite/libspatialite-3.0.1/src/Makefile.am
new file mode 100644
index 0000000..c41e022
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/Makefile.am
@@ -0,0 +1,34 @@
+
+SUBDIRS = headers \
+	gaiaaux \
+	gaiaexif \
+	gaiageo \
+	spatialite \
+	shapefiles \
+	srsinit \
+	virtualtext
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+lib_LTLIBRARIES = libspatialite.la
+
+libspatialite_la_SOURCES = versioninfo/version.c
+
+libspatialite_la_LIBADD = ./gaiaaux/libgaiaaux.la \
+	./gaiaexif/libgaiaexif.la \
+	./gaiageo/libgaiageo.la \
+	./spatialite/libsplite.la \
+	./shapefiles/libshapefiles.la \
+	./srsinit/libsrsinit.la \
+	./virtualtext/libvirtualtext.la
+
+
+if MINGW
+libspatialite_la_LDFLAGS = -version-info 4:0:2 -no-undefined
+else
+libspatialite_la_LDFLAGS = -version-info 4:0:2
+libspatialite_la_LIBADD += -lpthread -ldl
+endif
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/Makefile.in b/libspatialite/libspatialite-3.0.1/src/Makefile.in
new file mode 100644
index 0000000..89308c2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/Makefile.in
@@ -0,0 +1,715 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at MINGW_FALSE@am__append_1 = -lpthread -ldl
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libspatialite_la_DEPENDENCIES = ./gaiaaux/libgaiaaux.la \
+	./gaiaexif/libgaiaexif.la ./gaiageo/libgaiageo.la \
+	./spatialite/libsplite.la ./shapefiles/libshapefiles.la \
+	./srsinit/libsrsinit.la ./virtualtext/libvirtualtext.la \
+	$(am__DEPENDENCIES_1)
+am_libspatialite_la_OBJECTS = version.lo
+libspatialite_la_OBJECTS = $(am_libspatialite_la_OBJECTS)
+libspatialite_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(libspatialite_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libspatialite_la_SOURCES)
+DIST_SOURCES = $(libspatialite_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = headers \
+	gaiaaux \
+	gaiaexif \
+	gaiageo \
+	spatialite \
+	shapefiles \
+	srsinit \
+	virtualtext
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+lib_LTLIBRARIES = libspatialite.la
+libspatialite_la_SOURCES = versioninfo/version.c
+libspatialite_la_LIBADD = ./gaiaaux/libgaiaaux.la \
+	./gaiaexif/libgaiaexif.la ./gaiageo/libgaiageo.la \
+	./spatialite/libsplite.la ./shapefiles/libshapefiles.la \
+	./srsinit/libsrsinit.la ./virtualtext/libvirtualtext.la \
+	$(am__append_1)
+ at MINGW_FALSE@libspatialite_la_LDFLAGS = -version-info 4:0:2
+ at MINGW_TRUE@libspatialite_la_LDFLAGS = -version-info 4:0:2 -no-undefined
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libspatialite.la: $(libspatialite_la_OBJECTS) $(libspatialite_la_DEPENDENCIES) 
+	$(libspatialite_la_LINK) -rpath $(libdir) $(libspatialite_la_OBJECTS) $(libspatialite_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/version.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+version.lo: versioninfo/version.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT version.lo -MD -MP -MF $(DEPDIR)/version.Tpo -c -o version.lo `test -f 'versioninfo/version.c' || echo '$(srcdir)/'`versioninfo/version.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/version.Tpo $(DEPDIR)/version.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='versioninfo/version.c' object='version.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o version.lo `test -f 'versioninfo/version.c' || echo '$(srcdir)/'`versioninfo/version.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(libdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-libLTLIBRARIES install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+	uninstall-libLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiaaux/Makefile.am b/libspatialite/libspatialite-3.0.1/src/gaiaaux/Makefile.am
new file mode 100644
index 0000000..2b4c3f0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiaaux/Makefile.am
@@ -0,0 +1,16 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libgaiaaux.la
+
+libgaiaaux_la_SOURCES = gg_sqlaux.c \
+	gg_utf8.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiaaux/Makefile.in b/libspatialite/libspatialite-3.0.1/src/gaiaaux/Makefile.in
new file mode 100644
index 0000000..6fe4ba3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiaaux/Makefile.in
@@ -0,0 +1,491 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/gaiaaux
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgaiaaux_la_LIBADD =
+am_libgaiaaux_la_OBJECTS = gg_sqlaux.lo gg_utf8.lo
+libgaiaaux_la_OBJECTS = $(am_libgaiaaux_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libgaiaaux_la_SOURCES)
+DIST_SOURCES = $(libgaiaaux_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libgaiaaux.la
+libgaiaaux_la_SOURCES = gg_sqlaux.c \
+	gg_utf8.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/gaiaaux/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gaiaaux/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgaiaaux.la: $(libgaiaaux_la_OBJECTS) $(libgaiaaux_la_DEPENDENCIES) 
+	$(LINK)  $(libgaiaaux_la_OBJECTS) $(libgaiaaux_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_sqlaux.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_utf8.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiaaux/gg_sqlaux.c b/libspatialite/libspatialite-3.0.1/src/gaiaaux/gg_sqlaux.c
new file mode 100644
index 0000000..6d40226
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiaaux/gg_sqlaux.c
@@ -0,0 +1,663 @@
+/*
+
+ gg_sqlaux.c -- SQL ancillary functions
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiaaux.h>
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+GAIAAUX_DECLARE int
+gaiaIllegalSqlName (const char *name)
+{
+/* checks if column-name is an SQL illegal name */
+    int i;
+    int len;
+    if (!name)
+	return 1;
+    len = strlen (name);
+    if (len == 0)
+	return 1;
+    for (i = 0; i < len; i++)
+      {
+	  if (name[i] >= 'a' && name[i] <= 'z')
+	      continue;
+	  if (name[i] >= 'A' && name[i] <= 'Z')
+	      continue;
+	  if (name[i] >= '0' && name[i] <= '9')
+	      continue;
+	  if (name[i] == '_')
+	      continue;
+	  /* the name contains an illegal char */
+	  return 1;
+      }
+    if (name[0] >= 'a' && name[0] <= 'z')
+	return 0;
+    if (name[0] >= 'A' && name[0] <= 'Z')
+	return 0;
+/* the first char in the name isn't a letter */
+    return 1;
+}
+
+GAIAAUX_DECLARE int
+gaiaIsReservedSqliteName (const char *name)
+{
+/* checks if column-name is an SQLite reserved keyword */
+    char *reserved[] = {
+	"ALL",
+	"ALTER",
+	"AND",
+	"AS",
+	"AUTOINCREMENT",
+	"BETWEEN",
+	"BLOB",
+	"BY",
+	"CASE",
+	"CHECK",
+	"COLLATE",
+	"COMMIT",
+	"CONSTRAINT",
+	"CREATE",
+	"CROSS",
+	"DATE",
+	"DATETIME",
+	"DEFAULT",
+	"DEFERRABLE",
+	"DELETE",
+	"DISTINCT",
+	"DOUBLE",
+	"DROP",
+	"ELSE",
+	"ESCAPE",
+	"EXCEPT",
+	"FOREIGN",
+	"FROM",
+	"FULL",
+	"GLOB",
+	"GROUP",
+	"HAVING",
+	"IN",
+	"INDEX",
+	"INNER",
+	"INSERT",
+	"INTEGER",
+	"INTERSECT",
+	"INTO",
+	"IS",
+	"ISNULL",
+	"JOIN",
+	"KEY",
+	"LEFT",
+	"LIKE",
+	"LIMIT",
+	"MATCH",
+	"NATURAL",
+	"NOT",
+	"NOTNULL",
+	"NULL",
+	"ON",
+	"OR",
+	"ORDER",
+	"OUTER",
+	"PRAGMA",
+	"PRIMARY",
+	"REFERENCES",
+	"REPLACE",
+	"RIGHT",
+	"ROLLBACK",
+	"SELECT",
+	"SET",
+	"TABLE",
+	"TEMP",
+	"TEMPORARY",
+	"THEN",
+	"TEXT",
+	"TIMESTAMP",
+	"TO",
+	"TRANSACTION",
+	"UNION",
+	"UNIQUE",
+	"UPDATE",
+	"USING",
+	"VALUES",
+	"VIEW",
+	"WHEN",
+	"WHERE",
+	NULL
+    };
+    char **pw = reserved;
+    while (*pw != NULL)
+      {
+	  if (strcasecmp (name, *pw) == 0)
+	      return 1;
+	  pw++;
+      }
+    return 0;
+}
+
+GAIAAUX_DECLARE int
+gaiaIsReservedSqlName (const char *name)
+{
+/* checks if column-name is an SQL reserved keyword */
+    char *reserved[] = {
+	"ABSOLUTE",
+	"ACTION",
+	"ADD",
+	"AFTER",
+	"ALL",
+	"ALLOCATE",
+	"ALTER",
+	"AND",
+	"ANY",
+	"ARE",
+	"ARRAY",
+	"AS",
+	"ASC",
+	"ASENSITIVE",
+	"ASSERTION",
+	"ASYMMETRIC",
+	"AT",
+	"ATOMIC",
+	"AUTHORIZATION",
+	"AVG",
+	"BEFORE",
+	"BEGIN",
+	"BETWEEN",
+	"BIGINT",
+	"BINARY",
+	"BIT",
+	"BIT_LENGTH",
+	"BLOB",
+	"BOOLEAN",
+	"BOTH",
+	"BREADTH",
+	"BY",
+	"CALL",
+	"CALLED",
+	"CASCADE",
+	"CASCADED",
+	"CASE",
+	"CAST",
+	"CATALOG",
+	"CHAR",
+	"CHARACTER",
+	"CHARACTER_LENGTH",
+	"CHAR_LENGTH",
+	"CHECK",
+	"CLOB",
+	"CLOSE",
+	"COALESCE",
+	"COLLATE",
+	"COLLATION",
+	"COLUMN",
+	"COMMIT",
+	"CONDITION",
+	"CONNECT",
+	"CONNECTION",
+	"CONSTRAINT",
+	"CONSTRAINTS",
+	"CONSTRUCTOR",
+	"CONTAINS",
+	"CONTINUE",
+	"CONVERT",
+	"CORRESPONDING",
+	"COUNT",
+	"CREATE",
+	"CROSS",
+	"CUBE",
+	"CURRENT",
+	"CURRENT_DATE",
+	"CURRENT_DEFAULT_TRANSFORM_GROUP",
+	"CURRENT_PATH",
+	"CURRENT_ROLE",
+	"CURRENT_TIME",
+	"CURRENT_TIMESTAMP",
+	"CURRENT_TRANSFORM_GROUP_FOR_TYPE",
+	"CURRENT_USER",
+	"CURSOR",
+	"CYCLE",
+	"DATA",
+	"DATE",
+	"DAY",
+	"DEALLOCATE",
+	"DEC",
+	"DECIMAL",
+	"DECLARE",
+	"DEFAULT",
+	"DEFERRABLE",
+	"DEFERRED",
+	"DELETE",
+	"DEPTH",
+	"DEREF",
+	"DESC",
+	"DESCRIBE",
+	"DESCRIPTOR",
+	"DETERMINISTIC",
+	"DIAGNOSTICS",
+	"DISCONNECT",
+	"DISTINCT",
+	"DO",
+	"DOMAIN",
+	"DOUBLE",
+	"DROP",
+	"DYNAMIC",
+	"EACH",
+	"ELEMENT",
+	"ELSE",
+	"ELSEIF",
+	"END",
+	"EQUALS",
+	"ESCAPE",
+	"EXCEPT",
+	"EXCEPTION",
+	"EXEC",
+	"EXECUTE",
+	"EXISTS",
+	"EXIT",
+	"external",
+	"EXTRACT",
+	"FALSE",
+	"FETCH",
+	"FILTER",
+	"FIRST",
+	"FLOAT",
+	"FOR",
+	"FOREIGN",
+	"FOUND",
+	"FREE",
+	"FROM",
+	"FULL",
+	"FUNCTION",
+	"GENERAL",
+	"GET",
+	"GLOBAL",
+	"GO",
+	"GOTO",
+	"GRANT",
+	"GROUP",
+	"GROUPING",
+	"HANDLER",
+	"HAVING",
+	"HOLD",
+	"HOUR",
+	"IDENTITY",
+	"IF",
+	"IMMEDIATE",
+	"IN",
+	"INDICATOR",
+	"INITIALLY",
+	"INNER",
+	"INOUT",
+	"INPUT",
+	"INSENSITIVE",
+	"INSERT",
+	"INT",
+	"INTEGER",
+	"INTERSECT",
+	"INTERVAL",
+	"INTO",
+	"IS",
+	"ISOLATION",
+	"ITERATE",
+	"JOIN",
+	"KEY",
+	"LANGUAGE",
+	"LARGE",
+	"LAST",
+	"LATERAL",
+	"LEADING",
+	"LEAVE",
+	"LEFT",
+	"LEVEL",
+	"LIKE",
+	"LOCAL",
+	"LOCALTIME",
+	"LOCALTIMESTAMP",
+	"LOCATOR",
+	"LOOP",
+	"LOWER",
+	"MAP",
+	"MATCH",
+	"MAX",
+	"MEMBER",
+	"MERGE",
+	"METHOD",
+	"MIN",
+	"MINUTE",
+	"MODIFIES",
+	"MODULE",
+	"MONTH",
+	"MULTISET",
+	"NAMES",
+	"NATIONAL",
+	"NATURAL",
+	"NCHAR",
+	"NCLOB",
+	"NEW",
+	"NEXT",
+	"NO",
+	"NONE",
+	"NOT",
+	"NULL",
+	"NULLIF",
+	"NUMERIC",
+	"OBJECT",
+	"OCTET_LENGTH",
+	"OF",
+	"OLD",
+	"ON",
+	"ONLY",
+	"OPEN",
+	"OPTION",
+	"OR",
+	"ORDER",
+	"ORDINALITY",
+	"OUT",
+	"OUTER",
+	"OUTPUT",
+	"OVER",
+	"OVERLAPS",
+	"PAD",
+	"PARAMETER",
+	"PARTIAL",
+	"PARTITION",
+	"PATH",
+	"POSITION",
+	"PRECISION",
+	"PREPARE",
+	"PRESERVE",
+	"PRIMARY",
+	"PRIOR",
+	"PRIVILEGES",
+	"PROCEDURE",
+	"PUBLIC",
+	"RANGE",
+	"READ",
+	"READS",
+	"REAL",
+	"RECURSIVE",
+	"REF",
+	"REFERENCES",
+	"REFERENCING",
+	"RELATIVE",
+	"RELEASE",
+	"REPEAT",
+	"RESIGNAL",
+	"RESTRICT",
+	"RESULT",
+	"RETURN",
+	"RETURNS",
+	"REVOKE",
+	"RIGHT",
+	"ROLE",
+	"ROLLBACK",
+	"ROLLUP",
+	"ROUTINE",
+	"ROW",
+	"ROWS",
+	"SAVEPOINT",
+	"SCHEMA",
+	"SCOPE",
+	"SCROLL",
+	"SEARCH",
+	"SECOND",
+	"SECTION",
+	"SELECT",
+	"SENSITIVE",
+	"SESSION",
+	"SESSION_USER",
+	"SET",
+	"SETS",
+	"SIGNAL",
+	"SIMILAR",
+	"SIZE",
+	"SMALLINT",
+	"SOME",
+	"SPACE",
+	"SPECIFIC",
+	"SPECIFICTYPE",
+	"SQL",
+	"SQLCODE",
+	"SQLERROR",
+	"SQLEXCEPTION",
+	"SQLSTATE",
+	"SQLWARNING",
+	"START",
+	"STATE",
+	"STATIC",
+	"SUBMULTISET",
+	"SUBSTRING",
+	"SUM",
+	"SYMMETRIC",
+	"SYSTEM",
+	"SYSTEM_USER",
+	"TABLE",
+	"TABLESAMPLE",
+	"TEMPORARY",
+	"THEN",
+	"TIME",
+	"TIMESTAMP",
+	"TIMEZONE_HOUR",
+	"TIMEZONE_MINUTE",
+	"TO",
+	"TRAILING",
+	"TRANSACTION",
+	"TRANSLATE",
+	"TRANSLATION",
+	"TREAT",
+	"TRIGGER",
+	"TRIM",
+	"TRUE",
+	"UNDER",
+	"UNDO",
+	"UNION",
+	"UNIQUE",
+	"UNKNOWN",
+	"UNNEST",
+	"UNTIL",
+	"UPDATE",
+	"UPPER",
+	"USAGE",
+	"USER",
+	"USING",
+	"VALUE",
+	"VALUES",
+	"VARCHAR",
+	"VARYING",
+	"VIEW",
+	"WHEN",
+	"WHENEVER",
+	"WHERE",
+	"WHILE",
+	"WINDOW",
+	"WITH",
+	"WITHIN",
+	"WITHOUT",
+	"WORK",
+	"WRITE",
+	"YEAR",
+	"ZONE",
+	NULL
+    };
+    char **pw = reserved;
+    while (*pw != NULL)
+      {
+	  if (strcasecmp (name, *pw) == 0)
+	      return 1;
+	  pw++;
+      }
+    return 0;
+}
+
+GAIAAUX_DECLARE char *
+gaiaQuotedSql (const char *value, int quote)
+{
+/*
+/ returns a well formatted TEXT value for SQL
+/ 1] strips trailing spaces
+/ 2] masks any QUOTE inside the string, appending another QUOTE
+/ 3] works for both SINGLE- and DOUBLE-QUOTE
+*/
+    const char *p_in;
+    const char *p_end;
+    char qt;
+    char *out;
+    char *p_out;
+    int len = 0;
+    int i;
+
+    if (!value)
+	return NULL;
+    if (quote == GAIA_SQL_SINGLE_QUOTE)
+	qt = '\'';
+    else if (quote == GAIA_SQL_DOUBLE_QUOTE)
+	qt = '"';
+    else
+	return NULL;
+
+    p_end = value;
+    for (i = (strlen (value) - 1); i >= 0; i--)
+      {
+	  /* stripping trailing spaces */
+	  p_end = value + i;
+	  if (value[i] != ' ')
+	      break;
+      }
+
+    p_in = value;
+    while (p_in <= p_end)
+      {
+	  /* computing the output length */
+	  len++;
+	  if (*p_in == qt)
+	      len++;
+	  p_in++;
+      }
+    if (len == 1 && *value == ' ')
+      {
+	  /* empty string */
+	  len = 0;
+      }
+
+    out = malloc (len + 1);
+    if (!out)
+	return NULL;
+
+    if (len == 0)
+      {
+	  /* empty string */
+	  *out = '\0';
+	  return out;
+      }
+
+    p_out = out;
+    p_in = value;
+    while (p_in <= p_end)
+      {
+	  /* creating the output string */
+	  if (*p_in == qt)
+	      *p_out++ = qt;
+	  *p_out++ = *p_in++;
+      }
+    *p_out = '\0';
+    return out;
+}
+
+GAIAAUX_DECLARE char *
+gaiaSingleQuotedSql (const char *value)
+{
+/* convenience method supporting SINGLE-QUOTES */
+    return gaiaQuotedSql (value, GAIA_SQL_SINGLE_QUOTE);
+}
+
+GAIAAUX_DECLARE char *
+gaiaDoubleQuotedSql (const char *value)
+{
+/* convenience method supporting DOUBLE-QUOTES */
+    return gaiaQuotedSql (value, GAIA_SQL_DOUBLE_QUOTE);
+}
+
+GAIAAUX_DECLARE void
+gaiaCleanSqlString (char *value)
+{
+/*
+/ returns a well formatted TEXT value for SQL
+/ 1] strips trailing spaces
+/ 2] masks any ' inside the string, appending another '
+*/
+    char new_value[1024];
+    char *p;
+    int len;
+    int i;
+    len = strlen (value);
+    for (i = (len - 1); i >= 0; i--)
+      {
+	  /* stripping trailing spaces */
+	  if (value[i] == ' ')
+	      value[i] = '\0';
+	  else
+	      break;
+      }
+    p = new_value;
+    for (i = 0; i < len; i++)
+      {
+	  if (value[i] == '\'')
+	      *(p++) = '\'';
+	  *(p++) = value[i];
+      }
+    *p = '\0';
+    strcpy (value, new_value);
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiaaux/gg_utf8.c b/libspatialite/libspatialite-3.0.1/src/gaiaaux/gg_utf8.c
new file mode 100644
index 0000000..8dd4926
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiaaux/gg_utf8.c
@@ -0,0 +1,178 @@
+/*
+
+ gg_utf8.c -- locale charset handling
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#if OMIT_ICONV == 0     /* ICONV is absolutely required */
+
+#if defined(__MINGW32__) || defined(_WIN32)
+#define LIBICONV_STATIC
+#include <iconv.h>
+#define LIBCHARSET_STATIC
+#ifdef _MSC_VER
+/* <localcharset.h> isn't supported on OSGeo4W */
+/* applying a tricky workaround to fix this issue */
+extern const char * locale_charset (void);
+#else /* sane Windows - not OSGeo4W */
+#include <localcharset.h>
+#endif /* end localcharset */
+#else /* not MINGW32 - WIN32 */
+#ifdef __APPLE__
+#include <iconv.h>
+#include <localcharset.h>
+#else /* not Mac OsX */
+#include <iconv.h>
+#include <langinfo.h>
+#endif
+#endif
+
+#include <spatialite/gaiaaux.h>
+
+GAIAAUX_DECLARE const char *
+gaiaGetLocaleCharset ()
+{
+/* identifies the locale charset */
+#if defined(__MINGW32__) || defined(_WIN32)
+    return locale_charset ();
+#else /* not MINGW32 - WIN32 */
+#ifdef __APPLE__
+    return locale_charset ();
+#else /* not Mac OsX */
+    return nl_langinfo (CODESET);
+#endif
+#endif
+}
+
+GAIAAUX_DECLARE int
+gaiaConvertCharset (char **buf, const char *fromCs, const char *toCs)
+{
+/* converting a string from a charset to another "on-the-fly" */
+    char utf8buf[65536];
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    iconv_t cvt = iconv_open (toCs, fromCs);
+    if (cvt == (iconv_t) (-1))
+	goto unsupported;
+    len = strlen (*buf);
+    utf8len = 65536;
+    pBuf = *buf;
+    pUtf8buf = utf8buf;
+    if (iconv (cvt, &pBuf, &len, &pUtf8buf, &utf8len) == (size_t) (-1))
+	goto error;
+    utf8buf[65536 - utf8len] = '\0';
+    memcpy (*buf, utf8buf, (65536 - utf8len) + 1);
+    iconv_close (cvt);
+    return 1;
+  error:
+    iconv_close (cvt);
+  unsupported:
+    return 0;
+}
+
+GAIAAUX_DECLARE void *
+gaiaCreateUTF8Converter (const char *fromCS)
+{
+/* creating a UTF8 converter and returning an opaque reference to it */
+    iconv_t cvt = iconv_open ("UTF-8", fromCS);
+    if (cvt == (iconv_t) (-1))
+	return NULL;
+    return cvt;
+}
+
+GAIAAUX_DECLARE void
+gaiaFreeUTF8Converter (void *cvtCS)
+{
+/* destroying a UTF8 converter */
+    if (cvtCS)
+	iconv_close (cvtCS);
+}
+
+GAIAAUX_DECLARE char *
+gaiaConvertToUTF8 (void *cvtCS, const char *buf, int buflen, int *err)
+{
+/* converting a string to UTF8 */
+    char *utf8buf = 0;
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    int maxlen = buflen * 4;
+    char *pUtf8buf;
+    *err = 0;
+    if (!cvtCS)
+      {
+	  *err = 1;
+	  return NULL;
+      }
+    utf8buf = malloc (maxlen);
+    len = buflen;
+    utf8len = maxlen;
+    pBuf = (char *) buf;
+    pUtf8buf = utf8buf;
+    if (iconv (cvtCS, &pBuf, &len, &pUtf8buf, &utf8len) == (size_t) (-1))
+      {
+	  free (utf8buf);
+	  *err = 1;
+	  return NULL;
+      }
+    utf8buf[maxlen - utf8len] = '\0';
+    return utf8buf;
+}
+
+#endif  /* ICONV enabled/disabled */
+
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiaexif/Makefile.am b/libspatialite/libspatialite-3.0.1/src/gaiaexif/Makefile.am
new file mode 100644
index 0000000..e61c633
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiaexif/Makefile.am
@@ -0,0 +1,15 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libgaiaexif.la
+
+libgaiaexif_la_SOURCES = gaia_exif.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiaexif/Makefile.in b/libspatialite/libspatialite-3.0.1/src/gaiaexif/Makefile.in
new file mode 100644
index 0000000..76e36fa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiaexif/Makefile.in
@@ -0,0 +1,488 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/gaiaexif
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgaiaexif_la_LIBADD =
+am_libgaiaexif_la_OBJECTS = gaia_exif.lo
+libgaiaexif_la_OBJECTS = $(am_libgaiaexif_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libgaiaexif_la_SOURCES)
+DIST_SOURCES = $(libgaiaexif_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libgaiaexif.la
+libgaiaexif_la_SOURCES = gaia_exif.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/gaiaexif/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gaiaexif/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgaiaexif.la: $(libgaiaexif_la_OBJECTS) $(libgaiaexif_la_DEPENDENCIES) 
+	$(LINK)  $(libgaiaexif_la_OBJECTS) $(libgaiaexif_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gaia_exif.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/src/gaiaexif/gaia_exif.c b/libspatialite/libspatialite-3.0.1/src/gaiaexif/gaia_exif.c
similarity index 100%
copy from libspatialite/src/gaiaexif/gaia_exif.c
copy to libspatialite/libspatialite-3.0.1/src/gaiaexif/gaia_exif.c
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/Makefile.am b/libspatialite/libspatialite-3.0.1/src/gaiageo/Makefile.am
new file mode 100644
index 0000000..7cc31e3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/Makefile.am
@@ -0,0 +1,29 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libgaiageo.la
+
+libgaiageo_la_SOURCES = gg_advanced.c \
+	gg_endian.c \
+	gg_geodesic.c \
+	gg_geometries.c \
+	gg_geoscvt.c \
+	gg_relations.c \
+	gg_shape.c \
+	gg_transform.c \
+	gg_wkb.c \
+	gg_wkt.c \
+	gg_vanuatu.c \
+	gg_ewkt.c \
+	gg_geoJSON.c \
+	gg_kml.c \
+	gg_gml.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/Makefile.in b/libspatialite/libspatialite-3.0.1/src/gaiageo/Makefile.in
new file mode 100644
index 0000000..39d1fd7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/Makefile.in
@@ -0,0 +1,520 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/gaiageo
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgaiageo_la_LIBADD =
+am_libgaiageo_la_OBJECTS = gg_advanced.lo gg_endian.lo gg_geodesic.lo \
+	gg_geometries.lo gg_geoscvt.lo gg_relations.lo gg_shape.lo \
+	gg_transform.lo gg_wkb.lo gg_wkt.lo gg_vanuatu.lo gg_ewkt.lo \
+	gg_geoJSON.lo gg_kml.lo gg_gml.lo
+libgaiageo_la_OBJECTS = $(am_libgaiageo_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libgaiageo_la_SOURCES)
+DIST_SOURCES = $(libgaiageo_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libgaiageo.la
+libgaiageo_la_SOURCES = gg_advanced.c \
+	gg_endian.c \
+	gg_geodesic.c \
+	gg_geometries.c \
+	gg_geoscvt.c \
+	gg_relations.c \
+	gg_shape.c \
+	gg_transform.c \
+	gg_wkb.c \
+	gg_wkt.c \
+	gg_vanuatu.c \
+	gg_ewkt.c \
+	gg_geoJSON.c \
+	gg_kml.c \
+	gg_gml.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/gaiageo/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gaiageo/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgaiageo.la: $(libgaiageo_la_OBJECTS) $(libgaiageo_la_DEPENDENCIES) 
+	$(LINK)  $(libgaiageo_la_OBJECTS) $(libgaiageo_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_advanced.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_endian.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_ewkt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_geoJSON.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_geodesic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_geometries.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_geoscvt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_gml.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_kml.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_relations.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_shape.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_transform.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_vanuatu.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_wkb.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gg_wkt.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_advanced.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_advanced.c
new file mode 100644
index 0000000..188041d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_advanced.c
@@ -0,0 +1,1986 @@
+/*
+
+ gg_advanced.c -- Gaia advanced geometric operations
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+GAIAGEO_DECLARE double
+gaiaMeasureLength (int dims, double *coords, int vert)
+{
+/* computes the total length */
+    double lung = 0.0;
+    double xx1;
+    double xx2;
+    double yy1;
+    double yy2;
+    double x;
+    double y;
+    double z;
+    double m;
+    double dist;
+    int ind;
+    if (vert <= 0)
+	return lung;
+    if (dims == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (coords, 0, &xx1, &yy1, &z);
+      }
+    else if (dims == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (coords, 0, &xx1, &yy1, &m);
+      }
+    else if (dims == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (coords, 0, &xx1, &yy1, &z, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (coords, 0, &xx1, &yy1);
+      }
+    for (ind = 1; ind < vert; ind++)
+      {
+	  if (dims == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (coords, ind, &xx2, &yy2, &z);
+	    }
+	  else if (dims == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (coords, ind, &xx2, &yy2, &m);
+	    }
+	  else if (dims == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (coords, ind, &xx2, &yy2, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (coords, ind, &xx2, &yy2);
+	    }
+	  x = xx1 - xx2;
+	  y = yy1 - yy2;
+	  dist = sqrt ((x * x) + (y * y));
+	  lung += dist;
+	  xx1 = xx2;
+	  yy1 = yy2;
+      }
+    return lung;
+}
+
+GAIAGEO_DECLARE double
+gaiaMeasureArea (gaiaRingPtr ring)
+{
+/* computes the area */
+    int iv;
+    double xx;
+    double yy;
+    double x;
+    double y;
+    double z;
+    double m;
+    double area = 0.0;
+    if (!ring)
+	return 0.0;
+    if (ring->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (ring->Coords, 0, &xx, &yy, &z);
+      }
+    else if (ring->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (ring->Coords, 0, &xx, &yy, &m);
+      }
+    else if (ring->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (ring->Coords, 0, &xx, &yy, &z, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (ring->Coords, 0, &xx, &yy);
+      }
+    for (iv = 1; iv < ring->Points; iv++)
+      {
+	  if (ring->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (ring->Coords, iv, &x, &y);
+	    }
+	  area += ((xx * y) - (x * yy));
+	  xx = x;
+	  yy = y;
+      }
+    area /= 2.0;
+    return fabs (area);
+}
+
+GAIAGEO_DECLARE void
+gaiaRingCentroid (gaiaRingPtr ring, double *rx, double *ry)
+{
+/* computes the simple ring centroid */
+    double cx = 0.0;
+    double cy = 0.0;
+    double xx;
+    double yy;
+    double x;
+    double y;
+    double z;
+    double m;
+    double coeff;
+    double area;
+    double term;
+    int iv;
+    if (!ring)
+      {
+	  *rx = -DBL_MAX;
+	  *ry = -DBL_MAX;
+	  return;
+      }
+    area = gaiaMeasureArea (ring);
+    coeff = 1.0 / (area * 6.0);
+    if (ring->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (ring->Coords, 0, &xx, &yy, &z);
+      }
+    else if (ring->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (ring->Coords, 0, &xx, &yy, &m);
+      }
+    else if (ring->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (ring->Coords, 0, &xx, &yy, &z, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (ring->Coords, 0, &xx, &yy);
+      }
+    for (iv = 1; iv < ring->Points; iv++)
+      {
+	  if (ring->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (ring->Coords, iv, &x, &y);
+	    }
+	  term = (xx * y) - (x * yy);
+	  cx += (xx + x) * term;
+	  cy += (yy + y) * term;
+	  xx = x;
+	  yy = y;
+      }
+    *rx = fabs (cx * coeff);
+    *ry = fabs (cy * coeff);
+}
+
+GAIAGEO_DECLARE void
+gaiaClockwise (gaiaRingPtr p)
+{
+/* determines clockwise or anticlockwise direction */
+    int ind;
+    int ix;
+    double xx;
+    double yy;
+    double x;
+    double y;
+    double z;
+    double m;
+    double area = 0.0;
+    for (ind = 0; ind < p->Points; ind++)
+      {
+	  if (p->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (p->Coords, ind, &xx, &yy, &z);
+	    }
+	  else if (p->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (p->Coords, ind, &xx, &yy, &m);
+	    }
+	  else if (p->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (p->Coords, ind, &xx, &yy, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (p->Coords, ind, &xx, &yy);
+	    }
+	  ix = (ind + 1) % p->Points;
+	  if (p->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (p->Coords, ix, &x, &y, &z);
+	    }
+	  else if (p->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (p->Coords, ix, &x, &y, &m);
+	    }
+	  else if (p->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (p->Coords, ix, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (p->Coords, ix, &x, &y);
+	    }
+	  area += ((xx * y) - (x * yy));
+      }
+    area /= 2.0;
+    if (area >= 0.0)
+	p->Clockwise = 0;
+    else
+	p->Clockwise = 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsPointOnRingSurface (gaiaRingPtr ring, double pt_x, double pt_y)
+{
+/* tests if a POINT falls inside a RING */
+    int isInternal = 0;
+    int cnt;
+    int i;
+    int j;
+    double x;
+    double y;
+    double z;
+    double m;
+    double *vert_x;
+    double *vert_y;
+    double minx = DBL_MAX;
+    double miny = DBL_MAX;
+    double maxx = -DBL_MAX;
+    double maxy = -DBL_MAX;
+    cnt = ring->Points;
+    cnt--;			/* ignoring last vertex because surely identical to the first one */
+    if (cnt < 2)
+	return 0;
+/* allocating and loading an array of vertices */
+    vert_x = malloc (sizeof (double) * (cnt));
+    vert_y = malloc (sizeof (double) * (cnt));
+    for (i = 0; i < cnt; i++)
+      {
+	  if (ring->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (ring->Coords, i, &x, &y, &z);
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (ring->Coords, i, &x, &y, &m);
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (ring->Coords, i, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (ring->Coords, i, &x, &y);
+	    }
+	  vert_x[i] = x;
+	  vert_y[i] = y;
+	  if (x < minx)
+	      minx = x;
+	  if (x > maxx)
+	      maxx = x;
+	  if (y < miny)
+	      miny = y;
+	  if (y > maxy)
+	      maxy = y;
+      }
+    if (pt_x < minx || pt_x > maxx)
+	goto end;		/* outside the bounding box (x axis) */
+    if (pt_y < miny || pt_y > maxy)
+	goto end;		/* outside the bounding box (y axis) */
+    for (i = 0, j = cnt - 1; i < cnt; j = i++)
+      {
+/* The definitive reference is "Point in Polyon Strategies" by
+/  Eric Haines [Gems IV]  pp. 24-46.
+/  The code in the Sedgewick book Algorithms (2nd Edition, p.354) is 
+/  incorrect.
+*/
+	  if ((((vert_y[i] <= pt_y) && (pt_y < vert_y[j]))
+	       || ((vert_y[j] <= pt_y) && (pt_y < vert_y[i])))
+	      && (pt_x <
+		  (vert_x[j] - vert_x[i]) * (pt_y - vert_y[i]) / (vert_y[j] -
+								  vert_y[i]) +
+		  vert_x[i]))
+	      isInternal = !isInternal;
+      }
+  end:
+    free (vert_x);
+    free (vert_y);
+    return isInternal;
+}
+
+GAIAGEO_DECLARE double
+gaiaMinDistance (double x0, double y0, int dims, double *coords, int n_vert)
+{
+/* computing minimal distance between a POINT and a linestring/ring */
+    double x;
+    double y;
+    double z;
+    double m;
+    double ox;
+    double oy;
+    double lineMag;
+    double u;
+    double px;
+    double py;
+    double dist;
+    double min_dist = DBL_MAX;
+    int iv;
+    if (n_vert < 2)
+	return min_dist;	/* not a valid linestring */
+/* computing distance from first vertex */
+    ox = *(coords + 0);
+    oy = *(coords + 1);
+    min_dist = sqrt (((x0 - ox) * (x0 - ox)) + ((y0 - oy) * (y0 - oy)));
+    for (iv = 1; iv < n_vert; iv++)
+      {
+	  /* segment start-end coordinates */
+	  if (dims == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (coords, iv - 1, &ox, &oy, &z);
+		gaiaGetPointXYZ (coords, iv, &x, &y, &z);
+	    }
+	  else if (dims == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (coords, iv - 1, &ox, &oy, &m);
+		gaiaGetPointXYM (coords, iv, &x, &y, &m);
+	    }
+	  else if (dims == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (coords, iv - 1, &ox, &oy, &z, &m);
+		gaiaGetPointXYZM (coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (coords, iv - 1, &ox, &oy);
+		gaiaGetPoint (coords, iv, &x, &y);
+	    }
+	  /* computing distance from vertex */
+	  dist = sqrt (((x0 - x) * (x0 - x)) + ((y0 - y) * (y0 - y)));
+	  if (dist < min_dist)
+	      min_dist = dist;
+	  /* computing a projection */
+	  lineMag = ((x - ox) * (x - ox)) + ((y - oy) * (y - oy));
+	  u = (((x0 - ox) * (x - ox)) + ((y0 - oy) * (y - oy))) / lineMag;
+	  if (u < 0.0 || u > 1.0)
+	      ;			/* closest point does not fall within the line segment */
+	  else
+	    {
+		px = ox + u * (x - ox);
+		py = oy + u * (y - oy);
+		dist = sqrt (((x0 - px) * (x0 - px)) + ((y0 - py) * (y0 - py)));
+		if (dist < min_dist)
+		    min_dist = dist;
+	    }
+      }
+    return min_dist;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsPointOnPolygonSurface (gaiaPolygonPtr polyg, double x, double y)
+{
+/* tests if a POINT falls inside a POLYGON */
+    int ib;
+    gaiaRingPtr ring = polyg->Exterior;
+    if (gaiaIsPointOnRingSurface (ring, x, y))
+      {
+	  /* ok, the POINT falls inside the polygon */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		ring = polyg->Interiors + ib;
+		if (gaiaIsPointOnRingSurface (ring, x, y))
+		  {
+		      /* no, the POINT fall inside some hole */
+		      return 0;
+		  }
+	    }
+	  return 1;
+      }
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaIntersect (double *x0, double *y0, double x1, double y1, double x2,
+	       double y2, double x3, double y3, double x4, double y4)
+{
+/* computes intersection [if any] between two line segments
+/  the intersection POINT has coordinates (x0, y0) 
+/  first line is identified by(x1, y1)  and (x2, y2)
+/  second line is identified by (x3, y3) and (x4, y4)
+*/
+    double x;
+    double y;
+    double a1;
+    double b1;
+    double c1;
+    double a2;
+    double b2;
+    double c2;
+    double m1;
+    double m2;
+    double p;
+    double det_inv;
+    double minx1;
+    double miny1;
+    double maxx1;
+    double maxy1;
+    double minx2;
+    double miny2;
+    double maxx2;
+    double maxy2;
+    int ok1 = 0;
+    int ok2 = 0;
+/* building line segment's MBRs */
+    if (x2 < x1)
+      {
+	  minx1 = x2;
+	  maxx1 = x1;
+      }
+    else
+      {
+	  minx1 = x1;
+	  maxx1 = x2;
+      }
+    if (y2 < y1)
+      {
+	  miny1 = y2;
+	  maxy1 = y1;
+      }
+    else
+      {
+	  miny1 = y1;
+	  maxy1 = y2;
+      }
+    if (x4 < x3)
+      {
+	  minx2 = x4;
+	  maxx2 = x3;
+      }
+    else
+      {
+	  minx2 = x3;
+	  maxx2 = x4;
+      }
+    if (y4 < y3)
+      {
+	  miny2 = y4;
+	  maxy2 = y3;
+      }
+    else
+      {
+	  miny2 = y3;
+	  maxy2 = y4;
+      }
+/* checkinkg MBRs first */
+    if (minx1 >= maxx2)
+	return 0;
+    if (miny1 >= maxy2)
+	return 0;
+    if (maxx1 <= minx2)
+	return 0;
+    if (maxy1 <= miny2)
+	return 0;
+    if (minx2 >= maxx1)
+	return 0;
+    if (miny2 >= maxy1)
+	return 0;
+    if (maxx2 <= minx1)
+	return 0;
+    if (maxy2 <= miny1)
+	return 0;
+/* there is an MBRs intersection - proceeding */
+    if ((x2 - x1) != 0.0)
+	m1 = (y2 - y1) / (x2 - x1);
+    else
+	m1 = DBL_MAX;
+    if ((x4 - x3) != 0)
+	m2 = (y4 - y3) / (x4 - x3);
+    else
+	m2 = DBL_MAX;
+    if (m1 == m2)		/* parallel lines */
+	return 0;
+    if (m1 == DBL_MAX)
+	c1 = y1;
+    else
+	c1 = (y1 - m1 * x1);
+    if (m2 == DBL_MAX)
+	c2 = y3;
+    else
+	c2 = (y3 - m2 * x3);
+    if (m1 == DBL_MAX)
+      {
+	  x = x1;
+	  p = m2 * x1;
+	  y = p + c2;		/*  first line is vertical */
+	  goto check_bbox;
+      }
+    if (m2 == DBL_MAX)
+      {
+	  x = x3;
+	  p = m1 * x3;
+	  y = p + c1;		/* second line is vertical */
+	  goto check_bbox;
+      }
+    a1 = m1;
+    a2 = m2;
+    b1 = -1;
+    b2 = -1;
+    det_inv = 1 / (a1 * b2 - a2 * b1);
+    x = ((b1 * c2 - b2 * c1) * det_inv);
+    y = ((a2 * c1 - a1 * c2) * det_inv);
+/* now checking if intersection falls within both segment boundaries */
+  check_bbox:
+    if (x >= minx1 && x <= maxx1 && y >= miny1 && y <= maxy1)
+	ok1 = 1;
+    if (x >= minx2 && x <= maxx2 && y >= miny2 && y <= maxy2)
+	ok2 = 1;
+    if (ok1 && ok2)
+      {
+	  /* intersection point falls within the segments */
+	  *x0 = x;
+	  *y0 = y;
+	  return 1;
+      }
+    return 0;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaSanitize (gaiaGeomCollPtr geom)
+{
+/* 
+/ sanitizes a GEOMETRYCOLLECTION:
+/ - repeated vertices are omitted
+/ - ring closure is enforced anyway  
+*/
+    int iv;
+    int ib;
+    double x = 0.0;
+    double y = 0.0;
+    double z = 0.0;
+    double m = 0.0;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    double last_z = 0.0;
+    int points;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr new_line;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr new_polyg;
+    gaiaGeomCollPtr new_geom;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!geom)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	new_geom = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	new_geom = gaiaAllocGeomCollXYM ();
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	new_geom = gaiaAllocGeomCollXYZM ();
+    else
+	new_geom = gaiaAllocGeomColl ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = geom->DeclaredType;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* copying POINTs */
+	  gaiaAddPointToGeomCollXYZM (new_geom, point->X, point->Y, point->Z,
+				      point->M);
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* sanitizing LINESTRINGs */
+	  points = 0;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		/* PASS I - checking points */
+		z = 0.0;
+		m = 0.0;
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		if (iv > 0)
+		  {
+		      if (last_x == x && last_y == y && last_z == z)
+			  ;
+		      else
+			  points++;
+		  }
+		else
+		    points++;
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+	  if (points < 2)
+	    {
+		/* illegal LINESTRING - copying the original one */
+		new_line = gaiaAddLinestringToGeomColl (new_geom, line->Points);
+		gaiaCopyLinestringCoords (new_line, line);
+	    }
+	  else
+	    {
+		/* valid LINESTRING - sanitizing */
+		new_line = gaiaAddLinestringToGeomColl (new_geom, points);
+		points = 0;
+		for (iv = 0; iv < line->Points; iv++)
+		  {
+		      /* PASS II - inserting points */
+		      z = 0.0;
+		      m = 0.0;
+		      if (line->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+			}
+		      else if (line->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+			}
+		      else if (line->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (line->Coords, iv, &x, &y);
+			}
+		      if (iv > 0)
+			{
+			    if (last_x == x && last_y == y && last_z == z)
+				;
+			    else
+			      {
+				  if (new_line->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaSetPointXYZ (new_line->Coords,
+							 points, x, y, z);
+				    }
+				  else if (new_line->DimensionModel ==
+					   GAIA_XY_M)
+				    {
+					gaiaSetPointXYM (new_line->Coords,
+							 points, x, y, m);
+				    }
+				  else if (new_line->DimensionModel ==
+					   GAIA_XY_Z_M)
+				    {
+					gaiaSetPointXYZM (new_line->Coords,
+							  points, x, y, z, m);
+				    }
+				  else
+				    {
+					gaiaSetPoint (new_line->Coords, points,
+						      x, y);
+				    }
+				  points++;
+			      }
+			}
+		      else
+			{
+			    if (new_line->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaSetPointXYZ (new_line->Coords, points, x,
+						   y, z);
+			      }
+			    else if (new_line->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaSetPointXYM (new_line->Coords, points, x,
+						   y, m);
+			      }
+			    else if (new_line->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaSetPointXYZM (new_line->Coords, points, x,
+						    y, z, m);
+			      }
+			    else
+			      {
+				  gaiaSetPoint (new_line->Coords, points, x, y);
+			      }
+			    points++;
+			}
+		      last_x = x;
+		      last_y = y;
+		      last_z = z;
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* copying POLYGONs */
+	  i_ring = polyg->Exterior;
+	  /* sanitizing EXTERIOR RING */
+	  points = 0;
+	  for (iv = 0; iv < i_ring->Points; iv++)
+	    {
+		/* PASS I - checking points */
+		z = 0.0;
+		m = 0.0;
+		if (i_ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (i_ring->Coords, iv, &x, &y, &z);
+		  }
+		else if (i_ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (i_ring->Coords, iv, &x, &y, &m);
+		  }
+		else if (i_ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (i_ring->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (i_ring->Coords, iv, &x, &y);
+		  }
+		if (iv > 0)
+		  {
+		      if (last_x == x && last_y == y && last_z == z)
+			  ;
+		      else
+			  points++;
+		  }
+		else
+		      points++;
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+	  if (last_x == x && last_y == y && last_z == z)
+	      ;
+	  else
+	    {
+		/* forcing RING closure */
+		points++;
+	    }
+	  if (points < 4)
+	    {
+		/* illegal RING - copying the original one */
+		new_polyg =
+		    gaiaAddPolygonToGeomColl (new_geom, i_ring->Points,
+					      polyg->NumInteriors);
+		o_ring = new_polyg->Exterior;
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  else
+	    {
+		/* valid RING - sanitizing */
+		new_polyg =
+		    gaiaAddPolygonToGeomColl (new_geom, points,
+					      polyg->NumInteriors);
+		o_ring = new_polyg->Exterior;
+		points = 0;
+		for (iv = 0; iv < i_ring->Points; iv++)
+		  {
+		      /* PASS II - inserting points */
+		      z = 0.0;
+		      m = 0.0;
+		      if (i_ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (i_ring->Coords, iv, &x, &y, &z);
+			}
+		      else if (i_ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (i_ring->Coords, iv, &x, &y, &m);
+			}
+		      else if (i_ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (i_ring->Coords, iv, &x, &y, &z,
+					      &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (i_ring->Coords, iv, &x, &y);
+			}
+		      if (iv > 0)
+			{
+			    if (last_x == x && last_y == y && last_z == z)
+				;
+			    else
+			      {
+				  if (o_ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaSetPointXYZ (o_ring->Coords, points,
+							 x, y, z);
+				    }
+				  else if (o_ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaSetPointXYM (o_ring->Coords, points,
+							 x, y, m);
+				    }
+				  else if (o_ring->DimensionModel ==
+					   GAIA_XY_Z_M)
+				    {
+					gaiaSetPointXYZM (o_ring->Coords,
+							  points, x, y, z, m);
+				    }
+				  else
+				    {
+					gaiaSetPoint (o_ring->Coords, points, x,
+						      y);
+				    }
+				  points++;
+			      }
+			}
+		      else
+			{
+			    if (o_ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaSetPointXYZ (o_ring->Coords, points, x,
+						   y, z);
+			      }
+			    else if (o_ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaSetPointXYM (o_ring->Coords, points, x,
+						   y, m);
+			      }
+			    else if (o_ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaSetPointXYZM (o_ring->Coords, points, x,
+						    y, z, m);
+			      }
+			    else
+			      {
+				  gaiaSetPoint (o_ring->Coords, points, x, y);
+			      }
+			    points++;
+			}
+		      last_x = x;
+		      last_y = y;
+		      last_z = z;
+		  }
+	    }
+	  /* PASS III - forcing RING closure */
+	  z = 0.0;
+	  m = 0.0;
+	  if (i_ring->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (i_ring->Coords, 0, &x, &y, &z);
+	    }
+	  else if (i_ring->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (i_ring->Coords, 0, &x, &y, &m);
+	    }
+	  else if (i_ring->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (i_ring->Coords, 0, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (i_ring->Coords, 0, &x, &y);
+	    }
+	  points = o_ring->Points - 1;
+	  if (o_ring->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaSetPointXYZ (o_ring->Coords, points, x, y, z);
+	    }
+	  else if (o_ring->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaSetPointXYM (o_ring->Coords, points, x, y, m);
+	    }
+	  else if (o_ring->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaSetPointXYZM (o_ring->Coords, points, x, y, z, m);
+	    }
+	  else
+	    {
+		gaiaSetPoint (o_ring->Coords, points, x, y);
+	    }
+	  for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+	    {
+		/* copying each INTERIOR RING [if any] */
+		i_ring = polyg->Interiors + ib;
+		/* sanitizing an INTERIOR RING */
+		points = 0;
+		for (iv = 0; iv < i_ring->Points; iv++)
+		  {
+		      /* PASS I - checking points */
+		      z = 0.0;
+		      m = 0.0;
+		      if (i_ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (i_ring->Coords, iv, &x, &y, &z);
+			}
+		      else if (i_ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (i_ring->Coords, iv, &x, &y, &m);
+			}
+		      else if (i_ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (i_ring->Coords, iv, &x, &y, &z,
+					      &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (i_ring->Coords, iv, &x, &y);
+			}
+		      if (iv > 0)
+			{
+			    if (last_x == x && last_y == y && last_z == z)
+				;
+			    else
+				points++;
+			}
+		      else
+			    points++;
+		      last_x = x;
+		      last_y = y;
+		      last_z = z;
+		  }
+		if (last_x == x && last_y == y && last_z == z)
+		    ;
+		else
+		  {
+		      /* forcing RING closure */
+		      points++;
+		  }
+		if (points < 4)
+		  {
+		      /* illegal RING - copying the original one */
+		      o_ring =
+			  gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+		      gaiaCopyRingCoords (o_ring, i_ring);
+		  }
+		else
+		  {
+		      /* valid RING - sanitizing */
+		      o_ring = gaiaAddInteriorRing (new_polyg, ib, points);
+		      points = 0;
+		      for (iv = 0; iv < i_ring->Points; iv++)
+			{
+			    /* PASS II - inserting points */
+			    z = 0.0;
+			    m = 0.0;
+			    if (i_ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (i_ring->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (i_ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (i_ring->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (i_ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (i_ring->Coords, iv, &x, &y,
+						    &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (i_ring->Coords, iv, &x, &y);
+			      }
+			    if (iv > 0)
+			      {
+				  if (last_x == x && last_y == y && last_z == z)
+				      ;
+				  else
+				    {
+					if (o_ring->DimensionModel == GAIA_XY_Z)
+					  {
+					      gaiaSetPointXYZ (o_ring->Coords,
+							       points, x, y, z);
+					  }
+					else if (o_ring->DimensionModel ==
+						 GAIA_XY_M)
+					  {
+					      gaiaSetPointXYM (o_ring->Coords,
+							       points, x, y, m);
+					  }
+					else if (o_ring->DimensionModel ==
+						 GAIA_XY_Z_M)
+					  {
+					      gaiaSetPointXYZM (o_ring->Coords,
+								points, x, y, z,
+								m);
+					  }
+					else
+					  {
+					      gaiaSetPoint (o_ring->Coords,
+							    points, x, y);
+					  }
+					points++;
+				    }
+			      }
+			    else
+			      {
+				  if (o_ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaSetPointXYZ (o_ring->Coords, points,
+							 x, y, z);
+				    }
+				  else if (o_ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaSetPointXYM (o_ring->Coords, points,
+							 x, y, m);
+				    }
+				  else if (o_ring->DimensionModel ==
+					   GAIA_XY_Z_M)
+				    {
+					gaiaSetPointXYZM (o_ring->Coords,
+							  points, x, y, z, m);
+				    }
+				  else
+				    {
+					gaiaSetPoint (o_ring->Coords, points, x,
+						      y);
+				    }
+				  points++;
+			      }
+			    last_x = x;
+			    last_y = y;
+			    last_z = z;
+			}
+		      /* PASS III - forcing RING closure */
+		      z = 0.0;
+		      m = 0.0;
+		      if (i_ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (i_ring->Coords, 0, &x, &y, &z);
+			}
+		      else if (i_ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (i_ring->Coords, 0, &x, &y, &m);
+			}
+		      else if (i_ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (i_ring->Coords, 0, &x, &y, &z,
+					      &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (i_ring->Coords, 0, &x, &y);
+			}
+		      points = o_ring->Points - 1;
+		      if (o_ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (o_ring->Coords, points, x, y, z);
+			}
+		      else if (o_ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (o_ring->Coords, points, x, y, m);
+			}
+		      else if (o_ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (o_ring->Coords, points, x, y, z,
+					      m);
+			}
+		      else
+			{
+			    gaiaSetPoint (o_ring->Coords, points, x, y);
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+    return new_geom;
+}
+
+static int
+gaiaIsToxicRing (gaiaRingPtr ring)
+{
+/* checking a Rings */
+    double x0;
+    double y0;
+    double z0;
+    double m0;
+    double x1;
+    double y1;
+    double z1;
+    double m1;
+    if (ring->Points < 4)
+	return 1;
+/* checking for unclosed rings */
+    gaiaRingGetPoint (ring, 0, &x0, &y0, &z0, &m0);
+    gaiaRingGetPoint (ring, ring->Points - 1, &x1, &y1, &z1, &m1);
+    if (x0 == x1 && y0 == y1)
+	;
+    else
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsToxic (gaiaGeomCollPtr geom)
+{
+/* 
+/ identifying toxic geometries 
+/ i.e. geoms making GEOS to crash !!!
+*/
+    int ib;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    if (!geom)
+	return 0;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* checking POINTs */
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* checking LINESTRINGs */
+	  if (line->Points < 2)
+	      return 1;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* checking POLYGONs */
+	  ring = polyg->Exterior;
+	  if (gaiaIsToxicRing (ring))
+	      return 1;
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		ring = polyg->Interiors + ib;
+		if (gaiaIsToxicRing (ring))
+		    return 1;
+	    }
+	  polyg = polyg->Next;
+      }
+    return 0;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaLinearize (gaiaGeomCollPtr geom, int force_multi)
+{
+/* attempts to rearrange a generic Geometry into a (multi)linestring */
+    int pts = 0;
+    int lns = 0;
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr new_ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double m;
+    double z;
+
+    if (!geom)
+	return NULL;
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    if (pts || lns)
+	return NULL;
+
+    if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    result->Srid = geom->Srid;
+    if (force_multi)
+	result->DeclaredType = GAIA_MULTILINESTRING;
+
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  /* dissolving any POLYGON as simple LINESTRINGs (rings) */
+	  rng = pg->Exterior;
+	  new_ln = gaiaAddLinestringToGeomColl (result, rng->Points);
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		/* copying the EXTERIOR RING as LINESTRING */
+		if (geom->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+		  }
+		else if (geom->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+		  }
+		else if (geom->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      gaiaSetPoint (new_ln->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		new_ln = gaiaAddLinestringToGeomColl (result, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      /* copying an INTERIOR RING as LINESTRING */
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			    gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			    gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			    gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			    gaiaSetPoint (new_ln->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  pg = pg->Next;
+      }
+    if (result->FirstLinestring == NULL)
+      {
+	  gaiaFreeGeomColl (result);
+	  return NULL;
+      }
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaDissolveSegments (gaiaGeomCollPtr geom)
+{
+/* attempts to dissolve a Geometry into segments */
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr segment;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    double x0;
+    double y0;
+    double z0;
+    double m0;
+    if (!geom)
+	return NULL;
+
+    if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  if (geom->DimensionModel == GAIA_XY_Z_M)
+	      gaiaAddPointToGeomCollXYZM (result, pt->X, pt->Y, pt->Z, pt->M);
+	  else if (geom->DimensionModel == GAIA_XY_Z)
+	      gaiaAddPointToGeomCollXYZ (result, pt->X, pt->Y, pt->Z);
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      gaiaAddPointToGeomCollXYM (result, pt->X, pt->Y, pt->M);
+	  else
+	      gaiaAddPointToGeomColl (result, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		  }
+		if (iv > 0)
+		  {
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    if (x != x0 || y != y0 || z != z0 || m != m0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPointXYZM (segment->Coords, 0, x0, y0,
+						    z0, m0);
+				  gaiaSetPointXYZM (segment->Coords, 1, x, y, z,
+						    m);
+			      }
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    if (x != x0 || y != y0 || z != z0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPointXYZ (segment->Coords, 0, x0, y0,
+						   z0);
+				  gaiaSetPointXYZ (segment->Coords, 1, x, y, z);
+			      }
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    if (x != x0 || y != y0 || m != m0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPointXYM (segment->Coords, 0, x0, y0,
+						   m0);
+				  gaiaSetPointXYM (segment->Coords, 1, x, y, m);
+			      }
+			}
+		      else
+			{
+			    if (x != x0 || y != y0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPoint (segment->Coords, 0, x0, y0);
+				  gaiaSetPoint (segment->Coords, 1, x, y);
+			      }
+			}
+		  }
+		x0 = x;
+		y0 = y;
+		z0 = z;
+		m0 = m;
+	    }
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  rng = pg->Exterior;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		/* exterior Ring */
+		if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		  }
+		if (iv > 0)
+		  {
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    if (x != x0 || y != y0 || z != z0 || m != m0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPointXYZM (segment->Coords, 0, x0, y0,
+						    z0, m0);
+				  gaiaSetPointXYZM (segment->Coords, 1, x, y, z,
+						    m);
+			      }
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    if (x != x0 || y != y0 || z != z0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPointXYZ (segment->Coords, 0, x0, y0,
+						   z0);
+				  gaiaSetPointXYZ (segment->Coords, 1, x, y, z);
+			      }
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    if (x != x0 || y != y0 || m != m0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPointXYM (segment->Coords, 0, x0, y0,
+						   m0);
+				  gaiaSetPointXYM (segment->Coords, 1, x, y, m);
+			      }
+			}
+		      else
+			{
+			    if (x != x0 || y != y0)
+			      {
+				  segment =
+				      gaiaAddLinestringToGeomColl (result, 2);
+				  gaiaSetPoint (segment->Coords, 0, x0, y0);
+				  gaiaSetPoint (segment->Coords, 1, x, y);
+			      }
+			}
+		  }
+		x0 = x;
+		y0 = y;
+		z0 = z;
+		m0 = m;
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      /* interior Ring */
+		      if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      if (iv > 0)
+			{
+			    if (geom->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  if (x != x0 || y != y0 || z != z0 || m != m0)
+				    {
+					segment =
+					    gaiaAddLinestringToGeomColl (result,
+									 2);
+					gaiaSetPointXYZM (segment->Coords, 0,
+							  x0, y0, z0, m0);
+					gaiaSetPointXYZM (segment->Coords, 1, x,
+							  y, z, m);
+				    }
+			      }
+			    else if (geom->DimensionModel == GAIA_XY_Z)
+			      {
+				  if (x != x0 || y != y0 || z != z0)
+				    {
+					segment =
+					    gaiaAddLinestringToGeomColl (result,
+									 2);
+					gaiaSetPointXYZ (segment->Coords, 0, x0,
+							 y0, z0);
+					gaiaSetPointXYZ (segment->Coords, 1, x,
+							 y, z);
+				    }
+			      }
+			    else if (geom->DimensionModel == GAIA_XY_M)
+			      {
+				  if (x != x0 || y != y0 || m != m0)
+				    {
+					segment =
+					    gaiaAddLinestringToGeomColl (result,
+									 2);
+					gaiaSetPointXYM (segment->Coords, 0, x0,
+							 y0, m0);
+					gaiaSetPointXYM (segment->Coords, 1, x,
+							 y, m);
+				    }
+			      }
+			    else
+			      {
+				  if (x != x0 || y != y0)
+				    {
+					segment =
+					    gaiaAddLinestringToGeomColl (result,
+									 2);
+					gaiaSetPoint (segment->Coords, 0, x0,
+						      y0);
+					gaiaSetPoint (segment->Coords, 1, x, y);
+				    }
+			      }
+			}
+		      x0 = x;
+		      y0 = y;
+		      z0 = z;
+		      m0 = m;
+		  }
+	    }
+	  pg = pg->Next;
+      }
+    result->Srid = geom->Srid;
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaDissolvePoints (gaiaGeomCollPtr geom)
+{
+/* attempts to dissolve a Geometry into points */
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (!geom)
+	return NULL;
+
+    if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  if (geom->DimensionModel == GAIA_XY_Z_M)
+	      gaiaAddPointToGeomCollXYZM (result, pt->X, pt->Y, pt->Z, pt->M);
+	  else if (geom->DimensionModel == GAIA_XY_Z)
+	      gaiaAddPointToGeomCollXYZ (result, pt->X, pt->Y, pt->Z);
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      gaiaAddPointToGeomCollXYM (result, pt->X, pt->Y, pt->M);
+	  else
+	      gaiaAddPointToGeomColl (result, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		  }
+		if (geom->DimensionModel == GAIA_XY_Z_M)
+		    gaiaAddPointToGeomCollXYZM (result, x, y, z, m);
+		else if (geom->DimensionModel == GAIA_XY_Z)
+		    gaiaAddPointToGeomCollXYZ (result, x, y, z);
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    gaiaAddPointToGeomCollXYM (result, x, y, m);
+		else
+		    gaiaAddPointToGeomColl (result, x, y);
+	    }
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  rng = pg->Exterior;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		/* exterior Ring */
+		if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		  }
+		if (geom->DimensionModel == GAIA_XY_Z_M)
+		    gaiaAddPointToGeomCollXYZM (result, x, y, z, m);
+		else if (geom->DimensionModel == GAIA_XY_Z)
+		    gaiaAddPointToGeomCollXYZ (result, x, y, z);
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    gaiaAddPointToGeomCollXYM (result, x, y, m);
+		else
+		    gaiaAddPointToGeomColl (result, x, y);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      /* interior Ring */
+		      if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			  gaiaAddPointToGeomCollXYZM (result, x, y, z, m);
+		      else if (geom->DimensionModel == GAIA_XY_Z)
+			  gaiaAddPointToGeomCollXYZ (result, x, y, z);
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			  gaiaAddPointToGeomCollXYM (result, x, y, m);
+		      else
+			  gaiaAddPointToGeomColl (result, x, y);
+		  }
+	    }
+	  pg = pg->Next;
+      }
+    result->Srid = geom->Srid;
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaExtractPointsFromGeomColl (gaiaGeomCollPtr geom)
+{
+/* extracts any POINT from a GeometryCollection */
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    int pts = 0;
+    if (!geom)
+	return NULL;
+
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    if (!pts)
+	return NULL;
+
+    if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  if (geom->DimensionModel == GAIA_XY_Z_M)
+	      gaiaAddPointToGeomCollXYZM (result, pt->X, pt->Y, pt->Z, pt->M);
+	  else if (geom->DimensionModel == GAIA_XY_Z)
+	      gaiaAddPointToGeomCollXYZ (result, pt->X, pt->Y, pt->Z);
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      gaiaAddPointToGeomCollXYM (result, pt->X, pt->Y, pt->M);
+	  else
+	      gaiaAddPointToGeomColl (result, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    result->Srid = geom->Srid;
+    result->DeclaredType = GAIA_MULTIPOINT;
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaExtractLinestringsFromGeomColl (gaiaGeomCollPtr geom)
+{
+/* extracts any LINESTRING from a GeometryCollection */
+    gaiaGeomCollPtr result;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr new_ln;
+    int lns = 0;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (!geom)
+	return NULL;
+
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    if (!lns)
+	return NULL;
+
+    if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  new_ln = gaiaAddLinestringToGeomColl (result, ln->Points);
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      gaiaSetPoint (new_ln->Coords, iv, x, y);
+		  }
+	    }
+	  ln = ln->Next;
+      }
+    result->Srid = geom->Srid;
+    result->DeclaredType = GAIA_MULTILINESTRING;
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaExtractPolygonsFromGeomColl (gaiaGeomCollPtr geom)
+{
+/* extracts any POLYGON from a GeometryCollection */
+    gaiaGeomCollPtr result;
+    gaiaPolygonPtr pg;
+    gaiaPolygonPtr new_pg;
+    gaiaRingPtr rng;
+    gaiaRingPtr new_rng;
+    int pgs = 0;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (!geom)
+	return NULL;
+
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (!pgs)
+	return NULL;
+
+    if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  rng = pg->Exterior;
+	  new_pg =
+	      gaiaAddPolygonToGeomColl (result, rng->Points, pg->NumInteriors);
+	  new_rng = new_pg->Exterior;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (new_rng->Coords, iv, x, y, z, m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (new_rng->Coords, iv, x, y, z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (new_rng->Coords, iv, x, y, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      gaiaSetPoint (new_rng->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		new_rng = gaiaAddInteriorRing (new_pg, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			    gaiaSetPointXYZM (new_rng->Coords, iv, x, y, z, m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			    gaiaSetPointXYZ (new_rng->Coords, iv, x, y, z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			    gaiaSetPointXYM (new_rng->Coords, iv, x, y, m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			    gaiaSetPoint (new_rng->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  pg = pg->Next;
+      }
+    result->Srid = geom->Srid;
+    result->DeclaredType = GAIA_MULTIPOLYGON;
+    return result;
+}
diff --git a/libspatialite/src/gaiageo/gg_endian.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_endian.c
similarity index 100%
copy from libspatialite/src/gaiageo/gg_endian.c
copy to libspatialite/libspatialite-3.0.1/src/gaiageo/gg_endian.c
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_ewkt.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_ewkt.c
new file mode 100644
index 0000000..8bd309c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_ewkt.c
@@ -0,0 +1,5589 @@
+/*
+
+ gg_ewkt.c -- EWKT parser/lexer 
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <assert.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#define strncasecmp	_strnicmp
+#define atoll	_atoi64
+#endif /* not WIN32 */
+
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty	_isatty
+#define fileno	_fileno
+#endif
+
+int ewkt_parse_error;
+
+static int
+ewktCheckValidity (gaiaGeomCollPtr geom)
+{
+/* checks if this one is a degenerated geometry */
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int ib;
+    int entities = 0;
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  /* checking points */
+	  entities++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* checking linestrings */
+	  if (ln->Points < 2)
+	      return 0;
+	  entities++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  /* checking polygons */
+	  rng = pg->Exterior;
+	  if (rng->Points < 4)
+	      return 0;
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		if (rng->Points < 4)
+		    return 0;
+	    }
+	  entities++;
+	  pg = pg->Next;
+      }
+    if (!entities)
+	return 0;
+    return 1;
+}
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromPoint (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINT */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomColl ();
+    geom->DeclaredType = GAIA_POINT;
+    gaiaAddPointToGeomColl (geom, point->X, point->Y);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromPointZ (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINTZ */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomCollXYZ ();
+    geom->DeclaredType = GAIA_POINTZ;
+    gaiaAddPointToGeomCollXYZ (geom, point->X, point->Y, point->Z);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromPointM (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINTM */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomCollXYM ();
+    geom->DeclaredType = GAIA_POINTM;
+    gaiaAddPointToGeomCollXYM (geom, point->X, point->Y, point->M);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromPointZM (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINTZM */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomCollXYZM ();
+    geom->DeclaredType = GAIA_POINTZM;
+    gaiaAddPointToGeomCollXYZM (geom, point->X, point->Y, point->Z, point->M);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromLinestring (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRING */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    geom = gaiaAllocGeomColl ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPoint (line->Coords, iv, &x, &y);
+	  gaiaSetPoint (line2->Coords, iv, x, y);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromLinestringZ (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRINGZ */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    double z;
+    geom = gaiaAllocGeomCollXYZ ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+	  gaiaSetPointXYZ (line2->Coords, iv, x, y, z);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromLinestringM (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRINGM */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    double m;
+    geom = gaiaAllocGeomCollXYM ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+	  gaiaSetPointXYM (line2->Coords, iv, x, y, m);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaEwktGeometryFromLinestringZM (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRINGZM */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    geom = gaiaAllocGeomCollXYZM ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+	  gaiaSetPointXYZM (line2->Coords, iv, x, y, z, m);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+static gaiaPointPtr
+ewkt_point_xy (double *x, double *y)
+{
+    return gaiaAllocPoint (*x, *y);
+}
+
+/* 
+ * Creates a 3D (xyz) point in SpatiaLite
+ * x, y, and z are pointers to doubles which represent the x, y, and z coordinates of the point to be created.
+ * Returns a gaiaPointPtr representing the created point.
+ *
+ * Creates a 3D (xyz) point. This is a parser helper function which is called when 3D coordinates are encountered.
+ * Parameters x, y, and z are pointers to doubles which represent the x, y, and z coordinates of the point to be created.
+ * Returns a gaiaPointPtr pointing to the 3D created point.
+ */
+static gaiaPointPtr
+ewkt_point_xyz (double *x, double *y, double *z)
+{
+    return gaiaAllocPointXYZ (*x, *y, *z);
+}
+
+/* 
+ * Creates a 2D (xy) point with an m value which is a part of the linear reference system. This is a parser helper
+ * function which is called when 2D   *coordinates with an m value are encountered.
+ * Parameters x and y are pointers to doubles which represent the x and y coordinates of the point to be created.
+ * Parameter m is a pointer to a double which represents the part of the linear reference system.
+ * Returns a gaiaPointPtr pointing to the created 2D point with an m value.
+ */
+static gaiaPointPtr
+ewkt_point_xym (double *x, double *y, double *m)
+{
+    return gaiaAllocPointXYM (*x, *y, *m);
+}
+
+/* 
+ * Creates a 4D (xyz) point with an m value which is a part of the linear reference system. This is a parser helper
+ * function which is called when  *4Dcoordinates with an m value are encountered
+ * Parameters x, y, and z are pointers to doubles which represent the x, y, and z coordinates of the point to be created. 
+ * Parameter m is a pointer to a double which represents the part of the linear reference system.
+ * Returns a gaiaPointPtr pointing the created 4D point with an m value.
+ */
+gaiaPointPtr
+ewkt_point_xyzm (double *x, double *y, double *z, double *m)
+{
+    return gaiaAllocPointXYZM (*x, *y, *z, *m);
+}
+
+/*
+ * Builds a geometry collection from a point. The geometry collection should contain only one element ? the point. 
+ * The correct geometry type must be *decided based on the point type. The parser should call this function when the 
+ * ?POINT? WKT expression is encountered.
+ * Parameter point is a pointer to a 2D, 3D, 2D with an m value, or 4D with an m value point.
+ * Returns a geometry collection containing the point. The geometry must have FirstPoint and LastPoint  pointing to the
+ * same place as point.  *DimensionModel must be the same as the model of the point and DimensionType must be GAIA_TYPE_POINT.
+ */
+static gaiaGeomCollPtr
+ewkt_buildGeomFromPoint (gaiaPointPtr point)
+{
+    switch (point->DimensionModel)
+      {
+      case GAIA_XY:
+	  return gaiaEwktGeometryFromPoint (point);
+	  break;
+      case GAIA_XY_Z:
+	  return gaiaEwktGeometryFromPointZ (point);
+	  break;
+      case GAIA_XY_M:
+	  return gaiaEwktGeometryFromPointM (point);
+	  break;
+      case GAIA_XY_Z_M:
+	  return gaiaEwktGeometryFromPointZM (point);
+	  break;
+      }
+    return NULL;
+}
+
+/* 
+ * Creates a 2D (xy) linestring from a list of 2D points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 2D (xy) points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+ewkt_linestring_xy (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestring (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPoint (linestring->Coords, i, p->X, p->Y);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/* 
+ * Creates a 3D (xyz) linestring from a list of 3D points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 3D (xyz) points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+ewkt_linestring_xyz (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestringXYZ (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPointXYZ (linestring->Coords, i, p->X, p->Y, p->Z);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/* 
+ * Creates a 2D (xy) with m value linestring from a list of 2D with m value points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 2D (xy) with m value points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+ewkt_linestring_xym (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestringXYM (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPointXYM (linestring->Coords, i, p->X, p->Y, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/* 
+ * Creates a 4D (xyz) with m value linestring from a list of 4D with m value points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 4D (xyz) with m value points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+ewkt_linestring_xyzm (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestringXYZM (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPointXYZM (linestring->Coords, i, p->X, p->Y, p->Z, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/*
+ * Builds a geometry collection from a linestring.
+ */
+static gaiaGeomCollPtr
+ewkt_buildGeomFromLinestring (gaiaLinestringPtr line)
+{
+    switch (line->DimensionModel)
+      {
+      case GAIA_XY:
+	  return gaiaEwktGeometryFromLinestring (line);
+	  break;
+      case GAIA_XY_Z:
+	  return gaiaEwktGeometryFromLinestringZ (line);
+	  break;
+      case GAIA_XY_M:
+	  return gaiaEwktGeometryFromLinestringM (line);
+	  break;
+      case GAIA_XY_Z_M:
+	  return gaiaEwktGeometryFromLinestringZM (line);
+	  break;
+      }
+    return NULL;
+}
+
+/*
+ * Helper function that determines the number of points in the linked list.
+ */
+static int
+ewkt_count_points (gaiaPointPtr first)
+{
+    /* Counts the number of points in the ring. */
+    gaiaPointPtr p = first;
+    int numpoints = 0;
+    while (p != NULL)
+      {
+	  numpoints++;
+	  p = p->Next;
+      }
+    return numpoints;
+}
+
+/*
+ * Creates a 2D (xy) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 2D (xy) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+ewkt_ring_xy (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = ewkt_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRing (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPoint (ring->Coords, index, p->X, p->Y);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Creates a 3D (xyz) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 3D (xyz) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+ewkt_ring_xyz (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = ewkt_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRingXYZ (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPointXYZ (ring->Coords, index, p->X, p->Y, p->Z);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Creates a 2D (xym) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 2D (xym) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+ewkt_ring_xym (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = ewkt_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRingXYM (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPointXYM (ring->Coords, index, p->X, p->Y, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Creates a 3D (xyzm) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 3D (xyzm) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+ewkt_ring_xyzm (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = ewkt_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRingXYZM (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPointXYZM (ring->Coords, index, p->X, p->Y, p->Z, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Helper function that will create any type of polygon (xy, xym, xyz, xyzm) in SpatiaLite.
+ * 
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are of the same type. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+ewkt_polygon_any_type (gaiaRingPtr first)
+{
+    gaiaRingPtr p;
+    gaiaRingPtr p_n;
+    gaiaPolygonPtr polygon;
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a polygon structure with the exterior ring. */
+    polygon = gaiaCreatePolygon (first);
+    if (polygon == NULL)
+	return NULL;
+
+    /* Adds all interior rings into the polygon structure. */
+    p = first;
+    while (p != NULL)
+      {
+	  p_n = p->Next;
+	  if (p == first)
+	      gaiaFreeRing (p);
+	  else
+	      gaiaAddRingToPolyg (polygon, p);
+	  p = p_n;
+      }
+
+    return polygon;
+}
+
+/* 
+ * Creates a 2D (xy) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 2D (xy) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+ewkt_polygon_xy (gaiaRingPtr first)
+{
+    return ewkt_polygon_any_type (first);
+}
+
+/* 
+ * Creates a 3D (xyz) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 3D (xyz) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+ewkt_polygon_xyz (gaiaRingPtr first)
+{
+    return ewkt_polygon_any_type (first);
+}
+
+/* 
+ * Creates a 2D (xym) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 2D (xym) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+ewkt_polygon_xym (gaiaRingPtr first)
+{
+    return ewkt_polygon_any_type (first);
+}
+
+/* 
+ * Creates a 3D (xyzm) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 3D (xyzm) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+ewkt_polygon_xyzm (gaiaRingPtr first)
+{
+    return ewkt_polygon_any_type (first);
+}
+
+/*
+ * Builds a geometry collection from a polygon.
+ * NOTE: This function may already be implemented in the SpatiaLite code base. If it is, make sure that we
+ *              can use it (ie. it doesn't use any other variables or anything else set by Sandro's parser). If you find
+ *              that we can use an existing function then ignore this one.
+ */
+static gaiaGeomCollPtr
+ewkt_buildGeomFromPolygon (gaiaPolygonPtr polygon)
+{
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (polygon == NULL)
+      {
+	  return NULL;
+      }
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    switch (polygon->DimensionModel)
+      {
+      case GAIA_XY:
+	  geom = gaiaAllocGeomColl ();
+	  break;
+      case GAIA_XY_Z:
+	  geom = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  geom = gaiaAllocGeomCollXYM ();
+	  break;
+      case GAIA_XY_Z_M:
+	  geom = gaiaAllocGeomCollXYZM ();
+	  break;
+      }
+    if (geom == NULL)
+      {
+	  return NULL;
+      }
+    geom->DeclaredType = GAIA_POLYGON;
+
+    /* Stores the location of the first and last polygons in the linked list. */
+    geom->FirstPolygon = polygon;
+    while (polygon != NULL)
+      {
+	  geom->LastPolygon = polygon;
+	  polygon = polygon->Next;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 2D (xy) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points.
+ * All of the points given to the function are 2D (xy) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+ewkt_multipoint_xy (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 2D (xy) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomColl (geom, p->X, p->Y);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 3D (xyz) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points.
+ * All of the points given to the function are 3D (xyz) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+ewkt_multipoint_xyz (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomCollXYZ ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 3D (xyz) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomCollXYZ (geom, p->X, p->Y, p->Z);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 2D (xym) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points.
+ * All of the points given to the function are 2D (xym) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+ewkt_multipoint_xym (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomCollXYM ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 2D (xym) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomCollXYM (geom, p->X, p->Y, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 3D (xyzm) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points given to the function are 3D (xyzm) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+ewkt_multipoint_xyzm (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomCollXYZM ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 3D (xyzm) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomCollXYZM (geom, p->X, p->Y, p->Z, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/*
+ * Creates a geometry collection containing 2D (xy) linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the *linestrings in the list must be 2D (xy) linestrings. There must be at least 1 linestring in the list.
+ * Returns a pointer to the created geometry collection of 2D linestrings. The geometry must have FirstLinestring pointing to the
+ * first linestring in the list pointed by first and LastLinestring pointing to the last element of the same list. DimensionModel
+ * must be GAIA_XY and DimensionType must be *GAIA_TYPE_LINESTRING.
+ */
+
+static gaiaGeomCollPtr
+ewkt_multilinestring_xy (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomColl ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+
+    return a;
+}
+
+/* 
+ * Returns a geometry collection containing the created multilinestring object (?).
+ * Creates a geometry collection containing 3D (xyz) linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the *linestrings in the list must be 3D (xyz) linestrings. There must be at least 1 linestring in the list.
+ * Returns a pointer to the created geometry collection of 3D linestrings. The geometry must have FirstLinestring pointing to the
+ * first linestring in the *list pointed by first and LastLinestring pointing to the last element of the same list. DimensionModel
+ * must be GAIA_XYZ and DimensionType must be *GAIA_TYPE_LINESTRING.
+ */
+static gaiaGeomCollPtr
+ewkt_multilinestring_xyz (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomCollXYZ ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY_Z;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+    return a;
+}
+
+/* 
+ * Creates a geometry collection containing 2D (xy) with m value linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the  *linestrings in the list must be 2D (xy) with m value linestrings. There must be at least 1 linestring 
+ * in the list.
+ * Returns a pointer to the created geometry collection of 2D with m value linestrings. The geometry must have FirstLinestring
+ * pointing to the first *linestring in the list pointed by first and LastLinestring pointing to the last element of the same list. 
+ * DimensionModel must be GAIA_XYM and *DimensionType must be GAIA_TYPE_LINESTRING.
+ */
+static gaiaGeomCollPtr
+ewkt_multilinestring_xym (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomCollXYM ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY_M;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+
+    return a;
+}
+
+/* 
+ * Creates a geometry collection containing 4D (xyz) with m value linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the *linestrings in the list must be 4D (xyz) with m value linestrings. There must be at least 1 linestring
+ * in the list.
+ * Returns a pointer to the created geometry collection of 4D with m value linestrings. The geometry must have FirstLinestring
+ * pointing to the first *linestring in the list pointed by first and LastLinestring pointing to the last element of the same list. 
+ * DimensionModel must be GAIA_XYZM and *DimensionType must be GAIA_TYPE_LINESTRING.
+ */
+static gaiaGeomCollPtr
+ewkt_multilinestring_xyzm (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomCollXYZM ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY_Z_M;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+    return a;
+}
+
+/* 
+ * Creates a geometry collection containing 2D (xy) polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should 
+ * be added to the collection. All of the polygons in the list must be 2D (xy) polygons. There must be 
+ * at least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 2D polygons. The geometry must have 
+ * FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon pointing 
+ * to the last element of the same list. DimensionModel must be GAIA_XY and DimensionType must 
+ * be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+ewkt_multipolygon_xy (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+/* 
+ * Creates a geometry collection containing 3D (xyz) polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should be 
+ * added to the collection. All of the polygons in the list must be 3D (xyz) polygons. There must be at
+ * least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 3D polygons. The geometry must have 
+ * FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon pointing to 
+ * the last element of the same list. DimensionModel must be GAIA_XYZ and DimensionType must 
+ * be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+ewkt_multipolygon_xyz (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomCollXYZ ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+/* 
+ * Creates a geometry collection containing 2D (xy) with m value polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should
+ * be added to the collection. All of the polygons in the list must be 2D (xy) with m value polygons.
+ * There must be at least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 2D with m value polygons. The geometry 
+ * must have FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon 
+ * pointing to the last element of the same list. DimensionModel must be GAIA_XYM and DimensionType 
+ * must be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+ewkt_multipolygon_xym (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomCollXYM ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+/*
+ * Creates a geometry collection containing 4D (xyz) with m value polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should be 
+ * added to the collection. All of the polygons in the list must be 4D (xyz) with m value polygons. 
+ * There must be at least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 4D with m value polygons. The geometry must 
+ * have FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon pointing 
+//  * to the last element of the same list. DimensionModel must be GAIA_XYZM and DimensionType must 
+ * be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+ewkt_multipolygon_xyzm (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomCollXYZM ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+static void
+ewkt_geomColl_common (gaiaGeomCollPtr org, gaiaGeomCollPtr dst)
+{
+/* 
+/ helper function: xfers entities between the Origin and Destination 
+/ Sandro Furieri: 2010 October 12
+*/
+    gaiaGeomCollPtr p = org;
+    gaiaGeomCollPtr p_n;
+    gaiaPointPtr pt;
+    gaiaPointPtr pt_n;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr ln_n;
+    gaiaPolygonPtr pg;
+    gaiaPolygonPtr pg_n;
+    while (p)
+      {
+	  pt = p->FirstPoint;
+	  while (pt)
+	    {
+		pt_n = pt->Next;
+		pt->Next = NULL;
+		if (dst->FirstPoint == NULL)
+		    dst->FirstPoint = pt;
+		if (dst->LastPoint != NULL)
+		    dst->LastPoint->Next = pt;
+		dst->LastPoint = pt;
+		pt = pt_n;
+	    }
+	  ln = p->FirstLinestring;
+	  while (ln)
+	    {
+		ln_n = ln->Next;
+		ln->Next = NULL;
+		if (dst->FirstLinestring == NULL)
+		    dst->FirstLinestring = ln;
+		if (dst->LastLinestring != NULL)
+		    dst->LastLinestring->Next = ln;
+		dst->LastLinestring = ln;
+		ln = ln_n;
+	    }
+	  pg = p->FirstPolygon;
+	  while (pg)
+	    {
+		pg_n = pg->Next;
+		pg->Next = NULL;
+		if (dst->FirstPolygon == NULL)
+		    dst->FirstPolygon = pg;
+		if (dst->LastPolygon != NULL)
+		    dst->LastPolygon->Next = pg;
+		dst->LastPolygon = pg;
+		pg = pg_n;
+	    }
+	  p_n = p->Next;
+	  p->FirstPoint = NULL;
+	  p->LastPoint = NULL;
+	  p->FirstLinestring = NULL;
+	  p->LastLinestring = NULL;
+	  p->FirstPolygon = NULL;
+	  p->LastPolygon = NULL;
+	  gaiaFreeGeomColl (p);
+	  p = p_n;
+      }
+}
+
+/* Creates a 2D (xy) geometry collection in SpatiaLite
+ *
+ * first is the first geometry collection in a linked list of geometry collections.
+ * Each geometry collection represents a single type of object (eg. one could be a POINT, 
+ * another could be a LINESTRING, another could be a MULTILINESTRING, etc.).
+ *
+ * The type of object represented by any geometry collection is stored in the declaredType 
+ * field of its struct. For example, if first->declaredType = GAIA_POINT, then first represents a point.
+ * If first->declaredType = GAIA_MULTIPOINT, then first represents a multipoint.
+ *
+ * NOTE: geometry collections cannot contain other geometry collections (have to confirm this 
+ * with Sandro).
+ *
+ * The goal of this function is to take the information from all of the structs in the linked list and 
+ * return one geomColl struct containing all of that information.
+ *
+ * The integers used for 'declaredType' are defined in gaiageo.h. In this function, the only values 
+ * contained in 'declaredType' that will be encountered will be:
+ *
+ *	GAIA_POINT, GAIA_LINESTRING, GAIA_POLYGON, 
+ *	GAIA_MULTIPOINT, GAIA_MULTILINESTRING, GAIA_MULTIPOLYGON
+ */
+static gaiaGeomCollPtr
+ewkt_geomColl_xy (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY;
+    ewkt_geomColl_common (first, geom);
+    return geom;
+}
+
+/*
+ * See geomColl_xy for description.
+ *
+ * The only difference between this function and geomColl_xy is that the 'declaredType' field of the structs
+ * in the linked list for this function will only contain the following types:
+ *
+ *	GAIA_POINTZ, GAIA_LINESTRINGZ, GAIA_POLYGONZ,
+ * 	GAIA_MULTIPOINTZ, GAIA_MULTILINESTRINGZ, GAIA_MULTIPOLYGONZ
+ */
+static gaiaGeomCollPtr
+ewkt_geomColl_xyz (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY_Z;
+    ewkt_geomColl_common (first, geom);
+    return geom;
+}
+
+/*
+ * See geomColl_xy for description.
+ *
+ * The only difference between this function and geomColl_xy is that the 'declaredType' field of the structs
+ * in the linked list for this function will only contain the following types:
+ *
+ *	GAIA_POINTM, GAIA_LINESTRINGM, GAIA_POLYGONM,
+ * 	GAIA_MULTIPOINTM, GAIA_MULTILINESTRINGM, GAIA_MULTIPOLYGONM
+ */
+static gaiaGeomCollPtr
+ewkt_geomColl_xym (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY_M;
+    ewkt_geomColl_common (first, geom);
+    return geom;
+}
+
+/*
+ * See geomColl_xy for description.
+ *
+ * The only difference between this function and geomColl_xy is that the 'declaredType' field of the structs
+ * in the linked list for this function will only contain the following types:
+ *
+ *	GAIA_POINTZM, GAIA_LINESTRINGZM, GAIA_POLYGONZM,
+ * 	GAIA_MULTIPOINTZM, GAIA_MULTILINESTRINGZM, GAIA_MULTIPOLYGONZM
+ */
+static gaiaGeomCollPtr
+ewkt_geomColl_xyzm (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY_Z_M;
+    ewkt_geomColl_common (first, geom);
+    return geom;
+}
+
+
+
+/*
+** CAVEAT: we must redefine any Lemon/Flex own macro
+*/
+#define YYMINORTYPE		EWKT_MINORTYPE
+#define YY_CHAR			EWKT_YY_CHAR
+#define	input			ewkt_input
+#define ParseAlloc		ewktParseAlloc
+#define ParseFree		ewktParseFree
+#define ParseStackPeak		ewktParseStackPeak
+#define Parse			ewktParse
+#define yyStackEntry		ewkt_yyStackEntry
+#define yyzerominor		ewkt_yyzerominor
+#define yy_accept		ewkt_yy_accept
+#define yy_action		ewkt_yy_action
+#define yy_base			ewkt_yy_base
+#define yy_buffer_stack		ewkt_yy_buffer_stack
+#define yy_buffer_stack_max	ewkt_yy_buffer_stack_max
+#define yy_buffer_stack_top	ewkt_yy_buffer_stack_top
+#define yy_c_buf_p		ewkt_yy_c_buf_p
+#define yy_chk			ewkt_yy_chk
+#define yy_def			ewkt_yy_def
+#define yy_default		ewkt_yy_default
+#define yy_destructor		ewkt_yy_destructor
+#define yy_ec			ewkt_yy_ec
+#define yy_fatal_error		ewkt_yy_fatal_error
+#define yy_find_reduce_action	ewkt_yy_find_reduce_action
+#define yy_find_shift_action	ewkt_yy_find_shift_action
+#define yy_get_next_buffer	ewkt_yy_get_next_buffer
+#define yy_get_previous_state	ewkt_yy_get_previous_state
+#define yy_init			ewkt_yy_init
+#define yy_init_globals		ewkt_yy_init_globals
+#define yy_lookahead		ewkt_yy_lookahead
+#define yy_meta			ewkt_yy_meta
+#define yy_nxt			ewkt_yy_nxt
+#define yy_parse_failed		ewkt_yy_parse_failed
+#define yy_pop_parser_stack	ewkt_yy_pop_parser_stack
+#define yy_reduce		ewkt_yy_reduce
+#define yy_reduce_ofst		ewkt_yy_reduce_ofst
+#define yy_shift		ewkt_yy_shift
+#define yy_shift_ofst		ewkt_yy_shift_ofst
+#define yy_start		ewkt_yy_start
+#define yy_state_type		ewkt_yy_state_type
+#define yy_syntax_error		ewkt_yy_syntax_error
+#define yy_trans_info		ewkt_yy_trans_info
+#define yy_try_NUL_trans	ewkt_yy_try_NUL_trans
+#define yyParser		ewkt_yyParser
+#define yyStackEntry		ewkt_yyStackEntry
+#define yyStackOverflow		ewkt_yyStackOverflow
+#define yyRuleInfo		ewkt_yyRuleInfo
+#define yyunput			ewkt_yyunput
+#define yyzerominor		ewkt_yyzerominor
+#define yyTraceFILE		ewkt_yyTraceFILE
+#define yyTracePrompt		ewkt_yyTracePrompt
+#define yyTokenName		ewkt_yyTokenName
+#define yyRuleName		ewkt_yyRuleName
+#define ParseTrace		ewkt_ParseTrace
+
+
+/*
+ EWKT_LEMON_H_START - LEMON generated header starts here 
+*/
+#define EWKT_NEWLINE                    1
+#define EWKT_POINT                      2
+#define EWKT_OPEN_BRACKET               3
+#define EWKT_CLOSE_BRACKET              4
+#define EWKT_POINT_M                    5
+#define EWKT_NUM                        6
+#define EWKT_COMMA                      7
+#define EWKT_LINESTRING                 8
+#define EWKT_LINESTRING_M               9
+#define EWKT_POLYGON                   10
+#define EWKT_POLYGON_M                 11
+#define EWKT_MULTIPOINT                12
+#define EWKT_MULTIPOINT_M              13
+#define EWKT_MULTILINESTRING           14
+#define EWKT_MULTILINESTRING_M         15
+#define EWKT_MULTIPOLYGON              16
+#define EWKT_MULTIPOLYGON_M            17
+#define EWKT_GEOMETRYCOLLECTION        18
+#define EWKT_GEOMETRYCOLLECTION_M      19
+/*
+ EWKT_LEMON_H_END - LEMON generated header ends here 
+*/
+
+
+
+typedef union
+{
+    double dval;
+    struct symtab *symp;
+} ewkt_yystype;
+#define YYSTYPE ewkt_yystype
+
+/* extern YYSTYPE yylval; */
+YYSTYPE EwktLval;
+
+
+
+/*
+ EWKT_LEMON_START - LEMON generated code starts here 
+*/
+
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is included that follows the "include" declaration
+** in the input grammar file. */
+#include <stdio.h>
+
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/* 
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands. 
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+**    YYCODETYPE         is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 terminals
+**                       and nonterminals.  "int" is used otherwise.
+**    YYNOCODE           is a number of type YYCODETYPE which corresponds
+**                       to no legal terminal or nonterminal number.  This
+**                       number is used to fill in empty slots of the hash 
+**                       table.
+**    YYFALLBACK         If defined, this indicates that one or more tokens
+**                       have fall-back values which should be used if the
+**                       original value of the token will not parse.
+**    YYACTIONTYPE       is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 rules and
+**                       states combined.  "int" is used otherwise.
+**    ParseTOKENTYPE     is the data type used for minor tokens given 
+**                       directly to the parser from the tokenizer.
+**    YYMINORTYPE        is the data type used for all minor tokens.
+**                       This is typically a union of many types, one of
+**                       which is ParseTOKENTYPE.  The entry in the union
+**                       for base tokens is called "yy0".
+**    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
+**                       zero the stack is dynamically sized using realloc()
+**    ParseARG_SDECL     A static variable declaration for the %extra_argument
+**    ParseARG_PDECL     A parameter declaration for the %extra_argument
+**    ParseARG_STORE     Code to store %extra_argument into yypParser
+**    ParseARG_FETCH     Code to extract %extra_argument from yypParser
+**    YYNSTATE           the combined number of states.
+**    YYNRULE            the number of rules in the grammar
+**    YYERRORSYMBOL      is the code number of the error symbol.  If not
+**                       defined, then do no error processing.
+*/
+#define YYCODETYPE unsigned char
+#define YYNOCODE 109
+#define YYACTIONTYPE unsigned short int
+#define ParseTOKENTYPE void *
+typedef union {
+  int yyinit;
+  ParseTOKENTYPE yy0;
+} YYMINORTYPE;
+#ifndef YYSTACKDEPTH
+#define YYSTACKDEPTH 1000000
+#endif
+#define ParseARG_SDECL  gaiaGeomCollPtr *result ;
+#define ParseARG_PDECL , gaiaGeomCollPtr *result 
+#define ParseARG_FETCH  gaiaGeomCollPtr *result  = yypParser->result 
+#define ParseARG_STORE yypParser->result  = result 
+#define YYNSTATE 350
+#define YYNRULE 151
+#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
+
+/* The yyzerominor constant is used to initialize instances of
+** YYMINORTYPE objects to zero. */
+static const YYMINORTYPE yyzerominor = { 0 };
+
+/* Define the yytestcase() macro to be a no-op if is not already defined
+** otherwise.
+**
+** Applications can choose to define yytestcase() in the %include section
+** to a macro that can assist in verifying code coverage.  For production
+** code the yytestcase() macro should be turned off.  But it is useful
+** for testing.
+*/
+#ifndef yytestcase
+# define yytestcase(X)
+#endif
+
+
+/* Next are the tables used to determine what action to take based on the
+** current state and lookahead token.  These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.  
+**
+** Suppose the action integer is N.  Then the action is determined as
+** follows
+**
+**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
+**                                      token onto the stack and goto state N.
+**
+**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
+**
+**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
+**
+**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
+**
+**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
+**                                      slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+**      yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.  
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+**  yy_action[]        A single table containing all actions.
+**  yy_lookahead[]     A table containing the lookahead for each entry in
+**                     yy_action.  Used to detect hash collisions.
+**  yy_shift_ofst[]    For each state, the offset into yy_action for
+**                     shifting terminals.
+**  yy_reduce_ofst[]   For each state, the offset into yy_action for
+**                     shifting non-terminals after a reduce.
+**  yy_default[]       Default action for each state.
+*/
+static const YYACTIONTYPE yy_action[] = {
+ /*     0 */   159,  222,  223,  224,  225,  226,  227,  228,  229,  230,
+ /*    10 */   231,  232,  233,  234,  235,  236,  237,  238,  239,  240,
+ /*    20 */   241,  242,  243,  244,  245,  246,  247,  248,  249,  250,
+ /*    30 */   251,  252,  350,  257,  160,  161,  162,  164,  163,   54,
+ /*    40 */    12,   71,   13,   86,   15,   95,   16,  106,   18,  123,
+ /*    50 */    20,  152,  128,  136,  144,  134,  142,  150,  135,  143,
+ /*    60 */   151,  166,  168,    4,  170,   54,  175,  180,   55,  185,
+ /*    70 */    54,   92,   93,  160,   94,   54,  207,  131,   14,   12,
+ /*    80 */   132,   13,  129,  133,  130,  211,  139,   64,  215,  140,
+ /*    90 */    62,  137,  141,  138,  145,  147,  146,   56,  148,  164,
+ /*   100 */    74,  149,    5,   71,   78,   86,   82,  153,  157,  158,
+ /*   110 */   154,  155,  156,  260,    6,  261,  262,  502,    1,  274,
+ /*   120 */    60,  275,  276,  290,   59,  291,  292,  165,  298,   57,
+ /*   130 */   299,  300,   97,   65,  100,  103,   62,  310,  256,  311,
+ /*   140 */   312,  111,  167,  115,  119,  264,  322,   61,  323,  324,
+ /*   150 */   172,   59,   57,   69,   66,   70,   66,   72,   73,   57,
+ /*   160 */    57,  175,  176,  177,   76,   59,   59,   59,   59,  180,
+ /*   170 */   181,   17,   62,   62,  182,   80,   19,   62,   62,  185,
+ /*   180 */    66,  186,   66,  187,   66,   84,   66,  190,  191,   57,
+ /*   190 */    57,  192,   90,   57,   57,   96,  166,   57,  168,    2,
+ /*   200 */    59,   62,  170,   66,  161,   23,  162,   58,   59,   62,
+ /*   210 */   163,   66,  259,  263,   63,  266,   25,   27,   67,  169,
+ /*   220 */   267,   68,   28,  171,  269,   30,  173,  272,  271,   75,
+ /*   230 */    31,  178,   79,   35,   39,   83,  183,  174,   87,   77,
+ /*   240 */   188,   43,  279,   89,  195,   47,  193,  179,   81,  286,
+ /*   250 */   194,  196,  282,  197,   98,  184,   85,   88,  285,  189,
+ /*   260 */    91,   48,  289,   99,  101,   49,  102,  104,   50,  198,
+ /*   270 */   296,  105,  107,  108,  109,  112,  110,  113,   74,  302,
+ /*   280 */   114,  117,  116,  199,  304,  118,  200,  307,  306,  120,
+ /*   290 */   201,  121,  309,   78,  122,  124,  126,    7,   82,   10,
+ /*   300 */     8,  202,  125,  314,  260,    9,  127,  274,   11,  221,
+ /*   310 */     3,  203,  316,  253,  261,  204,  254,  319,  255,  275,
+ /*   320 */   318,   21,   22,  205,  258,  265,  321,  276,  262,   24,
+ /*   330 */   268,   26,  270,  273,   29,  277,  206,   32,  326,   33,
+ /*   340 */    34,  278,  280,   36,  281,  327,   37,  328,  208,  209,
+ /*   350 */    38,  283,  210,   40,  284,   41,  332,  333,  334,  212,
+ /*   360 */   213,   42,  214,  287,   44,   45,  338,   46,  288,  293,
+ /*   370 */   339,  340,  343,  216,  294,  295,  297,  217,  218,  301,
+ /*   380 */   303,  345,  346,  305,  347,  219,  220,  308,  313,  315,
+ /*   390 */   317,  320,  325,   51,  503,  329,  330,  331,  335,   52,
+ /*   400 */   503,  336,  337,   53,  503,  503,  341,  342,  344,  503,
+ /*   410 */   503,  348,  349,
+};
+static const YYCODETYPE yy_lookahead[] = {
+ /*     0 */    23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
+ /*    10 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
+ /*    20 */    43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
+ /*    30 */    53,   54,    0,    6,    2,   55,   56,    5,   58,   59,
+ /*    40 */     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
+ /*    50 */    18,   19,   27,   28,   29,   30,   31,   32,   33,   34,
+ /*    60 */    35,   55,   56,    3,   58,   59,   55,   56,   59,   58,
+ /*    70 */    59,   55,   56,    2,   58,   59,    2,   27,    3,    8,
+ /*    80 */    30,   10,    8,   33,   10,    2,   28,   56,    2,   31,
+ /*    90 */    59,    8,   34,   10,    8,   29,   10,   59,   32,    5,
+ /*   100 */    72,   35,    3,    9,   76,   11,   78,   48,   49,   50,
+ /*   110 */    48,   49,   50,   64,    3,   66,   67,   21,   22,   68,
+ /*   120 */    55,   70,   71,   80,   59,   82,   83,   57,   84,   59,
+ /*   130 */    86,   87,   64,   56,   66,   67,   59,   92,   59,   94,
+ /*   140 */    95,   68,   60,   70,   71,   60,  100,   55,  102,  103,
+ /*   150 */    57,   59,   59,   58,   59,   58,   59,   57,   57,   59,
+ /*   160 */    59,   55,   55,   55,   55,   59,   59,   59,   59,   56,
+ /*   170 */    56,    3,   59,   59,   56,   56,    3,   59,   59,   58,
+ /*   180 */    59,   58,   59,   58,   59,   58,   59,   57,   57,   59,
+ /*   190 */    59,   57,   57,   59,   59,   57,   55,   59,   56,    3,
+ /*   200 */    59,   59,   58,   59,   55,    7,   56,   59,   59,   59,
+ /*   210 */    58,   59,   59,   59,   59,   59,    7,    7,   59,   62,
+ /*   220 */    62,   59,    3,   63,   63,    7,   61,   61,   65,    7,
+ /*   230 */     3,   60,    7,    3,    3,    7,   62,   73,    3,   72,
+ /*   240 */    63,    3,   73,    7,   62,    3,   61,   77,   76,   69,
+ /*   250 */    60,   63,   77,   61,    7,   79,   78,   74,   79,   75,
+ /*   260 */    74,    3,   75,   64,    7,    3,   66,    7,    3,   88,
+ /*   270 */    81,   67,    3,   65,    7,    7,   65,    3,   72,   88,
+ /*   280 */    68,    3,    7,   90,   90,   70,   91,   85,   91,    7,
+ /*   290 */    89,    3,   89,   76,   71,    3,    7,    7,   78,    3,
+ /*   300 */     7,   96,   69,   96,   64,    7,   69,   68,    7,    1,
+ /*   310 */     3,   98,   98,    4,   66,   99,    4,   93,    4,   70,
+ /*   320 */    99,    3,    7,   97,    4,    4,   97,   71,   67,    7,
+ /*   330 */     4,    7,    4,    4,    7,    4,  104,    7,  104,    7,
+ /*   340 */     7,    4,    4,    7,    4,  104,    7,  104,  104,  104,
+ /*   350 */     7,    4,  106,    7,    4,    7,  106,  106,  106,  106,
+ /*   360 */   106,    7,  107,    4,    7,    7,  107,    7,    4,    4,
+ /*   370 */   107,  107,  101,  107,    4,    4,    4,  107,  105,    4,
+ /*   380 */     4,  105,  105,    4,  105,  105,  105,    4,    4,    4,
+ /*   390 */     4,    4,    4,    3,  108,    4,    4,    4,    4,    3,
+ /*   400 */   108,    4,    4,    3,  108,  108,    4,    4,    4,  108,
+ /*   410 */   108,    4,    4,
+};
+#define YY_SHIFT_USE_DFLT (-1)
+#define YY_SHIFT_MAX 220
+static const short yy_shift_ofst[] = {
+ /*     0 */    -1,   32,   71,   27,   27,   27,   27,   74,   83,   86,
+ /*    10 */    94,   94,   60,   75,   99,  111,  168,   60,  173,   75,
+ /*    20 */   196,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    30 */    27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    40 */    27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    50 */    27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    60 */   198,  198,   27,   27,  209,  209,   27,   27,   27,  210,
+ /*    70 */   210,  219,  218,  218,  222,  227,  198,  222,  225,  230,
+ /*    80 */   209,  225,  228,  231,  210,  228,  235,  238,  236,  238,
+ /*    90 */   218,  236,  198,  209,  210,  242,  218,  247,  258,  247,
+ /*   100 */   257,  262,  257,  260,  265,  260,  269,  219,  267,  219,
+ /*   110 */   267,  268,  274,  227,  268,  275,  278,  230,  275,  282,
+ /*   120 */   288,  231,  282,  292,  235,  289,  235,  289,  290,  258,
+ /*   130 */   274,  290,  290,  290,  290,  290,  293,  262,  278,  293,
+ /*   140 */   293,  293,  293,  293,  298,  265,  288,  298,  298,  298,
+ /*   150 */   298,  298,  296,  301,  301,  301,  301,  301,  301,  308,
+ /*   160 */   307,  309,  312,  314,  318,  320,  315,  321,  322,  326,
+ /*   170 */   324,  328,  327,  329,  331,  330,  332,  333,  337,  338,
+ /*   180 */   336,  339,  343,  340,  347,  346,  348,  354,  350,  359,
+ /*   190 */   357,  358,  360,  364,  365,  370,  371,  372,  375,  376,
+ /*   200 */   379,  383,  384,  385,  386,  387,  388,  390,  391,  392,
+ /*   210 */   393,  396,  394,  397,  398,  400,  402,  403,  404,  407,
+ /*   220 */   408,
+};
+#define YY_REDUCE_USE_DFLT (-24)
+#define YY_REDUCE_MAX 158
+static const short yy_reduce_ofst[] = {
+ /*     0 */    96,  -23,   25,  -20,    6,   11,   16,   50,   58,   66,
+ /*    10 */    59,   62,   49,   51,   28,   43,   44,   68,   45,   73,
+ /*    20 */    46,   70,   65,   92,   31,   77,   95,   97,   93,  100,
+ /*    30 */   101,  106,  107,  108,  109,  113,  114,  118,  119,  121,
+ /*    40 */   123,  125,  127,  130,  131,  134,  135,  138,  141,  142,
+ /*    50 */   144,  149,  150,  152,    9,   38,   79,  148,  153,  154,
+ /*    60 */    82,   85,  155,  156,  157,  158,  159,  162,   79,  160,
+ /*    70 */   161,  163,  165,  166,  164,  167,  171,  169,  170,  172,
+ /*    80 */   174,  175,  176,  178,  177,  179,  180,  183,  184,  186,
+ /*    90 */   185,  187,  190,  182,  188,  189,  192,  181,  199,  191,
+ /*   100 */   193,  200,  194,  195,  204,  197,  202,  208,  201,  211,
+ /*   110 */   203,  205,  212,  206,  207,  213,  215,  217,  214,  216,
+ /*   120 */   223,  220,  221,  224,  233,  226,  237,  229,  232,  240,
+ /*   130 */   239,  234,  241,  243,  244,  245,  246,  248,  249,  250,
+ /*   140 */   251,  252,  253,  254,  255,  261,  256,  259,  263,  264,
+ /*   150 */   266,  270,  271,  273,  276,  277,  279,  280,  281,
+};
+static const YYACTIONTYPE yy_default[] = {
+ /*     0 */   351,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*    10 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*    20 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*    30 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*    40 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*    50 */   501,  501,  501,  501,  501,  388,  390,  501,  501,  501,
+ /*    60 */   393,  393,  501,  501,  397,  397,  501,  501,  501,  399,
+ /*    70 */   399,  501,  395,  395,  418,  501,  393,  418,  424,  501,
+ /*    80 */   397,  424,  427,  501,  399,  427,  501,  501,  421,  501,
+ /*    90 */   395,  421,  393,  397,  399,  501,  395,  442,  501,  442,
+ /*   100 */   448,  501,  448,  451,  501,  451,  501,  501,  445,  501,
+ /*   110 */   445,  458,  501,  501,  458,  464,  501,  501,  464,  467,
+ /*   120 */   501,  501,  467,  501,  501,  461,  501,  461,  476,  501,
+ /*   130 */   501,  476,  476,  476,  476,  476,  490,  501,  501,  490,
+ /*   140 */   490,  490,  490,  490,  497,  501,  501,  497,  497,  497,
+ /*   150 */   497,  497,  501,  483,  483,  483,  483,  483,  483,  501,
+ /*   160 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*   170 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*   180 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*   190 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*   200 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*   210 */   501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+ /*   220 */   501,  352,  353,  354,  355,  356,  357,  358,  359,  360,
+ /*   230 */   361,  362,  363,  364,  365,  366,  367,  368,  369,  370,
+ /*   240 */   371,  372,  373,  374,  375,  376,  377,  378,  379,  380,
+ /*   250 */   381,  382,  383,  384,  385,  387,  391,  392,  386,  389,
+ /*   260 */   401,  403,  404,  388,  394,  405,  390,  398,  407,  400,
+ /*   270 */   408,  402,  396,  406,  409,  411,  412,  413,  417,  419,
+ /*   280 */   415,  423,  425,  416,  426,  428,  410,  414,  420,  422,
+ /*   290 */   429,  431,  432,  433,  435,  436,  430,  434,  437,  439,
+ /*   300 */   440,  441,  443,  447,  449,  450,  452,  438,  444,  446,
+ /*   310 */   453,  455,  456,  457,  459,  463,  465,  466,  468,  454,
+ /*   320 */   460,  462,  469,  471,  472,  473,  477,  478,  479,  474,
+ /*   330 */   475,  487,  491,  492,  493,  488,  489,  494,  498,  499,
+ /*   340 */   500,  495,  496,  470,  480,  484,  485,  486,  481,  482,
+};
+#define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0]))
+
+/* The next table maps tokens into fallback tokens.  If a construct
+** like the following:
+** 
+**      %fallback ID X Y Z.
+**
+** appears in the grammar, then ID becomes a fallback token for X, Y,
+** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack.  Information stored includes:
+**
+**   +  The state number for the parser at this level of the stack.
+**
+**   +  The value of the token stored at this level of the stack.
+**      (In other words, the "major" token.)
+**
+**   +  The semantic value stored at this level of the stack.  This is
+**      the information used by the action routines in the grammar.
+**      It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+  YYACTIONTYPE stateno;  /* The state-number */
+  YYCODETYPE major;      /* The major token value.  This is the code
+                         ** number for the token at this stack level */
+  YYMINORTYPE minor;     /* The user-supplied minor token value.  This
+                         ** is the value of the token  */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+  int yyidx;                    /* Index of top element in stack */
+#ifdef YYTRACKMAXSTACKDEPTH
+  int yyidxMax;                 /* Maximum value of yyidx */
+#endif
+  int yyerrcnt;                 /* Shifts left before out of the error */
+  ParseARG_SDECL                /* A place to hold %extra_argument */
+#if YYSTACKDEPTH<=0
+  int yystksz;                  /* Current side of the stack */
+  yyStackEntry *yystack;        /* The parser's stack */
+#else
+  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
+#endif
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* 
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message.  Tracing is turned off
+** by making either argument NULL 
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+**      If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+**      line of trace output.  If NULL, then tracing is
+**      turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void ParseTrace(FILE *TraceFILE, char *zTracePrompt){
+  yyTraceFILE = TraceFILE;
+  yyTracePrompt = zTracePrompt;
+  if( yyTraceFILE==0 ) yyTracePrompt = 0;
+  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required.  The following table supplies these names */
+static const char *const yyTokenName[] = { 
+  "$",             "EWKT_NEWLINE",  "EWKT_POINT",    "EWKT_OPEN_BRACKET",
+  "EWKT_CLOSE_BRACKET",  "EWKT_POINT_M",  "EWKT_NUM",      "EWKT_COMMA",  
+  "EWKT_LINESTRING",  "EWKT_LINESTRING_M",  "EWKT_POLYGON",  "EWKT_POLYGON_M",
+  "EWKT_MULTIPOINT",  "EWKT_MULTIPOINT_M",  "EWKT_MULTILINESTRING",  "EWKT_MULTILINESTRING_M",
+  "EWKT_MULTIPOLYGON",  "EWKT_MULTIPOLYGON_M",  "EWKT_GEOMETRYCOLLECTION",  "EWKT_GEOMETRYCOLLECTION_M",
+  "error",         "main",          "in",            "state",       
+  "program",       "geo_text",      "geo_textm",     "point",       
+  "pointz",        "pointzm",       "linestring",    "linestringz", 
+  "linestringzm",  "polygon",       "polygonz",      "polygonzm",   
+  "multipoint",    "multipointz",   "multipointzm",  "multilinestring",
+  "multilinestringz",  "multilinestringzm",  "multipolygon",  "multipolygonz",
+  "multipolygonzm",  "geocoll",       "geocollz",      "geocollzm",   
+  "pointm",        "linestringm",   "polygonm",      "multipointm", 
+  "multilinestringm",  "multipolygonm",  "geocollm",      "point_coordxy",
+  "point_coordxyz",  "point_coordxym",  "point_coordxyzm",  "coord",       
+  "extra_pointsxy",  "extra_pointsxym",  "extra_pointsxyz",  "extra_pointsxyzm",
+  "linestring_text",  "linestring_textm",  "linestring_textz",  "linestring_textzm",
+  "polygon_text",  "polygon_textm",  "polygon_textz",  "polygon_textzm",
+  "ring",          "extra_rings",   "ringm",         "extra_ringsm",
+  "ringz",         "extra_ringsz",  "ringzm",        "extra_ringszm",
+  "multipoint_text",  "multipoint_textm",  "multipoint_textz",  "multipoint_textzm",
+  "multilinestring_text",  "multilinestring_textm",  "multilinestring_textz",  "multilinestring_textzm",
+  "multilinestring_text2",  "multilinestring_textm2",  "multilinestring_textz2",  "multilinestring_textzm2",
+  "multipolygon_text",  "multipolygon_textm",  "multipolygon_textz",  "multipolygon_textzm",
+  "multipolygon_text2",  "multipolygon_textm2",  "multipolygon_textz2",  "multipolygon_textzm2",
+  "geocoll_text",  "geocoll_textm",  "geocoll_textz",  "geocoll_textzm",
+  "geocoll_text2",  "geocoll_textm2",  "geocoll_textz2",  "geocoll_textzm2",
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *const yyRuleName[] = {
+ /*   0 */ "main ::= in",
+ /*   1 */ "in ::=",
+ /*   2 */ "in ::= in state EWKT_NEWLINE",
+ /*   3 */ "state ::= program",
+ /*   4 */ "program ::= geo_text",
+ /*   5 */ "program ::= geo_textm",
+ /*   6 */ "geo_text ::= point",
+ /*   7 */ "geo_text ::= pointz",
+ /*   8 */ "geo_text ::= pointzm",
+ /*   9 */ "geo_text ::= linestring",
+ /*  10 */ "geo_text ::= linestringz",
+ /*  11 */ "geo_text ::= linestringzm",
+ /*  12 */ "geo_text ::= polygon",
+ /*  13 */ "geo_text ::= polygonz",
+ /*  14 */ "geo_text ::= polygonzm",
+ /*  15 */ "geo_text ::= multipoint",
+ /*  16 */ "geo_text ::= multipointz",
+ /*  17 */ "geo_text ::= multipointzm",
+ /*  18 */ "geo_text ::= multilinestring",
+ /*  19 */ "geo_text ::= multilinestringz",
+ /*  20 */ "geo_text ::= multilinestringzm",
+ /*  21 */ "geo_text ::= multipolygon",
+ /*  22 */ "geo_text ::= multipolygonz",
+ /*  23 */ "geo_text ::= multipolygonzm",
+ /*  24 */ "geo_text ::= geocoll",
+ /*  25 */ "geo_text ::= geocollz",
+ /*  26 */ "geo_text ::= geocollzm",
+ /*  27 */ "geo_textm ::= pointm",
+ /*  28 */ "geo_textm ::= linestringm",
+ /*  29 */ "geo_textm ::= polygonm",
+ /*  30 */ "geo_textm ::= multipointm",
+ /*  31 */ "geo_textm ::= multilinestringm",
+ /*  32 */ "geo_textm ::= multipolygonm",
+ /*  33 */ "geo_textm ::= geocollm",
+ /*  34 */ "point ::= EWKT_POINT EWKT_OPEN_BRACKET point_coordxy EWKT_CLOSE_BRACKET",
+ /*  35 */ "pointz ::= EWKT_POINT EWKT_OPEN_BRACKET point_coordxyz EWKT_CLOSE_BRACKET",
+ /*  36 */ "pointm ::= EWKT_POINT_M EWKT_OPEN_BRACKET point_coordxym EWKT_CLOSE_BRACKET",
+ /*  37 */ "pointzm ::= EWKT_POINT EWKT_OPEN_BRACKET point_coordxyzm EWKT_CLOSE_BRACKET",
+ /*  38 */ "point_coordxy ::= coord coord",
+ /*  39 */ "point_coordxym ::= coord coord coord",
+ /*  40 */ "point_coordxyz ::= coord coord coord",
+ /*  41 */ "point_coordxyzm ::= coord coord coord coord",
+ /*  42 */ "coord ::= EWKT_NUM",
+ /*  43 */ "extra_pointsxy ::=",
+ /*  44 */ "extra_pointsxy ::= EWKT_COMMA point_coordxy extra_pointsxy",
+ /*  45 */ "extra_pointsxym ::=",
+ /*  46 */ "extra_pointsxym ::= EWKT_COMMA point_coordxym extra_pointsxym",
+ /*  47 */ "extra_pointsxyz ::=",
+ /*  48 */ "extra_pointsxyz ::= EWKT_COMMA point_coordxyz extra_pointsxyz",
+ /*  49 */ "extra_pointsxyzm ::=",
+ /*  50 */ "extra_pointsxyzm ::= EWKT_COMMA point_coordxyzm extra_pointsxyzm",
+ /*  51 */ "linestring ::= EWKT_LINESTRING linestring_text",
+ /*  52 */ "linestringm ::= EWKT_LINESTRING_M linestring_textm",
+ /*  53 */ "linestringz ::= EWKT_LINESTRING linestring_textz",
+ /*  54 */ "linestringzm ::= EWKT_LINESTRING linestring_textzm",
+ /*  55 */ "linestring_text ::= EWKT_OPEN_BRACKET point_coordxy EWKT_COMMA point_coordxy extra_pointsxy EWKT_CLOSE_BRACKET",
+ /*  56 */ "linestring_textm ::= EWKT_OPEN_BRACKET point_coordxym EWKT_COMMA point_coordxym extra_pointsxym EWKT_CLOSE_BRACKET",
+ /*  57 */ "linestring_textz ::= EWKT_OPEN_BRACKET point_coordxyz EWKT_COMMA point_coordxyz extra_pointsxyz EWKT_CLOSE_BRACKET",
+ /*  58 */ "linestring_textzm ::= EWKT_OPEN_BRACKET point_coordxyzm EWKT_COMMA point_coordxyzm extra_pointsxyzm EWKT_CLOSE_BRACKET",
+ /*  59 */ "polygon ::= EWKT_POLYGON polygon_text",
+ /*  60 */ "polygonm ::= EWKT_POLYGON_M polygon_textm",
+ /*  61 */ "polygonz ::= EWKT_POLYGON polygon_textz",
+ /*  62 */ "polygonzm ::= EWKT_POLYGON polygon_textzm",
+ /*  63 */ "polygon_text ::= EWKT_OPEN_BRACKET ring extra_rings EWKT_CLOSE_BRACKET",
+ /*  64 */ "polygon_textm ::= EWKT_OPEN_BRACKET ringm extra_ringsm EWKT_CLOSE_BRACKET",
+ /*  65 */ "polygon_textz ::= EWKT_OPEN_BRACKET ringz extra_ringsz EWKT_CLOSE_BRACKET",
+ /*  66 */ "polygon_textzm ::= EWKT_OPEN_BRACKET ringzm extra_ringszm EWKT_CLOSE_BRACKET",
+ /*  67 */ "ring ::= EWKT_OPEN_BRACKET point_coordxy EWKT_COMMA point_coordxy EWKT_COMMA point_coordxy EWKT_COMMA point_coordxy extra_pointsxy EWKT_CLOSE_BRACKET",
+ /*  68 */ "extra_rings ::=",
+ /*  69 */ "extra_rings ::= EWKT_COMMA ring extra_rings",
+ /*  70 */ "ringm ::= EWKT_OPEN_BRACKET point_coordxym EWKT_COMMA point_coordxym EWKT_COMMA point_coordxym EWKT_COMMA point_coordxym extra_pointsxym EWKT_CLOSE_BRACKET",
+ /*  71 */ "extra_ringsm ::=",
+ /*  72 */ "extra_ringsm ::= EWKT_COMMA ringm extra_ringsm",
+ /*  73 */ "ringz ::= EWKT_OPEN_BRACKET point_coordxyz EWKT_COMMA point_coordxyz EWKT_COMMA point_coordxyz EWKT_COMMA point_coordxyz extra_pointsxyz EWKT_CLOSE_BRACKET",
+ /*  74 */ "extra_ringsz ::=",
+ /*  75 */ "extra_ringsz ::= EWKT_COMMA ringz extra_ringsz",
+ /*  76 */ "ringzm ::= EWKT_OPEN_BRACKET point_coordxyzm EWKT_COMMA point_coordxyzm EWKT_COMMA point_coordxyzm EWKT_COMMA point_coordxyzm extra_pointsxyzm EWKT_CLOSE_BRACKET",
+ /*  77 */ "extra_ringszm ::=",
+ /*  78 */ "extra_ringszm ::= EWKT_COMMA ringzm extra_ringszm",
+ /*  79 */ "multipoint ::= EWKT_MULTIPOINT multipoint_text",
+ /*  80 */ "multipointm ::= EWKT_MULTIPOINT_M multipoint_textm",
+ /*  81 */ "multipointz ::= EWKT_MULTIPOINT multipoint_textz",
+ /*  82 */ "multipointzm ::= EWKT_MULTIPOINT multipoint_textzm",
+ /*  83 */ "multipoint_text ::= EWKT_OPEN_BRACKET point_coordxy extra_pointsxy EWKT_CLOSE_BRACKET",
+ /*  84 */ "multipoint_textm ::= EWKT_OPEN_BRACKET point_coordxym extra_pointsxym EWKT_CLOSE_BRACKET",
+ /*  85 */ "multipoint_textz ::= EWKT_OPEN_BRACKET point_coordxyz extra_pointsxyz EWKT_CLOSE_BRACKET",
+ /*  86 */ "multipoint_textzm ::= EWKT_OPEN_BRACKET point_coordxyzm extra_pointsxyzm EWKT_CLOSE_BRACKET",
+ /*  87 */ "multilinestring ::= EWKT_MULTILINESTRING multilinestring_text",
+ /*  88 */ "multilinestringm ::= EWKT_MULTILINESTRING_M multilinestring_textm",
+ /*  89 */ "multilinestringz ::= EWKT_MULTILINESTRING multilinestring_textz",
+ /*  90 */ "multilinestringzm ::= EWKT_MULTILINESTRING multilinestring_textzm",
+ /*  91 */ "multilinestring_text ::= EWKT_OPEN_BRACKET linestring_text multilinestring_text2 EWKT_CLOSE_BRACKET",
+ /*  92 */ "multilinestring_text2 ::=",
+ /*  93 */ "multilinestring_text2 ::= EWKT_COMMA linestring_text multilinestring_text2",
+ /*  94 */ "multilinestring_textm ::= EWKT_OPEN_BRACKET linestring_textm multilinestring_textm2 EWKT_CLOSE_BRACKET",
+ /*  95 */ "multilinestring_textm2 ::=",
+ /*  96 */ "multilinestring_textm2 ::= EWKT_COMMA linestring_textm multilinestring_textm2",
+ /*  97 */ "multilinestring_textz ::= EWKT_OPEN_BRACKET linestring_textz multilinestring_textz2 EWKT_CLOSE_BRACKET",
+ /*  98 */ "multilinestring_textz2 ::=",
+ /*  99 */ "multilinestring_textz2 ::= EWKT_COMMA linestring_textz multilinestring_textz2",
+ /* 100 */ "multilinestring_textzm ::= EWKT_OPEN_BRACKET linestring_textzm multilinestring_textzm2 EWKT_CLOSE_BRACKET",
+ /* 101 */ "multilinestring_textzm2 ::=",
+ /* 102 */ "multilinestring_textzm2 ::= EWKT_COMMA linestring_textzm multilinestring_textzm2",
+ /* 103 */ "multipolygon ::= EWKT_MULTIPOLYGON multipolygon_text",
+ /* 104 */ "multipolygonm ::= EWKT_MULTIPOLYGON_M multipolygon_textm",
+ /* 105 */ "multipolygonz ::= EWKT_MULTIPOLYGON multipolygon_textz",
+ /* 106 */ "multipolygonzm ::= EWKT_MULTIPOLYGON multipolygon_textzm",
+ /* 107 */ "multipolygon_text ::= EWKT_OPEN_BRACKET polygon_text multipolygon_text2 EWKT_CLOSE_BRACKET",
+ /* 108 */ "multipolygon_text2 ::=",
+ /* 109 */ "multipolygon_text2 ::= EWKT_COMMA polygon_text multipolygon_text2",
+ /* 110 */ "multipolygon_textm ::= EWKT_OPEN_BRACKET polygon_textm multipolygon_textm2 EWKT_CLOSE_BRACKET",
+ /* 111 */ "multipolygon_textm2 ::=",
+ /* 112 */ "multipolygon_textm2 ::= EWKT_COMMA polygon_textm multipolygon_textm2",
+ /* 113 */ "multipolygon_textz ::= EWKT_OPEN_BRACKET polygon_textz multipolygon_textz2 EWKT_CLOSE_BRACKET",
+ /* 114 */ "multipolygon_textz2 ::=",
+ /* 115 */ "multipolygon_textz2 ::= EWKT_COMMA polygon_textz multipolygon_textz2",
+ /* 116 */ "multipolygon_textzm ::= EWKT_OPEN_BRACKET polygon_textzm multipolygon_textzm2 EWKT_CLOSE_BRACKET",
+ /* 117 */ "multipolygon_textzm2 ::=",
+ /* 118 */ "multipolygon_textzm2 ::= EWKT_COMMA polygon_textzm multipolygon_textzm2",
+ /* 119 */ "geocoll ::= EWKT_GEOMETRYCOLLECTION geocoll_text",
+ /* 120 */ "geocollm ::= EWKT_GEOMETRYCOLLECTION_M geocoll_textm",
+ /* 121 */ "geocollz ::= EWKT_GEOMETRYCOLLECTION geocoll_textz",
+ /* 122 */ "geocollzm ::= EWKT_GEOMETRYCOLLECTION geocoll_textzm",
+ /* 123 */ "geocoll_text ::= EWKT_OPEN_BRACKET point geocoll_text2 EWKT_CLOSE_BRACKET",
+ /* 124 */ "geocoll_text ::= EWKT_OPEN_BRACKET linestring geocoll_text2 EWKT_CLOSE_BRACKET",
+ /* 125 */ "geocoll_text ::= EWKT_OPEN_BRACKET polygon geocoll_text2 EWKT_CLOSE_BRACKET",
+ /* 126 */ "geocoll_text2 ::=",
+ /* 127 */ "geocoll_text2 ::= EWKT_COMMA point geocoll_text2",
+ /* 128 */ "geocoll_text2 ::= EWKT_COMMA linestring geocoll_text2",
+ /* 129 */ "geocoll_text2 ::= EWKT_COMMA polygon geocoll_text2",
+ /* 130 */ "geocoll_textm ::= EWKT_OPEN_BRACKET pointm geocoll_textm2 EWKT_CLOSE_BRACKET",
+ /* 131 */ "geocoll_textm ::= EWKT_OPEN_BRACKET linestringm geocoll_textm2 EWKT_CLOSE_BRACKET",
+ /* 132 */ "geocoll_textm ::= EWKT_OPEN_BRACKET polygonm geocoll_textm2 EWKT_CLOSE_BRACKET",
+ /* 133 */ "geocoll_textm2 ::=",
+ /* 134 */ "geocoll_textm2 ::= EWKT_COMMA pointm geocoll_textm2",
+ /* 135 */ "geocoll_textm2 ::= EWKT_COMMA linestringm geocoll_textm2",
+ /* 136 */ "geocoll_textm2 ::= EWKT_COMMA polygonm geocoll_textm2",
+ /* 137 */ "geocoll_textz ::= EWKT_OPEN_BRACKET pointz geocoll_textz2 EWKT_CLOSE_BRACKET",
+ /* 138 */ "geocoll_textz ::= EWKT_OPEN_BRACKET linestringz geocoll_textz2 EWKT_CLOSE_BRACKET",
+ /* 139 */ "geocoll_textz ::= EWKT_OPEN_BRACKET polygonz geocoll_textz2 EWKT_CLOSE_BRACKET",
+ /* 140 */ "geocoll_textz2 ::=",
+ /* 141 */ "geocoll_textz2 ::= EWKT_COMMA pointz geocoll_textz2",
+ /* 142 */ "geocoll_textz2 ::= EWKT_COMMA linestringz geocoll_textz2",
+ /* 143 */ "geocoll_textz2 ::= EWKT_COMMA polygonz geocoll_textz2",
+ /* 144 */ "geocoll_textzm ::= EWKT_OPEN_BRACKET pointzm geocoll_textzm2 EWKT_CLOSE_BRACKET",
+ /* 145 */ "geocoll_textzm ::= EWKT_OPEN_BRACKET linestringzm geocoll_textzm2 EWKT_CLOSE_BRACKET",
+ /* 146 */ "geocoll_textzm ::= EWKT_OPEN_BRACKET polygonzm geocoll_textzm2 EWKT_CLOSE_BRACKET",
+ /* 147 */ "geocoll_textzm2 ::=",
+ /* 148 */ "geocoll_textzm2 ::= EWKT_COMMA pointzm geocoll_textzm2",
+ /* 149 */ "geocoll_textzm2 ::= EWKT_COMMA linestringzm geocoll_textzm2",
+ /* 150 */ "geocoll_textzm2 ::= EWKT_COMMA polygonzm geocoll_textzm2",
+};
+#endif /* NDEBUG */
+
+
+#if YYSTACKDEPTH<=0
+/*
+** Try to increase the size of the parser stack.
+*/
+static void yyGrowStack(yyParser *p){
+  int newSize;
+  yyStackEntry *pNew;
+
+  newSize = p->yystksz*2 + 100;
+  pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+  if( pNew ){
+    p->yystack = pNew;
+    p->yystksz = newSize;
+#ifndef NDEBUG
+    if( yyTraceFILE ){
+      fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
+              yyTracePrompt, p->yystksz);
+    }
+#endif
+  }
+}
+#endif
+
+/* 
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser.  This pointer is used in subsequent calls
+** to Parse and ParseFree.
+*/
+void *ParseAlloc(void *(*mallocProc)(size_t)){
+  yyParser *pParser;
+  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+  if( pParser ){
+    pParser->yyidx = -1;
+#ifdef YYTRACKMAXSTACKDEPTH
+    pParser->yyidxMax = 0;
+#endif
+#if YYSTACKDEPTH<=0
+    pParser->yystack = NULL;
+    pParser->yystksz = 0;
+    yyGrowStack(pParser);
+#endif
+  }
+  return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol.  The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(
+  yyParser *yypParser,    /* The parser */
+  YYCODETYPE yymajor,     /* Type code for object to destroy */
+  YYMINORTYPE *yypminor   /* The object to be destroyed */
+){
+  ParseARG_FETCH;
+  switch( yymajor ){
+    /* Here is inserted the actions which take place when a
+    ** terminal or non-terminal is destroyed.  This can happen
+    ** when the symbol is popped from the stack during a
+    ** reduce or during error processing or when a parser is 
+    ** being destroyed before it is finished parsing.
+    **
+    ** Note: during a reduce, the only symbols destroyed are those
+    ** which appear on the RHS of the rule, but which are not used
+    ** inside the C code.
+    */
+    default:  break;   /* If no destructor action specified: do nothing */
+  }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+  YYCODETYPE yymajor;
+  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+  if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+  if( yyTraceFILE && pParser->yyidx>=0 ){
+    fprintf(yyTraceFILE,"%sPopping %s\n",
+      yyTracePrompt,
+      yyTokenName[yytos->major]);
+  }
+#endif
+  yymajor = yytos->major;
+  yy_destructor(pParser, yymajor, &yytos->minor);
+  pParser->yyidx--;
+  return yymajor;
+}
+
+/* 
+** Deallocate and destroy a parser.  Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li>  A pointer to the parser.  This should be a pointer
+**       obtained from ParseAlloc.
+** <li>  A pointer to a function used to reclaim memory obtained
+**       from malloc.
+** </ul>
+*/
+void ParseFree(
+  void *p,                    /* The parser to be deleted */
+  void (*freeProc)(void*)     /* Function used to reclaim memory */
+){
+  yyParser *pParser = (yyParser*)p;
+  if( pParser==0 ) return;
+  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+#if YYSTACKDEPTH<=0
+  free(pParser->yystack);
+#endif
+  (*freeProc)((void*)pParser);
+}
+
+/*
+** Return the peak depth of the stack for a parser.
+*/
+#ifdef YYTRACKMAXSTACKDEPTH
+int ParseStackPeak(void *p){
+  yyParser *pParser = (yyParser*)p;
+  return pParser->yyidxMax;
+}
+#endif
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+  yyParser *pParser,        /* The parser */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+ 
+  if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    if( iLookAhead>0 ){
+#ifdef YYFALLBACK
+      YYCODETYPE iFallback;            /* Fallback token */
+      if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+             && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+             yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+        }
+#endif
+        return yy_find_shift_action(pParser, iFallback);
+      }
+#endif
+#ifdef YYWILDCARD
+      {
+        int j = i - iLookAhead + YYWILDCARD;
+        if( j>=0 && j<YY_SZ_ACTTAB && yy_lookahead[j]==YYWILDCARD ){
+#ifndef NDEBUG
+          if( yyTraceFILE ){
+            fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
+               yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
+          }
+#endif /* NDEBUG */
+          return yy_action[j];
+        }
+      }
+#endif /* YYWILDCARD */
+    }
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+  int stateno,              /* Current state number */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+#ifdef YYERRORSYMBOL
+  if( stateno>YY_REDUCE_MAX ){
+    return yy_default[stateno];
+  }
+#else
+  assert( stateno<=YY_REDUCE_MAX );
+#endif
+  i = yy_reduce_ofst[stateno];
+  assert( i!=YY_REDUCE_USE_DFLT );
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+#ifdef YYERRORSYMBOL
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    return yy_default[stateno];
+  }
+#else
+  assert( i>=0 && i<YY_SZ_ACTTAB );
+  assert( yy_lookahead[i]==iLookAhead );
+#endif
+  return yy_action[i];
+}
+
+/*
+** The following routine is called if the stack overflows.
+*/
+static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
+   ParseARG_FETCH;
+   yypParser->yyidx--;
+#ifndef NDEBUG
+   if( yyTraceFILE ){
+     fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+   }
+#endif
+   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+   /* Here code is inserted which will execute if the parser
+   ** stack every overflows */
+
+     fprintf(stderr,"Giving up.  Parser stack overflow\n");
+   ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+  yyParser *yypParser,          /* The parser to be shifted */
+  int yyNewState,               /* The new state to shift in */
+  int yyMajor,                  /* The major token to shift in */
+  YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
+){
+  yyStackEntry *yytos;
+  yypParser->yyidx++;
+#ifdef YYTRACKMAXSTACKDEPTH
+  if( yypParser->yyidx>yypParser->yyidxMax ){
+    yypParser->yyidxMax = yypParser->yyidx;
+  }
+#endif
+#if YYSTACKDEPTH>0 
+  if( yypParser->yyidx>=YYSTACKDEPTH ){
+    yyStackOverflow(yypParser, yypMinor);
+    return;
+  }
+#else
+  if( yypParser->yyidx>=yypParser->yystksz ){
+    yyGrowStack(yypParser);
+    if( yypParser->yyidx>=yypParser->yystksz ){
+      yyStackOverflow(yypParser, yypMinor);
+      return;
+    }
+  }
+#endif
+  yytos = &yypParser->yystack[yypParser->yyidx];
+  yytos->stateno = (YYACTIONTYPE)yyNewState;
+  yytos->major = (YYCODETYPE)yyMajor;
+  yytos->minor = *yypMinor;
+#ifndef NDEBUG
+  if( yyTraceFILE && yypParser->yyidx>0 ){
+    int i;
+    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+    for(i=1; i<=yypParser->yyidx; i++)
+      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+    fprintf(yyTraceFILE,"\n");
+  }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static const struct {
+  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
+  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+  { 21, 1 },
+  { 22, 0 },
+  { 22, 3 },
+  { 23, 1 },
+  { 24, 1 },
+  { 24, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 25, 1 },
+  { 26, 1 },
+  { 26, 1 },
+  { 26, 1 },
+  { 26, 1 },
+  { 26, 1 },
+  { 26, 1 },
+  { 26, 1 },
+  { 27, 4 },
+  { 28, 4 },
+  { 48, 4 },
+  { 29, 4 },
+  { 55, 2 },
+  { 57, 3 },
+  { 56, 3 },
+  { 58, 4 },
+  { 59, 1 },
+  { 60, 0 },
+  { 60, 3 },
+  { 61, 0 },
+  { 61, 3 },
+  { 62, 0 },
+  { 62, 3 },
+  { 63, 0 },
+  { 63, 3 },
+  { 30, 2 },
+  { 49, 2 },
+  { 31, 2 },
+  { 32, 2 },
+  { 64, 6 },
+  { 65, 6 },
+  { 66, 6 },
+  { 67, 6 },
+  { 33, 2 },
+  { 50, 2 },
+  { 34, 2 },
+  { 35, 2 },
+  { 68, 4 },
+  { 69, 4 },
+  { 70, 4 },
+  { 71, 4 },
+  { 72, 10 },
+  { 73, 0 },
+  { 73, 3 },
+  { 74, 10 },
+  { 75, 0 },
+  { 75, 3 },
+  { 76, 10 },
+  { 77, 0 },
+  { 77, 3 },
+  { 78, 10 },
+  { 79, 0 },
+  { 79, 3 },
+  { 36, 2 },
+  { 51, 2 },
+  { 37, 2 },
+  { 38, 2 },
+  { 80, 4 },
+  { 81, 4 },
+  { 82, 4 },
+  { 83, 4 },
+  { 39, 2 },
+  { 52, 2 },
+  { 40, 2 },
+  { 41, 2 },
+  { 84, 4 },
+  { 88, 0 },
+  { 88, 3 },
+  { 85, 4 },
+  { 89, 0 },
+  { 89, 3 },
+  { 86, 4 },
+  { 90, 0 },
+  { 90, 3 },
+  { 87, 4 },
+  { 91, 0 },
+  { 91, 3 },
+  { 42, 2 },
+  { 53, 2 },
+  { 43, 2 },
+  { 44, 2 },
+  { 92, 4 },
+  { 96, 0 },
+  { 96, 3 },
+  { 93, 4 },
+  { 97, 0 },
+  { 97, 3 },
+  { 94, 4 },
+  { 98, 0 },
+  { 98, 3 },
+  { 95, 4 },
+  { 99, 0 },
+  { 99, 3 },
+  { 45, 2 },
+  { 54, 2 },
+  { 46, 2 },
+  { 47, 2 },
+  { 100, 4 },
+  { 100, 4 },
+  { 100, 4 },
+  { 104, 0 },
+  { 104, 3 },
+  { 104, 3 },
+  { 104, 3 },
+  { 101, 4 },
+  { 101, 4 },
+  { 101, 4 },
+  { 105, 0 },
+  { 105, 3 },
+  { 105, 3 },
+  { 105, 3 },
+  { 102, 4 },
+  { 102, 4 },
+  { 102, 4 },
+  { 106, 0 },
+  { 106, 3 },
+  { 106, 3 },
+  { 106, 3 },
+  { 103, 4 },
+  { 103, 4 },
+  { 103, 4 },
+  { 107, 0 },
+  { 107, 3 },
+  { 107, 3 },
+  { 107, 3 },
+};
+
+static void yy_accept(yyParser*);  /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+  yyParser *yypParser,         /* The parser */
+  int yyruleno                 /* Number of the rule by which to reduce */
+){
+  int yygoto;                     /* The next state */
+  int yyact;                      /* The next action */
+  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
+  yyStackEntry *yymsp;            /* The top of the parser's stack */
+  int yysize;                     /* Amount to pop the stack */
+  ParseARG_FETCH;
+  yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+  if( yyTraceFILE && yyruleno>=0 
+        && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
+    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+      yyRuleName[yyruleno]);
+  }
+#endif /* NDEBUG */
+
+  /* Silence complaints from purify about yygotominor being uninitialized
+  ** in some cases when it is copied into the stack after the following
+  ** switch.  yygotominor is uninitialized when a rule reduces that does
+  ** not set the value of its left-hand side nonterminal.  Leaving the
+  ** value of the nonterminal uninitialized is utterly harmless as long
+  ** as the value is never used.  So really the only thing this code
+  ** accomplishes is to quieten purify.  
+  **
+  ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
+  ** without this code, their parser segfaults.  I'm not sure what there
+  ** parser is doing to make this happen.  This is the second bug report
+  ** from wireshark this week.  Clearly they are stressing Lemon in ways
+  ** that it has not been previously stressed...  (SQLite ticket #2172)
+  */
+  /*memset(&yygotominor, 0, sizeof(yygotominor));*/
+  yygotominor = yyzerominor;
+
+
+  switch( yyruleno ){
+  /* Beginning here are the reduction cases.  A typical example
+  ** follows:
+  **   case 0:
+  **  #line <lineno> <grammarfile>
+  **     { ... }           // User supplied code
+  **  #line <lineno> <thisfile>
+  **     break;
+  */
+      case 6: /* geo_text ::= point */
+      case 7: /* geo_text ::= pointz */ yytestcase(yyruleno==7);
+      case 8: /* geo_text ::= pointzm */ yytestcase(yyruleno==8);
+      case 9: /* geo_text ::= linestring */ yytestcase(yyruleno==9);
+      case 10: /* geo_text ::= linestringz */ yytestcase(yyruleno==10);
+      case 11: /* geo_text ::= linestringzm */ yytestcase(yyruleno==11);
+      case 12: /* geo_text ::= polygon */ yytestcase(yyruleno==12);
+      case 13: /* geo_text ::= polygonz */ yytestcase(yyruleno==13);
+      case 14: /* geo_text ::= polygonzm */ yytestcase(yyruleno==14);
+      case 15: /* geo_text ::= multipoint */ yytestcase(yyruleno==15);
+      case 16: /* geo_text ::= multipointz */ yytestcase(yyruleno==16);
+      case 17: /* geo_text ::= multipointzm */ yytestcase(yyruleno==17);
+      case 18: /* geo_text ::= multilinestring */ yytestcase(yyruleno==18);
+      case 19: /* geo_text ::= multilinestringz */ yytestcase(yyruleno==19);
+      case 20: /* geo_text ::= multilinestringzm */ yytestcase(yyruleno==20);
+      case 21: /* geo_text ::= multipolygon */ yytestcase(yyruleno==21);
+      case 22: /* geo_text ::= multipolygonz */ yytestcase(yyruleno==22);
+      case 23: /* geo_text ::= multipolygonzm */ yytestcase(yyruleno==23);
+      case 24: /* geo_text ::= geocoll */ yytestcase(yyruleno==24);
+      case 25: /* geo_text ::= geocollz */ yytestcase(yyruleno==25);
+      case 26: /* geo_text ::= geocollzm */ yytestcase(yyruleno==26);
+      case 27: /* geo_textm ::= pointm */ yytestcase(yyruleno==27);
+      case 28: /* geo_textm ::= linestringm */ yytestcase(yyruleno==28);
+      case 29: /* geo_textm ::= polygonm */ yytestcase(yyruleno==29);
+      case 30: /* geo_textm ::= multipointm */ yytestcase(yyruleno==30);
+      case 31: /* geo_textm ::= multilinestringm */ yytestcase(yyruleno==31);
+      case 32: /* geo_textm ::= multipolygonm */ yytestcase(yyruleno==32);
+      case 33: /* geo_textm ::= geocollm */ yytestcase(yyruleno==33);
+{ *result = yymsp[0].minor.yy0; }
+        break;
+      case 34: /* point ::= EWKT_POINT EWKT_OPEN_BRACKET point_coordxy EWKT_CLOSE_BRACKET */
+      case 35: /* pointz ::= EWKT_POINT EWKT_OPEN_BRACKET point_coordxyz EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==35);
+      case 37: /* pointzm ::= EWKT_POINT EWKT_OPEN_BRACKET point_coordxyzm EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==37);
+{ yygotominor.yy0 = ewkt_buildGeomFromPoint((gaiaPointPtr)yymsp[-1].minor.yy0); }
+        break;
+      case 36: /* pointm ::= EWKT_POINT_M EWKT_OPEN_BRACKET point_coordxym EWKT_CLOSE_BRACKET */
+{ yygotominor.yy0 = ewkt_buildGeomFromPoint((gaiaPointPtr)yymsp[-1].minor.yy0);  }
+        break;
+      case 38: /* point_coordxy ::= coord coord */
+{ yygotominor.yy0 = (void *) ewkt_point_xy((double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+        break;
+      case 39: /* point_coordxym ::= coord coord coord */
+{ yygotominor.yy0 = (void *) ewkt_point_xym((double *)yymsp[-2].minor.yy0, (double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+        break;
+      case 40: /* point_coordxyz ::= coord coord coord */
+{ yygotominor.yy0 = (void *) ewkt_point_xyz((double *)yymsp[-2].minor.yy0, (double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+        break;
+      case 41: /* point_coordxyzm ::= coord coord coord coord */
+{ yygotominor.yy0 = (void *) ewkt_point_xyzm((double *)yymsp[-3].minor.yy0, (double *)yymsp[-2].minor.yy0, (double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+        break;
+      case 42: /* coord ::= EWKT_NUM */
+      case 79: /* multipoint ::= EWKT_MULTIPOINT multipoint_text */ yytestcase(yyruleno==79);
+      case 80: /* multipointm ::= EWKT_MULTIPOINT_M multipoint_textm */ yytestcase(yyruleno==80);
+      case 81: /* multipointz ::= EWKT_MULTIPOINT multipoint_textz */ yytestcase(yyruleno==81);
+      case 82: /* multipointzm ::= EWKT_MULTIPOINT multipoint_textzm */ yytestcase(yyruleno==82);
+      case 87: /* multilinestring ::= EWKT_MULTILINESTRING multilinestring_text */ yytestcase(yyruleno==87);
+      case 88: /* multilinestringm ::= EWKT_MULTILINESTRING_M multilinestring_textm */ yytestcase(yyruleno==88);
+      case 89: /* multilinestringz ::= EWKT_MULTILINESTRING multilinestring_textz */ yytestcase(yyruleno==89);
+      case 90: /* multilinestringzm ::= EWKT_MULTILINESTRING multilinestring_textzm */ yytestcase(yyruleno==90);
+      case 103: /* multipolygon ::= EWKT_MULTIPOLYGON multipolygon_text */ yytestcase(yyruleno==103);
+      case 104: /* multipolygonm ::= EWKT_MULTIPOLYGON_M multipolygon_textm */ yytestcase(yyruleno==104);
+      case 105: /* multipolygonz ::= EWKT_MULTIPOLYGON multipolygon_textz */ yytestcase(yyruleno==105);
+      case 106: /* multipolygonzm ::= EWKT_MULTIPOLYGON multipolygon_textzm */ yytestcase(yyruleno==106);
+      case 119: /* geocoll ::= EWKT_GEOMETRYCOLLECTION geocoll_text */ yytestcase(yyruleno==119);
+      case 120: /* geocollm ::= EWKT_GEOMETRYCOLLECTION_M geocoll_textm */ yytestcase(yyruleno==120);
+      case 121: /* geocollz ::= EWKT_GEOMETRYCOLLECTION geocoll_textz */ yytestcase(yyruleno==121);
+      case 122: /* geocollzm ::= EWKT_GEOMETRYCOLLECTION geocoll_textzm */ yytestcase(yyruleno==122);
+{ yygotominor.yy0 = yymsp[0].minor.yy0; }
+        break;
+      case 43: /* extra_pointsxy ::= */
+      case 45: /* extra_pointsxym ::= */ yytestcase(yyruleno==45);
+      case 47: /* extra_pointsxyz ::= */ yytestcase(yyruleno==47);
+      case 49: /* extra_pointsxyzm ::= */ yytestcase(yyruleno==49);
+      case 68: /* extra_rings ::= */ yytestcase(yyruleno==68);
+      case 71: /* extra_ringsm ::= */ yytestcase(yyruleno==71);
+      case 74: /* extra_ringsz ::= */ yytestcase(yyruleno==74);
+      case 77: /* extra_ringszm ::= */ yytestcase(yyruleno==77);
+      case 92: /* multilinestring_text2 ::= */ yytestcase(yyruleno==92);
+      case 95: /* multilinestring_textm2 ::= */ yytestcase(yyruleno==95);
+      case 98: /* multilinestring_textz2 ::= */ yytestcase(yyruleno==98);
+      case 101: /* multilinestring_textzm2 ::= */ yytestcase(yyruleno==101);
+      case 108: /* multipolygon_text2 ::= */ yytestcase(yyruleno==108);
+      case 111: /* multipolygon_textm2 ::= */ yytestcase(yyruleno==111);
+      case 114: /* multipolygon_textz2 ::= */ yytestcase(yyruleno==114);
+      case 117: /* multipolygon_textzm2 ::= */ yytestcase(yyruleno==117);
+      case 126: /* geocoll_text2 ::= */ yytestcase(yyruleno==126);
+      case 133: /* geocoll_textm2 ::= */ yytestcase(yyruleno==133);
+      case 140: /* geocoll_textz2 ::= */ yytestcase(yyruleno==140);
+      case 147: /* geocoll_textzm2 ::= */ yytestcase(yyruleno==147);
+{ yygotominor.yy0 = NULL; }
+        break;
+      case 44: /* extra_pointsxy ::= EWKT_COMMA point_coordxy extra_pointsxy */
+      case 46: /* extra_pointsxym ::= EWKT_COMMA point_coordxym extra_pointsxym */ yytestcase(yyruleno==46);
+      case 48: /* extra_pointsxyz ::= EWKT_COMMA point_coordxyz extra_pointsxyz */ yytestcase(yyruleno==48);
+      case 50: /* extra_pointsxyzm ::= EWKT_COMMA point_coordxyzm extra_pointsxyzm */ yytestcase(yyruleno==50);
+{ ((gaiaPointPtr)yymsp[-1].minor.yy0)->Next = (gaiaPointPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 51: /* linestring ::= EWKT_LINESTRING linestring_text */
+      case 52: /* linestringm ::= EWKT_LINESTRING_M linestring_textm */ yytestcase(yyruleno==52);
+      case 53: /* linestringz ::= EWKT_LINESTRING linestring_textz */ yytestcase(yyruleno==53);
+      case 54: /* linestringzm ::= EWKT_LINESTRING linestring_textzm */ yytestcase(yyruleno==54);
+{ yygotominor.yy0 = ewkt_buildGeomFromLinestring((gaiaLinestringPtr)yymsp[0].minor.yy0); }
+        break;
+      case 55: /* linestring_text ::= EWKT_OPEN_BRACKET point_coordxy EWKT_COMMA point_coordxy extra_pointsxy EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) ewkt_linestring_xy((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+        break;
+      case 56: /* linestring_textm ::= EWKT_OPEN_BRACKET point_coordxym EWKT_COMMA point_coordxym extra_pointsxym EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) ewkt_linestring_xym((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+        break;
+      case 57: /* linestring_textz ::= EWKT_OPEN_BRACKET point_coordxyz EWKT_COMMA point_coordxyz extra_pointsxyz EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) ewkt_linestring_xyz((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+        break;
+      case 58: /* linestring_textzm ::= EWKT_OPEN_BRACKET point_coordxyzm EWKT_COMMA point_coordxyzm extra_pointsxyzm EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) ewkt_linestring_xyzm((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+        break;
+      case 59: /* polygon ::= EWKT_POLYGON polygon_text */
+      case 60: /* polygonm ::= EWKT_POLYGON_M polygon_textm */ yytestcase(yyruleno==60);
+      case 61: /* polygonz ::= EWKT_POLYGON polygon_textz */ yytestcase(yyruleno==61);
+      case 62: /* polygonzm ::= EWKT_POLYGON polygon_textzm */ yytestcase(yyruleno==62);
+{ yygotominor.yy0 = ewkt_buildGeomFromPolygon((gaiaPolygonPtr)yymsp[0].minor.yy0); }
+        break;
+      case 63: /* polygon_text ::= EWKT_OPEN_BRACKET ring extra_rings EWKT_CLOSE_BRACKET */
+{ 
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_polygon_xy((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 64: /* polygon_textm ::= EWKT_OPEN_BRACKET ringm extra_ringsm EWKT_CLOSE_BRACKET */
+{ 
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_polygon_xym((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 65: /* polygon_textz ::= EWKT_OPEN_BRACKET ringz extra_ringsz EWKT_CLOSE_BRACKET */
+{  
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_polygon_xyz((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 66: /* polygon_textzm ::= EWKT_OPEN_BRACKET ringzm extra_ringszm EWKT_CLOSE_BRACKET */
+{ 
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_polygon_xyzm((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 67: /* ring ::= EWKT_OPEN_BRACKET point_coordxy EWKT_COMMA point_coordxy EWKT_COMMA point_coordxy EWKT_COMMA point_coordxy extra_pointsxy EWKT_CLOSE_BRACKET */
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_ring_xy((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+        break;
+      case 69: /* extra_rings ::= EWKT_COMMA ring extra_rings */
+      case 72: /* extra_ringsm ::= EWKT_COMMA ringm extra_ringsm */ yytestcase(yyruleno==72);
+      case 75: /* extra_ringsz ::= EWKT_COMMA ringz extra_ringsz */ yytestcase(yyruleno==75);
+      case 78: /* extra_ringszm ::= EWKT_COMMA ringzm extra_ringszm */ yytestcase(yyruleno==78);
+{
+		((gaiaRingPtr)yymsp[-1].minor.yy0)->Next = (gaiaRingPtr)yymsp[0].minor.yy0;
+		yygotominor.yy0 = yymsp[-1].minor.yy0;
+	}
+        break;
+      case 70: /* ringm ::= EWKT_OPEN_BRACKET point_coordxym EWKT_COMMA point_coordxym EWKT_COMMA point_coordxym EWKT_COMMA point_coordxym extra_pointsxym EWKT_CLOSE_BRACKET */
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_ring_xym((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+        break;
+      case 73: /* ringz ::= EWKT_OPEN_BRACKET point_coordxyz EWKT_COMMA point_coordxyz EWKT_COMMA point_coordxyz EWKT_COMMA point_coordxyz extra_pointsxyz EWKT_CLOSE_BRACKET */
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_ring_xyz((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+        break;
+      case 76: /* ringzm ::= EWKT_OPEN_BRACKET point_coordxyzm EWKT_COMMA point_coordxyzm EWKT_COMMA point_coordxyzm EWKT_COMMA point_coordxyzm extra_pointsxyzm EWKT_CLOSE_BRACKET */
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_ring_xyzm((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+        break;
+      case 83: /* multipoint_text ::= EWKT_OPEN_BRACKET point_coordxy extra_pointsxy EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipoint_xy((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 84: /* multipoint_textm ::= EWKT_OPEN_BRACKET point_coordxym extra_pointsxym EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipoint_xym((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 85: /* multipoint_textz ::= EWKT_OPEN_BRACKET point_coordxyz extra_pointsxyz EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipoint_xyz((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 86: /* multipoint_textzm ::= EWKT_OPEN_BRACKET point_coordxyzm extra_pointsxyzm EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipoint_xyzm((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 91: /* multilinestring_text ::= EWKT_OPEN_BRACKET linestring_text multilinestring_text2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multilinestring_xy((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 93: /* multilinestring_text2 ::= EWKT_COMMA linestring_text multilinestring_text2 */
+      case 96: /* multilinestring_textm2 ::= EWKT_COMMA linestring_textm multilinestring_textm2 */ yytestcase(yyruleno==96);
+      case 99: /* multilinestring_textz2 ::= EWKT_COMMA linestring_textz multilinestring_textz2 */ yytestcase(yyruleno==99);
+      case 102: /* multilinestring_textzm2 ::= EWKT_COMMA linestring_textzm multilinestring_textzm2 */ yytestcase(yyruleno==102);
+{ ((gaiaLinestringPtr)yymsp[-1].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 94: /* multilinestring_textm ::= EWKT_OPEN_BRACKET linestring_textm multilinestring_textm2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multilinestring_xym((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 97: /* multilinestring_textz ::= EWKT_OPEN_BRACKET linestring_textz multilinestring_textz2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multilinestring_xyz((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 100: /* multilinestring_textzm ::= EWKT_OPEN_BRACKET linestring_textzm multilinestring_textzm2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multilinestring_xyzm((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 107: /* multipolygon_text ::= EWKT_OPEN_BRACKET polygon_text multipolygon_text2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipolygon_xy((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 109: /* multipolygon_text2 ::= EWKT_COMMA polygon_text multipolygon_text2 */
+      case 112: /* multipolygon_textm2 ::= EWKT_COMMA polygon_textm multipolygon_textm2 */ yytestcase(yyruleno==112);
+      case 115: /* multipolygon_textz2 ::= EWKT_COMMA polygon_textz multipolygon_textz2 */ yytestcase(yyruleno==115);
+      case 118: /* multipolygon_textzm2 ::= EWKT_COMMA polygon_textzm multipolygon_textzm2 */ yytestcase(yyruleno==118);
+{ ((gaiaPolygonPtr)yymsp[-1].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 110: /* multipolygon_textm ::= EWKT_OPEN_BRACKET polygon_textm multipolygon_textm2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipolygon_xym((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 113: /* multipolygon_textz ::= EWKT_OPEN_BRACKET polygon_textz multipolygon_textz2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipolygon_xyz((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 116: /* multipolygon_textzm ::= EWKT_OPEN_BRACKET polygon_textzm multipolygon_textzm2 EWKT_CLOSE_BRACKET */
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) ewkt_multipolygon_xyzm((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 123: /* geocoll_text ::= EWKT_OPEN_BRACKET point geocoll_text2 EWKT_CLOSE_BRACKET */
+      case 124: /* geocoll_text ::= EWKT_OPEN_BRACKET linestring geocoll_text2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==124);
+      case 125: /* geocoll_text ::= EWKT_OPEN_BRACKET polygon geocoll_text2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==125);
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_geomColl_xy((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 127: /* geocoll_text2 ::= EWKT_COMMA point geocoll_text2 */
+      case 128: /* geocoll_text2 ::= EWKT_COMMA linestring geocoll_text2 */ yytestcase(yyruleno==128);
+      case 129: /* geocoll_text2 ::= EWKT_COMMA polygon geocoll_text2 */ yytestcase(yyruleno==129);
+      case 134: /* geocoll_textm2 ::= EWKT_COMMA pointm geocoll_textm2 */ yytestcase(yyruleno==134);
+      case 135: /* geocoll_textm2 ::= EWKT_COMMA linestringm geocoll_textm2 */ yytestcase(yyruleno==135);
+      case 136: /* geocoll_textm2 ::= EWKT_COMMA polygonm geocoll_textm2 */ yytestcase(yyruleno==136);
+      case 141: /* geocoll_textz2 ::= EWKT_COMMA pointz geocoll_textz2 */ yytestcase(yyruleno==141);
+      case 142: /* geocoll_textz2 ::= EWKT_COMMA linestringz geocoll_textz2 */ yytestcase(yyruleno==142);
+      case 143: /* geocoll_textz2 ::= EWKT_COMMA polygonz geocoll_textz2 */ yytestcase(yyruleno==143);
+      case 148: /* geocoll_textzm2 ::= EWKT_COMMA pointzm geocoll_textzm2 */ yytestcase(yyruleno==148);
+      case 149: /* geocoll_textzm2 ::= EWKT_COMMA linestringzm geocoll_textzm2 */ yytestcase(yyruleno==149);
+      case 150: /* geocoll_textzm2 ::= EWKT_COMMA polygonzm geocoll_textzm2 */ yytestcase(yyruleno==150);
+{
+		((gaiaGeomCollPtr)yymsp[-1].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[0].minor.yy0;
+		yygotominor.yy0 = yymsp[-1].minor.yy0;
+	}
+        break;
+      case 130: /* geocoll_textm ::= EWKT_OPEN_BRACKET pointm geocoll_textm2 EWKT_CLOSE_BRACKET */
+      case 131: /* geocoll_textm ::= EWKT_OPEN_BRACKET linestringm geocoll_textm2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==131);
+      case 132: /* geocoll_textm ::= EWKT_OPEN_BRACKET polygonm geocoll_textm2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==132);
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_geomColl_xym((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 137: /* geocoll_textz ::= EWKT_OPEN_BRACKET pointz geocoll_textz2 EWKT_CLOSE_BRACKET */
+      case 138: /* geocoll_textz ::= EWKT_OPEN_BRACKET linestringz geocoll_textz2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==138);
+      case 139: /* geocoll_textz ::= EWKT_OPEN_BRACKET polygonz geocoll_textz2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==139);
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_geomColl_xyz((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      case 144: /* geocoll_textzm ::= EWKT_OPEN_BRACKET pointzm geocoll_textzm2 EWKT_CLOSE_BRACKET */
+      case 145: /* geocoll_textzm ::= EWKT_OPEN_BRACKET linestringzm geocoll_textzm2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==145);
+      case 146: /* geocoll_textzm ::= EWKT_OPEN_BRACKET polygonzm geocoll_textzm2 EWKT_CLOSE_BRACKET */ yytestcase(yyruleno==146);
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) ewkt_geomColl_xyzm((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+        break;
+      default:
+      /* (0) main ::= in */ yytestcase(yyruleno==0);
+      /* (1) in ::= */ yytestcase(yyruleno==1);
+      /* (2) in ::= in state EWKT_NEWLINE */ yytestcase(yyruleno==2);
+      /* (3) state ::= program */ yytestcase(yyruleno==3);
+      /* (4) program ::= geo_text */ yytestcase(yyruleno==4);
+      /* (5) program ::= geo_textm */ yytestcase(yyruleno==5);
+        break;
+  };
+  yygoto = yyRuleInfo[yyruleno].lhs;
+  yysize = yyRuleInfo[yyruleno].nrhs;
+  yypParser->yyidx -= yysize;
+  yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
+  if( yyact < YYNSTATE ){
+#ifdef NDEBUG
+    /* If we are not debugging and the reduce action popped at least
+    ** one element off the stack, then we can push the new element back
+    ** onto the stack here, and skip the stack overflow test in yy_shift().
+    ** That gives a significant speed improvement. */
+    if( yysize ){
+      yypParser->yyidx++;
+      yymsp -= yysize-1;
+      yymsp->stateno = (YYACTIONTYPE)yyact;
+      yymsp->major = (YYCODETYPE)yygoto;
+      yymsp->minor = yygotominor;
+    }else
+#endif
+    {
+      yy_shift(yypParser,yyact,yygoto,&yygotominor);
+    }
+  }else{
+    assert( yyact == YYNSTATE + YYNRULE + 1 );
+    yy_accept(yypParser);
+  }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+#ifndef YYNOERRORRECOVERY
+static void yy_parse_failed(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser fails */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+#endif /* YYNOERRORRECOVERY */
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+  yyParser *yypParser,           /* The parser */
+  int yymajor,                   /* The major type of the error token */
+  YYMINORTYPE yyminor            /* The minor type of the error token */
+){
+  ParseARG_FETCH;
+#define TOKEN (yyminor.yy0)
+
+/* 
+** when the LEMON parser encounters an error
+** then this global variable is set 
+*/
+	ewkt_parse_error = 1;
+	*result = NULL;
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser accepts */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "ParseAlloc" which describes the current state of the parser.
+** The second argument is the major token number.  The third is
+** the minor token.  The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void Parse(
+  void *yyp,                   /* The parser */
+  int yymajor,                 /* The major token code number */
+  ParseTOKENTYPE yyminor       /* The value for the token */
+  ParseARG_PDECL               /* Optional %extra_argument parameter */
+){
+  YYMINORTYPE yyminorunion;
+  int yyact;            /* The parser action. */
+  int yyendofinput;     /* True if we are at the end of input */
+#ifdef YYERRORSYMBOL
+  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+#endif
+  yyParser *yypParser;  /* The parser */
+
+  /* (re)initialize the parser, if necessary */
+  yypParser = (yyParser*)yyp;
+  if( yypParser->yyidx<0 ){
+#if YYSTACKDEPTH<=0
+    if( yypParser->yystksz <=0 ){
+      /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
+      yyminorunion = yyzerominor;
+      yyStackOverflow(yypParser, &yyminorunion);
+      return;
+    }
+#endif
+    yypParser->yyidx = 0;
+    yypParser->yyerrcnt = -1;
+    yypParser->yystack[0].stateno = 0;
+    yypParser->yystack[0].major = 0;
+  }
+  yyminorunion.yy0 = yyminor;
+  yyendofinput = (yymajor==0);
+  ParseARG_STORE;
+
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+  }
+#endif
+
+  do{
+    yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
+    if( yyact<YYNSTATE ){
+      assert( !yyendofinput );  /* Impossible to shift the $ token */
+      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+      yypParser->yyerrcnt--;
+      yymajor = YYNOCODE;
+    }else if( yyact < YYNSTATE + YYNRULE ){
+      yy_reduce(yypParser,yyact-YYNSTATE);
+    }else{
+      assert( yyact == YY_ERROR_ACTION );
+#ifdef YYERRORSYMBOL
+      int yymx;
+#endif
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+      }
+#endif
+#ifdef YYERRORSYMBOL
+      /* A syntax error has occurred.
+      ** The response to an error depends upon whether or not the
+      ** grammar defines an error token "ERROR".  
+      **
+      ** This is what we do if the grammar does define ERROR:
+      **
+      **  * Call the %syntax_error function.
+      **
+      **  * Begin popping the stack until we enter a state where
+      **    it is legal to shift the error symbol, then shift
+      **    the error symbol.
+      **
+      **  * Set the error count to three.
+      **
+      **  * Begin accepting and shifting new tokens.  No new error
+      **    processing will occur until three tokens have been
+      **    shifted successfully.
+      **
+      */
+      if( yypParser->yyerrcnt<0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yymx = yypParser->yystack[yypParser->yyidx].major;
+      if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+             yyTracePrompt,yyTokenName[yymajor]);
+        }
+#endif
+        yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
+        yymajor = YYNOCODE;
+      }else{
+         while(
+          yypParser->yyidx >= 0 &&
+          yymx != YYERRORSYMBOL &&
+          (yyact = yy_find_reduce_action(
+                        yypParser->yystack[yypParser->yyidx].stateno,
+                        YYERRORSYMBOL)) >= YYNSTATE
+        ){
+          yy_pop_parser_stack(yypParser);
+        }
+        if( yypParser->yyidx < 0 || yymajor==0 ){
+          yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+          yy_parse_failed(yypParser);
+          yymajor = YYNOCODE;
+        }else if( yymx!=YYERRORSYMBOL ){
+          YYMINORTYPE u2;
+          u2.YYERRSYMDT = 0;
+          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+        }
+      }
+      yypParser->yyerrcnt = 3;
+      yyerrorhit = 1;
+#elif defined(YYNOERRORRECOVERY)
+      /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
+      ** do any kind of error recovery.  Instead, simply invoke the syntax
+      ** error routine and continue going as if nothing had happened.
+      **
+      ** Applications can set this macro (for example inside %include) if
+      ** they intend to abandon the parse upon the first syntax error seen.
+      */
+      yy_syntax_error(yypParser,yymajor,yyminorunion);
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      yymajor = YYNOCODE;
+      
+#else  /* YYERRORSYMBOL is not defined */
+      /* This is what we do if the grammar does not define ERROR:
+      **
+      **  * Report an error message, and throw away the input token.
+      **
+      **  * If the input token is $, then fail the parse.
+      **
+      ** As before, subsequent error messages are suppressed until
+      ** three input tokens have been successfully shifted.
+      */
+      if( yypParser->yyerrcnt<=0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yypParser->yyerrcnt = 3;
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      if( yyendofinput ){
+        yy_parse_failed(yypParser);
+      }
+      yymajor = YYNOCODE;
+#endif
+    }
+  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  return;
+}
+
+
+/*
+ EWKT_LEMON_END - LEMON generated code ends here 
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+** CAVEAT: there is an incompatibility between LEMON and FLEX
+** this macro resolves the issue
+*/
+#undef yy_accept
+#define yy_accept	yy_ewkt_flex_accept
+
+
+
+
+/*
+ EWKT_FLEX_START - FLEX generated code starts here 
+*/
+
+#line 3 "lex.Ewkt.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define yy_create_buffer Ewkt_create_buffer
+#define yy_delete_buffer Ewkt_delete_buffer
+#define yy_flex_debug Ewkt_flex_debug
+#define yy_init_buffer Ewkt_init_buffer
+#define yy_flush_buffer Ewkt_flush_buffer
+#define yy_load_buffer_state Ewkt_load_buffer_state
+#define yy_switch_to_buffer Ewkt_switch_to_buffer
+#define yyin Ewktin
+#define yyleng Ewktleng
+#define yylex Ewktlex
+#define yylineno Ewktlineno
+#define yyout Ewktout
+#define yyrestart Ewktrestart
+#define yytext Ewkttext
+#define yywrap Ewktwrap
+#define yyalloc Ewktalloc
+#define yyrealloc Ewktrealloc
+#define yyfree Ewktfree
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE Ewktrestart(Ewktin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
+#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int Ewktleng;
+
+extern FILE *Ewktin, *Ewktout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up Ewkttext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up Ewkttext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via Ewktrestart()), so that the user can continue scanning by
+	 * just pointing Ewktin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when Ewkttext is formed. */
+static char yy_hold_char;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int Ewktleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow Ewktwrap()'s to do buffer switches
+ * instead of setting up a fresh Ewktin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void Ewktrestart (FILE *input_file  );
+void Ewkt_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE Ewkt_create_buffer (FILE *file,int size  );
+void Ewkt_delete_buffer (YY_BUFFER_STATE b  );
+void Ewkt_flush_buffer (YY_BUFFER_STATE b  );
+void Ewktpush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void Ewktpop_buffer_state (void );
+
+static void Ewktensure_buffer_stack (void );
+static void Ewkt_load_buffer_state (void );
+static void Ewkt_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER Ewkt_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE Ewkt_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE Ewkt_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE Ewkt_scan_bytes (yyconst char *bytes,int len  );
+
+void *Ewktalloc (yy_size_t  );
+void *Ewktrealloc (void *,yy_size_t  );
+void Ewktfree (void *  );
+
+#define yy_new_buffer Ewkt_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        Ewktensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            Ewkt_create_buffer(Ewktin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        Ewktensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            Ewkt_create_buffer(Ewktin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *Ewktin = (FILE *) 0, *Ewktout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int Ewktlineno;
+
+int Ewktlineno = 1;
+
+extern char *Ewkttext;
+#define yytext_ptr Ewkttext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up Ewkttext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+	Ewktleng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	(yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 22
+#define YY_END_OF_BUFFER 23
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[93] =
+    {   0,
+        0,    0,   23,   21,   19,   20,    3,    4,   21,    2,
+       21,    1,   21,   21,   21,   21,    1,    1,    1,    1,
+        0,    0,    0,    0,    1,    1,    1,    0,    0,    0,
+        0,    0,    1,    1,    0,    0,    0,    0,    0,    0,
+        0,    0,    5,    0,    0,    0,    0,    0,    6,    0,
+        0,    0,    0,    0,    9,    0,    0,    0,    0,    0,
+       10,    0,    0,    0,    0,    0,    0,    7,    0,   11,
+        0,    0,    8,    0,   12,    0,    0,    0,   15,    0,
+        0,   16,    0,    0,    0,   13,    0,   14,    0,   17,
+       18,    0
+
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    1,    1,    1,    1,    1,    1,    4,
+        5,    1,    6,    7,    8,    9,    1,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,   11,    1,   12,    1,
+       13,    1,   14,    1,    1,   15,   16,   17,   18,   19,
+        1,   20,   21,   22,   23,    1,    1,    1,   24,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,   25,    1,
+
+       26,    1,   27,    1,   28,    1,    1,   29,   30,   31,
+       32,   33,    1,   34,   35,   36,   37,    1,    1,    1,
+       38,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[39] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int16_t yy_base[93] =
+    {   0,
+        0,    0,  187,  188,  188,  188,  188,  188,  174,  188,
+      173,   30,   29,   28,   20,   26,   36,   38,  172,   40,
+       33,   35,   38,   45,  171,  166,  165,   38,   49,   40,
+       46,   40,  164,  163,   57,   49,   57,   50,   66,   58,
+       59,   72,   66,   70,   69,   70,   78,   79,  188,   81,
+       75,   86,   90,   94,   94,  104,   99,  105,  101,   95,
+      188,  102,  112,  105,  105,  115,  120,  120,  115,  122,
+      125,  129,  188,  125,  188,  129,  135,  134,  137,  143,
+      138,  188,  134,  150,  150,  149,  148,  188,  154,  156,
+      188,  188
+
+    } ;
+
+static yyconst flex_int16_t yy_def[93] =
+    {   0,
+       92,    1,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,    0
+
+    } ;
+
+static yyconst flex_int16_t yy_nxt[227] =
+    {   0,
+        4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
+        4,    4,   13,    4,   14,   15,    4,    4,   16,    4,
+        4,    4,    4,    4,    4,    4,   13,    4,   14,   15,
+        4,    4,   16,    4,    4,    4,    4,    4,   19,   20,
+       21,   22,   23,   24,   25,   17,   26,   18,   19,   20,
+       28,   29,   30,   35,   21,   22,   23,   24,   31,   32,
+       36,   37,   38,   39,   28,   29,   30,   35,   40,   41,
+       42,   43,   31,   32,   36,   37,   38,   39,   44,   45,
+       46,   49,   40,   41,   42,   43,   47,   50,   51,   52,
+       48,   53,   44,   45,   46,   49,   54,   55,   56,   57,
+
+       47,   50,   51,   52,   48,   53,   58,   59,   60,   61,
+       54,   55,   56,   57,   62,   63,   64,   65,   66,   67,
+       58,   59,   60,   61,   68,   69,   70,   71,   62,   63,
+       64,   65,   66,   67,   72,   73,   74,   75,   68,   69,
+       70,   71,   76,   77,   78,   79,   80,   81,   72,   73,
+       74,   75,   82,   83,   84,   85,   76,   77,   78,   79,
+       80,   81,   86,   87,   88,   89,   82,   83,   84,   85,
+       90,   91,   34,   33,   27,   34,   86,   87,   88,   89,
+       33,   27,   18,   17,   90,   91,   92,    3,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92
+    } ;
+
+static yyconst flex_int16_t yy_chk[227] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,   12,   12,
+       13,   14,   15,   16,   17,   17,   18,   18,   20,   20,
+       21,   22,   23,   28,   13,   14,   15,   16,   24,   24,
+       29,   30,   31,   32,   21,   22,   23,   28,   35,   36,
+       37,   38,   24,   24,   29,   30,   31,   32,   39,   40,
+       41,   43,   35,   36,   37,   38,   42,   44,   45,   46,
+       42,   47,   39,   40,   41,   43,   48,   50,   51,   52,
+
+       42,   44,   45,   46,   42,   47,   53,   54,   54,   55,
+       48,   50,   51,   52,   56,   57,   58,   59,   60,   62,
+       53,   54,   54,   55,   63,   64,   65,   66,   56,   57,
+       58,   59,   60,   62,   67,   68,   69,   70,   63,   64,
+       65,   66,   71,   72,   74,   76,   77,   78,   67,   68,
+       69,   70,   79,   80,   81,   83,   71,   72,   74,   76,
+       77,   78,   84,   85,   86,   87,   79,   80,   81,   83,
+       89,   90,   34,   33,   27,   26,   84,   85,   86,   87,
+       25,   19,   11,    9,   89,   90,    3,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int Ewkt_flex_debug;
+int Ewkt_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *Ewkttext;
+/* 
+ EwktLexer.l -- EWKT parser - FLEX config
+  
+ version 2.4, 2011 May 14
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+/* For debugging purposes */
+int ewkt_line = 1, ewkt_col = 1;
+
+/**
+*  The main string-token matcher.
+*  The lower case part is probably not needed.  We should really be converting 
+*  The string to all uppercase/lowercase to make it case iNsEnSiTiVe.
+*  What Flex will do is, For the input string, beginning from the front, Flex
+*  will try to match with any of the defined tokens from below.  Flex will 
+*  then match the string of longest length.  Suppose the string is: POINTM,
+*  Flex would match both POINT and POINTM, but since POINTM is the longer
+*  of the two tokens, FLEX will match POINTM.
+*/
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int Ewktlex_destroy (void );
+
+int Ewktget_debug (void );
+
+void Ewktset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE Ewktget_extra (void );
+
+void Ewktset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *Ewktget_in (void );
+
+void Ewktset_in  (FILE * in_str  );
+
+FILE *Ewktget_out (void );
+
+void Ewktset_out  (FILE * out_str  );
+
+int Ewktget_leng (void );
+
+char *Ewktget_text (void );
+
+int Ewktget_lineno (void );
+
+void Ewktset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int Ewktwrap (void );
+#else
+extern int Ewktwrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
+#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( Ewkttext, Ewktleng, 1, Ewktout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( Ewktin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( Ewktin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, Ewktin))==0 && ferror(Ewktin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(Ewktin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int Ewktlex (void);
+
+#define YY_DECL int Ewktlex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after Ewkttext and Ewktleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! Ewktin )
+			Ewktin = stdin;
+
+		if ( ! Ewktout )
+			Ewktout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			Ewktensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				Ewkt_create_buffer(Ewktin,YY_BUF_SIZE );
+		}
+
+		Ewkt_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of Ewkttext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = (yy_start);
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 93 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 188 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+{ ewkt_col += (int) strlen(Ewkttext);  EwktLval.dval = atof(Ewkttext); return EWKT_NUM; }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_COMMA; }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_OPEN_BRACKET; }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_CLOSE_BRACKET; }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_POINT; }
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_POINT_M; }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_LINESTRING; }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_LINESTRING_M; }
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_POLYGON; }
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_POLYGON_M; }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_MULTIPOINT; }
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_MULTIPOINT_M; }
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_MULTILINESTRING; }
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_MULTILINESTRING_M; }
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_MULTIPOLYGON; }
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_MULTIPOLYGON_M; }
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_GEOMETRYCOLLECTION; }
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+{ EwktLval.dval = 0; return EWKT_GEOMETRYCOLLECTION_M; }
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+{ ewkt_col += (int) strlen(Ewkttext); }               /* ignore but count white space */
+	YY_BREAK
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+{ ewkt_col = 0; ++ewkt_line; }
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+{ ewkt_col += (int) strlen(Ewkttext); return -1; }
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+case YY_STATE_EOF(INITIAL):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed Ewktin at a new source and called
+			 * Ewktlex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = Ewktin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( Ewktwrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * Ewkttext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of Ewktlex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					Ewktrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			Ewktrestart(Ewktin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) Ewktrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 93 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+	register int yy_is_jam;
+    	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 93 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 92);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+	register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up Ewkttext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			int offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					Ewktrestart(Ewktin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( Ewktwrap( ) )
+						return EOF;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve Ewkttext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void Ewktrestart  (FILE * input_file )
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        Ewktensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            Ewkt_create_buffer(Ewktin,YY_BUF_SIZE );
+	}
+
+	Ewkt_init_buffer(YY_CURRENT_BUFFER,input_file );
+	Ewkt_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void Ewkt_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		Ewktpop_buffer_state();
+	 *		Ewktpush_buffer_state(new_buffer);
+     */
+	Ewktensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	Ewkt_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (Ewktwrap()) processing, but the only time this flag
+	 * is looked at is after Ewktwrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void Ewkt_load_buffer_state  (void)
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	Ewktin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE Ewkt_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) Ewktalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in Ewkt_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) Ewktalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in Ewkt_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	Ewkt_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with Ewkt_create_buffer()
+ * 
+ */
+    void Ewkt_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		Ewktfree((void *) b->yy_ch_buf  );
+
+	Ewktfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a Ewktrestart() or at EOF.
+ */
+    static void Ewkt_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+    
+	Ewkt_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then Ewkt_init_buffer was _probably_
+     * called from Ewktrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void Ewkt_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		Ewkt_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void Ewktpush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	Ewktensure_buffer_stack();
+
+	/* This block is copied from Ewkt_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from Ewkt_switch_to_buffer. */
+	Ewkt_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void Ewktpop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	Ewkt_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		Ewkt_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void Ewktensure_buffer_stack (void)
+{
+	int num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)Ewktalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in Ewktensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)Ewktrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in Ewktensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE Ewkt_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) Ewktalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in Ewkt_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	Ewkt_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to Ewktlex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       Ewkt_scan_bytes() instead.
+ */
+YY_BUFFER_STATE Ewkt_scan_string (yyconst char * yystr )
+{
+    
+	return Ewkt_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to Ewktlex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE Ewkt_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) Ewktalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in Ewkt_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = Ewkt_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in Ewkt_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up Ewkttext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		Ewkttext[Ewktleng] = (yy_hold_char); \
+		(yy_c_buf_p) = Ewkttext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		Ewktleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int Ewktget_lineno  (void)
+{
+        
+    return Ewktlineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *Ewktget_in  (void)
+{
+        return Ewktin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *Ewktget_out  (void)
+{
+        return Ewktout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+int Ewktget_leng  (void)
+{
+        return Ewktleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *Ewktget_text  (void)
+{
+        return Ewkttext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void Ewktset_lineno (int  line_number )
+{
+    
+    Ewktlineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see Ewkt_switch_to_buffer
+ */
+void Ewktset_in (FILE *  in_str )
+{
+        Ewktin = in_str ;
+}
+
+void Ewktset_out (FILE *  out_str )
+{
+        Ewktout = out_str ;
+}
+
+int Ewktget_debug  (void)
+{
+        return Ewkt_flex_debug;
+}
+
+void Ewktset_debug (int  bdebug )
+{
+        Ewkt_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from Ewktlex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    Ewktin = stdin;
+    Ewktout = stdout;
+#else
+    Ewktin = (FILE *) 0;
+    Ewktout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * Ewktlex_init()
+     */
+    return 0;
+}
+
+/* Ewktlex_destroy is for both reentrant and non-reentrant scanners. */
+int Ewktlex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		Ewkt_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		Ewktpop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	Ewktfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * Ewktlex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *Ewktalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *Ewktrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void Ewktfree (void * ptr )
+{
+	free( (char *) ptr );	/* see Ewktrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+/**
+ * reset the line and column count
+ *
+ *
+ */
+void ewkt_reset_lexer(void)
+{
+
+  ewkt_line = 1;
+  ewkt_col  = 1;
+
+}
+
+/**
+ * EwktError() is invoked when the lexer or the parser encounter
+ * an error. The error message is passed via *s
+ *
+ *
+ */
+void EwktError(char *s)
+{
+  printf("error: %s at line: %d col: %d\n",s,ewkt_line,ewkt_col);
+
+}
+
+int Ewktwrap(void)
+{
+  return 1;
+}
+
+
+/* 
+ EWKT_FLEX_END - FLEX generated code ends here 
+*/
+
+
+
+/*
+** This is a linked-list struct to store all the values for each token.
+** All tokens will have a value of 0, except tokens denoted as NUM.
+** NUM tokens are geometry coordinates and will contain the floating
+** point number.
+*/
+typedef struct ewktFlexTokenStruct
+{
+    double value;
+    struct ewktFlexTokenStruct *Next;
+} ewktFlexToken;
+
+/*
+** Function to clean up the linked-list of token values.
+*/
+static int
+ewkt_cleanup (ewktFlexToken * token)
+{
+    ewktFlexToken *ptok;
+    ewktFlexToken *ptok_n;
+    if (token == NULL)
+	return 0;
+    ptok = token;
+    while (ptok)
+      {
+	  ptok_n = ptok->Next;
+	  free (ptok);
+	  ptok = ptok_n;
+      }
+    return 0;
+}
+
+static int
+findEwktSrid (const char *buffer, int *base_offset)
+{
+/* attempting to identify the EWKT SRID */
+    char dummy[1024];
+    char *out;
+    const char *in = buffer;
+    int end = -1;
+    int i;
+    *base_offset = 0;
+
+    while (*in != '\0')
+      {
+	  /* searching the first semi-colon [srid delimiter] */
+	  if (*in == ';')
+	    {
+		end = in - buffer;
+		break;
+	    }
+	  in++;
+      }
+    if (end < 0)
+	return -1;
+    in = buffer;
+    out = dummy;
+    for (i = 0; i < end; i++)
+      {
+	  /* normalizing whitespaces */
+	  char c = *in;
+	  if (c == ' ' || c == '\t' || c == '\n')
+	    {
+		in++;
+		continue;
+	    }
+	  *out++ = *in++;
+      }
+    *out = '\0';
+    if (strncasecmp (dummy, "SRID=", 5) != 0)
+	return -1;
+    for (i = 5; i < (int) strlen (dummy); i++)
+      {
+	  if (i == 5)
+	    {
+		if (dummy[i] == '-' || dummy[i] == '+')
+		    continue;
+	    }
+	  if (dummy[i] >= '0' && dummy[i] <= '9')
+	      continue;
+	  return -1;
+      }
+    *base_offset = end + 1;
+    return atoi (dummy + 5);
+}
+
+gaiaGeomCollPtr
+gaiaParseEWKT (const unsigned char *dirty_buffer)
+{
+    void *pParser = ParseAlloc (malloc);
+    /* Linked-list of token values */
+    ewktFlexToken *tokens = malloc (sizeof (ewktFlexToken));
+    /* Pointer to the head of the list */
+    ewktFlexToken *head = tokens;
+    int yv;
+    int srid;
+    int base_offset;
+    gaiaGeomCollPtr result = NULL;
+
+    tokens->Next = NULL;
+    ewkt_parse_error = 0;
+
+    srid = findEwktSrid ((char *) dirty_buffer, &base_offset);
+    Ewkt_scan_string ((char *) dirty_buffer + base_offset);
+
+    /*
+       / Keep tokenizing until we reach the end
+       / yylex() will return the next matching Token for us.
+     */
+    while ((yv = yylex ()) != 0)
+      {
+	  if (yv == -1)
+	    {
+		ewkt_parse_error = 1;
+		break;
+	    }
+	  tokens->Next = malloc (sizeof (ewktFlexToken));
+	  tokens->Next->Next = NULL;
+	  /*
+	     /EwktLval is a global variable from FLEX.
+	     /EwktLval is defined in ewktLexglobal.h
+	   */
+	  tokens->Next->value = EwktLval.dval;
+	  /* Pass the token to the wkt parser created from lemon */
+	  Parse (pParser, yv, &(tokens->Next->value), &result);
+	  tokens = tokens->Next;
+      }
+    /* This denotes the end of a line as well as the end of the parser */
+    Parse (pParser, EWKT_NEWLINE, 0, &result);
+    ParseFree (pParser, free);
+    Ewktlex_destroy ();
+
+    /* Assigning the token as the end to avoid seg faults while cleaning */
+    tokens->Next = NULL;
+    ewkt_cleanup (head);
+
+    if (ewkt_parse_error)
+      {
+	  if (result)
+	      gaiaFreeGeomColl (result);
+	  return NULL;
+      }
+
+    if (!result)
+	return NULL;
+    if (!ewktCheckValidity (result))
+      {
+	  gaiaFreeGeomColl (result);
+	  return NULL;
+      }
+
+    gaiaMbrGeometry (result);
+    result->Srid = srid;
+
+    return result;
+}
+
+
+/*
+** CAVEAT: we must now undefine any Lemon/Flex own macro
+*/
+#undef YYNOCODE
+#undef YYNSTATE
+#undef YYNRULE
+#undef YY_SHIFT_MAX
+#undef YY_SHIFT_USE_DFLT
+#undef YY_REDUCE_USE_DFLT
+#undef YY_REDUCE_MAX
+#undef YY_FLUSH_BUFFER
+#undef YY_DO_BEFORE_ACTION
+#undef YY_NUM_RULES
+#undef YY_END_OF_BUFFER
+#undef YY_END_FILE
+#undef YYACTIONTYPE
+#undef YY_SZ_ACTTAB
+#undef YY_NEW_FILE
+#undef BEGIN
+#undef YY_START
+#undef YY_CURRENT_BUFFER
+#undef YY_CURRENT_BUFFER_LVALUE
+#undef YY_STATE_BUF_SIZE
+#undef YY_DECL
+#undef YY_FATAL_ERROR
+#undef YYMINORTYPE
+#undef YY_CHAR
+#undef YYSTYPE
+#undef input
+#undef ParseAlloc
+#undef ParseFree
+#undef ParseStackPeak
+#undef Parse
+#undef yyalloc
+#undef yyfree
+#undef yyin
+#undef yyleng
+#undef yyless
+#undef yylex
+#undef yylineno
+#undef yyout
+#undef yyrealloc
+#undef yyrestart
+#undef yyStackEntry
+#undef yytext
+#undef yywrap
+#undef yyzerominor
+#undef yy_accept
+#undef yy_action
+#undef yy_base
+#undef yy_buffer_stack
+#undef yy_buffer_stack_max
+#undef yy_buffer_stack_top
+#undef yy_c_buf_p
+#undef yy_chk
+#undef yy_create_buffer
+#undef yy_def
+#undef yy_default
+#undef yy_delete_buffer
+#undef yy_destructor
+#undef yy_ec
+#undef yy_fatal_error
+#undef yy_find_reduce_action
+#undef yy_find_shift_action
+#undef yy_flex_debug
+#undef yy_flush_buffer
+#undef yy_get_next_buffer
+#undef yy_get_previous_state
+#undef yy_init
+#undef yy_init_buffer
+#undef yy_init_globals
+#undef yy_load_buffer
+#undef yy_load_buffer_state
+#undef yy_lookahead
+#undef yy_meta
+#undef yy_new_buffer
+#undef yy_nxt
+#undef yy_parse_failed
+#undef yy_pop_parser_stack
+#undef yy_reduce
+#undef yy_reduce_ofst
+#undef yy_set_bol
+#undef yy_set_interactive
+#undef yy_shift
+#undef yy_shift_ofst
+#undef yy_start
+#undef yy_state_type
+#undef yy_switch_to_buffer
+#undef yy_syntax_error
+#undef yy_trans_info
+#undef yy_try_NUL_trans
+#undef yyParser
+#undef yyStackEntry
+#undef yyStackOverflow
+#undef yyRuleInfo
+#undef yytext_ptr
+#undef yyunput
+#undef yyzerominor
+#undef ParseARG_SDECL
+#undef ParseARG_PDECL
+#undef ParseARG_FETCH
+#undef ParseARG_STORE
+#undef REJECT
+#undef yymore
+#undef YY_MORE_ADJ
+#undef YY_RESTORE_YY_MORE_OFFSET
+#undef YY_LESS_LINENO
+#undef yyTracePrompt
+#undef yyTraceFILE
+#undef yyTokenName
+#undef yyRuleName
+#undef ParseTrace
diff --git a/libspatialite/src/gaiageo/gg_geoJSON.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geoJSON.c
similarity index 100%
copy from libspatialite/src/gaiageo/gg_geoJSON.c
copy to libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geoJSON.c
diff --git a/libspatialite/src/gaiageo/gg_geodesic.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geodesic.c
similarity index 100%
copy from libspatialite/src/gaiageo/gg_geodesic.c
copy to libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geodesic.c
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geometries.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geometries.c
new file mode 100644
index 0000000..bc629d9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geometries.c
@@ -0,0 +1,3947 @@
+/*
+
+ gg_geometries.c -- Gaia geometric objects
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <memory.h>
+#include <math.h>
+#include <float.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAllocPoint (double x, double y)
+{
+/* POINT object constructor */
+    gaiaPointPtr p = malloc (sizeof (gaiaPoint));
+    p->X = x;
+    p->Y = y;
+    p->Z = 0.0;
+    p->M = 0.0;
+    p->DimensionModel = GAIA_XY;
+    p->Next = NULL;
+    p->Prev = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAllocPointXYZ (double x, double y, double z)
+{
+/* POINT object constructor */
+    gaiaPointPtr p = malloc (sizeof (gaiaPoint));
+    p->X = x;
+    p->Y = y;
+    p->Z = z;
+    p->M = 0.0;
+    p->DimensionModel = GAIA_XY_Z;
+    p->Next = NULL;
+    p->Prev = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAllocPointXYM (double x, double y, double m)
+{
+/* POINT object constructor */
+    gaiaPointPtr p = malloc (sizeof (gaiaPoint));
+    p->X = x;
+    p->Y = y;
+    p->Z = 0.0;
+    p->M = m;
+    p->DimensionModel = GAIA_XY_M;
+    p->Next = NULL;
+    p->Prev = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAllocPointXYZM (double x, double y, double z, double m)
+{
+/* POINT object constructor */
+    gaiaPointPtr p = malloc (sizeof (gaiaPoint));
+    p->X = x;
+    p->Y = y;
+    p->Z = z;
+    p->M = m;
+    p->DimensionModel = GAIA_XY_Z_M;
+    p->Next = NULL;
+    p->Prev = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreePoint (gaiaPointPtr ptr)
+{
+/* POINT object destructor */
+    if (ptr != NULL)
+	free (ptr);
+}
+
+GAIAGEO_DECLARE gaiaLinestringPtr
+gaiaAllocLinestring (int vert)
+{
+/* LINESTRING object constructor */
+    gaiaLinestringPtr p = malloc (sizeof (gaiaLinestring));
+    p->Coords = malloc (sizeof (double) * (vert * 2));
+    p->Points = vert;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaLinestringPtr
+gaiaAllocLinestringXYZ (int vert)
+{
+/* LINESTRING object constructor */
+    gaiaLinestringPtr p = malloc (sizeof (gaiaLinestring));
+    p->Coords = malloc (sizeof (double) * (vert * 3));
+    p->Points = vert;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaLinestringPtr
+gaiaAllocLinestringXYM (int vert)
+{
+/* LINESTRING object constructor */
+    gaiaLinestringPtr p = malloc (sizeof (gaiaLinestring));
+    p->Coords = malloc (sizeof (double) * (vert * 3));
+    p->Points = vert;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_M;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaLinestringPtr
+gaiaAllocLinestringXYZM (int vert)
+{
+/* LINESTRING object constructor */
+    gaiaLinestringPtr p = malloc (sizeof (gaiaLinestring));
+    p->Coords = malloc (sizeof (double) * (vert * 4));
+    p->Points = vert;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z_M;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeLinestring (gaiaLinestringPtr ptr)
+{
+/* LINESTRING object desctructror */
+    if (ptr)
+      {
+	  if (ptr->Coords)
+	      free (ptr->Coords);
+	  free (ptr);
+      }
+}
+
+GAIAGEO_DECLARE int
+gaiaLineGetPoint (gaiaLinestringPtr ln, int v, double *x, double *y, double *z,
+		  double *m)
+{
+/* SAFE - getting coords for a vertex in LINESTRING */
+    double vx;
+    double vy;
+    double vz;
+    double vm;
+    *x = 0.0;
+    *y = 0.0;
+    *z = 0.0;
+    *m = 0.0;
+    if (!ln)
+	return 0;
+    if (v < 0 || v >= ln->Points)
+	return 0;
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY:
+	  gaiaGetPoint (ln->Coords, v, &vx, &vy);
+	  *x = vx;
+	  *y = vy;
+	  break;
+      case GAIA_XY_Z:
+	  gaiaGetPointXYZ (ln->Coords, v, &vx, &vy, &vz);
+	  *x = vx;
+	  *y = vy;
+	  *z = vz;
+	  break;
+      case GAIA_XY_M:
+	  gaiaGetPointXYM (ln->Coords, v, &vx, &vy, &vm);
+	  *x = vx;
+	  *y = vy;
+	  *m = vm;
+	  break;
+      case GAIA_XY_Z_M:
+	  gaiaGetPointXYZM (ln->Coords, v, &vx, &vy, &vz, &vm);
+	  *x = vx;
+	  *y = vy;
+	  *z = vz;
+	  *m = vm;
+	  break;
+      default:
+	  return 0;
+      };
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaLineSetPoint (gaiaLinestringPtr ln, int v, double x, double y, double z,
+		  double m)
+{
+/* SAFE - setting coords for a vertex in RING */
+    if (!ln)
+	return 0;
+    if (v < 0 || v >= ln->Points)
+	return 0;
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY:
+	  gaiaSetPoint (ln->Coords, v, x, y);
+	  break;
+      case GAIA_XY_Z:
+	  gaiaSetPointXYZ (ln->Coords, v, x, y, z);
+	  break;
+      case GAIA_XY_M:
+	  gaiaSetPointXYM (ln->Coords, v, x, y, m);
+	  break;
+      case GAIA_XY_Z_M:
+	  gaiaSetPointXYZM (ln->Coords, v, x, y, z, m);
+	  break;
+      default:
+	  return 0;
+      };
+    return 1;
+}
+
+GAIAGEO_DECLARE void
+gaiaCopyLinestringCoords (gaiaLinestringPtr dst, gaiaLinestringPtr src)
+{
+/* 
+/ copying coords from one Linestring to another
+/ maybe, converting from one Dimension Model to a different one
+*/
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (!src)
+	return;
+    if (!dst)
+	return;
+    if (src->Points != dst->Points)
+	return;
+    for (iv = 0; iv < dst->Points; iv++)
+      {
+	  z = 0.0;
+	  m = 0.0;
+	  if (src->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (src->Coords, iv, &x, &y, &z);
+	    }
+	  else if (src->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (src->Coords, iv, &x, &y, &m);
+	    }
+	  else if (src->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (src->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (src->Coords, iv, &x, &y);
+	    }
+	  if (dst->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaSetPointXYZ (dst->Coords, iv, x, y, z);
+	    }
+	  else if (dst->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaSetPointXYM (dst->Coords, iv, x, y, m);
+	    }
+	  else if (dst->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaSetPointXYZM (dst->Coords, iv, x, y, z, m);
+	    }
+	  else
+	    {
+		gaiaSetPoint (dst->Coords, iv, x, y);
+	    }
+      }
+}
+
+GAIAGEO_DECLARE gaiaLinestringPtr
+gaiaCloneLinestring (gaiaLinestringPtr line)
+{
+/* clones a LINESTRING */
+    gaiaLinestringPtr new_line;
+    if (!line)
+	return NULL;
+    if (line->DimensionModel == GAIA_XY_Z)
+	new_line = gaiaAllocLinestringXYZ (line->Points);
+    else if (line->DimensionModel == GAIA_XY_M)
+	new_line = gaiaAllocLinestringXYM (line->Points);
+    else if (line->DimensionModel == GAIA_XY_Z_M)
+	new_line = gaiaAllocLinestringXYZM (line->Points);
+    else
+	new_line = gaiaAllocLinestring (line->Points);
+    gaiaCopyLinestringCoords (new_line, line);
+    return new_line;
+}
+
+GAIAGEO_DECLARE gaiaRingPtr
+gaiaAllocRing (int vert)
+{
+/* ring object constructor */
+    gaiaRingPtr p = malloc (sizeof (gaiaRing));
+    p->Coords = malloc (sizeof (double) * (vert * 2));
+    p->Points = vert;
+    p->Link = NULL;
+    p->Clockwise = 0;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaRingPtr
+gaiaAllocRingXYZ (int vert)
+{
+/* ring object constructor */
+    gaiaRingPtr p = malloc (sizeof (gaiaRing));
+    p->Coords = malloc (sizeof (double) * (vert * 3));
+    p->Points = vert;
+    p->Link = NULL;
+    p->Clockwise = 0;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaRingPtr
+gaiaAllocRingXYM (int vert)
+{
+/* ring object constructor */
+    gaiaRingPtr p = malloc (sizeof (gaiaRing));
+    p->Coords = malloc (sizeof (double) * (vert * 3));
+    p->Points = vert;
+    p->Link = NULL;
+    p->Clockwise = 0;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_M;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaRingPtr
+gaiaAllocRingXYZM (int vert)
+{
+/* ring object constructor */
+    gaiaRingPtr p = malloc (sizeof (gaiaRing));
+    p->Coords = malloc (sizeof (double) * (vert * 4));
+    p->Points = vert;
+    p->Link = NULL;
+    p->Clockwise = 0;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z_M;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeRing (gaiaRingPtr ptr)
+{
+/* ring object destructor */
+    if (ptr)
+      {
+	  if (ptr->Coords)
+	      free (ptr->Coords);
+	  free (ptr);
+      }
+}
+
+GAIAGEO_DECLARE int
+gaiaRingGetPoint (gaiaRingPtr rng, int v, double *x, double *y, double *z,
+		  double *m)
+{
+/* SAFE - getting coords for a vertex in RING */
+    double vx;
+    double vy;
+    double vz;
+    double vm;
+    *x = 0.0;
+    *y = 0.0;
+    *z = 0.0;
+    *m = 0.0;
+    if (!rng)
+	return 0;
+    if (v < 0 || v >= rng->Points)
+	return 0;
+    switch (rng->DimensionModel)
+      {
+      case GAIA_XY:
+	  gaiaGetPoint (rng->Coords, v, &vx, &vy);
+	  *x = vx;
+	  *y = vy;
+	  break;
+      case GAIA_XY_Z:
+	  gaiaGetPointXYZ (rng->Coords, v, &vx, &vy, &vz);
+	  *x = vx;
+	  *y = vy;
+	  *z = vz;
+	  break;
+      case GAIA_XY_M:
+	  gaiaGetPointXYM (rng->Coords, v, &vx, &vy, &vm);
+	  *x = vx;
+	  *y = vy;
+	  *m = vm;
+	  break;
+      case GAIA_XY_Z_M:
+	  gaiaGetPointXYZM (rng->Coords, v, &vx, &vy, &vz, &vm);
+	  *x = vx;
+	  *y = vy;
+	  *z = vz;
+	  *m = vm;
+	  break;
+      default:
+	  return 0;
+      };
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaRingSetPoint (gaiaRingPtr rng, int v, double x, double y, double z,
+		  double m)
+{
+/* SAFE - getting coords for a vertex in RING */
+    if (!rng)
+	return 0;
+    if (v < 0 || v >= rng->Points)
+	return 0;
+    switch (rng->DimensionModel)
+      {
+      case GAIA_XY:
+	  gaiaSetPoint (rng->Coords, v, x, y);
+	  break;
+      case GAIA_XY_Z:
+	  gaiaSetPointXYZ (rng->Coords, v, x, y, z);
+	  break;
+      case GAIA_XY_M:
+	  gaiaSetPointXYM (rng->Coords, v, x, y, m);
+	  break;
+      case GAIA_XY_Z_M:
+	  gaiaSetPointXYZM (rng->Coords, v, x, y, z, m);
+	  break;
+      default:
+	  return 0;
+      };
+    return 1;
+}
+
+GAIAGEO_DECLARE void
+gaiaCopyRingCoords (gaiaRingPtr dst, gaiaRingPtr src)
+{
+/* 
+/ copying coords from one Ring to another
+/ maybe, converting from one Dimension Model to a different one
+*/
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (!src)
+	return;
+    if (!dst)
+	return;
+    if (src->Points != dst->Points)
+	return;
+    for (iv = 0; iv < dst->Points; iv++)
+      {
+	  z = 0.0;
+	  m = 0.0;
+	  if (src->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (src->Coords, iv, &x, &y, &z);
+	    }
+	  else if (src->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (src->Coords, iv, &x, &y, &m);
+	    }
+	  else if (src->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (src->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (src->Coords, iv, &x, &y);
+	    }
+	  if (dst->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaSetPointXYZ (dst->Coords, iv, x, y, z);
+	    }
+	  else if (dst->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaSetPointXYM (dst->Coords, iv, x, y, m);
+	    }
+	  else if (dst->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaSetPointXYZM (dst->Coords, iv, x, y, z, m);
+	    }
+	  else
+	    {
+		gaiaSetPoint (dst->Coords, iv, x, y);
+	    }
+      }
+}
+
+GAIAGEO_DECLARE gaiaRingPtr
+gaiaCloneRing (gaiaRingPtr ring)
+{
+/* clones a RING */
+    gaiaRingPtr new_ring;
+    if (!ring)
+	return NULL;
+    if (ring->DimensionModel == GAIA_XY_Z)
+	new_ring = gaiaAllocRingXYZ (ring->Points);
+    else if (ring->DimensionModel == GAIA_XY_M)
+	new_ring = gaiaAllocRingXYM (ring->Points);
+    else if (ring->DimensionModel == GAIA_XY_Z_M)
+	new_ring = gaiaAllocRingXYZM (ring->Points);
+    else
+	new_ring = gaiaAllocRing (ring->Points);
+    gaiaCopyRingCoords (new_ring, ring);
+    return new_ring;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaClonePolygon (gaiaPolygonPtr polyg)
+{
+/* clones a POLYGON */
+    int ib;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!polyg)
+	return NULL;
+    i_ring = polyg->Exterior;
+    if (polyg->DimensionModel == GAIA_XY_Z)
+	new_polyg = gaiaAllocPolygonXYZ (i_ring->Points, polyg->NumInteriors);
+    else if (polyg->DimensionModel == GAIA_XY_M)
+	new_polyg = gaiaAllocPolygonXYM (i_ring->Points, polyg->NumInteriors);
+    else if (polyg->DimensionModel == GAIA_XY_Z_M)
+	new_polyg = gaiaAllocPolygonXYZM (i_ring->Points, polyg->NumInteriors);
+    else
+	new_polyg = gaiaAllocPolygon (i_ring->Points, polyg->NumInteriors);
+    o_ring = new_polyg->Exterior;
+/* copying points for the EXTERIOR RING */
+    gaiaCopyRingCoords (o_ring, i_ring);
+    for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+      {
+	  /* copying each INTERIOR RING [if any] */
+	  i_ring = polyg->Interiors + ib;
+	  o_ring = gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+	  gaiaCopyRingCoords (o_ring, i_ring);
+      }
+    return new_polyg;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaAllocPolygon (int vert, int excl)
+{
+/* POLYGON object constructor */
+    gaiaPolygonPtr p;
+    gaiaRingPtr pP;
+    int ind;
+    p = malloc (sizeof (gaiaPolygon));
+    p->Exterior = gaiaAllocRing (vert);
+    p->NumInteriors = excl;
+    p->NextInterior = 0;
+    p->Next = NULL;
+    if (excl == 0)
+	p->Interiors = NULL;
+    else
+	p->Interiors = malloc (sizeof (gaiaRing) * excl);
+    for (ind = 0; ind < p->NumInteriors; ind++)
+      {
+	  pP = p->Interiors + ind;
+	  pP->Points = 0;
+	  pP->Coords = NULL;
+	  pP->Next = NULL;
+	  pP->Link = 0;
+      }
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaAllocPolygonXYZ (int vert, int excl)
+{
+/* POLYGON object constructor */
+    gaiaPolygonPtr p;
+    gaiaRingPtr pP;
+    int ind;
+    p = malloc (sizeof (gaiaPolygon));
+    p->Exterior = gaiaAllocRingXYZ (vert);
+    p->NumInteriors = excl;
+    p->NextInterior = 0;
+    p->Next = NULL;
+    if (excl == 0)
+	p->Interiors = NULL;
+    else
+	p->Interiors = malloc (sizeof (gaiaRing) * excl);
+    for (ind = 0; ind < p->NumInteriors; ind++)
+      {
+	  pP = p->Interiors + ind;
+	  pP->Points = 0;
+	  pP->Coords = NULL;
+	  pP->Next = NULL;
+	  pP->Link = 0;
+      }
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaAllocPolygonXYM (int vert, int excl)
+{
+/* POLYGON object constructor */
+    gaiaPolygonPtr p;
+    gaiaRingPtr pP;
+    int ind;
+    p = malloc (sizeof (gaiaPolygon));
+    p->Exterior = gaiaAllocRingXYM (vert);
+    p->NumInteriors = excl;
+    p->NextInterior = 0;
+    p->Next = NULL;
+    if (excl == 0)
+	p->Interiors = NULL;
+    else
+	p->Interiors = malloc (sizeof (gaiaRing) * excl);
+    for (ind = 0; ind < p->NumInteriors; ind++)
+      {
+	  pP = p->Interiors + ind;
+	  pP->Points = 0;
+	  pP->Coords = NULL;
+	  pP->Next = NULL;
+	  pP->Link = 0;
+      }
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_M;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaAllocPolygonXYZM (int vert, int excl)
+{
+/* POLYGON object constructor */
+    gaiaPolygonPtr p;
+    gaiaRingPtr pP;
+    int ind;
+    p = malloc (sizeof (gaiaPolygon));
+    p->Exterior = gaiaAllocRingXYZM (vert);
+    p->NumInteriors = excl;
+    p->NextInterior = 0;
+    p->Next = NULL;
+    if (excl == 0)
+	p->Interiors = NULL;
+    else
+	p->Interiors = malloc (sizeof (gaiaRing) * excl);
+    for (ind = 0; ind < p->NumInteriors; ind++)
+      {
+	  pP = p->Interiors + ind;
+	  pP->Points = 0;
+	  pP->Coords = NULL;
+	  pP->Next = NULL;
+	  pP->Link = 0;
+      }
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z_M;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaCreatePolygon (gaiaRingPtr ring)
+{
+/* POLYGON object constructor */
+    gaiaPolygonPtr p;
+    p = malloc (sizeof (gaiaPolygon));
+    p->DimensionModel = ring->DimensionModel;
+    if (ring->DimensionModel == GAIA_XY_Z)
+	p->Exterior = gaiaAllocRingXYZ (ring->Points);
+    else if (ring->DimensionModel == GAIA_XY_M)
+	p->Exterior = gaiaAllocRingXYM (ring->Points);
+    else if (ring->DimensionModel == GAIA_XY_Z_M)
+	p->Exterior = gaiaAllocRingXYZM (ring->Points);
+    else
+	p->Exterior = gaiaAllocRing (ring->Points);
+    p->NumInteriors = 0;
+    p->NextInterior = 0;
+    p->Next = NULL;
+    p->Interiors = NULL;
+    gaiaCopyRingCoords (p->Exterior, ring);
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreePolygon (gaiaPolygonPtr p)
+{
+/* POLYGON object destructor */
+    gaiaRingPtr pP;
+    int ind;
+    if (p->Exterior)
+	gaiaFreeRing (p->Exterior);
+    for (ind = 0; ind < p->NumInteriors; ind++)
+      {
+	  pP = p->Interiors + ind;
+	  if (pP->Coords)
+	      free (pP->Coords);
+      }
+    if (p->Interiors)
+	free (p->Interiors);
+    free (p);
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCloneGeomColl (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION */
+    int ib;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr new_line;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr new_polyg;
+    gaiaGeomCollPtr new_geom;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!geom)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	new_geom = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	new_geom = gaiaAllocGeomCollXYM ();
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	new_geom = gaiaAllocGeomCollXYZM ();
+    else
+	new_geom = gaiaAllocGeomColl ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = geom->DeclaredType;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* copying POINTs */
+	  if (geom->DimensionModel == GAIA_XY_Z)
+	      gaiaAddPointToGeomCollXYZ (new_geom, point->X, point->Y,
+					 point->Z);
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      gaiaAddPointToGeomCollXYM (new_geom, point->X, point->Y,
+					 point->M);
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      gaiaAddPointToGeomCollXYZM (new_geom, point->X, point->Y,
+					  point->Z, point->M);
+	  else
+	      gaiaAddPointToGeomColl (new_geom, point->X, point->Y);
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* copying LINESTRINGs */
+	  new_line = gaiaAddLinestringToGeomColl (new_geom, line->Points);
+	  gaiaCopyLinestringCoords (new_line, line);
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* copying POLYGONs */
+	  i_ring = polyg->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (new_geom, i_ring->Points,
+					polyg->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  /* copying points for the EXTERIOR RING */
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+	    {
+		/* copying each INTERIOR RING [if any] */
+		i_ring = polyg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  polyg = polyg->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCloneGeomCollPoints (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION (Points only) */
+    gaiaPointPtr point;
+    gaiaGeomCollPtr new_geom;
+    if (!geom)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	new_geom = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	new_geom = gaiaAllocGeomCollXYM ();
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	new_geom = gaiaAllocGeomCollXYZM ();
+    else
+	new_geom = gaiaAllocGeomColl ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = GAIA_MULTIPOINT;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* copying POINTs */
+	  if (geom->DimensionModel == GAIA_XY_Z)
+	      gaiaAddPointToGeomCollXYZ (new_geom, point->X, point->Y,
+					 point->Z);
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      gaiaAddPointToGeomCollXYM (new_geom, point->X, point->Y,
+					 point->M);
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      gaiaAddPointToGeomCollXYZM (new_geom, point->X, point->Y,
+					  point->Z, point->M);
+	  else
+	      gaiaAddPointToGeomColl (new_geom, point->X, point->Y);
+	  point = point->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCloneGeomCollLinestrings (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION (Linestrings only) */
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr new_geom;
+    if (!geom)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	new_geom = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	new_geom = gaiaAllocGeomCollXYM ();
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	new_geom = gaiaAllocGeomCollXYZM ();
+    else
+	new_geom = gaiaAllocGeomColl ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = GAIA_MULTILINESTRING;
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* copying LINESTRINGs */
+	  new_line = gaiaAddLinestringToGeomColl (new_geom, line->Points);
+	  gaiaCopyLinestringCoords (new_line, line);
+	  line = line->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCloneGeomCollPolygons (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION (Polygons only) */
+    int ib;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr new_polyg;
+    gaiaGeomCollPtr new_geom;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!geom)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	new_geom = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	new_geom = gaiaAllocGeomCollXYM ();
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	new_geom = gaiaAllocGeomCollXYZM ();
+    else
+	new_geom = gaiaAllocGeomColl ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = GAIA_MULTIPOLYGON;
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* copying POLYGONs */
+	  i_ring = polyg->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (new_geom, i_ring->Points,
+					polyg->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  /* copying points for the EXTERIOR RING */
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+	    {
+		/* copying each INTERIOR RING [if any] */
+		i_ring = polyg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  polyg = polyg->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCastGeomCollToXY (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION converting to XY-dimensions */
+    int ib;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr new_line;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr new_polyg;
+    gaiaGeomCollPtr new_geom;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!geom)
+	return NULL;
+    new_geom = gaiaAllocGeomColl ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = geom->DeclaredType;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* copying POINTs */
+	  gaiaAddPointToGeomColl (new_geom, point->X, point->Y);
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* copying LINESTRINGs */
+	  new_line = gaiaAddLinestringToGeomColl (new_geom, line->Points);
+	  gaiaCopyLinestringCoords (new_line, line);
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* copying POLYGONs */
+	  i_ring = polyg->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (new_geom, i_ring->Points,
+					polyg->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  /* copying points for the EXTERIOR RING */
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+	    {
+		/* copying each INTERIOR RING [if any] */
+		i_ring = polyg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  polyg = polyg->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCastGeomCollToXYZ (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION converting to XYZ-dimensions */
+    int ib;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr new_line;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr new_polyg;
+    gaiaGeomCollPtr new_geom;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!geom)
+	return NULL;
+    new_geom = gaiaAllocGeomCollXYZ ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = geom->DeclaredType;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* copying POINTs */
+	  gaiaAddPointToGeomCollXYZ (new_geom, point->X, point->Y, point->Z);
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* copying LINESTRINGs */
+	  new_line = gaiaAddLinestringToGeomColl (new_geom, line->Points);
+	  gaiaCopyLinestringCoords (new_line, line);
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* copying POLYGONs */
+	  i_ring = polyg->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (new_geom, i_ring->Points,
+					polyg->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  /* copying points for the EXTERIOR RING */
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+	    {
+		/* copying each INTERIOR RING [if any] */
+		i_ring = polyg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  polyg = polyg->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCastGeomCollToXYM (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION converting to XYM-dimensions */
+    int ib;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr new_line;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr new_polyg;
+    gaiaGeomCollPtr new_geom;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!geom)
+	return NULL;
+    new_geom = gaiaAllocGeomCollXYM ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = geom->DeclaredType;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* copying POINTs */
+	  gaiaAddPointToGeomCollXYM (new_geom, point->X, point->Y, point->M);
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* copying LINESTRINGs */
+	  new_line = gaiaAddLinestringToGeomColl (new_geom, line->Points);
+	  gaiaCopyLinestringCoords (new_line, line);
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* copying POLYGONs */
+	  i_ring = polyg->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (new_geom, i_ring->Points,
+					polyg->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  /* copying points for the EXTERIOR RING */
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+	    {
+		/* copying each INTERIOR RING [if any] */
+		i_ring = polyg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  polyg = polyg->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaCastGeomCollToXYZM (gaiaGeomCollPtr geom)
+{
+/* clones a GEOMETRYCOLLECTION converting to XYZM-dimensions */
+    int ib;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr new_line;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr new_polyg;
+    gaiaGeomCollPtr new_geom;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    if (!geom)
+	return NULL;
+    new_geom = gaiaAllocGeomCollXYZM ();
+    new_geom->Srid = geom->Srid;
+    new_geom->DeclaredType = geom->DeclaredType;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* copying POINTs */
+	  gaiaAddPointToGeomCollXYZM (new_geom, point->X, point->Y, point->Z,
+				      point->M);
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* copying LINESTRINGs */
+	  new_line = gaiaAddLinestringToGeomColl (new_geom, line->Points);
+	  gaiaCopyLinestringCoords (new_line, line);
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* copying POLYGONs */
+	  i_ring = polyg->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (new_geom, i_ring->Points,
+					polyg->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  /* copying points for the EXTERIOR RING */
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < new_polyg->NumInteriors; ib++)
+	    {
+		/* copying each INTERIOR RING [if any] */
+		i_ring = polyg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (new_polyg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  polyg = polyg->Next;
+      }
+    return new_geom;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaAllocGeomColl ()
+{
+/* GEOMETRYCOLLECTION object constructor */
+    gaiaGeomCollPtr p = malloc (sizeof (gaiaGeomColl));
+    p->Srid = -1;
+    p->endian = ' ';
+    p->offset = 0;
+    p->FirstPoint = NULL;
+    p->LastPoint = NULL;
+    p->FirstLinestring = NULL;
+    p->LastLinestring = NULL;
+    p->FirstPolygon = NULL;
+    p->LastPolygon = NULL;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY;
+    p->DeclaredType = GAIA_UNKNOWN;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaAllocGeomCollXYZ ()
+{
+/* GEOMETRYCOLLECTION object constructor */
+    gaiaGeomCollPtr p = malloc (sizeof (gaiaGeomColl));
+    p->Srid = -1;
+    p->endian = ' ';
+    p->offset = 0;
+    p->FirstPoint = NULL;
+    p->LastPoint = NULL;
+    p->FirstLinestring = NULL;
+    p->LastLinestring = NULL;
+    p->FirstPolygon = NULL;
+    p->LastPolygon = NULL;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z;
+    p->DeclaredType = GAIA_UNKNOWN;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaAllocGeomCollXYM ()
+{
+/* GEOMETRYCOLLECTION object constructor */
+    gaiaGeomCollPtr p = malloc (sizeof (gaiaGeomColl));
+    p->Srid = -1;
+    p->endian = ' ';
+    p->offset = 0;
+    p->FirstPoint = NULL;
+    p->LastPoint = NULL;
+    p->FirstLinestring = NULL;
+    p->LastLinestring = NULL;
+    p->FirstPolygon = NULL;
+    p->LastPolygon = NULL;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_M;
+    p->DeclaredType = GAIA_UNKNOWN;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaAllocGeomCollXYZM ()
+{
+/* GEOMETRYCOLLECTION object constructor */
+    gaiaGeomCollPtr p = malloc (sizeof (gaiaGeomColl));
+    p->Srid = -1;
+    p->endian = ' ';
+    p->offset = 0;
+    p->FirstPoint = NULL;
+    p->LastPoint = NULL;
+    p->FirstLinestring = NULL;
+    p->LastLinestring = NULL;
+    p->FirstPolygon = NULL;
+    p->LastPolygon = NULL;
+    p->MinX = DBL_MAX;
+    p->MinY = DBL_MAX;
+    p->MaxX = -DBL_MAX;
+    p->MaxY = -DBL_MAX;
+    p->DimensionModel = GAIA_XY_Z_M;
+    p->DeclaredType = GAIA_UNKNOWN;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeGeomColl (gaiaGeomCollPtr p)
+{
+/* GEOMETRYCOLLECTION object destructor */
+    gaiaPointPtr pP;
+    gaiaPointPtr pPn;
+    gaiaLinestringPtr pL;
+    gaiaLinestringPtr pLn;
+    gaiaPolygonPtr pA;
+    gaiaPolygonPtr pAn;
+    if (!p)
+	return;
+    pP = p->FirstPoint;
+    while (pP != NULL)
+      {
+	  pPn = pP->Next;
+	  gaiaFreePoint (pP);
+	  pP = pPn;
+      }
+    pL = p->FirstLinestring;
+    while (pL != NULL)
+      {
+	  pLn = pL->Next;
+	  gaiaFreeLinestring (pL);
+	  pL = pLn;
+      }
+    pA = p->FirstPolygon;
+    while (pA != NULL)
+      {
+	  pAn = pA->Next;
+	  gaiaFreePolygon (pA);
+	  pA = pAn;
+      }
+    free (p);
+}
+
+GAIAGEO_DECLARE void
+gaiaAddPointToGeomColl (gaiaGeomCollPtr p, double x, double y)
+{
+/* adding a POINT to this GEOMETRYCOLLECTION */
+    gaiaPointPtr point = gaiaAllocPoint (x, y);
+    if (p->FirstPoint == NULL)
+	p->FirstPoint = point;
+    if (p->LastPoint != NULL)
+	p->LastPoint->Next = point;
+    p->LastPoint = point;
+}
+
+GAIAGEO_DECLARE void
+gaiaAddPointToGeomCollXYZ (gaiaGeomCollPtr p, double x, double y, double z)
+{
+/* adding a POINT to this GEOMETRYCOLLECTION */
+    gaiaPointPtr point = gaiaAllocPointXYZ (x, y, z);
+    if (p->FirstPoint == NULL)
+	p->FirstPoint = point;
+    if (p->LastPoint != NULL)
+	p->LastPoint->Next = point;
+    p->LastPoint = point;
+}
+
+GAIAGEO_DECLARE void
+gaiaAddPointToGeomCollXYM (gaiaGeomCollPtr p, double x, double y, double m)
+{
+/* adding a POINT to this GEOMETRYCOLLECTION */
+    gaiaPointPtr point = gaiaAllocPointXYM (x, y, m);
+    if (p->FirstPoint == NULL)
+	p->FirstPoint = point;
+    if (p->LastPoint != NULL)
+	p->LastPoint->Next = point;
+    p->LastPoint = point;
+}
+
+GAIAGEO_DECLARE void
+gaiaAddPointToGeomCollXYZM (gaiaGeomCollPtr p, double x, double y, double z,
+			    double m)
+{
+/* adding a POINT to this GEOMETRYCOLLECTION */
+    gaiaPointPtr point = gaiaAllocPointXYZM (x, y, z, m);
+    if (p->FirstPoint == NULL)
+	p->FirstPoint = point;
+    if (p->LastPoint != NULL)
+	p->LastPoint->Next = point;
+    p->LastPoint = point;
+}
+
+GAIAGEO_DECLARE gaiaLinestringPtr
+gaiaAddLinestringToGeomColl (gaiaGeomCollPtr p, int vert)
+{
+/* adding a LINESTRING to this GEOMETRYCOLLECTION */
+    gaiaLinestringPtr line;
+    if (p->DimensionModel == GAIA_XY_Z)
+	line = gaiaAllocLinestringXYZ (vert);
+    else if (p->DimensionModel == GAIA_XY_M)
+	line = gaiaAllocLinestringXYM (vert);
+    else if (p->DimensionModel == GAIA_XY_Z_M)
+	line = gaiaAllocLinestringXYZM (vert);
+    else
+	line = gaiaAllocLinestring (vert);
+    if (p->FirstLinestring == NULL)
+	p->FirstLinestring = line;
+    if (p->LastLinestring != NULL)
+	p->LastLinestring->Next = line;
+    p->LastLinestring = line;
+    return line;
+}
+
+GAIAGEO_DECLARE void
+gaiaInsertLinestringInGeomColl (gaiaGeomCollPtr p, gaiaLinestringPtr line)
+{
+/* adding an existing LINESTRING to this GEOMETRYCOLLECTION */
+    if (p->FirstLinestring == NULL)
+	p->FirstLinestring = line;
+    if (p->LastLinestring != NULL)
+	p->LastLinestring->Next = line;
+    p->LastLinestring = line;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaAddPolygonToGeomColl (gaiaGeomCollPtr p, int vert, int interiors)
+{
+/* adding a POLYGON to this GEOMETRYCOLLECTION */
+    gaiaPolygonPtr polyg;
+    if (p->DimensionModel == GAIA_XY_Z)
+	polyg = gaiaAllocPolygonXYZ (vert, interiors);
+    else if (p->DimensionModel == GAIA_XY_M)
+	polyg = gaiaAllocPolygonXYM (vert, interiors);
+    else if (p->DimensionModel == GAIA_XY_Z_M)
+	polyg = gaiaAllocPolygonXYZM (vert, interiors);
+    else
+	polyg = gaiaAllocPolygon (vert, interiors);
+    if (p->FirstPolygon == NULL)
+	p->FirstPolygon = polyg;
+    if (p->LastPolygon != NULL)
+	p->LastPolygon->Next = polyg;
+    p->LastPolygon = polyg;
+    return polyg;
+}
+
+GAIAGEO_DECLARE gaiaPolygonPtr
+gaiaInsertPolygonInGeomColl (gaiaGeomCollPtr p, gaiaRingPtr ring)
+{
+/* adding a POLYGON to this GEOMETRYCOLLECTION */
+    gaiaPolygonPtr polyg;
+    polyg = malloc (sizeof (gaiaPolygon));
+    polyg->Exterior = ring;
+    polyg->NumInteriors = 0;
+    polyg->NextInterior = 0;
+    polyg->DimensionModel = ring->DimensionModel;
+    polyg->Next = NULL;
+    polyg->Interiors = NULL;
+    polyg->MinX = DBL_MAX;
+    polyg->MinY = DBL_MAX;
+    polyg->MaxX = -DBL_MAX;
+    polyg->MaxY = -DBL_MAX;
+    if (p->FirstPolygon == NULL)
+	p->FirstPolygon = polyg;
+    if (p->LastPolygon != NULL)
+	p->LastPolygon->Next = polyg;
+    p->LastPolygon = polyg;
+    return polyg;
+}
+
+GAIAGEO_DECLARE gaiaRingPtr
+gaiaAddInteriorRing (gaiaPolygonPtr p, int pos, int vert)
+{
+/* adding an interior ring to some polygon */
+    gaiaRingPtr pP = p->Interiors + pos;
+    pP->Points = vert;
+    pP->DimensionModel = p->DimensionModel;
+    if (pP->DimensionModel == GAIA_XY_Z)
+	pP->Coords = malloc (sizeof (double) * (vert * 3));
+    else if (pP->DimensionModel == GAIA_XY_M)
+	pP->Coords = malloc (sizeof (double) * (vert * 3));
+    else if (pP->DimensionModel == GAIA_XY_Z_M)
+	pP->Coords = malloc (sizeof (double) * (vert * 4));
+    else
+	pP->Coords = malloc (sizeof (double) * (vert * 2));
+    return pP;
+}
+
+GAIAGEO_DECLARE void
+gaiaInsertInteriorRing (gaiaPolygonPtr p, gaiaRingPtr ring)
+{
+/* adding an interior ring to some polygon */
+    gaiaRingPtr hole;
+    if (p->NumInteriors == 0)
+      {
+	  /* this one is the first interior ring */
+	  p->NumInteriors++;
+	  p->Interiors = malloc (sizeof (gaiaRing));
+	  hole = p->Interiors;
+      }
+    else
+      {
+	  /* some interior ring is already defined */
+	  gaiaRingPtr save = p->Interiors;
+	  p->Interiors = malloc (sizeof (gaiaRing) * (p->NumInteriors + 1));
+	  memcpy (p->Interiors, save, (sizeof (gaiaRing) * p->NumInteriors));
+	  free (save);
+	  hole = p->Interiors + p->NumInteriors;
+	  p->NumInteriors++;
+      }
+    hole->Points = ring->Points;
+    hole->DimensionModel = p->DimensionModel;
+    if (hole->DimensionModel == GAIA_XY_Z)
+	hole->Coords = malloc (sizeof (double) * (hole->Points * 3));
+    else if (hole->DimensionModel == GAIA_XY_M)
+	hole->Coords = malloc (sizeof (double) * (hole->Points * 3));
+    else if (hole->DimensionModel == GAIA_XY_Z_M)
+	hole->Coords = malloc (sizeof (double) * (hole->Points * 4));
+    else
+	hole->Coords = malloc (sizeof (double) * (hole->Points * 2));
+    gaiaCopyRingCoords (hole, ring);
+}
+
+GAIAGEO_DECLARE void
+gaiaAddRingToPolyg (gaiaPolygonPtr polyg, gaiaRingPtr ring)
+{
+/* adds an interior ring to this POLYGON  */
+    gaiaRingPtr old_interiors = NULL;
+    if (!(polyg->Interiors))
+      {
+	  /* this one is the first interior ring */
+	  polyg->Interiors = ring;
+	  polyg->NumInteriors = 1;
+      }
+    else
+      {
+	  /* adding another interior ring */
+	  old_interiors = polyg->Interiors;
+	  polyg->Interiors =
+	      malloc (sizeof (gaiaRing) * (polyg->NumInteriors + 1));
+	  memcpy (polyg->Interiors, old_interiors,
+		  (sizeof (gaiaRing) * polyg->NumInteriors));
+	  memcpy (polyg->Interiors + polyg->NumInteriors, ring,
+		  sizeof (gaiaRing));
+	  (polyg->NumInteriors)++;
+	  free (old_interiors);
+	  free (ring);
+      }
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaAllocDynamicLine ()
+{
+/* DYNAMIC LINE object constructor */
+    gaiaDynamicLinePtr p = malloc (sizeof (gaiaDynamicLine));
+    p->Error = 0;
+    p->Srid = -1;
+    p->First = NULL;
+    p->Last = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeDynamicLine (gaiaDynamicLinePtr p)
+{
+/* DYNAMIC LINE object destructor */
+    gaiaPointPtr pP;
+    gaiaPointPtr pPn;
+    pP = p->First;
+    while (pP != NULL)
+      {
+	  pPn = pP->Next;
+	  gaiaFreePoint (pP);
+	  pP = pPn;
+      }
+    free (p);
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAppendPointToDynamicLine (gaiaDynamicLinePtr p, double x, double y)
+{
+/* inserts a new POINT to this DYNAMIC LINE after the last one */
+    gaiaPointPtr point = gaiaAllocPoint (x, y);
+    point->Prev = p->Last;
+    if (p->First == NULL)
+	p->First = point;
+    if (p->Last != NULL)
+	p->Last->Next = point;
+    p->Last = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAppendPointZToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+			       double z)
+{
+/* inserts a new POINT to this DYNAMIC LINE after the last one */
+    gaiaPointPtr point = gaiaAllocPointXYZ (x, y, z);
+    point->Prev = p->Last;
+    if (p->First == NULL)
+	p->First = point;
+    if (p->Last != NULL)
+	p->Last->Next = point;
+    p->Last = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAppendPointMToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+			       double m)
+{
+/* inserts a new POINT to this DYNAMIC LINE after the last one */
+    gaiaPointPtr point = gaiaAllocPointXYM (x, y, m);
+    point->Prev = p->Last;
+    if (p->First == NULL)
+	p->First = point;
+    if (p->Last != NULL)
+	p->Last->Next = point;
+    p->Last = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaAppendPointZMToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				double z, double m)
+{
+/* inserts a new POINT to this DYNAMIC LINE after the last one */
+    gaiaPointPtr point = gaiaAllocPointXYZM (x, y, z, m);
+    point->Prev = p->Last;
+    if (p->First == NULL)
+	p->First = point;
+    if (p->Last != NULL)
+	p->Last->Next = point;
+    p->Last = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaPrependPointToDynamicLine (gaiaDynamicLinePtr p, double x, double y)
+{
+/* inserts a new POINT to this DYNAMIC LINE before the first one */
+    gaiaPointPtr point = gaiaAllocPoint (x, y);
+    point->Next = p->First;
+    if (p->Last == NULL)
+	p->Last = point;
+    if (p->First != NULL)
+	p->First->Prev = point;
+    p->First = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaPrependPointZToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				double z)
+{
+/* inserts a new POINT to this DYNAMIC LINE before the first one */
+    gaiaPointPtr point = gaiaAllocPointXYZ (x, y, z);
+    point->Next = p->First;
+    if (p->Last == NULL)
+	p->Last = point;
+    if (p->First != NULL)
+	p->First->Prev = point;
+    p->First = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaPrependPointMToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				double m)
+{
+/* inserts a new POINT to this DYNAMIC LINE before the first one */
+    gaiaPointPtr point = gaiaAllocPointXYM (x, y, m);
+    point->Next = p->First;
+    if (p->Last == NULL)
+	p->Last = point;
+    if (p->First != NULL)
+	p->First->Prev = point;
+    p->First = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaPrependPointZMToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				 double z, double m)
+{
+/* inserts a new POINT to this DYNAMIC LINE before the first one */
+    gaiaPointPtr point = gaiaAllocPointXYZM (x, y, z, m);
+    point->Next = p->First;
+    if (p->Last == NULL)
+	p->Last = point;
+    if (p->First != NULL)
+	p->First->Prev = point;
+    p->First = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaDynamicLineInsertAfter (gaiaDynamicLinePtr p, gaiaPointPtr pt, double x,
+			    double y)
+{
+/* inserts a new POINT to this DYNAMIC LINE after the referenced POINT */
+    gaiaPointPtr point = gaiaAllocPoint (x, y);
+    point->Prev = pt;
+    point->Next = pt->Next;
+    if (pt->Next)
+	pt->Next->Prev = point;
+    pt->Next = point;
+    if (pt == p->Last)
+	p->Last = point;
+    return point;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaDynamicLineInsertBefore (gaiaDynamicLinePtr p, gaiaPointPtr pt, double x,
+			     double y)
+{
+/* inserts a new POINT to this DYNAMIC LINE before the referenced POINT */
+    gaiaPointPtr point = gaiaAllocPoint (x, y);
+    point->Next = pt;
+    point->Prev = pt->Prev;
+    if (pt->Prev)
+	pt->Prev->Next = point;
+    pt->Prev = point;
+    if (pt == p->First)
+	p->First = point;
+    return point;
+}
+
+GAIAGEO_DECLARE void
+gaiaDynamicLineDeletePoint (gaiaDynamicLinePtr p, gaiaPointPtr pt)
+{
+/* deletes a POINT from this DYNAMIC LINE */
+    if (pt->Prev)
+	pt->Prev->Next = pt->Next;
+    if (pt->Next)
+	pt->Next->Prev = pt->Prev;
+    if (pt == p->First)
+	p->First = pt->Next;
+    if (pt == p->Last)
+	p->Last = pt->Prev;
+    gaiaFreePoint (pt);
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaCloneDynamicLine (gaiaDynamicLinePtr org)
+{
+/* creates a new line obtained by simply copying the current one */
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr dst = gaiaAllocDynamicLine ();
+    pt = org->First;
+    while (pt)
+      {
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    return dst;
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaReverseDynamicLine (gaiaDynamicLinePtr org)
+{
+/* creates a new line obtained by inverting the current one */
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr dst = gaiaAllocDynamicLine ();
+    pt = org->Last;
+    while (pt)
+      {
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  pt = pt->Prev;
+      }
+    return dst;
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaDynamicLineSplitBefore (gaiaDynamicLinePtr org, gaiaPointPtr point)
+{
+/* creates a new line obtained by cutting the current one in two */
+    gaiaDynamicLinePtr dst = gaiaAllocDynamicLine ();
+    dst->First = org->First;
+    dst->Last = point->Prev;
+    point->Prev->Next = NULL;
+    org->First = point;
+    point->Prev = NULL;
+    return dst;
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaDynamicLineSplitAfter (gaiaDynamicLinePtr org, gaiaPointPtr point)
+{
+/* creates a new line obtained by cutting the current one in two */
+    gaiaDynamicLinePtr dst = gaiaAllocDynamicLine ();
+    dst->First = point->Next;
+    dst->Last = org->Last;
+    point->Next->Prev = NULL;
+    org->Last = point;
+    point->Next = NULL;
+    return dst;
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaDynamicLineJoinAfter (gaiaDynamicLinePtr org, gaiaPointPtr point,
+			  gaiaDynamicLinePtr toJoin)
+{
+/* creates a new line obtained by joining the current one with another one */
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr dst = gaiaAllocDynamicLine ();
+    pt = org->First;
+    while (pt)
+      {
+	  /* inserting the first slice since the delimiting POINT included */
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  if (pt == point)
+	      break;
+	  pt = pt->Next;
+      }
+    pt = toJoin->First;
+    while (pt)
+      {
+	  /* inserting the other line */
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    pt = point->Next;
+    while (pt)
+      {
+	  /* inserting the second slice after the delimiting POINT */
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    return dst;
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaDynamicLineJoinBefore (gaiaDynamicLinePtr org, gaiaPointPtr point,
+			   gaiaDynamicLinePtr toJoin)
+{
+/* creates a new line obtained by joining the current one with another one */
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr dst = gaiaAllocDynamicLine ();
+    pt = org->First;
+    while (pt)
+      {
+	  /* inserting the first slice since the delimiting POINT excluded */
+	  if (pt == point)
+	      break;
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    pt = toJoin->First;
+    while (pt)
+      {
+	  /* inserting the other line */
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    pt = point;
+    while (pt)
+      {
+	  /* inserting the second slice beginning from the delimiting POINT */
+	  gaiaAppendPointToDynamicLine (dst, pt->X, pt->Y);
+	  pt = pt->Next;
+      }
+    return dst;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaDynamicLineFindByCoords (gaiaDynamicLinePtr p, double x, double y)
+{
+/* finds a POINT inside this DYNAMIC LINE */
+    gaiaPointPtr pP;
+    pP = p->First;
+    while (pP != NULL)
+      {
+	  if (pP->X == x && pP->Y == y)
+	      return pP;
+	  pP = pP->Next;
+      }
+    return NULL;
+}
+
+GAIAGEO_DECLARE gaiaPointPtr
+gaiaDynamicLineFindByPos (gaiaDynamicLinePtr p, int pos)
+{
+/* finds a POINT inside this DYNAMIC LINE */
+    int n = 0;
+    gaiaPointPtr pP;
+    pP = p->First;
+    while (pP != NULL)
+      {
+	  if (pos == n)
+	      return pP;
+	  n++;
+	  pP = pP->Next;
+      }
+    return NULL;
+}
+
+GAIAGEO_DECLARE gaiaDynamicLinePtr
+gaiaCreateDynamicLine (double *coords, int points)
+{
+/* creates a DynamicLine from an array of coordinates */
+    int iv;
+    double x;
+    double y;
+    gaiaDynamicLinePtr line = gaiaAllocDynamicLine ();
+    for (iv = 0; iv < points; iv++)
+      {
+	  gaiaGetPoint (coords, iv, &x, &y);
+	  gaiaAppendPointToDynamicLine (line, x, y);
+      }
+    return line;
+}
+
+GAIAGEO_DECLARE void
+gaiaMbrLinestring (gaiaLinestringPtr line)
+{
+/* computes the MBR for this linestring */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    line->MinX = DBL_MAX;
+    line->MinY = DBL_MAX;
+    line->MaxX = -DBL_MAX;
+    line->MaxY = -DBL_MAX;
+    for (iv = 0; iv < line->Points; iv++)
+      {
+	  if (line->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (line->Coords, iv, &x, &y);
+	    }
+	  if (x < line->MinX)
+	      line->MinX = x;
+	  if (y < line->MinY)
+	      line->MinY = y;
+	  if (x > line->MaxX)
+	      line->MaxX = x;
+	  if (y > line->MaxY)
+	      line->MaxY = y;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaMbrRing (gaiaRingPtr rng)
+{
+/* computes the MBR for this ring */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    rng->MinX = DBL_MAX;
+    rng->MinY = DBL_MAX;
+    rng->MaxX = -DBL_MAX;
+    rng->MaxY = -DBL_MAX;
+    for (iv = 0; iv < rng->Points; iv++)
+      {
+	  if (rng->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+	    }
+	  else if (rng->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+	    }
+	  else if (rng->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (rng->Coords, iv, &x, &y);
+	    }
+	  if (x < rng->MinX)
+	      rng->MinX = x;
+	  if (y < rng->MinY)
+	      rng->MinY = y;
+	  if (x > rng->MaxX)
+	      rng->MaxX = x;
+	  if (y > rng->MaxY)
+	      rng->MaxY = y;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaMbrPolygon (gaiaPolygonPtr polyg)
+{
+/* computes the MBR for this polygon */
+    gaiaRingPtr rng;
+    polyg->MinX = DBL_MAX;
+    polyg->MinY = DBL_MAX;
+    polyg->MaxX = -DBL_MAX;
+    polyg->MaxY = -DBL_MAX;
+    rng = polyg->Exterior;
+    gaiaMbrRing (rng);
+    if (rng->MinX < polyg->MinX)
+	polyg->MinX = rng->MinX;
+    if (rng->MinY < polyg->MinY)
+	polyg->MinY = rng->MinY;
+    if (rng->MaxX > polyg->MaxX)
+	polyg->MaxX = rng->MaxX;
+    if (rng->MaxY > polyg->MaxY)
+	polyg->MaxY = rng->MaxY;
+}
+
+GAIAGEO_DECLARE void
+gaiaMbrGeometry (gaiaGeomCollPtr geom)
+{
+/* computes the MBR for this geometry */
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    geom->MinX = DBL_MAX;
+    geom->MinY = DBL_MAX;
+    geom->MaxX = -DBL_MAX;
+    geom->MaxY = -DBL_MAX;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  if (point->X < geom->MinX)
+	      geom->MinX = point->X;
+	  if (point->Y < geom->MinY)
+	      geom->MinY = point->Y;
+	  if (point->X > geom->MaxX)
+	      geom->MaxX = point->X;
+	  if (point->Y > geom->MaxY)
+	      geom->MaxY = point->Y;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  gaiaMbrLinestring (line);
+	  if (line->MinX < geom->MinX)
+	      geom->MinX = line->MinX;
+	  if (line->MinY < geom->MinY)
+	      geom->MinY = line->MinY;
+	  if (line->MaxX > geom->MaxX)
+	      geom->MaxX = line->MaxX;
+	  if (line->MaxY > geom->MaxY)
+	      geom->MaxY = line->MaxY;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  gaiaMbrPolygon (polyg);
+	  if (polyg->MinX < geom->MinX)
+	      geom->MinX = polyg->MinX;
+	  if (polyg->MinY < geom->MinY)
+	      geom->MinY = polyg->MinY;
+	  if (polyg->MaxX > geom->MaxX)
+	      geom->MaxX = polyg->MaxX;
+	  if (polyg->MaxY > geom->MaxY)
+	      geom->MaxY = polyg->MaxY;
+	  polyg = polyg->Next;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaMRangeLinestring (gaiaLinestringPtr line, double *min, double *max)
+{
+/* computes the M-range [min/max] for this linestring */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    for (iv = 0; iv < line->Points; iv++)
+      {
+	  m = 0.0;
+	  if (line->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (line->Coords, iv, &x, &y);
+	    }
+	  if (m < *min)
+	      *min = m;
+	  if (m > *max)
+	      *max = m;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaMRangeRing (gaiaRingPtr rng, double *min, double *max)
+{
+/* computes the M-range [min/max] for this ring */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    for (iv = 0; iv < rng->Points; iv++)
+      {
+	  m = 0.0;
+	  if (rng->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+	    }
+	  else if (rng->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+	    }
+	  else if (rng->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (rng->Coords, iv, &x, &y);
+	    }
+	  if (m < *min)
+	      *min = m;
+	  if (m > *max)
+	      *max = m;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaMRangePolygon (gaiaPolygonPtr polyg, double *min, double *max)
+{
+/* computes the M-range [min/max] for this polygon */
+    gaiaRingPtr rng;
+    int ib;
+    double r_min;
+    double r_max;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    rng = polyg->Exterior;
+    gaiaMRangeRing (rng, &r_min, &r_max);
+    if (r_min < *min)
+	*min = r_min;
+    if (r_max > *max)
+	*max = r_max;
+    for (ib = 0; ib < polyg->NumInteriors; ib++)
+      {
+	  rng = polyg->Interiors + ib;
+	  gaiaMRangeRing (rng, &r_min, &r_max);
+	  if (r_min < *min)
+	      *min = r_min;
+	  if (r_max > *max)
+	      *max = r_max;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaMRangeGeometry (gaiaGeomCollPtr geom, double *min, double *max)
+{
+/* computes the M-range [min/max] for this geometry */
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    double m;
+    double r_min;
+    double r_max;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  m = 0.0;
+	  if (point->DimensionModel == GAIA_XY_M
+	      || point->DimensionModel == GAIA_XY_Z_M)
+	      m = point->M;
+	  if (m < *min)
+	      *min = m;
+	  if (m > *max)
+	      *max = m;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  gaiaMRangeLinestring (line, &r_min, &r_max);
+	  if (r_min < *min)
+	      *min = r_min;
+	  if (r_max > *max)
+	      *max = r_max;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  gaiaMRangePolygon (polyg, &r_min, &r_max);
+	  if (r_min < *min)
+	      *min = r_min;
+	  if (r_max > *max)
+	      *max = r_max;
+	  polyg = polyg->Next;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaZRangeLinestring (gaiaLinestringPtr line, double *min, double *max)
+{
+/* computes the Z-range [min/max] for this linestring */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    for (iv = 0; iv < line->Points; iv++)
+      {
+	  z = 0.0;
+	  m = 0.0;
+	  if (line->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (line->Coords, iv, &x, &y);
+	    }
+	  if (z < *min)
+	      *min = z;
+	  if (z > *max)
+	      *max = z;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaZRangeRing (gaiaRingPtr rng, double *min, double *max)
+{
+/* computes the Z-range [min/max] for this ring */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    for (iv = 0; iv < rng->Points; iv++)
+      {
+	  z = 0.0;
+	  m = 0.0;
+	  if (rng->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+	    }
+	  else if (rng->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+	    }
+	  else if (rng->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (rng->Coords, iv, &x, &y);
+	    }
+	  if (m < *min)
+	      *min = m;
+	  if (m > *max)
+	      *max = m;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaZRangePolygon (gaiaPolygonPtr polyg, double *min, double *max)
+{
+/* computes the Z-range [min/max] for this polygon */
+    gaiaRingPtr rng;
+    int ib;
+    double r_min;
+    double r_max;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    rng = polyg->Exterior;
+    gaiaZRangeRing (rng, &r_min, &r_max);
+    if (r_min < *min)
+	*min = r_min;
+    if (r_max > *max)
+	*max = r_max;
+    for (ib = 0; ib < polyg->NumInteriors; ib++)
+      {
+	  rng = polyg->Interiors + ib;
+	  gaiaZRangeRing (rng, &r_min, &r_max);
+	  if (r_min < *min)
+	      *min = r_min;
+	  if (r_max > *max)
+	      *max = r_max;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaZRangeGeometry (gaiaGeomCollPtr geom, double *min, double *max)
+{
+/* computes the Z-range [min/max] for this geometry */
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    double z;
+    double r_min;
+    double r_max;
+    *min = DBL_MAX;
+    *max = -DBL_MAX;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  z = 0.0;
+	  if (point->DimensionModel == GAIA_XY_Z
+	      || point->DimensionModel == GAIA_XY_Z_M)
+	      z = point->Z;
+	  if (z < *min)
+	      *min = z;
+	  if (z > *max)
+	      *max = z;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  gaiaZRangeLinestring (line, &r_min, &r_max);
+	  if (r_min < *min)
+	      *min = r_min;
+	  if (r_max > *max)
+	      *max = r_max;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  gaiaZRangePolygon (polyg, &r_min, &r_max);
+	  if (r_min < *min)
+	      *min = r_min;
+	  if (r_max > *max)
+	      *max = r_max;
+	  polyg = polyg->Next;
+      }
+}
+
+GAIAGEO_DECLARE int
+gaiaDimension (gaiaGeomCollPtr geom)
+{
+/* determines the Dimension for this geometry */
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    if (!geom)
+	return -1;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* counts how many points are there */
+	  n_points++;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* counts how many linestrings are there */
+	  n_linestrings++;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* counts how many polygons are there */
+	  n_polygons++;
+	  polyg = polyg->Next;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons == 0)
+	return -1;
+    if (n_points > 0 && n_linestrings == 0 && n_polygons == 0)
+	return 0;
+    if (n_linestrings > 0 && n_polygons == 0)
+	return 1;
+    return 2;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeometryType (gaiaGeomCollPtr geom)
+{
+/* determines the Class for this geometry */
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    int ib;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    int dm = GAIA_XY;
+    if (!geom)
+	return GAIA_UNKNOWN;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* counts how many points are there */
+	  n_points++;
+	  if (point->DimensionModel == GAIA_XY_Z)
+	    {
+		if (dm == GAIA_XY)
+		    dm = GAIA_XY_Z;
+		else if (dm == GAIA_XY_M)
+		    dm = GAIA_XY_Z_M;
+	    }
+	  else if (point->DimensionModel == GAIA_XY_M)
+	    {
+		if (dm == GAIA_XY)
+		    dm = GAIA_XY_M;
+		else if (dm == GAIA_XY_Z)
+		    dm = GAIA_XY_Z_M;
+	    }
+	  else if (point->DimensionModel == GAIA_XY_Z_M)
+	      dm = GAIA_XY_Z_M;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* counts how many linestrings are there */
+	  n_linestrings++;
+	  if (line->DimensionModel == GAIA_XY_Z)
+	    {
+		if (dm == GAIA_XY)
+		    dm = GAIA_XY_Z;
+		else if (dm == GAIA_XY_M)
+		    dm = GAIA_XY_Z_M;
+	    }
+	  else if (line->DimensionModel == GAIA_XY_M)
+	    {
+		if (dm == GAIA_XY)
+		    dm = GAIA_XY_M;
+		else if (dm == GAIA_XY_Z)
+		    dm = GAIA_XY_Z_M;
+	    }
+	  else if (line->DimensionModel == GAIA_XY_Z_M)
+	      dm = GAIA_XY_Z_M;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* counts how many polygons are there */
+	  n_polygons++;
+	  ring = polyg->Exterior;
+	  if (ring->DimensionModel == GAIA_XY_Z)
+	    {
+		if (dm == GAIA_XY)
+		    dm = GAIA_XY_Z;
+		else if (dm == GAIA_XY_M)
+		    dm = GAIA_XY_Z_M;
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_M)
+	    {
+		if (dm == GAIA_XY)
+		    dm = GAIA_XY_M;
+		else if (dm == GAIA_XY_Z)
+		    dm = GAIA_XY_Z_M;
+	    }
+	  else if (ring->DimensionModel == GAIA_XY_Z_M)
+	      dm = GAIA_XY_Z_M;
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		ring = polyg->Interiors + ib;
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      if (dm == GAIA_XY)
+			  dm = GAIA_XY_Z;
+		      else if (dm == GAIA_XY_M)
+			  dm = GAIA_XY_Z_M;
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      if (dm == GAIA_XY)
+			  dm = GAIA_XY_M;
+		      else if (dm == GAIA_XY_Z)
+			  dm = GAIA_XY_Z_M;
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		    dm = GAIA_XY_Z_M;
+	    }
+	  polyg = polyg->Next;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons == 0)
+	return GAIA_UNKNOWN;
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_MULTIPOINTZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_MULTIPOINTM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_MULTIPOINTZM;
+		else
+		    return GAIA_MULTIPOINT;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_GEOMETRYCOLLECTIONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_GEOMETRYCOLLECTIONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    return GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_POINTZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_POINTM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_POINTZM;
+		else
+		    return GAIA_POINT;
+	    }
+      }
+    if (n_points > 0 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_GEOMETRYCOLLECTIONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_GEOMETRYCOLLECTIONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    return GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_MULTIPOINTZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_MULTIPOINTM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_MULTIPOINTZM;
+		else
+		    return GAIA_MULTIPOINT;
+	    }
+      }
+    if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_MULTILINESTRINGZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_MULTILINESTRINGM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_MULTILINESTRINGZM;
+		else
+		    return GAIA_MULTILINESTRING;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_GEOMETRYCOLLECTIONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_GEOMETRYCOLLECTIONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    return GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_LINESTRINGZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_LINESTRINGM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_LINESTRINGZM;
+		else
+		    return GAIA_LINESTRING;
+	    }
+      }
+    if (n_points == 0 && n_linestrings > 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_GEOMETRYCOLLECTIONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_GEOMETRYCOLLECTIONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    return GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_MULTILINESTRINGZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_MULTILINESTRINGM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_MULTILINESTRINGZM;
+		else
+		    return GAIA_MULTILINESTRING;
+	    }
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_MULTIPOLYGONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_MULTIPOLYGONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_MULTIPOLYGONZM;
+		else
+		    return GAIA_MULTIPOLYGON;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_GEOMETRYCOLLECTIONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_GEOMETRYCOLLECTIONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    return GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_POLYGONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_POLYGONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_POLYGONZM;
+		else
+		    return GAIA_POLYGON;
+	    }
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons > 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_GEOMETRYCOLLECTIONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_GEOMETRYCOLLECTIONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    return GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (dm == GAIA_XY_Z)
+		    return GAIA_MULTIPOLYGONZ;
+		if (dm == GAIA_XY_M)
+		    return GAIA_MULTIPOLYGONM;
+		if (dm == GAIA_XY_Z_M)
+		    return GAIA_MULTIPOLYGONZM;
+		else
+		    return GAIA_MULTIPOLYGON;
+	    }
+      }
+    if (dm == GAIA_XY_Z)
+	return GAIA_GEOMETRYCOLLECTIONZ;
+    if (dm == GAIA_XY_M)
+	return GAIA_GEOMETRYCOLLECTIONM;
+    if (dm == GAIA_XY_Z_M)
+	return GAIA_GEOMETRYCOLLECTIONZM;
+    else
+	return GAIA_GEOMETRYCOLLECTION;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeometryAliasType (gaiaGeomCollPtr geom)
+{
+/* determines the AliasClass for this geometry */
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    if (!geom)
+	return GAIA_UNKNOWN;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* counts how many points are there */
+	  n_points++;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* counts how many linestrings are there */
+	  n_linestrings++;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* counts how many polygons are there */
+	  n_polygons++;
+	  polyg = polyg->Next;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons == 0)
+	return GAIA_UNKNOWN;
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	      return GAIA_MULTIPOINT;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_POINT;
+      }
+    if (n_points >= 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_MULTIPOINT;
+      }
+    if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	      return GAIA_MULTILINESTRING;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_LINESTRING;
+      }
+    if (n_points == 0 && n_linestrings >= 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_MULTILINESTRING;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	      return GAIA_MULTIPOLYGON;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_POLYGON;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons >= 1)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_MULTIPOLYGON;
+      }
+    return GAIA_GEOMETRYCOLLECTION;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsEmpty (gaiaGeomCollPtr geom)
+{
+/* checks if this GEOMETRYCOLLECTION is an empty one */
+    if (!geom)
+	return 1;
+    if (geom->FirstPoint != NULL)
+      {
+	  /* there is at least one point */
+	  return 0;
+      }
+    if (geom->FirstLinestring != NULL)
+      {
+	  /* there is at least one linestring */
+	  return 0;
+      }
+    if (geom->FirstPolygon != NULL)
+      {
+	  /* there is at least one polygon */
+	  return 0;
+      }
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsClosed (gaiaLinestringPtr line)
+{
+/* checks if this linestring is a closed one */
+    double x0;
+    double y0;
+    double x1;
+    double y1;
+    double z;
+    double m;
+    if (!line)
+	return 0;
+    if (line->Points < 3)
+	return 0;
+    if (line->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (line->Coords, 0, &x0, &y0, &z);
+      }
+    else if (line->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (line->Coords, 0, &x0, &y0, &m);
+      }
+    else if (line->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (line->Coords, 0, &x0, &y0, &z, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (line->Coords, 0, &x0, &y0);
+      }
+    if (line->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (line->Coords, (line->Points - 1), &x1, &y1, &z);
+      }
+    else if (line->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (line->Coords, (line->Points - 1), &x1, &y1, &m);
+      }
+    else if (line->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (line->Coords, (line->Points - 1), &x1, &y1, &z, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (line->Coords, (line->Points - 1), &x1, &y1);
+      }
+    if (x0 == x1 && y0 == y1)
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaMbrsEqual (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
+{
+/* 
+/ checks if two MBRs are identical
+/
+/ returns 1 if TRUE
+/ 0 if FALSE
+*/
+    if (mbr1->MinX != mbr2->MinX)
+	return 0;
+    if (mbr1->MinY != mbr2->MinY)
+	return 0;
+    if (mbr1->MaxX != mbr2->MaxX)
+	return 0;
+    if (mbr1->MaxY != mbr2->MaxY)
+	return 0;
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaMbrsDisjoint (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
+{
+/* 
+/ checks if two MBRs are disjoint
+/
+/ returns 1 if TRUE
+/ 0 if FALSE
+*/
+    if (mbr1->MinX > mbr2->MaxX)
+	return 1;
+    if (mbr1->MinY > mbr2->MaxY)
+	return 1;
+    if (mbr1->MaxX < mbr2->MinX)
+	return 1;
+    if (mbr1->MaxY < mbr2->MinY)
+	return 1;
+    if (mbr2->MinX > mbr1->MaxX)
+	return 1;
+    if (mbr2->MinY > mbr1->MaxY)
+	return 1;
+    if (mbr2->MaxX < mbr1->MinX)
+	return 1;
+    if (mbr2->MaxY < mbr1->MinY)
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaMbrsTouches (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
+{
+/* 
+/ checks if two MBRs touches
+/
+/ returns 1 if TRUE
+/ 0 if FALSE
+*/
+    if (mbr1->MinX == mbr2->MinX)
+	return 1;
+    if (mbr1->MinY == mbr2->MinY)
+	return 1;
+    if (mbr1->MaxX == mbr2->MaxX)
+	return 1;
+    if (mbr1->MaxY == mbr2->MaxY)
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaMbrsIntersects (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
+{
+/* 
+/ checks if two MBRs intersect
+/
+/ returns 1 if TRUE
+/ 0 if FALSE
+*/
+    if (gaiaMbrsDisjoint (mbr1, mbr2))
+	return 0;
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaMbrsOverlaps (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
+{
+/* 
+/ checks if two MBRs overlap
+/
+/ returns 1 if TRUE
+/ 0 if FALSE
+*/
+    if (gaiaMbrsDisjoint (mbr1, mbr2))
+	return 0;
+    if (mbr1->MinX >= mbr2->MinX && mbr1->MinX <= mbr2->MaxX)
+	return 1;
+    if (mbr1->MaxX >= mbr2->MinX && mbr1->MaxX <= mbr2->MaxX)
+	return 1;
+    if (mbr1->MinY >= mbr2->MinY && mbr1->MinY <= mbr2->MaxY)
+	return 1;
+    if (mbr1->MaxY >= mbr2->MinY && mbr1->MaxY <= mbr2->MaxY)
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaMbrsContains (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
+{
+/* 
+/ checks if MBR-1 completely contains MBR-2
+/
+/ returns 1 if TRUE
+/ 0 if FALSE
+*/
+    int ok_1 = 0;
+    int ok_2 = 0;
+    int ok_3 = 0;
+    int ok_4 = 0;
+    if (mbr2->MinX >= mbr1->MinX && mbr2->MinX <= mbr1->MaxX)
+	ok_1 = 1;
+    if (mbr2->MaxX >= mbr1->MinX && mbr2->MaxX <= mbr1->MaxX)
+	ok_2 = 1;
+    if (mbr2->MinY >= mbr1->MinY && mbr2->MinY <= mbr1->MaxY)
+	ok_3 = 1;
+    if (mbr2->MaxY >= mbr1->MinY && mbr2->MaxY <= mbr1->MaxY)
+	ok_4 = 1;
+    if (ok_1 && ok_2 && ok_3 && ok_4)
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaMbrsWithin (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
+{
+/* 
+/ checks if MBR-2 completely contains MBR-1
+/
+/ returns 1 if TRUE
+/ 0 if FALSE
+*/
+    int ok_1 = 0;
+    int ok_2 = 0;
+    int ok_3 = 0;
+    int ok_4 = 0;
+    if (mbr1->MinX >= mbr2->MinX && mbr1->MinX <= mbr2->MaxX)
+	ok_1 = 1;
+    if (mbr1->MaxX >= mbr2->MinX && mbr1->MaxX <= mbr2->MaxX)
+	ok_2 = 1;
+    if (mbr1->MinY >= mbr2->MinY && mbr1->MinY <= mbr2->MaxY)
+	ok_3 = 1;
+    if (mbr1->MaxY >= mbr2->MinY && mbr1->MaxY <= mbr2->MaxY)
+	ok_4 = 1;
+    if (ok_1 && ok_2 && ok_3 && ok_4)
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE void
+gaiaMakePoint (double x, double y, int srid, unsigned char **result, int *size)
+{
+/* build a Blob encoded Geometry representing a POINT */
+    unsigned char *ptr;
+    int endian_arch = gaiaEndianArch ();
+/* computing the Blob size and then allocating it */
+    *size = 44;			/* header size */
+    *size += (sizeof (double) * 2);	/* [x,y] coords */
+    *result = malloc (*size);
+    ptr = *result;
+/* setting the Blob value */
+    *ptr = GAIA_MARK_START;	/* START signature */
+    *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+    gaiaExport32 (ptr + 2, srid, 1, endian_arch);	/* the SRID */
+    gaiaExport64 (ptr + 6, x, 1, endian_arch);	/* MBR - minimum X */
+    gaiaExport64 (ptr + 14, y, 1, endian_arch);	/* MBR - minimum Y */
+    gaiaExport64 (ptr + 22, x, 1, endian_arch);	/* MBR - maximum X */
+    gaiaExport64 (ptr + 30, y, 1, endian_arch);	/* MBR - maximum Y */
+    *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+    gaiaExport32 (ptr + 39, GAIA_POINT, 1, endian_arch);	/* class POINT */
+    gaiaExport64 (ptr + 43, x, 1, endian_arch);	/* X */
+    gaiaExport64 (ptr + 51, y, 1, endian_arch);	/* Y */
+    *(ptr + 59) = GAIA_MARK_END;	/* END signature */
+}
+
+GAIAGEO_DECLARE void
+gaiaMakeLine (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2,
+	      unsigned char **result, int *size)
+{
+/* build a Blob encoded Geometry representing a LINESTRING (segment) */
+    int pts;
+    int lns;
+    int pgs;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaGeomCollPtr g;
+    int dims0;
+    int dims1;
+    int dims;
+    double x0;
+    double y0;
+    double z0;
+    double m0;
+    double x1;
+    double y1;
+    double z1;
+    double m1;
+
+/* checking if GEOM-1 simply is a POINT */
+    if (geom1 == NULL)
+      {
+	  *result = NULL;
+	  *size = 0;
+	  return;
+      }
+    pts = 0;
+    lns = 0;
+    pgs = 0;
+    pt = geom1->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  x0 = pt->X;
+	  y0 = pt->Y;
+	  z0 = pt->Z;
+	  m0 = pt->M;
+	  dims0 = pt->DimensionModel;
+	  pt = pt->Next;
+      }
+    ln = geom1->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    pg = geom1->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts == 1 && lns == 0 && pgs == 0)
+	;
+    else
+      {
+	  /* failure: not a simple POINT */
+	  *result = NULL;
+	  *size = 0;
+	  return;
+      }
+
+/* checking if GEOM-2 simply is a POINT */
+    if (geom2 == NULL)
+      {
+	  *result = NULL;
+	  *size = 0;
+	  return;
+      }
+    pts = 0;
+    lns = 0;
+    pgs = 0;
+    pt = geom2->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  x1 = pt->X;
+	  y1 = pt->Y;
+	  z1 = pt->Z;
+	  m1 = pt->M;
+	  dims1 = pt->DimensionModel;
+	  pt = pt->Next;
+      }
+    ln = geom2->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    pg = geom2->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts == 1 && lns == 0 && pgs == 0)
+	;
+    else
+      {
+	  /* failure: not a simple POINT */
+	  *result = NULL;
+	  *size = 0;
+	  return;
+      }
+
+/* building a new Geometry */
+    if (dims0 == dims1)
+	dims = dims0;
+    else
+      {
+	  if (dims0 == GAIA_XY_Z_M || dims1 == GAIA_XY_Z_M)
+	      dims = GAIA_XY_Z_M;
+	  else if (dims0 == GAIA_XY_Z && dims1 == GAIA_XY_M)
+	      dims = GAIA_XY_Z_M;
+	  else if (dims0 == GAIA_XY_M && dims1 == GAIA_XY_Z)
+	      dims = GAIA_XY_Z_M;
+	  else if (dims0 == GAIA_XY_Z)
+	      dims = GAIA_XY_Z;
+	  else if (dims1 == GAIA_XY_Z)
+	      dims = GAIA_XY_Z;
+	  else if (dims0 == GAIA_XY_M)
+	      dims = GAIA_XY_M;
+	  else if (dims1 == GAIA_XY_M)
+	      dims = GAIA_XY_M;
+	  else
+	      dims = GAIA_XY;
+      }
+    if (dims == GAIA_XY_Z_M)
+	g = gaiaAllocGeomCollXYZM ();
+    else if (dims == GAIA_XY_Z)
+	g = gaiaAllocGeomCollXYZ ();
+    else if (dims == GAIA_XY_M)
+	g = gaiaAllocGeomCollXYM ();
+    else
+	g = gaiaAllocGeomColl ();
+    g->Srid = geom1->Srid;
+    g->DeclaredType = GAIA_LINESTRING;
+    ln = gaiaAddLinestringToGeomColl (g, 2);
+    if (dims == GAIA_XY_Z_M)
+      {
+	  gaiaSetPointXYZM (ln->Coords, 0, x0, y0, z0, m0);
+	  gaiaSetPointXYZM (ln->Coords, 1, x1, y1, z1, m1);
+      }
+    else if (dims == GAIA_XY_Z)
+      {
+	  gaiaSetPointXYZ (ln->Coords, 0, x0, y0, z0);
+	  gaiaSetPointXYZ (ln->Coords, 1, x1, y1, z1);
+      }
+    else if (dims == GAIA_XY_M)
+      {
+	  gaiaSetPointXYM (ln->Coords, 0, x0, y0, m0);
+	  gaiaSetPointXYM (ln->Coords, 1, x1, y1, m1);
+      }
+    else
+      {
+	  gaiaSetPoint (ln->Coords, 0, x0, y0);
+	  gaiaSetPoint (ln->Coords, 1, x1, y1);
+      }
+/* converting to Binary Blob */
+    gaiaToSpatiaLiteBlobWkb (g, result, size);
+    gaiaFreeGeomColl (g);
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaMergeGeometries (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* mergine two generic Geometries into a single one */
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr new_ln;
+    gaiaPolygonPtr pg;
+    gaiaPolygonPtr new_pg;
+    gaiaRingPtr rng;
+    gaiaRingPtr new_rng;
+    int dims1;
+    int dims2;
+    int dims;
+    double x;
+    double y;
+    double z;
+    double m;
+    int iv;
+    int ib;
+
+    if (geom1 == NULL || geom2 == NULL)
+	return NULL;
+    dims1 = geom1->DimensionModel;
+    dims2 = geom2->DimensionModel;
+/* building a new Geometry */
+    if (dims1 == dims2)
+	dims = dims1;
+    else
+      {
+	  if (dims1 == GAIA_XY_Z_M || dims2 == GAIA_XY_Z_M)
+	      dims = GAIA_XY_Z_M;
+	  else if (dims1 == GAIA_XY_Z && dims2 == GAIA_XY_M)
+	      dims = GAIA_XY_Z_M;
+	  else if (dims1 == GAIA_XY_M && dims2 == GAIA_XY_Z)
+	      dims = GAIA_XY_Z_M;
+	  else if (dims1 == GAIA_XY_Z)
+	      dims = GAIA_XY_Z;
+	  else if (dims2 == GAIA_XY_Z)
+	      dims = GAIA_XY_Z;
+	  else if (dims1 == GAIA_XY_M)
+	      dims = GAIA_XY_M;
+	  else if (dims2 == GAIA_XY_M)
+	      dims = GAIA_XY_M;
+	  else
+	      dims = GAIA_XY;
+      }
+    if (dims == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (dims == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (dims == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    result->Srid = geom1->Srid;
+
+    pt = geom1->FirstPoint;
+    while (pt)
+      {
+	  /* copying POINTs from GEOM-1 */
+	  z = 0.0;
+	  m = 0.0;
+	  if (pt->DimensionModel == GAIA_XY_Z_M)
+	    {
+		x = pt->X;
+		y = pt->Y;
+		z = pt->Z;
+		m = pt->M;
+	    }
+	  else if (pt->DimensionModel == GAIA_XY_Z)
+	    {
+		x = pt->X;
+		y = pt->Y;
+		z = pt->Z;
+	    }
+	  else if (pt->DimensionModel == GAIA_XY_M)
+	    {
+		x = pt->X;
+		y = pt->Y;
+		m = pt->M;
+	    }
+	  else
+	    {
+		x = pt->X;
+		y = pt->Y;
+	    }
+	  if (result->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaAddPointToGeomCollXYZM (result, x, y, z, m);
+	    }
+	  else if (result->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaAddPointToGeomCollXYZ (result, x, y, z);
+	    }
+	  else if (result->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaAddPointToGeomCollXYM (result, x, y, m);
+	    }
+	  else
+	    {
+		gaiaAddPointToGeomColl (result, x, y);
+	    }
+	  pt = pt->Next;
+      }
+
+    pt = geom2->FirstPoint;
+    while (pt)
+      {
+	  /* copying POINTs from GEOM-2 */
+	  z = 0.0;
+	  m = 0.0;
+	  if (pt->DimensionModel == GAIA_XY_Z_M)
+	    {
+		x = pt->X;
+		y = pt->Y;
+		z = pt->Z;
+		m = pt->M;
+	    }
+	  else if (pt->DimensionModel == GAIA_XY_Z)
+	    {
+		x = pt->X;
+		y = pt->Y;
+		z = pt->Z;
+	    }
+	  else if (pt->DimensionModel == GAIA_XY_M)
+	    {
+		x = pt->X;
+		y = pt->Y;
+		m = pt->M;
+	    }
+	  else
+	    {
+		x = pt->X;
+		y = pt->Y;
+	    }
+	  if (result->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaAddPointToGeomCollXYZM (result, x, y, z, m);
+	    }
+	  else if (result->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaAddPointToGeomCollXYZ (result, x, y, z);
+	    }
+	  else if (result->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaAddPointToGeomCollXYM (result, x, y, m);
+	    }
+	  else
+	    {
+		gaiaAddPointToGeomColl (result, x, y);
+	    }
+	  pt = pt->Next;
+      }
+
+    ln = geom1->FirstLinestring;
+    while (ln)
+      {
+	  /* copying LINESTRINGs from GEOM-1 */
+	  new_ln = gaiaAddLinestringToGeomColl (result, ln->Points);
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		  }
+		if (new_ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (new_ln->Coords, iv, x, y);
+		  }
+	    }
+	  ln = ln->Next;
+      }
+
+    ln = geom2->FirstLinestring;
+    while (ln)
+      {
+	  /* copying LINESTRINGs from GEOM-2 */
+	  new_ln = gaiaAddLinestringToGeomColl (result, ln->Points);
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		  }
+		if (new_ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (new_ln->Coords, iv, x, y);
+		  }
+	    }
+	  ln = ln->Next;
+      }
+
+    pg = geom1->FirstPolygon;
+    while (pg)
+      {
+	  /* copying POLYGONs from GEOM-1 */
+	  rng = pg->Exterior;
+	  new_pg =
+	      gaiaAddPolygonToGeomColl (result, rng->Points, pg->NumInteriors);
+	  new_rng = new_pg->Exterior;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		/* Exterior Ring */
+		z = 0.0;
+		m = 0.0;
+		if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		  }
+		if (new_rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (new_rng->Coords, iv, x, y, z, m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (new_rng->Coords, iv, x, y, z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (new_rng->Coords, iv, x, y, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (new_rng->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		/* Interior Rings */
+		rng = pg->Interiors + ib;
+		new_rng = gaiaAddInteriorRing (new_pg, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      z = 0.0;
+		      m = 0.0;
+		      if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      if (new_rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (new_rng->Coords, iv, x, y, z, m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (new_rng->Coords, iv, x, y, z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (new_rng->Coords, iv, x, y, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (new_rng->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  pg = pg->Next;
+      }
+
+    pg = geom2->FirstPolygon;
+    while (pg)
+      {
+	  /* copying POLYGONs from GEOM-2 */
+	  rng = pg->Exterior;
+	  new_pg =
+	      gaiaAddPolygonToGeomColl (result, rng->Points, pg->NumInteriors);
+	  new_rng = new_pg->Exterior;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		/* Exterior Ring */
+		z = 0.0;
+		m = 0.0;
+		if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		  }
+		if (new_rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (new_rng->Coords, iv, x, y, z, m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (new_rng->Coords, iv, x, y, z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (new_rng->Coords, iv, x, y, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (new_rng->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		/* Interior Rings */
+		rng = pg->Interiors + ib;
+		new_rng = gaiaAddInteriorRing (new_pg, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      z = 0.0;
+		      m = 0.0;
+		      if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      if (new_rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (new_rng->Coords, iv, x, y, z, m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (new_rng->Coords, iv, x, y, z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (new_rng->Coords, iv, x, y, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (new_rng->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  pg = pg->Next;
+      }
+
+    return result;
+}
+
+GAIAGEO_DECLARE void
+gaiaBuildMbr (double x1, double y1, double x2, double y2, int srid,
+	      unsigned char **result, int *size)
+{
+/* build a Blob encoded Geometry representing an MBR */
+    unsigned char *ptr;
+    double minx;
+    double maxx;
+    double miny;
+    double maxy;
+    int endian_arch = gaiaEndianArch ();
+/* computing MinMax coords */
+    if (x1 > x2)
+      {
+	  maxx = x1;
+	  minx = x2;
+      }
+    else
+      {
+	  minx = x1;
+	  maxx = x2;
+      }
+    if (y1 > y2)
+      {
+	  maxy = y1;
+	  miny = y2;
+      }
+    else
+      {
+	  miny = y1;
+	  maxy = y2;
+      }
+/* computing the Blob size and then allocating it */
+    *size = 44;			/* header size */
+    *size += (8 + ((sizeof (double) * 2) * 5));	/* # rings + # points + [x.y] array - exterior ring */
+    *result = malloc (*size);
+    ptr = *result;
+/* setting the Blob value */
+    *ptr = GAIA_MARK_START;	/* START signature */
+    *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+    gaiaExport32 (ptr + 2, srid, 1, endian_arch);	/* the SRID */
+    gaiaExport64 (ptr + 6, minx, 1, endian_arch);	/* MBR - minimum X */
+    gaiaExport64 (ptr + 14, miny, 1, endian_arch);	/* MBR - minimum Y */
+    gaiaExport64 (ptr + 22, maxx, 1, endian_arch);	/* MBR - maximum X */
+    gaiaExport64 (ptr + 30, maxy, 1, endian_arch);	/* MBR - maximum Y */
+    *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+    gaiaExport32 (ptr + 39, GAIA_POLYGON, 1, endian_arch);	/* class POLYGON */
+    gaiaExport32 (ptr + 43, 1, 1, endian_arch);	/* # rings */
+    gaiaExport32 (ptr + 47, 5, 1, endian_arch);	/* # points - exterior ring */
+    ptr += 51;
+/* setting Envelope points */
+    gaiaExport64 (ptr, minx, 1, endian_arch);
+    gaiaExport64 (ptr + 8, miny, 1, endian_arch);
+    ptr += 16;
+    gaiaExport64 (ptr, maxx, 1, endian_arch);
+    gaiaExport64 (ptr + 8, miny, 1, endian_arch);
+    ptr += 16;
+    gaiaExport64 (ptr, maxx, 1, endian_arch);
+    gaiaExport64 (ptr + 8, maxy, 1, endian_arch);
+    ptr += 16;
+    gaiaExport64 (ptr, minx, 1, endian_arch);
+    gaiaExport64 (ptr + 8, maxy, 1, endian_arch);
+    ptr += 16;
+    gaiaExport64 (ptr, minx, 1, endian_arch);
+    gaiaExport64 (ptr + 8, miny, 1, endian_arch);
+    ptr += 16;
+    *ptr = GAIA_MARK_END;	/* END signature */
+}
+
+GAIAGEO_DECLARE void
+gaiaBuildCircleMbr (double x, double y, double radius, int srid,
+		    unsigned char **result, int *size)
+{
+/* build a Blob encoded Geometry representing an MBR */
+    int sz;
+    unsigned char *res = NULL;
+    double minx = x - radius;
+    double maxx = x + radius;
+    double miny = y - radius;
+    double maxy = y + radius;
+    gaiaBuildMbr (minx, miny, maxx, maxy, srid, &res, &sz);
+    if (!res)
+      {
+	  *result = NULL;
+	  *size = 0;
+      }
+    else
+      {
+	  *result = res;
+	  *size = sz;
+      }
+}
+
+GAIAGEO_DECLARE void
+gaiaBuildFilterMbr (double x1, double y1, double x2, double y2, int mode,
+		    unsigned char **result, int *size)
+{
+/* build a filter for an MBR */
+    unsigned char *ptr;
+    double minx;
+    double maxx;
+    double miny;
+    double maxy;
+    int endian_arch = gaiaEndianArch ();
+    char filter = GAIA_FILTER_MBR_WITHIN;
+    if (mode == GAIA_FILTER_MBR_CONTAINS)
+	filter = GAIA_FILTER_MBR_CONTAINS;
+    if (mode == GAIA_FILTER_MBR_INTERSECTS)
+	filter = GAIA_FILTER_MBR_INTERSECTS;
+    if (mode == GAIA_FILTER_MBR_DECLARE)
+	filter = GAIA_FILTER_MBR_DECLARE;
+/* computing MinMax coords */
+    if (x1 > x2)
+      {
+	  maxx = x1;
+	  minx = x2;
+      }
+    else
+      {
+	  minx = x1;
+	  maxx = x2;
+      }
+    if (y1 > y2)
+      {
+	  maxy = y1;
+	  miny = y2;
+      }
+    else
+      {
+	  miny = y1;
+	  maxy = y2;
+      }
+/* computing the Blob size and then allocating it */
+    *size = 37;			/* MBR filter size */
+    *result = malloc (*size);
+    ptr = *result;
+/* setting the Blob value */
+    *ptr = filter;		/* signature */
+    ptr++;
+    gaiaExport64 (ptr, minx, 1, endian_arch);	/* MBR - minimum X */
+    ptr += 8;
+    *ptr = filter;		/* signature */
+    ptr++;
+    gaiaExport64 (ptr, miny, 1, endian_arch);	/* MBR - minimum Y */
+    ptr += 8;
+    *ptr = filter;		/* signature */
+    ptr++;
+    gaiaExport64 (ptr, maxx, 1, endian_arch);	/* MBR - maximum X */
+    ptr += 8;
+    *ptr = filter;		/* signature */
+    ptr++;
+    gaiaExport64 (ptr, maxy, 1, endian_arch);	/* MBR - maximum Y */
+    ptr += 8;
+    *ptr = filter;		/* signature */
+}
+
+
+GAIAGEO_DECLARE int
+gaiaParseFilterMbr (unsigned char *ptr, int size, double *minx, double *miny,
+		    double *maxx, double *maxy, int *mode)
+{
+/* parsing a filter for an MBR */
+    char decl_mode;
+    int endian_arch = gaiaEndianArch ();
+    if (size != 37)
+	return 0;		/* cannot be an MBR Filter */
+    if (!ptr)
+	return 0;		/* cannot be an MBR Filter */
+    decl_mode = *(ptr + 0);
+    if (decl_mode == GAIA_FILTER_MBR_WITHIN)
+	;
+    else if (decl_mode == GAIA_FILTER_MBR_CONTAINS)
+	;
+    else if (decl_mode == GAIA_FILTER_MBR_INTERSECTS)
+	;
+    else if (decl_mode == GAIA_FILTER_MBR_DECLARE)
+	;
+    else
+	return 0;		/* cannot be an MBR Filter */
+    if (*(ptr + 9)
+	== decl_mode
+	&& *(ptr +
+	     18) ==
+	decl_mode && *(ptr + 27) == decl_mode && *(ptr + 36) == decl_mode)
+	;
+    else
+	return 0;		/* cannot be an MBR Filter */
+    *mode = decl_mode;
+    *minx = gaiaImport64 (ptr + 1, 1, endian_arch);
+    *miny = gaiaImport64 (ptr + 10, 1, endian_arch);
+    *maxx = gaiaImport64 (ptr + 19, 1, endian_arch);
+    *maxy = gaiaImport64 (ptr + 28, 1, endian_arch);
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaGetMbrMinX (const unsigned char *blob, unsigned int size, double *minx)
+{
+/* returns the MinX coordinate value for a Blob encoded Geometry */
+    int little_endian;
+    int endian_arch = gaiaEndianArch ();
+    if (size < 45)
+	return 0;		/* cannot be an internal BLOB WKB geometry */
+    if (*(blob + 0) != GAIA_MARK_START)
+	return 0;		/* failed to recognize START signature */
+    if (*(blob + (size - 1)) != GAIA_MARK_END)
+	return 0;		/* failed to recognize END signature */
+    if (*(blob + 38) != GAIA_MARK_MBR)
+	return 0;		/* failed to recognize MBR signature */
+    if (*(blob + 1) == GAIA_LITTLE_ENDIAN)
+	little_endian = 1;
+    else if (*(blob + 1) == GAIA_BIG_ENDIAN)
+	little_endian = 0;
+    else
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
+    *minx = gaiaImport64 (blob + 6, little_endian, endian_arch);
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaGetMbrMaxX (const unsigned char *blob, unsigned int size, double *maxx)
+{
+/* returns the MaxX coordinate value for a Blob encoded Geometry */
+    int little_endian;
+    int endian_arch = gaiaEndianArch ();
+    if (size < 45)
+	return 0;		/* cannot be an internal BLOB WKB geometry */
+    if (*(blob + 0) != GAIA_MARK_START)
+	return 0;		/* failed to recognize START signature */
+    if (*(blob + (size - 1)) != GAIA_MARK_END)
+	return 0;		/* failed to recognize END signature */
+    if (*(blob + 38) != GAIA_MARK_MBR)
+	return 0;		/* failed to recognize MBR signature */
+    if (*(blob + 1) == GAIA_LITTLE_ENDIAN)
+	little_endian = 1;
+    else if (*(blob + 1) == GAIA_BIG_ENDIAN)
+	little_endian = 0;
+    else
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
+    *maxx = gaiaImport64 (blob + 22, little_endian, endian_arch);
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaGetMbrMinY (const unsigned char *blob, unsigned int size, double *miny)
+{
+/* returns the MinY coordinate value for a Blob encoded Geometry */
+    int little_endian;
+    int endian_arch = gaiaEndianArch ();
+    if (size < 45)
+	return 0;		/* cannot be an internal BLOB WKB geometry */
+    if (*(blob + 0) != GAIA_MARK_START)
+	return 0;		/* failed to recognize START signature */
+    if (*(blob + (size - 1)) != GAIA_MARK_END)
+	return 0;		/* failed to recognize END signature */
+    if (*(blob + 38) != GAIA_MARK_MBR)
+	return 0;		/* failed to recognize MBR signature */
+    if (*(blob + 1) == GAIA_LITTLE_ENDIAN)
+	little_endian = 1;
+    else if (*(blob + 1) == GAIA_BIG_ENDIAN)
+	little_endian = 0;
+    else
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
+    *miny = gaiaImport64 (blob + 14, little_endian, endian_arch);
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaGetMbrMaxY (const unsigned char *blob, unsigned int size, double *maxy)
+{
+/* returns the MaxY coordinate value for a Blob encoded Geometry */
+    int little_endian;
+    int endian_arch = gaiaEndianArch ();
+    if (size < 45)
+	return 0;		/* cannot be an internal BLOB WKB geometry */
+    if (*(blob + 0) != GAIA_MARK_START)
+	return 0;		/* failed to recognize START signature */
+    if (*(blob + (size - 1)) != GAIA_MARK_END)
+	return 0;		/* failed to recognize END signature */
+    if (*(blob + 38) != GAIA_MARK_MBR)
+	return 0;		/* failed to recognize MBR signature */
+    if (*(blob + 1) == GAIA_LITTLE_ENDIAN)
+	little_endian = 1;
+    else if (*(blob + 1) == GAIA_BIG_ENDIAN)
+	little_endian = 0;
+    else
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
+    *maxy = gaiaImport64 (blob + 30, little_endian, endian_arch);
+    return 1;
+}
diff --git a/libspatialite/src/gaiageo/gg_geoscvt.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geoscvt.c
similarity index 100%
copy from libspatialite/src/gaiageo/gg_geoscvt.c
copy to libspatialite/libspatialite-3.0.1/src/gaiageo/gg_geoscvt.c
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_gml.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_gml.c
new file mode 100644
index 0000000..c079713
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_gml.c
@@ -0,0 +1,6081 @@
+/*
+
+ gg_gml.c -- GML parser/lexer 
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <assert.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty  _isatty
+#define fileno  _fileno
+#endif
+
+int gml_parse_error;
+
+#define GML_PARSER_OPEN_NODE		1
+#define GML_PARSER_SELF_CLOSED_NODE	2
+#define GML_PARSER_CLOSED_NODE		3
+
+#define GAIA_GML_UNKNOWN		0
+#define GAIA_GML_POINT			1
+#define GAIA_GML_LINESTRING		2
+#define GAIA_GML_CURVE			3
+#define GAIA_GML_POLYGON		4
+#define GAIA_GML_MULTIPOINT		5
+#define GAIA_GML_MULTILINESTRING	6
+#define GAIA_GML_MULTICURVE		7
+#define GAIA_GML_MULTIPOLYGON		8
+#define GAIA_GML_MULTISURFACE		9
+#define GAIA_GML_MULTIGEOMETRY		10
+
+/*
+** This is a linked-list struct to store all the values for each token.
+*/
+typedef struct gmlFlexTokenStruct
+{
+    char *value;
+    struct gmlFlexTokenStruct *Next;
+} gmlFlexToken;
+
+typedef struct gml_coord
+{
+    char *Value;
+    struct gml_coord *Next;
+} gmlCoord;
+typedef gmlCoord *gmlCoordPtr;
+
+typedef struct gml_attr
+{
+    char *Key;
+    char *Value;
+    struct gml_attr *Next;
+} gmlAttr;
+typedef gmlAttr *gmlAttrPtr;
+
+typedef struct gml_node
+{
+    char *Tag;
+    int Type;
+    int Error;
+    struct gml_attr *Attributes;
+    struct gml_coord *Coordinates;
+    struct gml_node *Next;
+} gmlNode;
+typedef gmlNode *gmlNodePtr;
+
+typedef struct gml_dynamic_ring
+{
+    gaiaDynamicLinePtr ring;
+    int interior;
+    int has_z;
+    struct gml_dynamic_ring *next;
+} gmlDynamicRing;
+typedef gmlDynamicRing *gmlDynamicRingPtr;
+
+typedef struct gml_dynamic_polygon
+{
+    struct gml_dynamic_ring *first;
+    struct gml_dynamic_ring *last;
+} gmlDynamicPolygon;
+typedef gmlDynamicPolygon *gmlDynamicPolygonPtr;
+
+static void
+gml_proj_params (sqlite3 * sqlite, int srid, char *proj_params)
+{
+/* retrives the PROJ params from SPATIAL_SYS_REF table, if possible */
+    char sql[256];
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    int ret;
+    char *errMsg = NULL;
+    *proj_params = '\0';
+    sprintf (sql,
+	     "SELECT proj4text FROM spatial_ref_sys WHERE srid = %d", srid);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "unknown SRID: %d\t<%s>\n", srid, errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    for (i = 1; i <= rows; i++)
+	strcpy (proj_params, results[(i * columns)]);
+    if (*proj_params == '\0')
+	fprintf (stderr, "unknown SRID: %d\n", srid);
+    sqlite3_free_table (results);
+}
+
+static gmlDynamicPolygonPtr
+gml_alloc_dyn_polygon (void)
+{
+/* creating a dynamic polygon (ring collection) */
+    gmlDynamicPolygonPtr p = malloc (sizeof (gmlDynamicPolygon));
+    p->first = NULL;
+    p->last = NULL;
+    return p;
+}
+
+static void
+gml_free_dyn_polygon (gmlDynamicPolygonPtr dyn)
+{
+/* deleting a dynamic polygon (ring collection) */
+    gmlDynamicRingPtr r;
+    gmlDynamicRingPtr rn;
+    if (!dyn)
+	return;
+    r = dyn->first;
+    while (r)
+      {
+	  rn = r->next;
+	  if (r->ring)
+	      gaiaFreeDynamicLine (r->ring);
+	  free (r);
+	  r = rn;
+      }
+    free (dyn);
+}
+
+static void
+gml_add_polygon_ring (gmlDynamicPolygonPtr dyn_pg, gaiaDynamicLinePtr dyn,
+		      int interior, int has_z)
+{
+/* inserting a further ring into the collection (dynamic polygon) */
+    gmlDynamicRingPtr p = malloc (sizeof (gmlDynamicRing));
+    p->ring = dyn;
+    p->interior = interior;
+    p->has_z = has_z;
+    p->next = NULL;
+    if (dyn_pg->first == NULL)
+	dyn_pg->first = p;
+    if (dyn_pg->last != NULL)
+	dyn_pg->last->next = p;
+    dyn_pg->last = p;
+}
+
+static void
+gml_freeString (char **ptr)
+{
+/* releasing a string from the lexer */
+    if (*ptr != NULL)
+	free (*ptr);
+    *ptr = NULL;
+}
+
+static void
+gml_saveString (char **ptr, const char *str)
+{
+/* saving a string from the lexer */
+    int len = strlen (str);
+    gml_freeString (ptr);
+    *ptr = malloc (len + 1);
+    strcpy (*ptr, str);
+}
+
+static gmlCoordPtr
+gml_coord (void *value)
+{
+/* creating a coord Item */
+    int len;
+    gmlFlexToken *tok = (gmlFlexToken *) value;
+    gmlCoordPtr c = malloc (sizeof (gmlCoord));
+    len = strlen (tok->value);
+    c->Value = malloc (len + 1);
+    strcpy (c->Value, tok->value);
+    c->Next = NULL;
+    return c;
+}
+
+static void
+gml_freeCoordinate (gmlCoordPtr c)
+{
+/* deleting a GML coordinate */
+    if (c == NULL)
+	return;
+    if (c->Value)
+	free (c->Value);
+    free (c);
+}
+
+static gmlAttrPtr
+gml_attribute (void *key, void *value)
+{
+/* creating an attribute */
+    int len;
+    gmlFlexToken *k_tok = (gmlFlexToken *) key;
+    gmlFlexToken *v_tok = (gmlFlexToken *) value;
+    gmlAttrPtr a = malloc (sizeof (gmlAttr));
+    len = strlen (k_tok->value);
+    a->Key = malloc (len + 1);
+    strcpy (a->Key, k_tok->value);
+    len = strlen (v_tok->value);
+/* we need to de-quote the string, removing first and last ".." */
+    if (*(v_tok->value + 0) == '"' && *(v_tok->value + len - 1) == '"')
+      {
+	  a->Value = malloc (len - 1);
+	  memcpy (a->Value, v_tok->value + 1, len - 1);
+	  *(a->Value + len - 1) = '\0';
+      }
+    else
+      {
+	  a->Value = malloc (len + 1);
+	  strcpy (a->Value, v_tok->value);
+      }
+    a->Next = NULL;
+    return a;
+}
+
+static void
+gml_freeAttribute (gmlAttrPtr a)
+{
+/* deleting a GML attribute */
+    if (a == NULL)
+	return;
+    if (a->Key)
+	free (a->Key);
+    if (a->Value)
+	free (a->Value);
+    free (a);
+}
+
+static void
+gml_freeNode (gmlNodePtr n)
+{
+/* deleting a GML node */
+    gmlAttrPtr a;
+    gmlAttrPtr an;
+    gmlCoordPtr c;
+    gmlCoordPtr cn;
+    if (n == NULL)
+	return;
+    a = n->Attributes;
+    while (a)
+      {
+	  an = a->Next;
+	  gml_freeAttribute (a);
+	  a = an;
+      }
+    c = n->Coordinates;
+    while (c)
+      {
+	  cn = c->Next;
+	  gml_freeCoordinate (c);
+	  c = cn;
+      }
+    if (n->Tag)
+	free (n->Tag);
+    free (n);
+}
+
+static void
+gml_freeTree (gmlNodePtr t)
+{
+/* deleting a GML tree */
+    gmlNodePtr n;
+    gmlNodePtr nn;
+    n = t;
+    while (n)
+      {
+	  nn = n->Next;
+	  gml_freeNode (n);
+	  n = nn;
+      }
+}
+
+static gmlNodePtr
+gml_createNode (void *tag, void *attributes, void *coords)
+{
+/* creating a node */
+    int len;
+    gmlFlexToken *tok = (gmlFlexToken *) tag;
+    gmlNodePtr n = malloc (sizeof (gmlNode));
+    len = strlen (tok->value);
+    n->Tag = malloc (len + 1);
+    strcpy (n->Tag, tok->value);
+    n->Type = GML_PARSER_OPEN_NODE;
+    n->Error = 0;
+    n->Attributes = attributes;
+    n->Coordinates = coords;
+    n->Next = NULL;
+    return n;
+}
+
+static gmlNodePtr
+gml_createSelfClosedNode (void *tag, void *attributes)
+{
+/* creating a self-closed node */
+    int len;
+    gmlFlexToken *tok = (gmlFlexToken *) tag;
+    gmlNodePtr n = malloc (sizeof (gmlNode));
+    len = strlen (tok->value);
+    n->Tag = malloc (len + 1);
+    strcpy (n->Tag, tok->value);
+    n->Type = GML_PARSER_SELF_CLOSED_NODE;
+    n->Error = 0;
+    n->Attributes = attributes;
+    n->Coordinates = NULL;
+    n->Next = NULL;
+    return n;
+}
+
+static gmlNodePtr
+gml_closingNode (void *tag)
+{
+/* creating a closing node */
+    int len;
+    gmlFlexToken *tok = (gmlFlexToken *) tag;
+    gmlNodePtr n = malloc (sizeof (gmlNode));
+    len = strlen (tok->value);
+    n->Tag = malloc (len + 1);
+    strcpy (n->Tag, tok->value);
+    n->Type = GML_PARSER_CLOSED_NODE;
+    n->Error = 0;
+    n->Attributes = NULL;
+    n->Coordinates = NULL;
+    n->Next = NULL;
+    return n;
+}
+
+static int
+gml_cleanup (gmlFlexToken * token)
+{
+    gmlFlexToken *ptok;
+    gmlFlexToken *ptok_n;
+    if (token == NULL)
+	return 0;
+    ptok = token;
+    while (ptok)
+      {
+	  ptok_n = ptok->Next;
+	  if (ptok->value != NULL)
+	      free (ptok->value);
+	  free (ptok);
+	  ptok = ptok_n;
+      }
+    return 0;
+}
+
+static void
+gml_xferString (char **p, const char *str)
+{
+/* saving some token */
+    int len;
+    if (str == NULL)
+      {
+	  *p = NULL;
+	  return;
+      }
+    len = strlen (str);
+    *p = malloc (len + 1);
+    strcpy (*p, str);
+}
+
+static int
+guessGmlSrid (gmlNodePtr node)
+{
+/* attempting to guess the SRID */
+    int len;
+    gmlAttrPtr attr = node->Attributes;
+    while (attr)
+      {
+	  if (strcmp (attr->Key, "srsName") == 0)
+	    {
+		len = strlen (attr->Value);
+		if (len > 5)
+		  {
+		      if (strncmp (attr->Value, "EPSG:", 5) == 0)
+			  return atoi (attr->Value + 5);
+		  }
+		if (len > 21)
+		  {
+		      if (strncmp (attr->Value, "urn:ogc:def:crs:EPSG:", 21) ==
+			  0)
+			{
+			    int i = strlen (attr->Value) - 1;
+			    for (; i >= 0; i--)
+			      {
+				  if (*(attr->Value + i) == ':')
+				      return atoi (attr->Value + i + 1);
+			      }
+			}
+		  }
+	    }
+	  attr = attr->Next;
+      }
+    return -1;
+}
+
+static int
+gml_get_srsDimension (gmlNodePtr node)
+{
+/* attempting to establis if there is a Z coordinate */
+    gmlAttrPtr attr = node->Attributes;
+    while (attr)
+      {
+	  if (strcmp (attr->Key, "srsDimension") == 0)
+	    {
+		if (atoi (attr->Value) == 3)
+		    return 1;
+		else
+		    return 0;
+	    }
+	  attr = attr->Next;
+      }
+    return 0;
+}
+
+static int
+guessGmlGeometryType (gmlNodePtr node)
+{
+/* attempting to guess the Geometry Type for a GML node */
+    int type = GAIA_GML_UNKNOWN;
+    if (strcmp (node->Tag, "gml:Point") == 0
+	|| strcmp (node->Tag, "Point") == 0)
+	type = GAIA_GML_POINT;
+    if (strcmp (node->Tag, "gml:LineString") == 0
+	|| strcmp (node->Tag, "LineString") == 0)
+	type = GAIA_GML_LINESTRING;
+    if (strcmp (node->Tag, "gml:Curve") == 0
+	|| strcmp (node->Tag, "Curve") == 0)
+	type = GAIA_GML_CURVE;
+    if (strcmp (node->Tag, "gml:Polygon") == 0
+	|| strcmp (node->Tag, "Polygon") == 0)
+	type = GAIA_GML_POLYGON;
+    if (strcmp (node->Tag, "gml:MultiPoint") == 0
+	|| strcmp (node->Tag, "MultiPoint") == 0)
+	type = GAIA_GML_MULTIPOINT;
+    if (strcmp (node->Tag, "gml:MultiLineString") == 0
+	|| strcmp (node->Tag, "MultiLineString") == 0)
+	type = GAIA_GML_MULTILINESTRING;
+    if (strcmp (node->Tag, "gml:MultiCurve") == 0
+	|| strcmp (node->Tag, "MultiCurve") == 0)
+	type = GAIA_GML_MULTICURVE;
+    if (strcmp (node->Tag, "gml:MultiPolygon") == 0
+	|| strcmp (node->Tag, "MultiPolygon") == 0)
+	type = GAIA_GML_MULTIPOLYGON;
+    if (strcmp (node->Tag, "gml:MultiSurface") == 0
+	|| strcmp (node->Tag, "MultiSurface") == 0)
+	type = GAIA_GML_MULTISURFACE;
+    if (strcmp (node->Tag, "gml:MultiGeometry") == 0
+	|| strcmp (node->Tag, "MultiGeometry") == 0)
+	type = GAIA_GML_MULTIGEOMETRY;
+    return type;
+}
+
+static int
+gml_check_coord (const char *value)
+{
+/* checking a GML coordinate */
+    int decimal = 0;
+    const char *p = value;
+    if (*p == '+' || *p == '-')
+	p++;
+    while (*p != '\0')
+      {
+	  if (*p == '.')
+	    {
+		if (!decimal)
+		    decimal = 1;
+		else
+		    return 0;
+	    }
+	  else if (*p >= '0' && *p <= '9')
+	      ;
+	  else
+	      return 0;
+	  p++;
+      }
+    return 1;
+}
+
+static int
+gml_extract_coords (const char *value, double *x, double *y, double *z,
+		    int *count)
+{
+/* extracting GML v2.x coords from a comma-separated string */
+    const char *in = value;
+    char buf[1024];
+    char *out = buf;
+    *out = '\0';
+
+    while (*in != '\0')
+      {
+	  if (*in == ',')
+	    {
+		*out = '\0';
+		if (*buf != '\0')
+		  {
+		      if (!gml_check_coord (buf))
+			  return 0;
+		      switch (*count)
+			{
+			case 0:
+			    *x = atof (buf);
+			    *count += 1;
+			    break;
+			case 1:
+			    *y = atof (buf);
+			    *count += 1;
+			    break;
+			case 2:
+			    *z = atof (buf);
+			    *count += 1;
+			    break;
+			default:
+			    *count += 1;
+			    break;
+			};
+		  }
+		in++;
+		out = buf;
+		*out = '\0';
+		continue;
+	    }
+	  *out++ = *in++;
+      }
+    *out = '\0';
+/* parsing the last item */
+    if (*buf != '\0')
+      {
+	  if (!gml_check_coord (buf))
+	      return 0;
+	  switch (*count)
+	    {
+	    case 0:
+		*x = atof (buf);
+		*count += 1;
+		break;
+	    case 1:
+		*y = atof (buf);
+		*count += 1;
+		break;
+	    case 2:
+		*z = atof (buf);
+		*count += 1;
+		break;
+	    default:
+		*count += 1;
+		break;
+	    };
+      }
+    return 1;
+}
+
+static int
+gml_parse_point_v2 (gmlCoordPtr coord, double *x, double *y, double *z,
+		    int *has_z)
+{
+/* parsing GML v2.x <gml:coordinates> [Point] */
+    int count = 0;
+    gmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!gml_extract_coords (c->Value, x, y, z, &count))
+	      return 0;
+	  c = c->Next;
+      }
+    if (count == 2)
+      {
+	  *has_z = 0;
+	  return 1;
+      }
+    if (count == 3)
+      {
+	  *has_z = 1;
+	  return 1;
+      }
+    return 0;
+}
+
+static int
+gml_parse_point_v3 (gmlCoordPtr coord, double *x, double *y, double *z,
+		    int *has_z)
+{
+/* parsing GML v2.x <gml:pos> [Point] */
+    int count = 0;
+    gmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!gml_check_coord (c->Value))
+	      return 0;
+	  switch (count)
+	    {
+	    case 0:
+		*x = atof (c->Value);
+		count++;
+		break;
+	    case 1:
+		*y = atof (c->Value);
+		count++;
+		break;
+	    case 2:
+		*z = atof (c->Value);
+		count++;
+		break;
+	    default:
+		count++;
+		break;
+	    };
+	  c = c->Next;
+      }
+    if (count == 2)
+      {
+	  *has_z = 0;
+	  return 1;
+      }
+    if (count == 3)
+      {
+	  *has_z = 1;
+	  return 1;
+      }
+    return 0;
+}
+
+static int
+gml_parse_point (gaiaGeomCollPtr geom, gmlNodePtr node, int srid,
+		 gmlNodePtr * next)
+{
+/* parsing a <gml:Point> */
+    double x;
+    double y;
+    double z;
+    int has_z;
+    gaiaGeomCollPtr pt;
+    gaiaGeomCollPtr last;
+
+    if (strcmp (node->Tag, "gml:coordinates") == 0
+	|| strcmp (node->Tag, "coordinates") == 0)
+      {
+	  /* parsing a GML v.2.x <gml:Point> */
+	  if (!gml_parse_point_v2 (node->Coordinates, &x, &y, &z, &has_z))
+	      return 0;
+	  node = node->Next;
+	  if (node == NULL)
+	      return 0;
+	  if (strcmp (node->Tag, "gml:coordinates") == 0
+	      || strcmp (node->Tag, "coordinates") == 0)
+	      ;
+	  else
+	      return 0;
+	  node = node->Next;
+	  if (node == NULL)
+	      return 0;
+	  if (strcmp (node->Tag, "gml:Point") == 0
+	      || strcmp (node->Tag, "Point") == 0)
+	      ;
+	  else
+	      return 0;
+	  *next = node->Next;
+	  goto ok;
+      }
+    if (strcmp (node->Tag, "gml:pos") == 0 || strcmp (node->Tag, "pos") == 0)
+      {
+	  /* parsing a GML v.3.x <gml:Point> */
+	  if (!gml_parse_point_v3 (node->Coordinates, &x, &y, &z, &has_z))
+	      return 0;
+	  node = node->Next;
+	  if (node == NULL)
+	      return 0;
+	  if (strcmp (node->Tag, "gml:pos") == 0
+	      || strcmp (node->Tag, "pos") == 0)
+	      ;
+	  else
+	      return 0;
+	  node = node->Next;
+	  if (node == NULL)
+	      return 0;
+	  if (strcmp (node->Tag, "gml:Point") == 0
+	      || strcmp (node->Tag, "Point") == 0)
+	      ;
+	  else
+	      return 0;
+	  *next = node->Next;
+	  goto ok;
+      }
+    return 0;
+
+  ok:
+/* ok, GML nodes match as expected */
+    if (has_z)
+      {
+	  pt = gaiaAllocGeomCollXYZ ();
+	  pt->Srid = srid;
+	  gaiaAddPointToGeomCollXYZ (pt, x, y, z);
+      }
+    else
+      {
+	  pt = gaiaAllocGeomColl ();
+	  pt->Srid = srid;
+	  gaiaAddPointToGeomColl (pt, x, y);
+      }
+    last = geom;
+    while (1)
+      {
+	  /* searching the last Geometry within chain */
+	  if (last->Next == NULL)
+	      break;
+	  last = last->Next;
+      }
+    last->Next = pt;
+    return 1;
+}
+
+static int
+gml_extract_multi_coord (const char *value, double *x, double *y, double *z,
+			 int *count, int *follow)
+{
+/* extracting GML v2.x coords from a comma-separated string */
+    const char *in = value;
+    char buf[1024];
+    char *out = buf;
+    int last;
+    *out = '\0';
+    while (*in != '\0')
+      {
+	  last = *in;
+	  if (*in == ',')
+	    {
+		*out = '\0';
+		if (*buf != '\0')
+		  {
+		      if (!gml_check_coord (buf))
+			  return 0;
+		      switch (*count)
+			{
+			case 0:
+			    *x = atof (buf);
+			    *count += 1;
+			    break;
+			case 1:
+			    *y = atof (buf);
+			    *count += 1;
+			    break;
+			case 2:
+			    *z = atof (buf);
+			    *count += 1;
+			    break;
+			default:
+			    *count += 1;
+			    break;
+			};
+		  }
+		in++;
+		out = buf;
+		*out = '\0';
+		continue;
+	    }
+	  *out++ = *in++;
+      }
+    *out = '\0';
+/* parsing the last item */
+    if (*buf != '\0')
+      {
+	  if (!gml_check_coord (buf))
+	      return 0;
+	  switch (*count)
+	    {
+	    case 0:
+		*x = atof (buf);
+		*count += 1;
+		break;
+	    case 1:
+		*y = atof (buf);
+		*count += 1;
+		break;
+	    case 2:
+		*z = atof (buf);
+		*count += 1;
+		break;
+	    default:
+		*count += 1;
+		break;
+	    };
+      }
+    if (last == ',')
+	*follow = 1;
+    else
+	*follow = 0;
+    return 1;
+}
+
+static int
+gml_extract_multi_coords (gmlCoordPtr coord, double *x, double *y, double *z,
+			  int *count, gmlCoordPtr * next)
+{
+/* extracting GML v2.x coords from a comma-separated string */
+    int follow;
+    gmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!gml_extract_multi_coord (c->Value, x, y, z, count, &follow))
+	      return 0;
+	  if (!follow && c->Next != NULL)
+	    {
+		if (*(c->Next->Value) == ',')
+		    follow = 1;
+	    }
+	  if (follow)
+	      c = c->Next;
+	  else
+	    {
+		*next = c->Next;
+		break;
+	    }
+      }
+    return 1;
+}
+
+static void
+gml_add_point_to_line (gaiaDynamicLinePtr dyn, double x, double y)
+{
+/* appending a point */
+    gaiaAppendPointToDynamicLine (dyn, x, y);
+}
+
+static void
+gml_add_point_to_lineZ (gaiaDynamicLinePtr dyn, double x, double y, double z)
+{
+/* appending a point */
+    gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+}
+
+static int
+gml_parse_coordinates (gmlCoordPtr coord, gaiaDynamicLinePtr dyn, int *has_z)
+{
+/* parsing GML v2.x <gml:coordinates> [Linestring or Ring] */
+    int count = 0;
+    double x;
+    double y;
+    double z;
+    gmlCoordPtr next;
+    gmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!gml_extract_multi_coords (c, &x, &y, &z, &count, &next))
+	      return 0;
+	  if (count == 2)
+	    {
+		*has_z = 0;
+		gml_add_point_to_line (dyn, x, y);
+		count = 0;
+	    }
+	  else if (count == 3)
+	    {
+		gml_add_point_to_lineZ (dyn, x, y, z);
+		count = 0;
+	    }
+	  else
+	      return 0;
+	  c = next;
+      }
+    return 1;
+}
+
+static int
+gml_parse_posList (gmlCoordPtr coord, gaiaDynamicLinePtr dyn, int has_z)
+{
+/* parsing GML v3.x <gml:posList> [Linestring or Ring] */
+    int count = 0;
+    double x;
+    double y;
+    double z;
+    gmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!gml_check_coord (c->Value))
+	      return 0;
+	  if (!has_z)
+	    {
+		switch (count)
+		  {
+		  case 0:
+		      x = atof (c->Value);
+		      count++;
+		      break;
+		  case 1:
+		      y = atof (c->Value);
+		      gml_add_point_to_line (dyn, x, y);
+		      count = 0;
+		      break;
+		  };
+	    }
+	  else
+	    {
+		switch (count)
+		  {
+		  case 0:
+		      x = atof (c->Value);
+		      count++;
+		      break;
+		  case 1:
+		      y = atof (c->Value);
+		      count++;
+		      break;
+		  case 2:
+		      z = atof (c->Value);
+		      gml_add_point_to_lineZ (dyn, x, y, z);
+		      count = 0;
+		      break;
+		  };
+	    }
+	  c = c->Next;
+      }
+    if (count != 0)
+	return 0;
+    return 1;
+}
+
+static int
+gml_count_dyn_points (gaiaDynamicLinePtr dyn)
+{
+/* count how many vertices are into sone linestring/ring */
+    int iv = 0;
+    gaiaPointPtr pt = dyn->First;
+    while (pt)
+      {
+	  iv++;
+	  pt = pt->Next;
+      }
+    return iv;
+}
+
+static int
+gml_parse_linestring (gaiaGeomCollPtr geom, gmlNodePtr node, int srid,
+		      gmlNodePtr * next)
+{
+/* parsing a <gml:LineString> */
+    gaiaGeomCollPtr ln;
+    gaiaGeomCollPtr last;
+    gaiaLinestringPtr new_ln;
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr dyn = gaiaAllocDynamicLine ();
+    int iv;
+    int has_z = 1;
+    int points = 0;
+
+    if (strcmp (node->Tag, "gml:coordinates") == 0
+	|| strcmp (node->Tag, "coordinates") == 0)
+      {
+	  /* parsing a GML v.2.x <gml:LineString> */
+	  if (!gml_parse_coordinates (node->Coordinates, dyn, &has_z))
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:coordinates") == 0
+	      || strcmp (node->Tag, "coordinates") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LineString") == 0
+	      || strcmp (node->Tag, "LineString") == 0)
+	      ;
+	  else
+	      goto error;
+	  *next = node->Next;
+	  goto ok;
+      }
+    if (strcmp (node->Tag, "gml:posList") == 0
+	|| strcmp (node->Tag, "posList") == 0)
+      {
+	  /* parsing a GML v.3.x <gml:LineString> */
+	  has_z = gml_get_srsDimension (node);
+	  if (!gml_parse_posList (node->Coordinates, dyn, has_z))
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:posList") == 0
+	      || strcmp (node->Tag, "posList") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LineString") == 0
+	      || strcmp (node->Tag, "LineString") == 0)
+	      ;
+	  else
+	      goto error;
+	  *next = node->Next;
+	  goto ok;
+      }
+    goto error;
+
+  ok:
+/* ok, GML nodes match as expected */
+    points = gml_count_dyn_points (dyn);
+    if (points < 2)
+	goto error;
+    if (has_z)
+      {
+	  ln = gaiaAllocGeomCollXYZ ();
+	  ln->Srid = srid;
+	  new_ln = gaiaAddLinestringToGeomColl (ln, points);
+	  pt = dyn->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPointXYZ (new_ln->Coords, iv, pt->X, pt->Y, pt->Z);
+		iv++;
+		pt = pt->Next;
+	    }
+      }
+    else
+      {
+	  ln = gaiaAllocGeomColl ();
+	  ln->Srid = srid;
+	  new_ln = gaiaAddLinestringToGeomColl (ln, points);
+	  pt = dyn->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPoint (new_ln->Coords, iv, pt->X, pt->Y);
+		iv++;
+		pt = pt->Next;
+	    }
+      }
+    last = geom;
+    while (1)
+      {
+	  /* searching the last Geometry within chain */
+	  if (last->Next == NULL)
+	      break;
+	  last = last->Next;
+      }
+    last->Next = ln;
+    gaiaFreeDynamicLine (dyn);
+    return 1;
+
+  error:
+    gaiaFreeDynamicLine (dyn);
+    return 0;
+}
+
+static int
+gml_parse_curve (gaiaGeomCollPtr geom, gmlNodePtr node, int srid,
+		 gmlNodePtr * next)
+{
+/* parsing a <gml:Curve> */
+    gaiaGeomCollPtr ln;
+    gaiaGeomCollPtr last;
+    gaiaLinestringPtr new_ln;
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr dyn = gaiaAllocDynamicLine ();
+    int iv;
+    int has_z = 1;
+    int points = 0;
+
+    if (strcmp (node->Tag, "gml:segments") == 0
+	|| strcmp (node->Tag, "segments") == 0)
+      {
+	  /* parsing a GML v.3.x <gml:Curve> */
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LineStringSegment") == 0
+	      || strcmp (node->Tag, "LineStringSegment") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:posList") == 0
+	      || strcmp (node->Tag, "posList") == 0)
+	      ;
+	  else
+	      goto error;
+	  has_z = gml_get_srsDimension (node);
+	  if (!gml_parse_posList (node->Coordinates, dyn, has_z))
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:posList") == 0
+	      || strcmp (node->Tag, "posList") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LineStringSegment") == 0
+	      || strcmp (node->Tag, "LineStringSegment") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:segments") == 0
+	      || strcmp (node->Tag, "segments") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:Curve") == 0
+	      || strcmp (node->Tag, "Curve") == 0)
+	      ;
+	  else
+	      goto error;
+	  *next = node->Next;
+	  goto ok;
+      }
+    goto error;
+
+  ok:
+/* ok, GML nodes match as expected */
+    points = gml_count_dyn_points (dyn);
+    if (points < 2)
+	goto error;
+    if (has_z)
+      {
+	  ln = gaiaAllocGeomCollXYZ ();
+	  ln->Srid = srid;
+	  new_ln = gaiaAddLinestringToGeomColl (ln, points);
+	  pt = dyn->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPointXYZ (new_ln->Coords, iv, pt->X, pt->Y, pt->Z);
+		iv++;
+		pt = pt->Next;
+	    }
+      }
+    else
+      {
+	  ln = gaiaAllocGeomColl ();
+	  ln->Srid = srid;
+	  new_ln = gaiaAddLinestringToGeomColl (ln, points);
+	  pt = dyn->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPoint (new_ln->Coords, iv, pt->X, pt->Y);
+		iv++;
+		pt = pt->Next;
+	    }
+      }
+    last = geom;
+    while (1)
+      {
+	  /* searching the last Geometry within chain */
+	  if (last->Next == NULL)
+	      break;
+	  last = last->Next;
+      }
+    last->Next = ln;
+    gaiaFreeDynamicLine (dyn);
+    return 1;
+
+  error:
+    gaiaFreeDynamicLine (dyn);
+    return 0;
+}
+
+static gaiaDynamicLinePtr
+gml_parse_ring (gmlNodePtr node, int *interior, int *has_z, gmlNodePtr * next)
+{
+/* parsing a generic GML ring */
+    gaiaDynamicLinePtr dyn = gaiaAllocDynamicLine ();
+    *has_z = 1;
+
+    if (strcmp (node->Tag, "gml:outerBoundaryIs") == 0
+	|| strcmp (node->Tag, "outerBoundaryIs") == 0)
+      {
+	  /* parsing a GML v.2.x <gml:outerBoundaryIs> */
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:coordinates") == 0
+	      || strcmp (node->Tag, "coordinates") == 0)
+	    {
+		/* parsing a GML v.2.x <gml:coordinates> */
+		if (!gml_parse_coordinates (node->Coordinates, dyn, has_z))
+		    goto error;
+		node = node->Next;
+		if (node == NULL)
+		    goto error;
+		if (strcmp (node->Tag, "gml:coordinates") == 0
+		    || strcmp (node->Tag, "coordinates") == 0)
+		    ;
+		else
+		    goto error;
+	    }
+	  else if (strcmp (node->Tag, "gml:posList") == 0
+		   || strcmp (node->Tag, "posList") == 0)
+	    {
+		/* parsing a GML v.3.x <gml:posList> */
+		*has_z = gml_get_srsDimension (node);
+		if (!gml_parse_posList (node->Coordinates, dyn, *has_z))
+		    goto error;
+		node = node->Next;
+		if (node == NULL)
+		    goto error;
+		if (strcmp (node->Tag, "gml:posList") == 0
+		    || strcmp (node->Tag, "posList") == 0)
+		    ;
+		else
+		    goto error;
+	    }
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:outerBoundaryIs") == 0
+	      || strcmp (node->Tag, "outerBoundaryIs") == 0)
+	      ;
+	  else
+	      goto error;
+	  *interior = 0;
+	  *next = node->Next;
+	  return dyn;
+      }
+    if (strcmp (node->Tag, "gml:innerBoundaryIs") == 0
+	|| strcmp (node->Tag, "innerBoundaryIs") == 0)
+      {
+	  /* parsing a GML v.2.x <gml:innerBoundaryIs> */
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:coordinates") == 0
+	      || strcmp (node->Tag, "coordinates") == 0)
+	    {
+		/* parsing a GML v.2.x <gml:coordinates> */
+		if (!gml_parse_coordinates (node->Coordinates, dyn, has_z))
+		    goto error;
+		node = node->Next;
+		if (node == NULL)
+		    goto error;
+		if (strcmp (node->Tag, "gml:coordinates") == 0
+		    || strcmp (node->Tag, "coordinates") == 0)
+		    ;
+		else
+		    goto error;
+	    }
+	  else if (strcmp (node->Tag, "gml:posList") == 0
+		   || strcmp (node->Tag, "posList") == 0)
+	    {
+		/* parsing a GML v.3.x <gml:posList> */
+		*has_z = gml_get_srsDimension (node);
+		if (!gml_parse_posList (node->Coordinates, dyn, *has_z))
+		    goto error;
+		node = node->Next;
+		if (node == NULL)
+		    goto error;
+		if (strcmp (node->Tag, "gml:posList") == 0
+		    || strcmp (node->Tag, "posList") == 0)
+		    ;
+		else
+		    goto error;
+	    }
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:innerBoundaryIs") == 0
+	      || strcmp (node->Tag, "innerBoundaryIs") == 0)
+	      ;
+	  else
+	      goto error;
+	  *interior = 1;
+	  *next = node->Next;
+	  return dyn;
+      }
+    if (strcmp (node->Tag, "gml:exterior") == 0
+	|| strcmp (node->Tag, "exterior") == 0)
+      {
+	  /* parsing a GML v.3.x <gml:exterior> */
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:posList") == 0
+	      || strcmp (node->Tag, "posList") == 0)
+	      ;
+	  else
+	      goto error;
+	  *has_z = gml_get_srsDimension (node);
+	  if (!gml_parse_posList (node->Coordinates, dyn, *has_z))
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:posList") == 0
+	      || strcmp (node->Tag, "posList") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:exterior") == 0
+	      || strcmp (node->Tag, "exterior") == 0)
+	      ;
+	  else
+	      goto error;
+	  *interior = 0;
+	  *next = node->Next;
+	  return dyn;
+      }
+    if (strcmp (node->Tag, "gml:interior") == 0
+	|| strcmp (node->Tag, "interior") == 0)
+      {
+	  /* parsing a GML v.3.x <gml:interior> */
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:posList") == 0
+	      || strcmp (node->Tag, "posList") == 0)
+	      ;
+	  else
+	      goto error;
+	  *has_z = gml_get_srsDimension (node);
+	  if (!gml_parse_posList (node->Coordinates, dyn, *has_z))
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:posList") == 0
+	      || strcmp (node->Tag, "posList") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:LinearRing") == 0
+	      || strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "gml:interior") == 0
+	      || strcmp (node->Tag, "interior") == 0)
+	      ;
+	  else
+	      goto error;
+	  *interior = 1;
+	  *next = node->Next;
+	  return dyn;
+      }
+
+  error:
+    gaiaFreeDynamicLine (dyn);
+    return 0;
+}
+
+static int
+gml_parse_polygon (gaiaGeomCollPtr geom, gmlNodePtr node, int srid,
+		   gmlNodePtr * next_n)
+{
+/* parsing a <gml:Polygon> */
+    int interior;
+    int has_z;
+    int inners;
+    int outers;
+    int points;
+    int iv;
+    int ib = 0;
+    gaiaGeomCollPtr pg;
+    gaiaGeomCollPtr last_g;
+    gaiaPolygonPtr new_pg;
+    gaiaRingPtr ring;
+    gaiaDynamicLinePtr dyn;
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr exterior_ring;
+    gmlNodePtr next;
+    gmlDynamicRingPtr dyn_rng;
+    gmlDynamicPolygonPtr dyn_pg = gml_alloc_dyn_polygon ();
+    gmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on rings */
+	  if (strcmp (n->Tag, "gml:Polygon") == 0
+	      || strcmp (n->Tag, "Polygon") == 0)
+	    {
+		*next_n = n->Next;
+		break;
+	    }
+	  dyn = gml_parse_ring (n, &interior, &has_z, &next);
+	  if (dyn == NULL)
+	      goto error;
+	  if (gml_count_dyn_points (dyn) < 4)
+	    {
+		/* cannot be a valid ring */
+		goto error;
+	    }
+	  /* checking if the ring is closed */
+	  if (has_z)
+	    {
+		if (dyn->First->X == dyn->Last->X
+		    && dyn->First->Y == dyn->Last->Y
+		    && dyn->First->Z == dyn->Last->Z)
+		    ;
+		else
+		    goto error;
+	    }
+	  else
+	    {
+		if (dyn->First->X == dyn->Last->X
+		    && dyn->First->Y == dyn->Last->Y)
+		    ;
+		else
+		    goto error;
+	    }
+	  gml_add_polygon_ring (dyn_pg, dyn, interior, has_z);
+	  n = next;
+      }
+/* ok, GML nodes match as expected */
+    inners = 0;
+    outers = 0;
+    has_z = 1;
+    dyn_rng = dyn_pg->first;
+    while (dyn_rng)
+      {
+	  /* verifying the rings collection */
+	  if (dyn_rng->has_z == 0)
+	      has_z = 0;
+	  if (dyn_rng->interior)
+	      inners++;
+	  else
+	    {
+		outers++;
+		points = gml_count_dyn_points (dyn_rng->ring);
+		exterior_ring = dyn_rng->ring;
+	    }
+	  dyn_rng = dyn_rng->next;
+      }
+    if (outers != 1)		/* no exterior ring declared */
+	goto error;
+
+    if (has_z)
+      {
+	  pg = gaiaAllocGeomCollXYZ ();
+	  pg->Srid = srid;
+	  new_pg = gaiaAddPolygonToGeomColl (pg, points, inners);
+	  /* initializing the EXTERIOR RING */
+	  ring = new_pg->Exterior;
+	  pt = exterior_ring->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPointXYZ (ring->Coords, iv, pt->X, pt->Y, pt->Z);
+		iv++;
+		pt = pt->Next;
+	    }
+	  dyn_rng = dyn_pg->first;
+	  while (dyn_rng)
+	    {
+		/* initializing any INTERIOR RING */
+		if (dyn_rng->interior == 0)
+		  {
+		      dyn_rng = dyn_rng->next;
+		      continue;
+		  }
+		points = gml_count_dyn_points (dyn_rng->ring);
+		ring = gaiaAddInteriorRing (new_pg, ib, points);
+		ib++;
+		pt = dyn_rng->ring->First;
+		iv = 0;
+		while (pt)
+		  {
+		      gaiaSetPointXYZ (ring->Coords, iv, pt->X, pt->Y, pt->Z);
+		      iv++;
+		      pt = pt->Next;
+		  }
+		dyn_rng = dyn_rng->next;
+	    }
+      }
+    else
+      {
+	  pg = gaiaAllocGeomColl ();
+	  pg->Srid = srid;
+	  new_pg = gaiaAddPolygonToGeomColl (pg, points, inners);
+	  /* initializing the EXTERIOR RING */
+	  ring = new_pg->Exterior;
+	  pt = exterior_ring->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPoint (ring->Coords, iv, pt->X, pt->Y);
+		iv++;
+		pt = pt->Next;
+	    }
+	  dyn_rng = dyn_pg->first;
+	  while (dyn_rng)
+	    {
+		/* initializing any INTERIOR RING */
+		if (dyn_rng->interior == 0)
+		  {
+		      dyn_rng = dyn_rng->next;
+		      continue;
+		  }
+		points = gml_count_dyn_points (dyn_rng->ring);
+		ring = gaiaAddInteriorRing (new_pg, ib, points);
+		ib++;
+		pt = dyn_rng->ring->First;
+		iv = 0;
+		while (pt)
+		  {
+		      gaiaSetPoint (ring->Coords, iv, pt->X, pt->Y);
+		      iv++;
+		      pt = pt->Next;
+		  }
+		dyn_rng = dyn_rng->next;
+	    }
+      }
+
+    last_g = geom;
+    while (1)
+      {
+	  /* searching the last Geometry within chain */
+	  if (last_g->Next == NULL)
+	      break;
+	  last_g = last_g->Next;
+      }
+    last_g->Next = pg;
+    gml_free_dyn_polygon (dyn_pg);
+    return 1;
+
+  error:
+    gml_free_dyn_polygon (dyn_pg);
+    return 0;
+}
+
+static int
+gml_parse_multi_point (gaiaGeomCollPtr geom, gmlNodePtr node)
+{
+/* parsing a <gml:MultiPoint> */
+    int srid;
+    gmlNodePtr next;
+    gmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on Point Members */
+	  if (n->Next == NULL)
+	    {
+		/* verifying the last GML node */
+		if (strcmp (n->Tag, "gml:MultiPoint") == 0
+		    || strcmp (n->Tag, "MultiPoint") == 0)
+		    break;
+		else
+		    return 0;
+	    }
+	  if (strcmp (n->Tag, "gml:pointMember") == 0
+	      || strcmp (n->Tag, "pointMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:Point") == 0
+	      || strcmp (n->Tag, "Point") == 0)
+	      ;
+	  else
+	      return 0;
+	  srid = guessGmlSrid (n);
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (!gml_parse_point (geom, n, srid, &next))
+	      return 0;
+	  n = next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:pointMember") == 0
+	      || strcmp (n->Tag, "pointMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+      }
+    return 1;
+}
+
+static int
+gml_parse_multi_linestring (gaiaGeomCollPtr geom, gmlNodePtr node)
+{
+/* parsing a <gml:MultiLineString> */
+    int srid;
+    gmlNodePtr next;
+    gmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on LineString Members */
+	  if (n->Next == NULL)
+	    {
+		/* verifying the last GML node */
+		if (strcmp (n->Tag, "gml:MultiLineString") == 0
+		    || strcmp (n->Tag, "MultiLineString") == 0)
+		    break;
+		else
+		    return 0;
+	    }
+	  if (strcmp (n->Tag, "gml:lineStringMember") == 0
+	      || strcmp (n->Tag, "lineStringMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:LineString") == 0
+	      || strcmp (n->Tag, "LineString") == 0)
+	      ;
+	  else
+	      return 0;
+	  srid = guessGmlSrid (n);
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (!gml_parse_linestring (geom, n, srid, &next))
+	      return 0;
+	  n = next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:lineStringMember") == 0
+	      || strcmp (n->Tag, "lineStringMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+      }
+    return 1;
+}
+
+static int
+gml_parse_multi_curve (gaiaGeomCollPtr geom, gmlNodePtr node)
+{
+/* parsing a <gml:MultiCurve> */
+    int srid;
+    gmlNodePtr next;
+    gmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on Curve Members */
+	  if (n->Next == NULL)
+	    {
+		/* verifying the last GML node */
+		if (strcmp (n->Tag, "gml:MultiCurve") == 0
+		    || strcmp (n->Tag, "MultiCurve") == 0)
+		    break;
+		else
+		    return 0;
+	    }
+	  if (strcmp (n->Tag, "gml:curveMember") == 0
+	      || strcmp (n->Tag, "curveMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:Curve") == 0
+	      || strcmp (n->Tag, "Curve") == 0)
+	      ;
+	  else
+	      return 0;
+	  srid = guessGmlSrid (n);
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (!gml_parse_curve (geom, n, srid, &next))
+	      return 0;
+	  n = next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:curveMember") == 0
+	      || strcmp (n->Tag, "curveMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+      }
+    return 1;
+}
+
+static int
+gml_parse_multi_polygon (gaiaGeomCollPtr geom, gmlNodePtr node)
+{
+/* parsing a <gml:MultiPolygon> */
+    int srid;
+    gmlNodePtr next;
+    gmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on Polygon Members */
+	  if (n->Next == NULL)
+	    {
+		/* verifying the last GML node */
+		if (strcmp (n->Tag, "gml:MultiPolygon") == 0
+		    || strcmp (n->Tag, "MultiPolygon") == 0)
+		    break;
+		else
+		    return 0;
+	    }
+	  if (strcmp (n->Tag, "gml:polygonMember") == 0
+	      || strcmp (n->Tag, "polygonMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:Polygon") == 0
+	      || strcmp (n->Tag, "Polygon") == 0)
+	      ;
+	  else
+	      return 0;
+	  srid = guessGmlSrid (n);
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (!gml_parse_polygon (geom, n, srid, &next))
+	      return 0;
+	  n = next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:polygonMember") == 0
+	      || strcmp (n->Tag, "polygonMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+      }
+    return 1;
+}
+
+static int
+gml_parse_multi_surface (gaiaGeomCollPtr geom, gmlNodePtr node)
+{
+/* parsing a <gml:MultiSurface> */
+    int srid;
+    gmlNodePtr next;
+    gmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on Surface Members */
+	  if (n->Next == NULL)
+	    {
+		/* verifying the last GML node */
+		if (strcmp (n->Tag, "gml:MultiSurface") == 0
+		    || strcmp (n->Tag, "MultiSurface") == 0)
+		    break;
+		else
+		    return 0;
+	    }
+	  if (strcmp (n->Tag, "gml:surfaceMember") == 0
+	      || strcmp (n->Tag, "surfaceMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:Polygon") == 0
+	      || strcmp (n->Tag, "Polygon") == 0)
+	      ;
+	  else
+	      return 0;
+	  srid = guessGmlSrid (n);
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (!gml_parse_polygon (geom, n, srid, &next))
+	      return 0;
+	  n = next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:surfaceMember") == 0
+	      || strcmp (n->Tag, "surfaceMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+      }
+    return 1;
+}
+
+static int
+gml_parse_multi_geometry (gaiaGeomCollPtr geom, gmlNodePtr node)
+{
+/* parsing a <gml:MultiGeometry> */
+    int srid;
+    gmlNodePtr next;
+    gmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on Geometry Members */
+	  if (n->Next == NULL)
+	    {
+		/* verifying the last GML node */
+		if (strcmp (n->Tag, "gml:MultiGeometry") == 0
+		    || strcmp (n->Tag, "MultiGeometry") == 0)
+		    break;
+		else
+		    return 0;
+	    }
+	  if (strcmp (n->Tag, "gml:geometryMember") == 0
+	      || strcmp (n->Tag, "geometryMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:Point") == 0
+	      || strcmp (n->Tag, "Point") == 0)
+	    {
+		srid = guessGmlSrid (n);
+		n = n->Next;
+		if (n == NULL)
+		    return 0;
+		if (!gml_parse_point (geom, n, srid, &next))
+		    return 0;
+		n = next;
+	    }
+	  else if (strcmp (n->Tag, "gml:LineString") == 0
+		   || strcmp (n->Tag, "LineString") == 0)
+	    {
+		srid = guessGmlSrid (n);
+		n = n->Next;
+		if (n == NULL)
+		    return 0;
+		if (!gml_parse_linestring (geom, n, srid, &next))
+		    return 0;
+		n = next;
+	    }
+	  else if (strcmp (n->Tag, "gml:Curve") == 0
+		   || strcmp (n->Tag, "Curve") == 0)
+	    {
+		srid = guessGmlSrid (n);
+		n = n->Next;
+		if (n == NULL)
+		    return 0;
+		if (!gml_parse_curve (geom, n, srid, &next))
+		    return 0;
+		n = next;
+	    }
+	  else if (strcmp (n->Tag, "gml:Polygon") == 0
+		   || strcmp (n->Tag, "Polygon") == 0)
+	    {
+		srid = guessGmlSrid (n);
+		n = n->Next;
+		if (n == NULL)
+		    return 0;
+		if (!gml_parse_polygon (geom, n, srid, &next))
+		    return 0;
+		n = next;
+	    }
+	  else
+	      return 0;
+	  if (n == NULL)
+	      return 0;
+	  if (strcmp (n->Tag, "gml:geometryMember") == 0
+	      || strcmp (n->Tag, "geometryMember") == 0)
+	      ;
+	  else
+	      return 0;
+	  n = n->Next;
+      }
+    return 1;
+}
+
+static gaiaGeomCollPtr
+gml_validate_geometry (gaiaGeomCollPtr chain, sqlite3 * sqlite_handle)
+{
+    int xy = 0;
+    int xyz = 0;
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaPointPtr save_pt;
+    gaiaLinestringPtr save_ln;
+    gaiaPolygonPtr save_pg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    int ib;
+    int delete_g2;
+    gaiaGeomCollPtr g;
+    gaiaGeomCollPtr g2;
+    gaiaGeomCollPtr geom;
+    char proj_from[2048];
+    char proj_to[2048];
+
+    g = chain;
+    while (g)
+      {
+	  if (g != chain)
+	    {
+		if (g->DimensionModel == GAIA_XY)
+		    xy++;
+		if (g->DimensionModel == GAIA_XY_Z)
+		    xyz++;
+	    }
+	  pt = g->FirstPoint;
+	  while (pt)
+	    {
+		pts++;
+		save_pt = pt;
+		pt = pt->Next;
+	    }
+	  ln = g->FirstLinestring;
+	  while (ln)
+	    {
+		lns++;
+		save_ln = ln;
+		ln = ln->Next;
+	    }
+	  pg = g->FirstPolygon;
+	  while (pg)
+	    {
+		pgs++;
+		save_pg = pg;
+		pg = pg->Next;
+	    }
+	  g = g->Next;
+      }
+    if (pts == 1 && lns == 0 && pgs == 0)
+      {
+	  /* POINT */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_MULTIPOINT)
+		    geom->DeclaredType = GAIA_MULTIPOINT;
+		else if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_POINT;
+		gaiaAddPointToGeomColl (geom, save_pt->X, save_pt->Y);
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_MULTIPOINT)
+		    geom->DeclaredType = GAIA_MULTIPOINT;
+		else if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_POINT;
+		gaiaAddPointToGeomCollXYZ (geom, save_pt->X, save_pt->Y,
+					   save_pt->Z);
+		return geom;
+	    }
+      }
+    if (pts == 0 && lns == 1 && pgs == 0)
+      {
+	  /* LINESTRING */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+	    }
+	  geom->Srid = chain->Srid;
+	  if (chain->DeclaredType == GAIA_MULTILINESTRING)
+	      geom->DeclaredType = GAIA_MULTILINESTRING;
+	  else if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      geom->DeclaredType = GAIA_LINESTRING;
+	  ln = gaiaAddLinestringToGeomColl (geom, save_ln->Points);
+	  gaiaCopyLinestringCoords (ln, save_ln);
+	  return geom;
+      }
+    if (pts == 0 && lns == 0 && pgs == 1)
+      {
+	  /* POLYGON */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+	    }
+	  geom->Srid = chain->Srid;
+	  if (chain->DeclaredType == GAIA_MULTIPOLYGON)
+	      geom->DeclaredType = GAIA_MULTIPOLYGON;
+	  else if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      geom->DeclaredType = GAIA_POLYGON;
+	  i_ring = save_pg->Exterior;
+	  pg = gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+					 save_pg->NumInteriors);
+	  o_ring = pg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < save_pg->NumInteriors; ib++)
+	    {
+		i_ring = save_pg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (pg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  return geom;
+      }
+    if (pts >= 1 && lns == 0 && pgs == 0)
+      {
+	  /* MULTIPOINT */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_MULTIPOINT;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet set any SRID */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      pt = g2->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomColl (geom, pt->X, pt->Y);
+			    pt = pt->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_MULTIPOINT;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet a SRID set */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      pt = g2->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomCollXYZ (geom, pt->X, pt->Y,
+						       pt->Z);
+			    pt = pt->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    if (pts == 0 && lns >= 1 && pgs == 0)
+      {
+	  /* MULTILINESTRING */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_MULTILINESTRING;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet set any SRID */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      ln = g2->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_MULTILINESTRING;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet a SRID set */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      ln = g2->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    if (pts == 0 && lns == 0 && pgs >= 1)
+      {
+	  /* MULTIPOLYGON */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_MULTIPOLYGON;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet set any SRID */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      pg = g2->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->Srid = chain->Srid;
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		else
+		    geom->DeclaredType = GAIA_MULTIPOLYGON;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet a SRID set */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      pg = g2->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    if ((pts + lns + pgs) > 0)
+      {
+	  /* GEOMETRYCOLLECTION */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->Srid = chain->Srid;
+		geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet set any SRID */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      pt = g2->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomColl (geom, pt->X, pt->Y);
+			    pt = pt->Next;
+			}
+		      ln = g2->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      pg = g2->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->Srid = chain->Srid;
+		geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		g = chain;
+		while (g)
+		  {
+		      if (geom->Srid == -1)
+			{
+			    /* we haven't yet a SRID set */
+			    geom->Srid = g->Srid;
+			}
+		      g2 = g;
+		      delete_g2 = 0;
+		      if (g->Srid != geom->Srid && g->Srid != -1
+			  && sqlite_handle != NULL)
+			{
+			    /* we'll try to apply a reprojection */
+#ifndef OMIT_PROJ		/* but only if PROJ.4 is actually available */
+			    gml_proj_params (sqlite_handle, g->Srid, proj_from);
+			    gml_proj_params (sqlite_handle, geom->Srid,
+					     proj_to);
+			    if (*proj_to == '\0' || *proj_from == '\0')
+				;
+			    else
+			      {
+				  g2 = gaiaTransform (g, proj_from, proj_to);
+				  if (!g2)
+				      g2 = g;
+				  else
+				      delete_g2 = 1;
+			      }
+#endif
+			}
+		      pt = g2->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomCollXYZ (geom, pt->X, pt->Y,
+						       pt->Z);
+			    pt = pt->Next;
+			}
+		      ln = g2->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      pg = g2->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      if (delete_g2)
+			  gaiaFreeGeomColl (g2);
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    return NULL;
+}
+
+static void
+gml_free_geom_chain (gaiaGeomCollPtr geom)
+{
+/* deleting a chain of preliminary geometries */
+    gaiaGeomCollPtr gn;
+    while (geom)
+      {
+	  gn = geom->Next;
+	  gaiaFreeGeomColl (geom);
+	  geom = gn;
+      }
+}
+
+static gaiaGeomCollPtr
+gml_build_geometry (gmlNodePtr tree, sqlite3 * sqlite_handle)
+{
+/* attempting to build a geometry from GML nodes */
+    gaiaGeomCollPtr geom;
+    gaiaGeomCollPtr result;
+    int geom_type;
+    gmlNodePtr next;
+
+    if (tree == NULL)
+	return NULL;
+    geom_type = guessGmlGeometryType (tree);
+    if (geom_type == GAIA_GML_UNKNOWN)
+      {
+	  /* unsupported main geometry type */
+	  return NULL;
+      }
+/* creating the main geometry */
+    geom = gaiaAllocGeomColl ();
+    geom->Srid = guessGmlSrid (tree);
+
+    switch (geom_type)
+      {
+	  /* parsing GML nodes accordingly with declared GML type */
+      case GAIA_GML_POINT:
+	  geom->DeclaredType = GAIA_POINT;
+	  if (!gml_parse_point (geom, tree->Next, geom->Srid, &next))
+	      goto error;
+	  break;
+      case GAIA_GML_LINESTRING:
+	  geom->DeclaredType = GAIA_LINESTRING;
+	  if (!gml_parse_linestring (geom, tree->Next, geom->Srid, &next))
+	      goto error;
+	  break;
+      case GAIA_GML_CURVE:
+	  geom->DeclaredType = GAIA_LINESTRING;
+	  if (!gml_parse_curve (geom, tree->Next, geom->Srid, &next))
+	      goto error;
+	  break;
+      case GAIA_GML_POLYGON:
+	  geom->DeclaredType = GAIA_POLYGON;
+	  if (!gml_parse_polygon (geom, tree->Next, geom->Srid, &next))
+	      goto error;
+	  if (next != NULL)
+	      goto error;
+	  break;
+      case GAIA_GML_MULTIPOINT:
+	  geom->DeclaredType = GAIA_MULTIPOINT;
+	  if (!gml_parse_multi_point (geom, tree->Next))
+	      goto error;
+	  break;
+      case GAIA_GML_MULTILINESTRING:
+	  geom->DeclaredType = GAIA_MULTILINESTRING;
+	  if (!gml_parse_multi_linestring (geom, tree->Next))
+	      goto error;
+	  break;
+      case GAIA_GML_MULTICURVE:
+	  geom->DeclaredType = GAIA_MULTILINESTRING;
+	  if (!gml_parse_multi_curve (geom, tree->Next))
+	      goto error;
+	  break;
+      case GAIA_GML_MULTIPOLYGON:
+	  geom->DeclaredType = GAIA_MULTIPOLYGON;
+	  if (!gml_parse_multi_polygon (geom, tree->Next))
+	      goto error;
+	  break;
+      case GAIA_GML_MULTISURFACE:
+	  geom->DeclaredType = GAIA_MULTIPOLYGON;
+	  if (!gml_parse_multi_surface (geom, tree->Next))
+	      goto error;
+	  break;
+      case GAIA_GML_MULTIGEOMETRY:
+	  geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+	  if (!gml_parse_multi_geometry (geom, tree->Next))
+	      goto error;
+	  break;
+      };
+
+/* attempting to build the final geometry */
+    result = gml_validate_geometry (geom, sqlite_handle);
+    if (result == NULL)
+	goto error;
+    gml_free_geom_chain (geom);
+    return result;
+
+  error:
+    gml_free_geom_chain (geom);
+    return NULL;
+}
+
+
+
+/*
+** CAVEAT: we must redefine any Lemon/Flex own macro
+*/
+#define YYMINORTYPE		GML_MINORTYPE
+#define YY_CHAR			GML_YY_CHAR
+#define	input			gml_input
+#define ParseAlloc		gmlParseAlloc
+#define ParseFree		gmlParseFree
+#define ParseStackPeak		gmlParseStackPeak
+#define Parse			gmlParse
+#define yyStackEntry		gml_yyStackEntry
+#define yyzerominor		gml_yyzerominor
+#define yy_accept		gml_yy_accept
+#define yy_action		gml_yy_action
+#define yy_base			gml_yy_base
+#define yy_buffer_stack		gml_yy_buffer_stack
+#define yy_buffer_stack_max	gml_yy_buffer_stack_max
+#define yy_buffer_stack_top	gml_yy_buffer_stack_top
+#define yy_c_buf_p		gml_yy_c_buf_p
+#define yy_chk			gml_yy_chk
+#define yy_def			gml_yy_def
+#define yy_default		gml_yy_default
+#define yy_destructor		gml_yy_destructor
+#define yy_ec			gml_yy_ec
+#define yy_fatal_error		gml_yy_fatal_error
+#define yy_find_reduce_action	gml_yy_find_reduce_action
+#define yy_find_shift_action	gml_yy_find_shift_action
+#define yy_get_next_buffer	gml_yy_get_next_buffer
+#define yy_get_previous_state	gml_yy_get_previous_state
+#define yy_init			gml_yy_init
+#define yy_init_globals		gml_yy_init_globals
+#define yy_lookahead		gml_yy_lookahead
+#define yy_meta			gml_yy_meta
+#define yy_nxt			gml_yy_nxt
+#define yy_parse_failed		gml_yy_parse_failed
+#define yy_pop_parser_stack	gml_yy_pop_parser_stack
+#define yy_reduce		gml_yy_reduce
+#define yy_reduce_ofst		gml_yy_reduce_ofst
+#define yy_shift		gml_yy_shift
+#define yy_shift_ofst		gml_yy_shift_ofst
+#define yy_start		gml_yy_start
+#define yy_state_type		gml_yy_state_type
+#define yy_syntax_error		gml_yy_syntax_error
+#define yy_trans_info		gml_yy_trans_info
+#define yy_try_NUL_trans	gml_yy_try_NUL_trans
+#define yyParser		gml_yyParser
+#define yyStackEntry		gml_yyStackEntry
+#define yyStackOverflow		gml_yyStackOverflow
+#define yyRuleInfo		gml_yyRuleInfo
+#define yyunput			gml_yyunput
+#define yyzerominor		gml_yyzerominor
+#define yyTraceFILE		gml_yyTraceFILE
+#define yyTracePrompt		gml_yyTracePrompt
+#define yyTokenName		gml_yyTokenName
+#define yyRuleName		gml_yyRuleName
+#define ParseTrace		gml_ParseTrace
+
+
+/*
+ GML_LEMON_H_START - LEMON generated header starts here 
+*/
+#define GML_NEWLINE                     1
+#define GML_END                         2
+#define GML_CLOSE                       3
+#define GML_OPEN                        4
+#define GML_KEYWORD                     5
+#define GML_EQ                          6
+#define GML_VALUE                       7
+#define GML_COORD                       8
+/*
+ GML_LEMON_H_END - LEMON generated header ends here 
+*/
+
+
+typedef union
+{
+    char *pval;
+    struct symtab *symp;
+} gml_yystype;
+#define YYSTYPE gml_yystype
+
+
+/* extern YYSTYPE yylval; */
+YYSTYPE GmlLval;
+
+
+
+/*
+ GML_LEMON_START - LEMON generated code starts here 
+*/
+
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is included that follows the "include" declaration
+** in the input grammar file. */
+#include <stdio.h>
+
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/* 
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands. 
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+**    YYCODETYPE         is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 terminals
+**                       and nonterminals.  "int" is used otherwise.
+**    YYNOCODE           is a number of type YYCODETYPE which corresponds
+**                       to no legal terminal or nonterminal number.  This
+**                       number is used to fill in empty slots of the hash 
+**                       table.
+**    YYFALLBACK         If defined, this indicates that one or more tokens
+**                       have fall-back values which should be used if the
+**                       original value of the token will not parse.
+**    YYACTIONTYPE       is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 rules and
+**                       states combined.  "int" is used otherwise.
+**    ParseTOKENTYPE     is the data type used for minor tokens given 
+**                       directly to the parser from the tokenizer.
+**    YYMINORTYPE        is the data type used for all minor tokens.
+**                       This is typically a union of many types, one of
+**                       which is ParseTOKENTYPE.  The entry in the union
+**                       for base tokens is called "yy0".
+**    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
+**                       zero the stack is dynamically sized using realloc()
+**    ParseARG_SDECL     A static variable declaration for the %extra_argument
+**    ParseARG_PDECL     A parameter declaration for the %extra_argument
+**    ParseARG_STORE     Code to store %extra_argument into yypParser
+**    ParseARG_FETCH     Code to extract %extra_argument from yypParser
+**    YYNSTATE           the combined number of states.
+**    YYNRULE            the number of rules in the grammar
+**    YYERRORSYMBOL      is the code number of the error symbol.  If not
+**                       defined, then do no error processing.
+*/
+#define YYCODETYPE unsigned char
+#define YYNOCODE 28
+#define YYACTIONTYPE unsigned char
+#define ParseTOKENTYPE void *
+typedef union {
+  int yyinit;
+  ParseTOKENTYPE yy0;
+} YYMINORTYPE;
+#ifndef YYSTACKDEPTH
+#define YYSTACKDEPTH 1000000
+#endif
+#define ParseARG_SDECL  gmlNodePtr *result ;
+#define ParseARG_PDECL , gmlNodePtr *result 
+#define ParseARG_FETCH  gmlNodePtr *result  = yypParser->result 
+#define ParseARG_STORE yypParser->result  = result 
+#define YYNSTATE 49
+#define YYNRULE 34
+#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
+
+/* The yyzerominor constant is used to initialize instances of
+** YYMINORTYPE objects to zero. */
+static const YYMINORTYPE yyzerominor = { 0 };
+
+/* Define the yytestcase() macro to be a no-op if is not already defined
+** otherwise.
+**
+** Applications can choose to define yytestcase() in the %include section
+** to a macro that can assist in verifying code coverage.  For production
+** code the yytestcase() macro should be turned off.  But it is useful
+** for testing.
+*/
+#ifndef yytestcase
+# define yytestcase(X)
+#endif
+
+
+/* Next are the tables used to determine what action to take based on the
+** current state and lookahead token.  These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.  
+**
+** Suppose the action integer is N.  Then the action is determined as
+** follows
+**
+**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
+**                                      token onto the stack and goto state N.
+**
+**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
+**
+**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
+**
+**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
+**
+**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
+**                                      slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+**      yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.  
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+**  yy_action[]        A single table containing all actions.
+**  yy_lookahead[]     A table containing the lookahead for each entry in
+**                     yy_action.  Used to detect hash collisions.
+**  yy_shift_ofst[]    For each state, the offset into yy_action for
+**                     shifting terminals.
+**  yy_reduce_ofst[]   For each state, the offset into yy_action for
+**                     shifting non-terminals after a reduce.
+**  yy_default[]       Default action for each state.
+*/
+static const YYACTIONTYPE yy_action[] = {
+ /*     0 */    20,   28,   29,    4,   48,    5,    3,    3,    5,    5,
+ /*    10 */    42,   84,    1,   42,   42,   47,   46,    2,   10,    5,
+ /*    20 */    21,   12,   32,   23,   42,   38,   22,    6,   49,   23,
+ /*    30 */    13,   19,   14,   15,   35,    8,    8,   10,   25,   11,
+ /*    40 */    18,   34,   33,   45,   37,   16,   40,   17,   41,   14,
+ /*    50 */     9,   23,   43,    7,   45,   27,   30,   26,   31,   36,
+ /*    60 */    39,   44,   24,
+};
+static const YYCODETYPE yy_lookahead[] = {
+ /*     0 */    12,   13,   14,   15,   16,   17,   15,   15,   17,   17,
+ /*    10 */    22,   10,   11,   22,   22,   24,   24,   15,   18,   17,
+ /*    20 */     2,    3,    8,    5,   22,   25,    2,    3,    0,    5,
+ /*    30 */    18,   19,    4,   20,   21,   20,   20,   18,    2,    3,
+ /*    40 */     2,   26,   26,    5,   25,   20,   21,   20,   21,    4,
+ /*    50 */    18,    5,   23,   20,    5,    1,    3,   23,    3,    7,
+ /*    60 */     3,    3,    6,
+};
+#define YY_SHIFT_USE_DFLT (-1)
+#define YY_SHIFT_MAX 26
+static const signed char yy_shift_ofst[] = {
+ /*     0 */    -1,   28,   45,   45,   45,   18,   14,   14,   14,   46,
+ /*    10 */    46,   14,   14,   24,   38,   14,   14,   14,   49,   36,
+ /*    20 */    54,   53,   55,   56,   52,   57,   58,
+};
+#define YY_REDUCE_USE_DFLT (-13)
+#define YY_REDUCE_MAX 18
+static const signed char yy_reduce_ofst[] = {
+ /*     0 */     1,  -12,   -9,   -8,    2,   12,   13,   15,   16,    0,
+ /*    10 */    19,   25,   27,   32,   29,   33,   33,   33,   34,
+};
+static const YYACTIONTYPE yy_default[] = {
+ /*     0 */    50,   83,   72,   72,   54,   83,   60,   80,   80,   76,
+ /*    10 */    76,   61,   59,   83,   83,   64,   66,   62,   83,   83,
+ /*    20 */    83,   83,   83,   83,   83,   83,   83,   51,   52,   53,
+ /*    30 */    56,   57,   79,   81,   82,   65,   75,   77,   78,   58,
+ /*    40 */    67,   63,   68,   69,   70,   71,   73,   74,   55,
+};
+#define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0]))
+
+/* The next table maps tokens into fallback tokens.  If a construct
+** like the following:
+** 
+**      %fallback ID X Y Z.
+**
+** appears in the grammar, then ID becomes a fallback token for X, Y,
+** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack.  Information stored includes:
+**
+**   +  The state number for the parser at this level of the stack.
+**
+**   +  The value of the token stored at this level of the stack.
+**      (In other words, the "major" token.)
+**
+**   +  The semantic value stored at this level of the stack.  This is
+**      the information used by the action routines in the grammar.
+**      It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+  YYACTIONTYPE stateno;  /* The state-number */
+  YYCODETYPE major;      /* The major token value.  This is the code
+                         ** number for the token at this stack level */
+  YYMINORTYPE minor;     /* The user-supplied minor token value.  This
+                         ** is the value of the token  */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+  int yyidx;                    /* Index of top element in stack */
+#ifdef YYTRACKMAXSTACKDEPTH
+  int yyidxMax;                 /* Maximum value of yyidx */
+#endif
+  int yyerrcnt;                 /* Shifts left before out of the error */
+  ParseARG_SDECL                /* A place to hold %extra_argument */
+#if YYSTACKDEPTH<=0
+  int yystksz;                  /* Current side of the stack */
+  yyStackEntry *yystack;        /* The parser's stack */
+#else
+  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
+#endif
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* 
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message.  Tracing is turned off
+** by making either argument NULL 
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+**      If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+**      line of trace output.  If NULL, then tracing is
+**      turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void ParseTrace(FILE *TraceFILE, char *zTracePrompt){
+  yyTraceFILE = TraceFILE;
+  yyTracePrompt = zTracePrompt;
+  if( yyTraceFILE==0 ) yyTracePrompt = 0;
+  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required.  The following table supplies these names */
+static const char *const yyTokenName[] = { 
+  "$",             "GML_NEWLINE",   "GML_END",       "GML_CLOSE",   
+  "GML_OPEN",      "GML_KEYWORD",   "GML_EQ",        "GML_VALUE",   
+  "GML_COORD",     "error",         "main",          "in",          
+  "state",         "program",       "gml_tree",      "node",        
+  "node_chain",    "open_tag",      "attr",          "attributes",  
+  "coord",         "coord_chain",   "close_tag",     "keyword",     
+  "extra_nodes",   "extra_attr",    "extra_coord", 
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *const yyRuleName[] = {
+ /*   0 */ "main ::= in",
+ /*   1 */ "in ::=",
+ /*   2 */ "in ::= in state GML_NEWLINE",
+ /*   3 */ "state ::= program",
+ /*   4 */ "program ::= gml_tree",
+ /*   5 */ "gml_tree ::= node",
+ /*   6 */ "gml_tree ::= node_chain",
+ /*   7 */ "node ::= open_tag GML_END GML_CLOSE",
+ /*   8 */ "node ::= open_tag attr GML_END GML_CLOSE",
+ /*   9 */ "node ::= open_tag attributes GML_END GML_CLOSE",
+ /*  10 */ "node ::= open_tag GML_CLOSE",
+ /*  11 */ "node ::= open_tag attr GML_CLOSE",
+ /*  12 */ "node ::= open_tag attributes GML_CLOSE",
+ /*  13 */ "node ::= open_tag GML_CLOSE coord",
+ /*  14 */ "node ::= open_tag GML_CLOSE coord_chain",
+ /*  15 */ "node ::= open_tag attr GML_CLOSE coord",
+ /*  16 */ "node ::= open_tag attr GML_CLOSE coord_chain",
+ /*  17 */ "node ::= open_tag attributes GML_CLOSE coord",
+ /*  18 */ "node ::= open_tag attributes GML_CLOSE coord_chain",
+ /*  19 */ "node ::= close_tag",
+ /*  20 */ "open_tag ::= GML_OPEN keyword",
+ /*  21 */ "close_tag ::= GML_OPEN GML_END keyword GML_CLOSE",
+ /*  22 */ "keyword ::= GML_KEYWORD",
+ /*  23 */ "extra_nodes ::=",
+ /*  24 */ "extra_nodes ::= node extra_nodes",
+ /*  25 */ "node_chain ::= node node extra_nodes",
+ /*  26 */ "attr ::= GML_KEYWORD GML_EQ GML_VALUE",
+ /*  27 */ "extra_attr ::=",
+ /*  28 */ "extra_attr ::= attr extra_attr",
+ /*  29 */ "attributes ::= attr attr extra_attr",
+ /*  30 */ "coord ::= GML_COORD",
+ /*  31 */ "extra_coord ::=",
+ /*  32 */ "extra_coord ::= coord extra_coord",
+ /*  33 */ "coord_chain ::= coord coord extra_coord",
+};
+#endif /* NDEBUG */
+
+
+#if YYSTACKDEPTH<=0
+/*
+** Try to increase the size of the parser stack.
+*/
+static void yyGrowStack(yyParser *p){
+  int newSize;
+  yyStackEntry *pNew;
+
+  newSize = p->yystksz*2 + 100;
+  pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+  if( pNew ){
+    p->yystack = pNew;
+    p->yystksz = newSize;
+#ifndef NDEBUG
+    if( yyTraceFILE ){
+      fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
+              yyTracePrompt, p->yystksz);
+    }
+#endif
+  }
+}
+#endif
+
+/* 
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser.  This pointer is used in subsequent calls
+** to Parse and ParseFree.
+*/
+void *ParseAlloc(void *(*mallocProc)(size_t)){
+  yyParser *pParser;
+  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+  if( pParser ){
+    pParser->yyidx = -1;
+#ifdef YYTRACKMAXSTACKDEPTH
+    pParser->yyidxMax = 0;
+#endif
+#if YYSTACKDEPTH<=0
+    pParser->yystack = NULL;
+    pParser->yystksz = 0;
+    yyGrowStack(pParser);
+#endif
+  }
+  return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol.  The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(
+  yyParser *yypParser,    /* The parser */
+  YYCODETYPE yymajor,     /* Type code for object to destroy */
+  YYMINORTYPE *yypminor   /* The object to be destroyed */
+){
+  ParseARG_FETCH;
+  switch( yymajor ){
+    /* Here is inserted the actions which take place when a
+    ** terminal or non-terminal is destroyed.  This can happen
+    ** when the symbol is popped from the stack during a
+    ** reduce or during error processing or when a parser is 
+    ** being destroyed before it is finished parsing.
+    **
+    ** Note: during a reduce, the only symbols destroyed are those
+    ** which appear on the RHS of the rule, but which are not used
+    ** inside the C code.
+    */
+    default:  break;   /* If no destructor action specified: do nothing */
+  }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+  YYCODETYPE yymajor;
+  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+  if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+  if( yyTraceFILE && pParser->yyidx>=0 ){
+    fprintf(yyTraceFILE,"%sPopping %s\n",
+      yyTracePrompt,
+      yyTokenName[yytos->major]);
+  }
+#endif
+  yymajor = yytos->major;
+  yy_destructor(pParser, yymajor, &yytos->minor);
+  pParser->yyidx--;
+  return yymajor;
+}
+
+/* 
+** Deallocate and destroy a parser.  Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li>  A pointer to the parser.  This should be a pointer
+**       obtained from ParseAlloc.
+** <li>  A pointer to a function used to reclaim memory obtained
+**       from malloc.
+** </ul>
+*/
+void ParseFree(
+  void *p,                    /* The parser to be deleted */
+  void (*freeProc)(void*)     /* Function used to reclaim memory */
+){
+  yyParser *pParser = (yyParser*)p;
+  if( pParser==0 ) return;
+  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+#if YYSTACKDEPTH<=0
+  free(pParser->yystack);
+#endif
+  (*freeProc)((void*)pParser);
+}
+
+/*
+** Return the peak depth of the stack for a parser.
+*/
+#ifdef YYTRACKMAXSTACKDEPTH
+int ParseStackPeak(void *p){
+  yyParser *pParser = (yyParser*)p;
+  return pParser->yyidxMax;
+}
+#endif
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+  yyParser *pParser,        /* The parser */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+ 
+  if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    if( iLookAhead>0 ){
+#ifdef YYFALLBACK
+      YYCODETYPE iFallback;            /* Fallback token */
+      if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+             && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+             yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+        }
+#endif
+        return yy_find_shift_action(pParser, iFallback);
+      }
+#endif
+#ifdef YYWILDCARD
+      {
+        int j = i - iLookAhead + YYWILDCARD;
+        if( j>=0 && j<YY_SZ_ACTTAB && yy_lookahead[j]==YYWILDCARD ){
+#ifndef NDEBUG
+          if( yyTraceFILE ){
+            fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
+               yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
+          }
+#endif /* NDEBUG */
+          return yy_action[j];
+        }
+      }
+#endif /* YYWILDCARD */
+    }
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+  int stateno,              /* Current state number */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+#ifdef YYERRORSYMBOL
+  if( stateno>YY_REDUCE_MAX ){
+    return yy_default[stateno];
+  }
+#else
+  assert( stateno<=YY_REDUCE_MAX );
+#endif
+  i = yy_reduce_ofst[stateno];
+  assert( i!=YY_REDUCE_USE_DFLT );
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+#ifdef YYERRORSYMBOL
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    return yy_default[stateno];
+  }
+#else
+  assert( i>=0 && i<YY_SZ_ACTTAB );
+  assert( yy_lookahead[i]==iLookAhead );
+#endif
+  return yy_action[i];
+}
+
+/*
+** The following routine is called if the stack overflows.
+*/
+static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
+   ParseARG_FETCH;
+   yypParser->yyidx--;
+#ifndef NDEBUG
+   if( yyTraceFILE ){
+     fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+   }
+#endif
+   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+   /* Here code is inserted which will execute if the parser
+   ** stack every overflows */
+
+     fprintf(stderr,"Giving up.  Parser stack overflow\n");
+   ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+  yyParser *yypParser,          /* The parser to be shifted */
+  int yyNewState,               /* The new state to shift in */
+  int yyMajor,                  /* The major token to shift in */
+  YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
+){
+  yyStackEntry *yytos;
+  yypParser->yyidx++;
+#ifdef YYTRACKMAXSTACKDEPTH
+  if( yypParser->yyidx>yypParser->yyidxMax ){
+    yypParser->yyidxMax = yypParser->yyidx;
+  }
+#endif
+#if YYSTACKDEPTH>0 
+  if( yypParser->yyidx>=YYSTACKDEPTH ){
+    yyStackOverflow(yypParser, yypMinor);
+    return;
+  }
+#else
+  if( yypParser->yyidx>=yypParser->yystksz ){
+    yyGrowStack(yypParser);
+    if( yypParser->yyidx>=yypParser->yystksz ){
+      yyStackOverflow(yypParser, yypMinor);
+      return;
+    }
+  }
+#endif
+  yytos = &yypParser->yystack[yypParser->yyidx];
+  yytos->stateno = (YYACTIONTYPE)yyNewState;
+  yytos->major = (YYCODETYPE)yyMajor;
+  yytos->minor = *yypMinor;
+#ifndef NDEBUG
+  if( yyTraceFILE && yypParser->yyidx>0 ){
+    int i;
+    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+    for(i=1; i<=yypParser->yyidx; i++)
+      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+    fprintf(yyTraceFILE,"\n");
+  }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static const struct {
+  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
+  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+  { 10, 1 },
+  { 11, 0 },
+  { 11, 3 },
+  { 12, 1 },
+  { 13, 1 },
+  { 14, 1 },
+  { 14, 1 },
+  { 15, 3 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 2 },
+  { 15, 3 },
+  { 15, 3 },
+  { 15, 3 },
+  { 15, 3 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 1 },
+  { 17, 2 },
+  { 22, 4 },
+  { 23, 1 },
+  { 24, 0 },
+  { 24, 2 },
+  { 16, 3 },
+  { 18, 3 },
+  { 25, 0 },
+  { 25, 2 },
+  { 19, 3 },
+  { 20, 1 },
+  { 26, 0 },
+  { 26, 2 },
+  { 21, 3 },
+};
+
+static void yy_accept(yyParser*);  /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+  yyParser *yypParser,         /* The parser */
+  int yyruleno                 /* Number of the rule by which to reduce */
+){
+  int yygoto;                     /* The next state */
+  int yyact;                      /* The next action */
+  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
+  yyStackEntry *yymsp;            /* The top of the parser's stack */
+  int yysize;                     /* Amount to pop the stack */
+  ParseARG_FETCH;
+  yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+  if( yyTraceFILE && yyruleno>=0 
+        && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
+    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+      yyRuleName[yyruleno]);
+  }
+#endif /* NDEBUG */
+
+  /* Silence complaints from purify about yygotominor being uninitialized
+  ** in some cases when it is copied into the stack after the following
+  ** switch.  yygotominor is uninitialized when a rule reduces that does
+  ** not set the value of its left-hand side nonterminal.  Leaving the
+  ** value of the nonterminal uninitialized is utterly harmless as long
+  ** as the value is never used.  So really the only thing this code
+  ** accomplishes is to quieten purify.  
+  **
+  ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
+  ** without this code, their parser segfaults.  I'm not sure what there
+  ** parser is doing to make this happen.  This is the second bug report
+  ** from wireshark this week.  Clearly they are stressing Lemon in ways
+  ** that it has not been previously stressed...  (SQLite ticket #2172)
+  */
+  /*memset(&yygotominor, 0, sizeof(yygotominor));*/
+  yygotominor = yyzerominor;
+
+
+  switch( yyruleno ){
+  /* Beginning here are the reduction cases.  A typical example
+  ** follows:
+  **   case 0:
+  **  #line <lineno> <grammarfile>
+  **     { ... }           // User supplied code
+  **  #line <lineno> <thisfile>
+  **     break;
+  */
+      case 5: /* gml_tree ::= node */
+      case 6: /* gml_tree ::= node_chain */ yytestcase(yyruleno==6);
+{ *result = yymsp[0].minor.yy0; }
+        break;
+      case 7: /* node ::= open_tag GML_END GML_CLOSE */
+{ yygotominor.yy0 = gml_createSelfClosedNode((void *)yymsp[-2].minor.yy0, NULL); }
+        break;
+      case 8: /* node ::= open_tag attr GML_END GML_CLOSE */
+      case 9: /* node ::= open_tag attributes GML_END GML_CLOSE */ yytestcase(yyruleno==9);
+{ yygotominor.yy0 = gml_createSelfClosedNode((void *)yymsp[-3].minor.yy0, (void *)yymsp[-2].minor.yy0); }
+        break;
+      case 10: /* node ::= open_tag GML_CLOSE */
+{ yygotominor.yy0 = gml_createNode((void *)yymsp[-1].minor.yy0, NULL, NULL); }
+        break;
+      case 11: /* node ::= open_tag attr GML_CLOSE */
+      case 12: /* node ::= open_tag attributes GML_CLOSE */ yytestcase(yyruleno==12);
+{ yygotominor.yy0 = gml_createNode((void *)yymsp[-2].minor.yy0, (void *)yymsp[-1].minor.yy0, NULL); }
+        break;
+      case 13: /* node ::= open_tag GML_CLOSE coord */
+      case 14: /* node ::= open_tag GML_CLOSE coord_chain */ yytestcase(yyruleno==14);
+{ yygotominor.yy0 = gml_createNode((void *)yymsp[-2].minor.yy0, NULL, (void *)yymsp[0].minor.yy0); }
+        break;
+      case 15: /* node ::= open_tag attr GML_CLOSE coord */
+      case 16: /* node ::= open_tag attr GML_CLOSE coord_chain */ yytestcase(yyruleno==16);
+      case 17: /* node ::= open_tag attributes GML_CLOSE coord */ yytestcase(yyruleno==17);
+      case 18: /* node ::= open_tag attributes GML_CLOSE coord_chain */ yytestcase(yyruleno==18);
+{ yygotominor.yy0 = gml_createNode((void *)yymsp[-3].minor.yy0, (void *)yymsp[-2].minor.yy0, (void *)yymsp[0].minor.yy0); }
+        break;
+      case 19: /* node ::= close_tag */
+{ yygotominor.yy0 = gml_closingNode((void *)yymsp[0].minor.yy0); }
+        break;
+      case 20: /* open_tag ::= GML_OPEN keyword */
+      case 22: /* keyword ::= GML_KEYWORD */ yytestcase(yyruleno==22);
+{ yygotominor.yy0 = yymsp[0].minor.yy0; }
+        break;
+      case 21: /* close_tag ::= GML_OPEN GML_END keyword GML_CLOSE */
+{ yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 23: /* extra_nodes ::= */
+      case 27: /* extra_attr ::= */ yytestcase(yyruleno==27);
+      case 31: /* extra_coord ::= */ yytestcase(yyruleno==31);
+{ yygotominor.yy0 = NULL; }
+        break;
+      case 24: /* extra_nodes ::= node extra_nodes */
+{ ((gmlNodePtr)yymsp[-1].minor.yy0)->Next = (gmlNodePtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 25: /* node_chain ::= node node extra_nodes */
+{ 
+	   ((gmlNodePtr)yymsp[-1].minor.yy0)->Next = (gmlNodePtr)yymsp[0].minor.yy0; 
+	   ((gmlNodePtr)yymsp[-2].minor.yy0)->Next = (gmlNodePtr)yymsp[-1].minor.yy0;
+	   yygotominor.yy0 = yymsp[-2].minor.yy0;
+	}
+        break;
+      case 26: /* attr ::= GML_KEYWORD GML_EQ GML_VALUE */
+{ yygotominor.yy0 = gml_attribute((void *)yymsp[-2].minor.yy0, (void *)yymsp[0].minor.yy0); }
+        break;
+      case 28: /* extra_attr ::= attr extra_attr */
+{ ((gmlAttrPtr)yymsp[-1].minor.yy0)->Next = (gmlAttrPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 29: /* attributes ::= attr attr extra_attr */
+{ 
+	   ((gmlAttrPtr)yymsp[-1].minor.yy0)->Next = (gmlAttrPtr)yymsp[0].minor.yy0; 
+	   ((gmlAttrPtr)yymsp[-2].minor.yy0)->Next = (gmlAttrPtr)yymsp[-1].minor.yy0;
+	   yygotominor.yy0 = yymsp[-2].minor.yy0;
+	}
+        break;
+      case 30: /* coord ::= GML_COORD */
+{ yygotominor.yy0 = gml_coord((void *)yymsp[0].minor.yy0); }
+        break;
+      case 32: /* extra_coord ::= coord extra_coord */
+{ ((gmlCoordPtr)yymsp[-1].minor.yy0)->Next = (gmlCoordPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 33: /* coord_chain ::= coord coord extra_coord */
+{ 
+	   ((gmlCoordPtr)yymsp[-1].minor.yy0)->Next = (gmlCoordPtr)yymsp[0].minor.yy0; 
+	   ((gmlCoordPtr)yymsp[-2].minor.yy0)->Next = (gmlCoordPtr)yymsp[-1].minor.yy0;
+	   yygotominor.yy0 = yymsp[-2].minor.yy0;
+	}
+        break;
+      default:
+      /* (0) main ::= in */ yytestcase(yyruleno==0);
+      /* (1) in ::= */ yytestcase(yyruleno==1);
+      /* (2) in ::= in state GML_NEWLINE */ yytestcase(yyruleno==2);
+      /* (3) state ::= program */ yytestcase(yyruleno==3);
+      /* (4) program ::= gml_tree */ yytestcase(yyruleno==4);
+        break;
+  };
+  yygoto = yyRuleInfo[yyruleno].lhs;
+  yysize = yyRuleInfo[yyruleno].nrhs;
+  yypParser->yyidx -= yysize;
+  yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
+  if( yyact < YYNSTATE ){
+#ifdef NDEBUG
+    /* If we are not debugging and the reduce action popped at least
+    ** one element off the stack, then we can push the new element back
+    ** onto the stack here, and skip the stack overflow test in yy_shift().
+    ** That gives a significant speed improvement. */
+    if( yysize ){
+      yypParser->yyidx++;
+      yymsp -= yysize-1;
+      yymsp->stateno = (YYACTIONTYPE)yyact;
+      yymsp->major = (YYCODETYPE)yygoto;
+      yymsp->minor = yygotominor;
+    }else
+#endif
+    {
+      yy_shift(yypParser,yyact,yygoto,&yygotominor);
+    }
+  }else{
+    assert( yyact == YYNSTATE + YYNRULE + 1 );
+    yy_accept(yypParser);
+  }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+#ifndef YYNOERRORRECOVERY
+static void yy_parse_failed(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser fails */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+#endif /* YYNOERRORRECOVERY */
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+  yyParser *yypParser,           /* The parser */
+  int yymajor,                   /* The major type of the error token */
+  YYMINORTYPE yyminor            /* The minor type of the error token */
+){
+  ParseARG_FETCH;
+#define TOKEN (yyminor.yy0)
+
+/* 
+** when the LEMON parser encounters an error
+** then this global variable is set 
+*/
+	gml_parse_error = 1;
+	*result = NULL;
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser accepts */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "ParseAlloc" which describes the current state of the parser.
+** The second argument is the major token number.  The third is
+** the minor token.  The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void Parse(
+  void *yyp,                   /* The parser */
+  int yymajor,                 /* The major token code number */
+  ParseTOKENTYPE yyminor       /* The value for the token */
+  ParseARG_PDECL               /* Optional %extra_argument parameter */
+){
+  YYMINORTYPE yyminorunion;
+  int yyact;            /* The parser action. */
+  int yyendofinput;     /* True if we are at the end of input */
+#ifdef YYERRORSYMBOL
+  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+#endif
+  yyParser *yypParser;  /* The parser */
+
+  /* (re)initialize the parser, if necessary */
+  yypParser = (yyParser*)yyp;
+  if( yypParser->yyidx<0 ){
+#if YYSTACKDEPTH<=0
+    if( yypParser->yystksz <=0 ){
+      /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
+      yyminorunion = yyzerominor;
+      yyStackOverflow(yypParser, &yyminorunion);
+      return;
+    }
+#endif
+    yypParser->yyidx = 0;
+    yypParser->yyerrcnt = -1;
+    yypParser->yystack[0].stateno = 0;
+    yypParser->yystack[0].major = 0;
+  }
+  yyminorunion.yy0 = yyminor;
+  yyendofinput = (yymajor==0);
+  ParseARG_STORE;
+
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+  }
+#endif
+
+  do{
+    yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
+    if( yyact<YYNSTATE ){
+      assert( !yyendofinput );  /* Impossible to shift the $ token */
+      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+      yypParser->yyerrcnt--;
+      yymajor = YYNOCODE;
+    }else if( yyact < YYNSTATE + YYNRULE ){
+      yy_reduce(yypParser,yyact-YYNSTATE);
+    }else{
+      assert( yyact == YY_ERROR_ACTION );
+#ifdef YYERRORSYMBOL
+      int yymx;
+#endif
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+      }
+#endif
+#ifdef YYERRORSYMBOL
+      /* A syntax error has occurred.
+      ** The response to an error depends upon whether or not the
+      ** grammar defines an error token "ERROR".  
+      **
+      ** This is what we do if the grammar does define ERROR:
+      **
+      **  * Call the %syntax_error function.
+      **
+      **  * Begin popping the stack until we enter a state where
+      **    it is legal to shift the error symbol, then shift
+      **    the error symbol.
+      **
+      **  * Set the error count to three.
+      **
+      **  * Begin accepting and shifting new tokens.  No new error
+      **    processing will occur until three tokens have been
+      **    shifted successfully.
+      **
+      */
+      if( yypParser->yyerrcnt<0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yymx = yypParser->yystack[yypParser->yyidx].major;
+      if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+             yyTracePrompt,yyTokenName[yymajor]);
+        }
+#endif
+        yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
+        yymajor = YYNOCODE;
+      }else{
+         while(
+          yypParser->yyidx >= 0 &&
+          yymx != YYERRORSYMBOL &&
+          (yyact = yy_find_reduce_action(
+                        yypParser->yystack[yypParser->yyidx].stateno,
+                        YYERRORSYMBOL)) >= YYNSTATE
+        ){
+          yy_pop_parser_stack(yypParser);
+        }
+        if( yypParser->yyidx < 0 || yymajor==0 ){
+          yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+          yy_parse_failed(yypParser);
+          yymajor = YYNOCODE;
+        }else if( yymx!=YYERRORSYMBOL ){
+          YYMINORTYPE u2;
+          u2.YYERRSYMDT = 0;
+          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+        }
+      }
+      yypParser->yyerrcnt = 3;
+      yyerrorhit = 1;
+#elif defined(YYNOERRORRECOVERY)
+      /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
+      ** do any kind of error recovery.  Instead, simply invoke the syntax
+      ** error routine and continue going as if nothing had happened.
+      **
+      ** Applications can set this macro (for example inside %include) if
+      ** they intend to abandon the parse upon the first syntax error seen.
+      */
+      yy_syntax_error(yypParser,yymajor,yyminorunion);
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      yymajor = YYNOCODE;
+      
+#else  /* YYERRORSYMBOL is not defined */
+      /* This is what we do if the grammar does not define ERROR:
+      **
+      **  * Report an error message, and throw away the input token.
+      **
+      **  * If the input token is $, then fail the parse.
+      **
+      ** As before, subsequent error messages are suppressed until
+      ** three input tokens have been successfully shifted.
+      */
+      if( yypParser->yyerrcnt<=0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yypParser->yyerrcnt = 3;
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      if( yyendofinput ){
+        yy_parse_failed(yypParser);
+      }
+      yymajor = YYNOCODE;
+#endif
+    }
+  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  return;
+}
+
+
+/*
+ GML_LEMON_END - LEMON generated code ends here 
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+** CAVEAT: there is an incompatibility between LEMON and FLEX
+** this macro resolves the issue
+*/
+#undef yy_accept
+#define yy_accept	yy_gml_flex_accept
+
+
+
+/*
+ GML_FLEX_START - FLEX generated code starts here 
+*/
+
+#line 3 "lex.Gml.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define yy_create_buffer Gml_create_buffer
+#define yy_delete_buffer Gml_delete_buffer
+#define yy_flex_debug Gml_flex_debug
+#define yy_init_buffer Gml_init_buffer
+#define yy_flush_buffer Gml_flush_buffer
+#define yy_load_buffer_state Gml_load_buffer_state
+#define yy_switch_to_buffer Gml_switch_to_buffer
+#define yyin Gmlin
+#define yyleng Gmlleng
+#define yylex Gmllex
+#define yylineno Gmllineno
+#define yyout Gmlout
+#define yyrestart Gmlrestart
+#define yytext Gmltext
+#define yywrap Gmlwrap
+#define yyalloc Gmlalloc
+#define yyrealloc Gmlrealloc
+#define yyfree Gmlfree
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE Gmlrestart(Gmlin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
+#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int Gmlleng;
+
+extern FILE *Gmlin, *Gmlout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+     *       existing scanners that call yyless() from OUTSIDE Gmllex. 
+     *       One obvious solution it to make yy_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-Gmllineno scanner, because yy_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                int yyl;\
+                for ( yyl = n; yyl < Gmlleng; ++yyl )\
+                    if ( Gmltext[yyl] == '\n' )\
+                        --Gmllineno;\
+            }while(0)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up Gmltext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up Gmltext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via Gmlrestart()), so that the user can continue scanning by
+	 * just pointing Gmlin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when Gmltext is formed. */
+static char yy_hold_char;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int Gmlleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow Gmlwrap()'s to do buffer switches
+ * instead of setting up a fresh Gmlin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void Gmlrestart (FILE *input_file  );
+void Gml_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE Gml_create_buffer (FILE *file,int size  );
+void Gml_delete_buffer (YY_BUFFER_STATE b  );
+void Gml_flush_buffer (YY_BUFFER_STATE b  );
+void Gmlpush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void Gmlpop_buffer_state (void );
+
+static void Gmlensure_buffer_stack (void );
+static void Gml_load_buffer_state (void );
+static void Gml_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER Gml_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE Gml_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE Gml_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE Gml_scan_bytes (yyconst char *bytes,int len  );
+
+void *Gmlalloc (yy_size_t  );
+void *Gmlrealloc (void *,yy_size_t  );
+void Gmlfree (void *  );
+
+#define yy_new_buffer Gml_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        Gmlensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            Gml_create_buffer(Gmlin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        Gmlensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            Gml_create_buffer(Gmlin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *Gmlin = (FILE *) 0, *Gmlout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+#define YY_FLEX_LEX_COMPAT
+extern int Gmllineno;
+
+int Gmllineno = 1;
+
+extern char Gmltext[];
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up Gmltext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+	Gmlleng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	if ( Gmlleng + (yy_more_offset) >= YYLMAX ) \
+		YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \
+	yy_flex_strncpy( &Gmltext[(yy_more_offset)], (yytext_ptr), Gmlleng + 1 ); \
+	Gmlleng += (yy_more_offset); \
+	(yy_prev_more_offset) = (yy_more_offset); \
+	(yy_more_offset) = 0; \
+	(yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 11
+#define YY_END_OF_BUFFER 12
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_acclist[34] =
+    {   0,
+        5,    5,   12,   10,   11,    8,   10,   11,    9,   11,
+       10,   11,    5,   10,   11,    1,   10,   11,    3,   10,
+       11,    2,   10,   11,    4,   10,   11,    7,   10,   11,
+        6,    5,    7
+    } ;
+
+static yyconst flex_int16_t yy_accept[20] =
+    {   0,
+        1,    2,    3,    4,    6,    9,   11,   13,   16,   19,
+       22,   25,   28,   31,   31,   32,   33,   34,   34
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    4,    1,    1,    1,    1,    1,    1,
+        1,    1,    5,    5,    5,    5,    6,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    8,    1,    9,
+       10,   11,    1,    1,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+        1,    1,    1,    1,   12,    1,   12,   12,   12,   12,
+
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[13] =
+    {   0,
+        1,    1,    1,    1,    2,    1,    3,    4,    5,    1,
+        5,    4
+    } ;
+
+static yyconst flex_int16_t yy_base[22] =
+    {   0,
+        0,    0,   23,   24,   24,   24,   18,    0,   24,   24,
+       24,   24,    0,   17,   24,    0,    0,   24,   12,   15,
+       16
+    } ;
+
+static yyconst flex_int16_t yy_def[22] =
+    {   0,
+       18,    1,   18,   18,   18,   18,   19,   20,   18,   18,
+       18,   18,   21,   19,   18,   20,   21,    0,   18,   18,
+       18
+    } ;
+
+static yyconst flex_int16_t yy_nxt[37] =
+    {   0,
+        4,    5,    6,    7,    8,    9,    8,    4,   10,   11,
+       12,   13,   14,   14,   14,   14,   16,   16,   17,   17,
+       15,   15,   18,    3,   18,   18,   18,   18,   18,   18,
+       18,   18,   18,   18,   18,   18
+    } ;
+
+static yyconst flex_int16_t yy_chk[37] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,   19,   19,   19,   19,   20,   20,   21,   21,
+       14,    7,    3,   18,   18,   18,   18,   18,   18,   18,
+       18,   18,   18,   18,   18,   18
+    } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[12] =
+    {   0,
+0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,     };
+
+extern int Gml_flex_debug;
+int Gml_flex_debug = 0;
+
+static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
+static char *yy_full_match;
+static int yy_lp;
+#define REJECT \
+{ \
+*yy_cp = (yy_hold_char); /* undo effects of setting up Gmltext */ \
+yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
+++(yy_lp); \
+goto find_rule; \
+}
+
+static int yy_more_offset = 0;
+static int yy_prev_more_offset = 0;
+#define yymore() ((yy_more_offset) = yy_flex_strlen( Gmltext ))
+#define YY_NEED_STRLEN
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET \
+	{ \
+	(yy_more_offset) = (yy_prev_more_offset); \
+	Gmlleng -= (yy_more_offset); \
+	}
+#ifndef YYLMAX
+#define YYLMAX 8192
+#endif
+
+char Gmltext[YYLMAX];
+char *yytext_ptr;
+#line 1 "gmlLexer.l"
+/* 
+ gmlLexer.l -- GML parser - FLEX config
+  
+ version 2.4, 2011 June 3
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#line 46 "gmlLexer.l"
+
+/* For debugging purposes */
+int gml_line = 1, gml_col = 1;
+
+/**
+*  The main string-token matcher.
+*  The lower case part is probably not needed.  We should really be converting 
+*  The string to all uppercase/lowercase to make it case iNsEnSiTiVe.
+*  What Flex will do is, For the input string, beginning from the front, Flex
+*  will try to match with any of the defined tokens from below.  Flex will 
+*  then match the string of longest length.  Suppose the string is: POINTM,
+*  Flex would match both POINT and POINTM, but since POINTM is the longer
+*  of the two tokens, FLEX will match POINTM.
+*/
+#line 593 "lex.Gml.c"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int Gmllex_destroy (void );
+
+int Gmlget_debug (void );
+
+void Gmlset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE Gmlget_extra (void );
+
+void Gmlset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *Gmlget_in (void );
+
+void Gmlset_in  (FILE * in_str  );
+
+FILE *Gmlget_out (void );
+
+void Gmlset_out  (FILE * out_str  );
+
+int Gmlget_leng (void );
+
+char *Gmlget_text (void );
+
+int Gmlget_lineno (void );
+
+void Gmlset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int Gmlwrap (void );
+#else
+extern int Gmlwrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
+#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( Gmltext, Gmlleng, 1, Gmlout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( Gmlin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( Gmlin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, Gmlin))==0 && ferror(Gmlin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(Gmlin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int Gmllex (void);
+
+#define YY_DECL int Gmllex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after Gmltext and Gmlleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+#line 62 "gmlLexer.l"
+
+#line 782 "lex.Gml.c"
+
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+        /* Create the reject buffer large enough to save one state per allowed character. */
+        if ( ! (yy_state_buf) )
+            (yy_state_buf) = (yy_state_type *)Gmlalloc(YY_STATE_BUF_SIZE  );
+            if ( ! (yy_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in Gmllex()" );
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! Gmlin )
+			Gmlin = stdin;
+
+		if ( ! Gmlout )
+			Gmlout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			Gmlensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				Gml_create_buffer(Gmlin,YY_BUF_SIZE );
+		}
+
+		Gml_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of Gmltext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = (yy_start);
+
+		(yy_state_ptr) = (yy_state_buf);
+		*(yy_state_ptr)++ = yy_current_state;
+
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 19 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			*(yy_state_ptr)++ = yy_current_state;
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 24 );
+
+yy_find_action:
+		yy_current_state = *--(yy_state_ptr);
+		(yy_lp) = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+		for ( ; ; ) /* until we find what rule we matched */
+			{
+			if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
+				{
+				yy_act = yy_acclist[(yy_lp)];
+					{
+					(yy_full_match) = yy_cp;
+					break;
+					}
+				}
+			--yy_cp;
+			yy_current_state = *--(yy_state_ptr);
+			(yy_lp) = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+			{
+			int yyl;
+			for ( yyl = (yy_prev_more_offset); yyl < Gmlleng; ++yyl )
+				if ( Gmltext[yyl] == '\n' )
+					   
+    Gmllineno++;
+;
+			}
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+case 1:
+YY_RULE_SETUP
+#line 63 "gmlLexer.l"
+{ gml_freeString(&(GmlLval.pval)); return GML_END; }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 64 "gmlLexer.l"
+{ gml_freeString(&(GmlLval.pval)); return GML_EQ; }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 65 "gmlLexer.l"
+{ gml_freeString(&(GmlLval.pval)); return GML_OPEN; }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 66 "gmlLexer.l"
+{ gml_freeString(&(GmlLval.pval)); return GML_CLOSE; }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 67 "gmlLexer.l"
+{ gml_saveString(&(GmlLval.pval), Gmltext); return GML_COORD; }
+	YY_BREAK
+case 6:
+/* rule 6 can match eol */
+YY_RULE_SETUP
+#line 68 "gmlLexer.l"
+{ gml_saveString(&(GmlLval.pval), Gmltext); return GML_VALUE; }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 69 "gmlLexer.l"
+{ gml_saveString(&(GmlLval.pval), Gmltext); return GML_KEYWORD; }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 71 "gmlLexer.l"
+{ gml_freeString(&(GmlLval.pval)); gml_col += (int) strlen(Gmltext); }               /* ignore but count white space */
+	YY_BREAK
+case 9:
+/* rule 9 can match eol */
+YY_RULE_SETUP
+#line 73 "gmlLexer.l"
+{ gml_freeString(&(GmlLval.pval)); gml_col = 0; ++gml_line; }
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 75 "gmlLexer.l"
+{ gml_freeString(&(GmlLval.pval)); gml_col += (int) strlen(Gmltext); return -1; }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 76 "gmlLexer.l"
+ECHO;
+	YY_BREAK
+#line 941 "lex.Gml.c"
+			case YY_STATE_EOF(INITIAL):
+				yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed Gmlin at a new source and called
+			 * Gmllex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = Gmlin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( Gmlwrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * Gmltext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of Gmllex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			Gmlrestart(Gmlin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) Gmlrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+	yy_current_state = (yy_start);
+
+	(yy_state_ptr) = (yy_state_buf);
+	*(yy_state_ptr)++ = yy_current_state;
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 19 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		*(yy_state_ptr)++ = yy_current_state;
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+	register int yy_is_jam;
+    
+	register YY_CHAR yy_c = 1;
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 19 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 18);
+	if ( ! yy_is_jam )
+		*(yy_state_ptr)++ = yy_current_state;
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+	register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up Gmltext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+    if ( c == '\n' ){
+        --Gmllineno;
+    }
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			int offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					Gmlrestart(Gmlin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( Gmlwrap( ) )
+						return EOF;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve Gmltext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+	if ( c == '\n' )
+		   
+    Gmllineno++;
+;
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void Gmlrestart  (FILE * input_file )
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        Gmlensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            Gml_create_buffer(Gmlin,YY_BUF_SIZE );
+	}
+
+	Gml_init_buffer(YY_CURRENT_BUFFER,input_file );
+	Gml_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void Gml_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		Gmlpop_buffer_state();
+	 *		Gmlpush_buffer_state(new_buffer);
+     */
+	Gmlensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	Gml_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (Gmlwrap()) processing, but the only time this flag
+	 * is looked at is after Gmlwrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void Gml_load_buffer_state  (void)
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	Gmlin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE Gml_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) Gmlalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in Gml_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) Gmlalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in Gml_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	Gml_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with Gml_create_buffer()
+ * 
+ */
+    void Gml_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		Gmlfree((void *) b->yy_ch_buf  );
+
+	Gmlfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a Gmlrestart() or at EOF.
+ */
+    static void Gml_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+    
+	Gml_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then Gml_init_buffer was _probably_
+     * called from Gmlrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void Gml_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		Gml_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void Gmlpush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	Gmlensure_buffer_stack();
+
+	/* This block is copied from Gml_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from Gml_switch_to_buffer. */
+	Gml_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void Gmlpop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	Gml_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		Gml_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void Gmlensure_buffer_stack (void)
+{
+	int num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)Gmlalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in Gmlensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)Gmlrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in Gmlensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE Gml_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) Gmlalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in Gml_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	Gml_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to Gmllex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       Gml_scan_bytes() instead.
+ */
+YY_BUFFER_STATE Gml_scan_string (yyconst char * yystr )
+{
+    
+	return Gml_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to Gmllex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE Gml_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) Gmlalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in Gml_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = Gml_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in Gml_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up Gmltext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		Gmltext[Gmlleng] = (yy_hold_char); \
+		(yy_c_buf_p) = Gmltext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		Gmlleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int Gmlget_lineno  (void)
+{
+        
+    return Gmllineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *Gmlget_in  (void)
+{
+        return Gmlin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *Gmlget_out  (void)
+{
+        return Gmlout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+int Gmlget_leng  (void)
+{
+        return Gmlleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *Gmlget_text  (void)
+{
+        return Gmltext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void Gmlset_lineno (int  line_number )
+{
+    
+    Gmllineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see Gml_switch_to_buffer
+ */
+void Gmlset_in (FILE *  in_str )
+{
+        Gmlin = in_str ;
+}
+
+void Gmlset_out (FILE *  out_str )
+{
+        Gmlout = out_str ;
+}
+
+int Gmlget_debug  (void)
+{
+        return Gml_flex_debug;
+}
+
+void Gmlset_debug (int  bdebug )
+{
+        Gml_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from Gmllex_destroy(), so don't allocate here.
+     */
+
+    /* We do not touch Gmllineno unless the option is enabled. */
+    Gmllineno =  1;
+    
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+    (yy_state_buf) = 0;
+    (yy_state_ptr) = 0;
+    (yy_full_match) = 0;
+    (yy_lp) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    Gmlin = stdin;
+    Gmlout = stdout;
+#else
+    Gmlin = (FILE *) 0;
+    Gmlout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * Gmllex_init()
+     */
+    return 0;
+}
+
+/* Gmllex_destroy is for both reentrant and non-reentrant scanners. */
+int Gmllex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		Gml_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		Gmlpop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	Gmlfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    Gmlfree ( (yy_state_buf) );
+    (yy_state_buf)  = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * Gmllex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *Gmlalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *Gmlrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void Gmlfree (void * ptr )
+{
+	free( (char *) ptr );	/* see Gmlrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 76 "gmlLexer.l"
+
+
+/**
+ * reset the line and column count
+ *
+ *
+ */
+void gml_reset_lexer(void)
+{
+
+  gml_line = 1;
+  gml_col  = 1;
+
+}
+
+/**
+ * gmlError() is invoked when the lexer or the parser encounter
+ * an error. The error message is passed via *s
+ *
+ *
+ */
+void GmlError(char *s)
+{
+  printf("error: %s at line: %d col: %d\n",s,gml_line,gml_col);
+
+}
+
+int Gmlwrap(void)
+{
+  return 1;
+}
+
+
+/*
+ GML_FLEX_END - FLEX generated code ends here 
+*/
+
+
+
+gaiaGeomCollPtr
+gaiaParseGml (const unsigned char *dirty_buffer, sqlite3 * sqlite_handle)
+{
+    void *pParser = ParseAlloc (malloc);
+    /* Linked-list of token values */
+    gmlFlexToken *tokens = malloc (sizeof (gmlFlexToken));
+    /* Pointer to the head of the list */
+    gmlFlexToken *head = tokens;
+    int yv;
+    gmlNodePtr result = NULL;
+    gaiaGeomCollPtr geom = NULL;
+
+    GmlLval.pval = NULL;
+    tokens->value = NULL;
+    tokens->Next = NULL;
+    gml_parse_error = 0;
+    Gml_scan_string ((char *) dirty_buffer);
+
+    /*
+       / Keep tokenizing until we reach the end
+       / yylex() will return the next matching Token for us.
+     */
+    while ((yv = yylex ()) != 0)
+      {
+	  if (yv == -1)
+	    {
+		gml_parse_error = 1;
+		break;
+	    }
+	  tokens->Next = malloc (sizeof (gmlFlexToken));
+	  tokens->Next->Next = NULL;
+	  /*
+	     /GmlLval is a global variable from FLEX.
+	     /GmlLval is defined in gmlLexglobal.h
+	   */
+	  gml_xferString (&(tokens->Next->value), GmlLval.pval);
+	  /* Pass the token to the wkt parser created from lemon */
+	  Parse (pParser, yv, &(tokens->Next->value), &result);
+	  tokens = tokens->Next;
+      }
+    /* This denotes the end of a line as well as the end of the parser */
+    Parse (pParser, GML_NEWLINE, 0, &result);
+    ParseFree (pParser, free);
+    Gmllex_destroy ();
+
+    /* Assigning the token as the end to avoid seg faults while cleaning */
+    tokens->Next = NULL;
+    gml_cleanup (head);
+    gml_freeString (&(GmlLval.pval));
+
+    if (gml_parse_error)
+      {
+	  if (result)
+	      gml_freeTree (result);
+	  return NULL;
+      }
+
+    /* attempting to build a geometry from GML */
+    geom = gml_build_geometry (result, sqlite_handle);
+    gml_freeTree (result);
+    return geom;
+}
+
+
+/*
+** CAVEAT: we must now undefine any Lemon/Flex own macro
+*/
+#undef YYNOCODE
+#undef YYNSTATE
+#undef YYNRULE
+#undef YY_SHIFT_MAX
+#undef YY_SHIFT_USE_DFLT
+#undef YY_REDUCE_USE_DFLT
+#undef YY_REDUCE_MAX
+#undef YY_FLUSH_BUFFER
+#undef YY_DO_BEFORE_ACTION
+#undef YY_NUM_RULES
+#undef YY_END_OF_BUFFER
+#undef YY_END_FILE
+#undef YYACTIONTYPE
+#undef YY_SZ_ACTTAB
+#undef YY_NEW_FILE
+#undef BEGIN
+#undef YY_START
+#undef YY_CURRENT_BUFFER
+#undef YY_CURRENT_BUFFER_LVALUE
+#undef YY_STATE_BUF_SIZE
+#undef YY_DECL
+#undef YY_FATAL_ERROR
+#undef YYMINORTYPE
+#undef YY_CHAR
+#undef YYSTYPE
+#undef input
+#undef ParseAlloc
+#undef ParseFree
+#undef ParseStackPeak
+#undef Parse
+#undef yyalloc
+#undef yyfree
+#undef yyin
+#undef yyleng
+#undef yyless
+#undef yylex
+#undef yylineno
+#undef yyout
+#undef yyrealloc
+#undef yyrestart
+#undef yyStackEntry
+#undef yytext
+#undef yywrap
+#undef yyzerominor
+#undef yy_accept
+#undef yy_action
+#undef yy_base
+#undef yy_buffer_stack
+#undef yy_buffer_stack_max
+#undef yy_buffer_stack_top
+#undef yy_c_buf_p
+#undef yy_chk
+#undef yy_create_buffer
+#undef yy_def
+#undef yy_default
+#undef yy_delete_buffer
+#undef yy_destructor
+#undef yy_ec
+#undef yy_fatal_error
+#undef yy_find_reduce_action
+#undef yy_find_shift_action
+#undef yy_flex_debug
+#undef yy_flush_buffer
+#undef yy_get_next_buffer
+#undef yy_get_previous_state
+#undef yy_init
+#undef yy_init_buffer
+#undef yy_init_globals
+#undef yy_load_buffer
+#undef yy_load_buffer_state
+#undef yy_lookahead
+#undef yy_meta
+#undef yy_new_buffer
+#undef yy_nxt
+#undef yy_parse_failed
+#undef yy_pop_parser_stack
+#undef yy_reduce
+#undef yy_reduce_ofst
+#undef yy_set_bol
+#undef yy_set_interactive
+#undef yy_shift
+#undef yy_shift_ofst
+#undef yy_start
+#undef yy_state_type
+#undef yy_switch_to_buffer
+#undef yy_syntax_error
+#undef yy_trans_info
+#undef yy_try_NUL_trans
+#undef yyParser
+#undef yyStackEntry
+#undef yyStackOverflow
+#undef yyRuleInfo
+#undef yytext_ptr
+#undef yyunput
+#undef yyzerominor
+#undef ParseARG_SDECL
+#undef ParseARG_PDECL
+#undef ParseARG_FETCH
+#undef ParseARG_STORE
+#undef REJECT
+#undef yymore
+#undef YY_MORE_ADJ
+#undef YY_RESTORE_YY_MORE_OFFSET
+#undef YY_LESS_LINENO
+#undef yyTracePrompt
+#undef yyTraceFILE
+#undef yyTokenName
+#undef yyRuleName
+#undef ParseTrace
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_kml.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_kml.c
new file mode 100644
index 0000000..f96068e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_kml.c
@@ -0,0 +1,4867 @@
+/*
+
+ gg_kml.c -- KML parser/lexer 
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <assert.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty  _isatty
+#define fileno  _fileno
+#endif
+
+int kml_parse_error;
+
+#define KML_PARSER_OPEN_NODE		1
+#define KML_PARSER_SELF_CLOSED_NODE	2
+#define KML_PARSER_CLOSED_NODE		3
+
+#define GAIA_KML_UNKNOWN		0
+#define GAIA_KML_POINT			1
+#define GAIA_KML_LINESTRING		2
+#define GAIA_KML_POLYGON		3
+#define GAIA_KML_MULTIGEOMETRY		4
+
+/*
+** This is a linked-list struct to store all the values for each token.
+*/
+typedef struct kmlFlexTokenStruct
+{
+    char *value;
+    struct kmlFlexTokenStruct *Next;
+} kmlFlexToken;
+
+typedef struct kml_coord
+{
+    char *Value;
+    struct kml_coord *Next;
+} kmlCoord;
+typedef kmlCoord *kmlCoordPtr;
+
+typedef struct kml_attr
+{
+    char *Key;
+    char *Value;
+    struct kml_attr *Next;
+} kmlAttr;
+typedef kmlAttr *kmlAttrPtr;
+
+typedef struct kml_node
+{
+    char *Tag;
+    int Type;
+    int Error;
+    struct kml_attr *Attributes;
+    struct kml_coord *Coordinates;
+    struct kml_node *Next;
+} kmlNode;
+typedef kmlNode *kmlNodePtr;
+
+typedef struct kml_dynamic_ring
+{
+    gaiaDynamicLinePtr ring;
+    int interior;
+    int has_z;
+    struct kml_dynamic_ring *next;
+} kmlDynamicRing;
+typedef kmlDynamicRing *kmlDynamicRingPtr;
+
+typedef struct kml_dynamic_polygon
+{
+    struct kml_dynamic_ring *first;
+    struct kml_dynamic_ring *last;
+} kmlDynamicPolygon;
+typedef kmlDynamicPolygon *kmlDynamicPolygonPtr;
+
+static kmlDynamicPolygonPtr
+kml_alloc_dyn_polygon (void)
+{
+/* creating a dynamic polygon (ring collection) */
+    kmlDynamicPolygonPtr p = malloc (sizeof (kmlDynamicPolygon));
+    p->first = NULL;
+    p->last = NULL;
+    return p;
+}
+
+static void
+kml_free_dyn_polygon (kmlDynamicPolygonPtr dyn)
+{
+/* deleting a dynamic polygon (ring collection) */
+    kmlDynamicRingPtr r;
+    kmlDynamicRingPtr rn;
+    if (!dyn)
+	return;
+    r = dyn->first;
+    while (r)
+      {
+	  rn = r->next;
+	  if (r->ring)
+	      gaiaFreeDynamicLine (r->ring);
+	  free (r);
+	  r = rn;
+      }
+    free (dyn);
+}
+
+static void
+kml_add_polygon_ring (kmlDynamicPolygonPtr dyn_pg, gaiaDynamicLinePtr dyn,
+		      int interior, int has_z)
+{
+/* inserting a further ring into the collection (dynamic polygon) */
+    kmlDynamicRingPtr p = malloc (sizeof (kmlDynamicRing));
+    p->ring = dyn;
+    p->interior = interior;
+    p->has_z = has_z;
+    p->next = NULL;
+    if (dyn_pg->first == NULL)
+	dyn_pg->first = p;
+    if (dyn_pg->last != NULL)
+	dyn_pg->last->next = p;
+    dyn_pg->last = p;
+}
+
+static void
+kml_freeString (char **ptr)
+{
+/* releasing a string from the lexer */
+    if (*ptr != NULL)
+	free (*ptr);
+    *ptr = NULL;
+}
+
+static void
+kml_saveString (char **ptr, const char *str)
+{
+/* saving a string from the lexer */
+    int len = strlen (str);
+    kml_freeString (ptr);
+    *ptr = malloc (len + 1);
+    strcpy (*ptr, str);
+}
+
+static kmlCoordPtr
+kml_coord (void *value)
+{
+/* creating a coord Item */
+    int len;
+    kmlFlexToken *tok = (kmlFlexToken *) value;
+    kmlCoordPtr c = malloc (sizeof (kmlCoord));
+    len = strlen (tok->value);
+    c->Value = malloc (len + 1);
+    strcpy (c->Value, tok->value);
+    c->Next = NULL;
+    return c;
+}
+
+static void
+kml_freeCoordinate (kmlCoordPtr c)
+{
+/* deleting a KML coordinate */
+    if (c == NULL)
+	return;
+    if (c->Value)
+	free (c->Value);
+    free (c);
+}
+
+static kmlAttrPtr
+kml_attribute (void *key, void *value)
+{
+/* creating an attribute */
+    int len;
+    kmlFlexToken *k_tok = (kmlFlexToken *) key;
+    kmlFlexToken *v_tok = (kmlFlexToken *) value;
+    kmlAttrPtr a = malloc (sizeof (kmlAttr));
+    len = strlen (k_tok->value);
+    a->Key = malloc (len + 1);
+    strcpy (a->Key, k_tok->value);
+    len = strlen (v_tok->value);
+/* we need to de-quote the string, removing first and last ".." */
+    if (*(v_tok->value + 0) == '"' && *(v_tok->value + len - 1) == '"')
+      {
+	  a->Value = malloc (len - 1);
+	  memcpy (a->Value, v_tok->value + 1, len - 1);
+	  *(a->Value + len - 1) = '\0';
+      }
+    else
+      {
+	  a->Value = malloc (len + 1);
+	  strcpy (a->Value, v_tok->value);
+      }
+    a->Next = NULL;
+    return a;
+}
+
+static void
+kml_freeAttribute (kmlAttrPtr a)
+{
+/* deleting a KML attribute */
+    if (a == NULL)
+	return;
+    if (a->Key)
+	free (a->Key);
+    if (a->Value)
+	free (a->Value);
+    free (a);
+}
+
+static void
+kml_freeNode (kmlNodePtr n)
+{
+/* deleting a KML node */
+    kmlAttrPtr a;
+    kmlAttrPtr an;
+    kmlCoordPtr c;
+    kmlCoordPtr cn;
+    if (n == NULL)
+	return;
+    a = n->Attributes;
+    while (a)
+      {
+	  an = a->Next;
+	  kml_freeAttribute (a);
+	  a = an;
+      }
+    c = n->Coordinates;
+    while (c)
+      {
+	  cn = c->Next;
+	  kml_freeCoordinate (c);
+	  c = cn;
+      }
+    if (n->Tag)
+	free (n->Tag);
+    free (n);
+}
+
+static void
+kml_freeTree (kmlNodePtr t)
+{
+/* deleting a KML tree */
+    kmlNodePtr n;
+    kmlNodePtr nn;
+    n = t;
+    while (n)
+      {
+	  nn = n->Next;
+	  kml_freeNode (n);
+	  n = nn;
+      }
+}
+
+static kmlNodePtr
+kml_createNode (void *tag, void *attributes, void *coords)
+{
+/* creating a node */
+    int len;
+    kmlFlexToken *tok = (kmlFlexToken *) tag;
+    kmlNodePtr n = malloc (sizeof (kmlNode));
+    len = strlen (tok->value);
+    n->Tag = malloc (len + 1);
+    strcpy (n->Tag, tok->value);
+    n->Type = KML_PARSER_OPEN_NODE;
+    n->Error = 0;
+    n->Attributes = attributes;
+    n->Coordinates = coords;
+    n->Next = NULL;
+    return n;
+}
+
+static kmlNodePtr
+kml_createSelfClosedNode (void *tag, void *attributes)
+{
+/* creating a self-closed node */
+    int len;
+    kmlFlexToken *tok = (kmlFlexToken *) tag;
+    kmlNodePtr n = malloc (sizeof (kmlNode));
+    len = strlen (tok->value);
+    n->Tag = malloc (len + 1);
+    strcpy (n->Tag, tok->value);
+    n->Type = KML_PARSER_SELF_CLOSED_NODE;
+    n->Error = 0;
+    n->Attributes = attributes;
+    n->Coordinates = NULL;
+    n->Next = NULL;
+    return n;
+}
+
+static kmlNodePtr
+kml_closingNode (void *tag)
+{
+/* creating a closing node */
+    int len;
+    kmlFlexToken *tok = (kmlFlexToken *) tag;
+    kmlNodePtr n = malloc (sizeof (kmlNode));
+    len = strlen (tok->value);
+    n->Tag = malloc (len + 1);
+    strcpy (n->Tag, tok->value);
+    n->Type = KML_PARSER_CLOSED_NODE;
+    n->Error = 0;
+    n->Attributes = NULL;
+    n->Coordinates = NULL;
+    n->Next = NULL;
+    return n;
+}
+
+static int
+kml_cleanup (kmlFlexToken * token)
+{
+    kmlFlexToken *ptok;
+    kmlFlexToken *ptok_n;
+    if (token == NULL)
+	return 0;
+    ptok = token;
+    while (ptok)
+      {
+	  ptok_n = ptok->Next;
+	  if (ptok->value != NULL)
+	      free (ptok->value);
+	  free (ptok);
+	  ptok = ptok_n;
+      }
+    return 0;
+}
+
+static void
+kml_xferString (char **p, const char *str)
+{
+/* saving some token */
+    int len;
+    if (str == NULL)
+      {
+	  *p = NULL;
+	  return;
+      }
+    len = strlen (str);
+    *p = malloc (len + 1);
+    strcpy (*p, str);
+}
+
+static int
+guessKmlGeometryType (kmlNodePtr node)
+{
+/* attempting to guess the Geometry Type for a KML node */
+    int type = GAIA_KML_UNKNOWN;
+    if (strcmp (node->Tag, "Point") == 0)
+	type = GAIA_KML_POINT;
+    if (strcmp (node->Tag, "LineString") == 0)
+	type = GAIA_KML_LINESTRING;
+    if (strcmp (node->Tag, "Polygon") == 0)
+	type = GAIA_KML_POLYGON;
+    if (strcmp (node->Tag, "MultiGeometry") == 0)
+	type = GAIA_KML_MULTIGEOMETRY;
+    return type;
+}
+
+static int
+kml_check_coord (const char *value)
+{
+/* checking a KML coordinate */
+    int decimal = 0;
+    const char *p = value;
+    if (*p == '+' || *p == '-')
+	p++;
+    while (*p != '\0')
+      {
+	  if (*p == '.')
+	    {
+		if (!decimal)
+		    decimal = 1;
+		else
+		    return 0;
+	    }
+	  else if (*p >= '0' && *p <= '9')
+	      ;
+	  else
+	      return 0;
+	  p++;
+      }
+    return 1;
+}
+
+static int
+kml_extract_coords (const char *value, double *x, double *y, double *z,
+		    int *count)
+{
+/* extracting KML coords from a comma-separated string */
+    const char *in = value;
+    char buf[1024];
+    char *out = buf;
+    *out = '\0';
+
+    while (*in != '\0')
+      {
+	  if (*in == ',')
+	    {
+		*out = '\0';
+		if (*buf != '\0')
+		  {
+		      if (!kml_check_coord (buf))
+			  return 0;
+		      switch (*count)
+			{
+			case 0:
+			    *x = atof (buf);
+			    *count += 1;
+			    break;
+			case 1:
+			    *y = atof (buf);
+			    *count += 1;
+			    break;
+			case 2:
+			    *z = atof (buf);
+			    *count += 1;
+			    break;
+			default:
+			    *count += 1;
+			    break;
+			};
+		  }
+		in++;
+		out = buf;
+		*out = '\0';
+		continue;
+	    }
+	  *out++ = *in++;
+      }
+    *out = '\0';
+/* parsing the last item */
+    if (*buf != '\0')
+      {
+	  if (!kml_check_coord (buf))
+	      return 0;
+	  switch (*count)
+	    {
+	    case 0:
+		*x = atof (buf);
+		*count += 1;
+		break;
+	    case 1:
+		*y = atof (buf);
+		*count += 1;
+		break;
+	    case 2:
+		*z = atof (buf);
+		*count += 1;
+		break;
+	    default:
+		*count += 1;
+		break;
+	    };
+      }
+    return 1;
+}
+
+static int
+kml_parse_point_v2 (kmlCoordPtr coord, double *x, double *y, double *z,
+		    int *has_z)
+{
+/* parsing KML <coordinates> [Point] */
+    int count = 0;
+    kmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!kml_extract_coords (c->Value, x, y, z, &count))
+	      return 0;
+	  c = c->Next;
+      }
+    if (count == 2)
+      {
+	  *has_z = 0;
+	  return 1;
+      }
+    if (count == 3)
+      {
+	  *has_z = 1;
+	  return 1;
+      }
+    return 0;
+}
+
+static int
+kml_parse_point (gaiaGeomCollPtr geom, kmlNodePtr node, kmlNodePtr * next)
+{
+/* parsing a <Point> */
+    double x;
+    double y;
+    double z;
+    int has_z;
+    gaiaGeomCollPtr pt;
+    gaiaGeomCollPtr last;
+
+    if (strcmp (node->Tag, "coordinates") == 0)
+      {
+	  /* parsing a KML <Point> */
+	  if (!kml_parse_point_v2 (node->Coordinates, &x, &y, &z, &has_z))
+	      return 0;
+	  node = node->Next;
+	  if (node == NULL)
+	      return 0;
+	  if (strcmp (node->Tag, "coordinates") == 0)
+	      ;
+	  else
+	      return 0;
+	  node = node->Next;
+	  if (node == NULL)
+	      return 0;
+	  if (strcmp (node->Tag, "Point") == 0)
+	      ;
+	  else
+	      return 0;
+	  *next = node->Next;
+	  goto ok;
+      }
+    return 0;
+
+  ok:
+/* ok, KML nodes match as expected */
+    if (has_z)
+      {
+	  pt = gaiaAllocGeomCollXYZ ();
+	  gaiaAddPointToGeomCollXYZ (pt, x, y, z);
+      }
+    else
+      {
+	  pt = gaiaAllocGeomColl ();
+	  gaiaAddPointToGeomColl (pt, x, y);
+      }
+    last = geom;
+    while (1)
+      {
+	  /* searching the last Geometry within chain */
+	  if (last->Next == NULL)
+	      break;
+	  last = last->Next;
+      }
+    last->Next = pt;
+    return 1;
+}
+
+static int
+kml_extract_multi_coord (const char *value, double *x, double *y, double *z,
+			 int *count, int *follow)
+{
+/* extracting KML coords from a comma-separated string */
+    const char *in = value;
+    char buf[1024];
+    char *out = buf;
+    int last;
+    *out = '\0';
+    while (*in != '\0')
+      {
+	  last = *in;
+	  if (*in == ',')
+	    {
+		*out = '\0';
+		if (*buf != '\0')
+		  {
+		      if (!kml_check_coord (buf))
+			  return 0;
+		      switch (*count)
+			{
+			case 0:
+			    *x = atof (buf);
+			    *count += 1;
+			    break;
+			case 1:
+			    *y = atof (buf);
+			    *count += 1;
+			    break;
+			case 2:
+			    *z = atof (buf);
+			    *count += 1;
+			    break;
+			default:
+			    *count += 1;
+			    break;
+			};
+		  }
+		in++;
+		out = buf;
+		*out = '\0';
+		continue;
+	    }
+	  *out++ = *in++;
+      }
+    *out = '\0';
+/* parsing the last item */
+    if (*buf != '\0')
+      {
+	  if (!kml_check_coord (buf))
+	      return 0;
+	  switch (*count)
+	    {
+	    case 0:
+		*x = atof (buf);
+		*count += 1;
+		break;
+	    case 1:
+		*y = atof (buf);
+		*count += 1;
+		break;
+	    case 2:
+		*z = atof (buf);
+		*count += 1;
+		break;
+	    default:
+		*count += 1;
+		break;
+	    };
+      }
+    if (last == ',')
+	*follow = 1;
+    else
+	*follow = 0;
+    return 1;
+}
+
+static int
+kml_extract_multi_coords (kmlCoordPtr coord, double *x, double *y, double *z,
+			  int *count, kmlCoordPtr * next)
+{
+/* extracting KML coords from a comma-separated string */
+    int follow;
+    kmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!kml_extract_multi_coord (c->Value, x, y, z, count, &follow))
+	      return 0;
+	  if (!follow && c->Next != NULL)
+	    {
+		if (*(c->Next->Value) == ',')
+		    follow = 1;
+	    }
+	  if (follow)
+	      c = c->Next;
+	  else
+	    {
+		*next = c->Next;
+		break;
+	    }
+      }
+    return 1;
+}
+
+static void
+kml_add_point_to_line (gaiaDynamicLinePtr dyn, double x, double y)
+{
+/* appending a point */
+    gaiaAppendPointToDynamicLine (dyn, x, y);
+}
+
+static void
+kml_add_point_to_lineZ (gaiaDynamicLinePtr dyn, double x, double y, double z)
+{
+/* appending a point */
+    gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+}
+
+static int
+kml_parse_coordinates (kmlCoordPtr coord, gaiaDynamicLinePtr dyn, int *has_z)
+{
+/* parsing KML <coordinates> [Linestring or Ring] */
+    int count = 0;
+    double x;
+    double y;
+    double z;
+    kmlCoordPtr next;
+    kmlCoordPtr c = coord;
+    while (c)
+      {
+	  if (!kml_extract_multi_coords (c, &x, &y, &z, &count, &next))
+	      return 0;
+	  if (count == 2)
+	    {
+		*has_z = 0;
+		kml_add_point_to_line (dyn, x, y);
+		count = 0;
+	    }
+	  else if (count == 3)
+	    {
+		kml_add_point_to_lineZ (dyn, x, y, z);
+		count = 0;
+	    }
+	  else
+	      return 0;
+	  c = next;
+      }
+    return 1;
+}
+
+static int
+kml_count_dyn_points (gaiaDynamicLinePtr dyn)
+{
+/* count how many vertices are into sone linestring/ring */
+    int iv = 0;
+    gaiaPointPtr pt = dyn->First;
+    while (pt)
+      {
+	  iv++;
+	  pt = pt->Next;
+      }
+    return iv;
+}
+
+static int
+kml_parse_linestring (gaiaGeomCollPtr geom, kmlNodePtr node, kmlNodePtr * next)
+{
+/* parsing a <LineString> */
+    gaiaGeomCollPtr ln;
+    gaiaGeomCollPtr last;
+    gaiaLinestringPtr new_ln;
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr dyn = gaiaAllocDynamicLine ();
+    int iv;
+    int has_z = 1;
+    int points = 0;
+
+    if (strcmp (node->Tag, "coordinates") == 0)
+      {
+	  /* parsing a KML <LineString> */
+	  if (!kml_parse_coordinates (node->Coordinates, dyn, &has_z))
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "coordinates") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "LineString") == 0)
+	      ;
+	  else
+	      goto error;
+	  *next = node->Next;
+      }
+
+/* ok, KML nodes match as expected */
+    points = kml_count_dyn_points (dyn);
+    if (points < 2)
+	goto error;
+    if (has_z)
+      {
+	  ln = gaiaAllocGeomCollXYZ ();
+	  new_ln = gaiaAddLinestringToGeomColl (ln, points);
+	  pt = dyn->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPointXYZ (new_ln->Coords, iv, pt->X, pt->Y, pt->Z);
+		iv++;
+		pt = pt->Next;
+	    }
+      }
+    else
+      {
+	  ln = gaiaAllocGeomColl ();
+	  new_ln = gaiaAddLinestringToGeomColl (ln, points);
+	  pt = dyn->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPoint (new_ln->Coords, iv, pt->X, pt->Y);
+		iv++;
+		pt = pt->Next;
+	    }
+      }
+    last = geom;
+    while (1)
+      {
+	  /* searching the last Geometry within chain */
+	  if (last->Next == NULL)
+	      break;
+	  last = last->Next;
+      }
+    last->Next = ln;
+    gaiaFreeDynamicLine (dyn);
+    return 1;
+
+  error:
+    gaiaFreeDynamicLine (dyn);
+    return 0;
+}
+
+static gaiaDynamicLinePtr
+kml_parse_ring (kmlNodePtr node, int *interior, int *has_z, kmlNodePtr * next)
+{
+/* parsing a generic KML ring */
+    gaiaDynamicLinePtr dyn = gaiaAllocDynamicLine ();
+    *has_z = 1;
+
+    if (strcmp (node->Tag, "outerBoundaryIs") == 0)
+      {
+	  /* parsing a KML <outerBoundaryIs> */
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "coordinates") == 0)
+	    {
+		/* parsing a KML <kml:coordinates> */
+		if (!kml_parse_coordinates (node->Coordinates, dyn, has_z))
+		    goto error;
+		node = node->Next;
+		if (node == NULL)
+		    goto error;
+		if (strcmp (node->Tag, "coordinates") == 0)
+		    ;
+		else
+		    goto error;
+	    }
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "outerBoundaryIs") == 0)
+	      ;
+	  else
+	      goto error;
+	  *interior = 0;
+	  *next = node->Next;
+	  return dyn;
+      }
+    if (strcmp (node->Tag, "innerBoundaryIs") == 0)
+      {
+	  /* parsing a KML <innerBoundaryIs> */
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "coordinates") == 0)
+	    {
+		/* parsing a KML <coordinates> */
+		if (!kml_parse_coordinates (node->Coordinates, dyn, has_z))
+		    goto error;
+		node = node->Next;
+		if (node == NULL)
+		    goto error;
+		if (strcmp (node->Tag, "coordinates") == 0)
+		    ;
+		else
+		    goto error;
+	    }
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "LinearRing") == 0)
+	      ;
+	  else
+	      goto error;
+	  node = node->Next;
+	  if (node == NULL)
+	      goto error;
+	  if (strcmp (node->Tag, "innerBoundaryIs") == 0)
+	      ;
+	  else
+	      goto error;
+	  *interior = 1;
+	  *next = node->Next;
+	  return dyn;
+      }
+
+  error:
+    gaiaFreeDynamicLine (dyn);
+    return 0;
+}
+
+static int
+kml_parse_polygon (gaiaGeomCollPtr geom, kmlNodePtr node, kmlNodePtr * next_n)
+{
+/* parsing a <Polygon> */
+    int interior;
+    int has_z;
+    int inners;
+    int outers;
+    int points;
+    int iv;
+    int ib = 0;
+    gaiaGeomCollPtr pg;
+    gaiaGeomCollPtr last_g;
+    gaiaPolygonPtr new_pg;
+    gaiaRingPtr ring;
+    gaiaDynamicLinePtr dyn;
+    gaiaPointPtr pt;
+    gaiaDynamicLinePtr exterior_ring;
+    kmlNodePtr next;
+    kmlDynamicRingPtr dyn_rng;
+    kmlDynamicPolygonPtr dyn_pg = kml_alloc_dyn_polygon ();
+    kmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on rings */
+	  if (strcmp (n->Tag, "Polygon") == 0)
+	    {
+		*next_n = n->Next;
+		break;
+	    }
+	  dyn = kml_parse_ring (n, &interior, &has_z, &next);
+	  if (dyn == NULL)
+	      goto error;
+	  if (kml_count_dyn_points (dyn) < 4)
+	    {
+		/* cannot be a valid ring */
+		goto error;
+	    }
+	  /* checking if the ring is closed */
+	  if (has_z)
+	    {
+		if (dyn->First->X == dyn->Last->X
+		    && dyn->First->Y == dyn->Last->Y
+		    && dyn->First->Z == dyn->Last->Z)
+		    ;
+		else
+		    goto error;
+	    }
+	  else
+	    {
+		if (dyn->First->X == dyn->Last->X
+		    && dyn->First->Y == dyn->Last->Y)
+		    ;
+		else
+		    goto error;
+	    }
+	  kml_add_polygon_ring (dyn_pg, dyn, interior, has_z);
+	  n = next;
+      }
+/* ok, KML nodes match as expected */
+    inners = 0;
+    outers = 0;
+    has_z = 1;
+    dyn_rng = dyn_pg->first;
+    while (dyn_rng)
+      {
+	  /* verifying the rings collection */
+	  if (dyn_rng->has_z == 0)
+	      has_z = 0;
+	  if (dyn_rng->interior)
+	      inners++;
+	  else
+	    {
+		outers++;
+		points = kml_count_dyn_points (dyn_rng->ring);
+		exterior_ring = dyn_rng->ring;
+	    }
+	  dyn_rng = dyn_rng->next;
+      }
+    if (outers != 1)		/* no exterior ring declared */
+	goto error;
+
+    if (has_z)
+      {
+	  pg = gaiaAllocGeomCollXYZ ();
+	  new_pg = gaiaAddPolygonToGeomColl (pg, points, inners);
+	  /* initializing the EXTERIOR RING */
+	  ring = new_pg->Exterior;
+	  pt = exterior_ring->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPointXYZ (ring->Coords, iv, pt->X, pt->Y, pt->Z);
+		iv++;
+		pt = pt->Next;
+	    }
+	  dyn_rng = dyn_pg->first;
+	  while (dyn_rng)
+	    {
+		/* initializing any INTERIOR RING */
+		if (dyn_rng->interior == 0)
+		  {
+		      dyn_rng = dyn_rng->next;
+		      continue;
+		  }
+		points = kml_count_dyn_points (dyn_rng->ring);
+		ring = gaiaAddInteriorRing (new_pg, ib, points);
+		ib++;
+		pt = dyn_rng->ring->First;
+		iv = 0;
+		while (pt)
+		  {
+		      gaiaSetPointXYZ (ring->Coords, iv, pt->X, pt->Y, pt->Z);
+		      iv++;
+		      pt = pt->Next;
+		  }
+		dyn_rng = dyn_rng->next;
+	    }
+      }
+    else
+      {
+	  pg = gaiaAllocGeomColl ();
+	  new_pg = gaiaAddPolygonToGeomColl (pg, points, inners);
+	  /* initializing the EXTERIOR RING */
+	  ring = new_pg->Exterior;
+	  pt = exterior_ring->First;
+	  iv = 0;
+	  while (pt)
+	    {
+		gaiaSetPoint (ring->Coords, iv, pt->X, pt->Y);
+		iv++;
+		pt = pt->Next;
+	    }
+	  dyn_rng = dyn_pg->first;
+	  while (dyn_rng)
+	    {
+		/* initializing any INTERIOR RING */
+		if (dyn_rng->interior == 0)
+		  {
+		      dyn_rng = dyn_rng->next;
+		      continue;
+		  }
+		points = kml_count_dyn_points (dyn_rng->ring);
+		ring = gaiaAddInteriorRing (new_pg, ib, points);
+		ib++;
+		pt = dyn_rng->ring->First;
+		iv = 0;
+		while (pt)
+		  {
+		      gaiaSetPoint (ring->Coords, iv, pt->X, pt->Y);
+		      iv++;
+		      pt = pt->Next;
+		  }
+		dyn_rng = dyn_rng->next;
+	    }
+      }
+
+    last_g = geom;
+    while (1)
+      {
+	  /* searching the last Geometry within chain */
+	  if (last_g->Next == NULL)
+	      break;
+	  last_g = last_g->Next;
+      }
+    last_g->Next = pg;
+    kml_free_dyn_polygon (dyn_pg);
+    return 1;
+
+  error:
+    kml_free_dyn_polygon (dyn_pg);
+    return 0;
+}
+
+static int
+kml_parse_multi_geometry (gaiaGeomCollPtr geom, kmlNodePtr node)
+{
+/* parsing a <MultiGeometry> */
+    kmlNodePtr next;
+    kmlNodePtr n = node;
+    while (n)
+      {
+	  /* looping on Geometry Members */
+	  if (n->Next == NULL)
+	    {
+		/* verifying the last KML node */
+		if (strcmp (n->Tag, "MultiGeometry") == 0)
+		    break;
+		else
+		    return 0;
+	    }
+	  if (strcmp (n->Tag, "Point") == 0)
+	    {
+		n = n->Next;
+		if (n == NULL)
+		    return 0;
+		if (!kml_parse_point (geom, n, &next))
+		    return 0;
+		n = next;
+		continue;
+	    }
+	  else if (strcmp (n->Tag, "LineString") == 0)
+	    {
+		n = n->Next;
+		if (n == NULL)
+		    return 0;
+		if (!kml_parse_linestring (geom, n, &next))
+		    return 0;
+		n = next;
+		continue;
+	    }
+	  else if (strcmp (n->Tag, "Polygon") == 0)
+	    {
+		n = n->Next;
+		if (n == NULL)
+		    return 0;
+		if (!kml_parse_polygon (geom, n, &next))
+		    return 0;
+		n = next;
+		continue;
+	    }
+	  else
+	      return 0;
+      }
+    return 1;
+}
+
+static gaiaGeomCollPtr
+kml_validate_geometry (gaiaGeomCollPtr chain)
+{
+    int xy = 0;
+    int xyz = 0;
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaPointPtr save_pt;
+    gaiaLinestringPtr save_ln;
+    gaiaPolygonPtr save_pg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    int ib;
+    gaiaGeomCollPtr g;
+    gaiaGeomCollPtr geom;
+
+    g = chain;
+    while (g)
+      {
+	  if (g != chain)
+	    {
+		if (g->DimensionModel == GAIA_XY)
+		    xy++;
+		if (g->DimensionModel == GAIA_XY_Z)
+		    xyz++;
+	    }
+	  pt = g->FirstPoint;
+	  while (pt)
+	    {
+		pts++;
+		save_pt = pt;
+		pt = pt->Next;
+	    }
+	  ln = g->FirstLinestring;
+	  while (ln)
+	    {
+		lns++;
+		save_ln = ln;
+		ln = ln->Next;
+	    }
+	  pg = g->FirstPolygon;
+	  while (pg)
+	    {
+		pgs++;
+		save_pg = pg;
+		pg = pg->Next;
+	    }
+	  g = g->Next;
+      }
+    if (pts == 1 && lns == 0 && pgs == 0)
+      {
+	  /* POINT */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_MULTIPOINT;
+		else
+		    geom->DeclaredType = GAIA_POINT;
+		gaiaAddPointToGeomColl (geom, save_pt->X, save_pt->Y);
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+		    geom->DeclaredType = GAIA_MULTIPOINT;
+		else
+		    geom->DeclaredType = GAIA_POINT;
+		gaiaAddPointToGeomCollXYZ (geom, save_pt->X, save_pt->Y,
+					   save_pt->Z);
+		return geom;
+	    }
+      }
+    if (pts == 0 && lns == 1 && pgs == 0)
+      {
+	  /* LINESTRING */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+	    }
+	  if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      geom->DeclaredType = GAIA_MULTILINESTRING;
+	  else
+	      geom->DeclaredType = GAIA_LINESTRING;
+	  ln = gaiaAddLinestringToGeomColl (geom, save_ln->Points);
+	  gaiaCopyLinestringCoords (ln, save_ln);
+	  return geom;
+      }
+    if (pts == 0 && lns == 0 && pgs == 1)
+      {
+	  /* POLYGON */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+	    }
+	  if (chain->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      geom->DeclaredType = GAIA_MULTIPOLYGON;
+	  else
+	      geom->DeclaredType = GAIA_POLYGON;
+	  i_ring = save_pg->Exterior;
+	  pg = gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+					 save_pg->NumInteriors);
+	  o_ring = pg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+	  for (ib = 0; ib < save_pg->NumInteriors; ib++)
+	    {
+		i_ring = save_pg->Interiors + ib;
+		o_ring = gaiaAddInteriorRing (pg, ib, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+	  return geom;
+      }
+    if (pts >= 1 && lns == 0 && pgs == 0)
+      {
+	  /* MULTIPOINT */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->DeclaredType = GAIA_MULTIPOINT;
+		g = chain;
+		while (g)
+		  {
+		      pt = g->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomColl (geom, pt->X, pt->Y);
+			    pt = pt->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->DeclaredType = GAIA_MULTIPOINT;
+		g = chain;
+		while (g)
+		  {
+		      pt = g->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomCollXYZ (geom, pt->X, pt->Y,
+						       pt->Z);
+			    pt = pt->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    if (pts == 0 && lns >= 1 && pgs == 0)
+      {
+	  /* MULTILINESTRING */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->DeclaredType = GAIA_MULTILINESTRING;
+		g = chain;
+		while (g)
+		  {
+		      ln = g->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->DeclaredType = GAIA_MULTILINESTRING;
+		g = chain;
+		while (g)
+		  {
+		      ln = g->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    if (pts == 0 && lns == 0 && pgs >= 1)
+      {
+	  /* MULTIPOLYGON */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->DeclaredType = GAIA_MULTIPOLYGON;
+		g = chain;
+		while (g)
+		  {
+		      pg = g->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->DeclaredType = GAIA_MULTIPOLYGON;
+		g = chain;
+		while (g)
+		  {
+		      pg = g->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    if ((pts + lns + pgs) > 0)
+      {
+	  /* GEOMETRYCOLLECTION */
+	  if (xy > 0)
+	    {
+		/* 2D [XY] */
+		geom = gaiaAllocGeomColl ();
+		geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		g = chain;
+		while (g)
+		  {
+		      pt = g->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomColl (geom, pt->X, pt->Y);
+			    pt = pt->Next;
+			}
+		      ln = g->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      pg = g->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+	  else
+	    {
+		/* 3D [XYZ] */
+		geom = gaiaAllocGeomCollXYZ ();
+		geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		g = chain;
+		while (g)
+		  {
+		      pt = g->FirstPoint;
+		      while (pt)
+			{
+			    gaiaAddPointToGeomCollXYZ (geom, pt->X, pt->Y,
+						       pt->Z);
+			    pt = pt->Next;
+			}
+		      ln = g->FirstLinestring;
+		      while (ln)
+			{
+			    save_ln =
+				gaiaAddLinestringToGeomColl (geom, ln->Points);
+			    gaiaCopyLinestringCoords (save_ln, ln);
+			    ln = ln->Next;
+			}
+		      pg = g->FirstPolygon;
+		      while (pg)
+			{
+			    i_ring = pg->Exterior;
+			    save_pg =
+				gaiaAddPolygonToGeomColl (geom, i_ring->Points,
+							  pg->NumInteriors);
+			    o_ring = save_pg->Exterior;
+			    gaiaCopyRingCoords (o_ring, i_ring);
+			    for (ib = 0; ib < pg->NumInteriors; ib++)
+			      {
+				  i_ring = pg->Interiors + ib;
+				  o_ring =
+				      gaiaAddInteriorRing (save_pg, ib,
+							   i_ring->Points);
+				  gaiaCopyRingCoords (o_ring, i_ring);
+			      }
+			    pg = pg->Next;
+			}
+		      g = g->Next;
+		  }
+		return geom;
+	    }
+      }
+    return NULL;
+}
+
+static void
+kml_free_geom_chain (gaiaGeomCollPtr geom)
+{
+/* deleting a chain of preliminary geometries */
+    gaiaGeomCollPtr gn;
+    while (geom)
+      {
+	  gn = geom->Next;
+	  gaiaFreeGeomColl (geom);
+	  geom = gn;
+      }
+}
+
+static gaiaGeomCollPtr
+kml_build_geometry (kmlNodePtr tree)
+{
+/* attempting to build a geometry from KML nodes */
+    gaiaGeomCollPtr geom;
+    gaiaGeomCollPtr result;
+    int geom_type;
+    kmlNodePtr next;
+
+    if (tree == NULL)
+	return NULL;
+    geom_type = guessKmlGeometryType (tree);
+    if (geom_type == GAIA_KML_UNKNOWN)
+      {
+	  /* unsupported main geometry type */
+	  return NULL;
+      }
+/* creating the main geometry */
+    geom = gaiaAllocGeomColl ();
+
+    switch (geom_type)
+      {
+	  /* parsing KML nodes accordingly with declared KML type */
+      case GAIA_KML_POINT:
+	  geom->DeclaredType = GAIA_POINT;
+	  if (!kml_parse_point (geom, tree->Next, &next))
+	      goto error;
+	  break;
+      case GAIA_KML_LINESTRING:
+	  geom->DeclaredType = GAIA_LINESTRING;
+	  if (!kml_parse_linestring (geom, tree->Next, &next))
+	      goto error;
+	  break;
+      case GAIA_KML_POLYGON:
+	  geom->DeclaredType = GAIA_POLYGON;
+	  if (!kml_parse_polygon (geom, tree->Next, &next))
+	      goto error;
+	  if (next != NULL)
+	      goto error;
+	  break;
+      case GAIA_KML_MULTIGEOMETRY:
+	  geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+	  if (!kml_parse_multi_geometry (geom, tree->Next))
+	      goto error;
+	  break;
+      };
+
+/* attempting to build the final geometry */
+    result = kml_validate_geometry (geom);
+    if (result == NULL)
+	goto error;
+    kml_free_geom_chain (geom);
+    return result;
+
+  error:
+    kml_free_geom_chain (geom);
+    return NULL;
+}
+
+
+
+/*
+** CAVEAT: we must redefine any Lemon/Flex own macro
+*/
+#define YYMINORTYPE		KML_MINORTYPE
+#define YY_CHAR			KML_YY_CHAR
+#define	input			kml_input
+#define ParseAlloc		kmlParseAlloc
+#define ParseFree		kmlParseFree
+#define ParseStackPeak		kmlParseStackPeak
+#define Parse			kmlParse
+#define yyStackEntry		kml_yyStackEntry
+#define yyzerominor		kml_yyzerominor
+#define yy_accept		kml_yy_accept
+#define yy_action		kml_yy_action
+#define yy_base			kml_yy_base
+#define yy_buffer_stack		kml_yy_buffer_stack
+#define yy_buffer_stack_max	kml_yy_buffer_stack_max
+#define yy_buffer_stack_top	kml_yy_buffer_stack_top
+#define yy_c_buf_p		kml_yy_c_buf_p
+#define yy_chk			kml_yy_chk
+#define yy_def			kml_yy_def
+#define yy_default		kml_yy_default
+#define yy_destructor		kml_yy_destructor
+#define yy_ec			kml_yy_ec
+#define yy_fatal_error		kml_yy_fatal_error
+#define yy_find_reduce_action	kml_yy_find_reduce_action
+#define yy_find_shift_action	kml_yy_find_shift_action
+#define yy_get_next_buffer	kml_yy_get_next_buffer
+#define yy_get_previous_state	kml_yy_get_previous_state
+#define yy_init			kml_yy_init
+#define yy_init_globals		kml_yy_init_globals
+#define yy_lookahead		kml_yy_lookahead
+#define yy_meta			kml_yy_meta
+#define yy_nxt			kml_yy_nxt
+#define yy_parse_failed		kml_yy_parse_failed
+#define yy_pop_parser_stack	kml_yy_pop_parser_stack
+#define yy_reduce		kml_yy_reduce
+#define yy_reduce_ofst		kml_yy_reduce_ofst
+#define yy_shift		kml_yy_shift
+#define yy_shift_ofst		kml_yy_shift_ofst
+#define yy_start		kml_yy_start
+#define yy_state_type		kml_yy_state_type
+#define yy_syntax_error		kml_yy_syntax_error
+#define yy_trans_info		kml_yy_trans_info
+#define yy_try_NUL_trans	kml_yy_try_NUL_trans
+#define yyParser		kml_yyParser
+#define yyStackEntry		kml_yyStackEntry
+#define yyStackOverflow		kml_yyStackOverflow
+#define yyRuleInfo		kml_yyRuleInfo
+#define yyunput			kml_yyunput
+#define yyzerominor		kml_yyzerominor
+#define yyTraceFILE		kml_yyTraceFILE
+#define yyTracePrompt		kml_yyTracePrompt
+#define yyTokenName		kml_yyTokenName
+#define yyRuleName		kml_yyRuleName
+#define ParseTrace		kml_ParseTrace
+
+
+/*
+ KML_LEMON_H_START - LEMON generated header starts here 
+*/
+#define KML_NEWLINE                     1
+#define KML_END                         2
+#define KML_CLOSE                       3
+#define KML_OPEN                        4
+#define KML_KEYWORD                     5
+#define KML_EQ                          6
+#define KML_VALUE                       7
+#define KML_COORD                       8
+/*
+ KML_LEMON_H_END - LEMON generated header ends here 
+*/
+
+
+typedef union
+{
+    char *pval;
+    struct symtab *symp;
+} kml_yystype;
+#define YYSTYPE kml_yystype
+
+
+/* extern YYSTYPE yylval; */
+YYSTYPE KmlLval;
+
+
+
+/*
+ KML_LEMON_START - LEMON generated code starts here 
+*/
+
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is included that follows the "include" declaration
+** in the input grammar file. */
+#include <stdio.h>
+
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/* 
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands. 
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+**    YYCODETYPE         is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 terminals
+**                       and nonterminals.  "int" is used otherwise.
+**    YYNOCODE           is a number of type YYCODETYPE which corresponds
+**                       to no legal terminal or nonterminal number.  This
+**                       number is used to fill in empty slots of the hash 
+**                       table.
+**    YYFALLBACK         If defined, this indicates that one or more tokens
+**                       have fall-back values which should be used if the
+**                       original value of the token will not parse.
+**    YYACTIONTYPE       is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 rules and
+**                       states combined.  "int" is used otherwise.
+**    ParseTOKENTYPE     is the data type used for minor tokens given 
+**                       directly to the parser from the tokenizer.
+**    YYMINORTYPE        is the data type used for all minor tokens.
+**                       This is typically a union of many types, one of
+**                       which is ParseTOKENTYPE.  The entry in the union
+**                       for base tokens is called "yy0".
+**    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
+**                       zero the stack is dynamically sized using realloc()
+**    ParseARG_SDECL     A static variable declaration for the %extra_argument
+**    ParseARG_PDECL     A parameter declaration for the %extra_argument
+**    ParseARG_STORE     Code to store %extra_argument into yypParser
+**    ParseARG_FETCH     Code to extract %extra_argument from yypParser
+**    YYNSTATE           the combined number of states.
+**    YYNRULE            the number of rules in the grammar
+**    YYERRORSYMBOL      is the code number of the error symbol.  If not
+**                       defined, then do no error processing.
+*/
+#define YYCODETYPE unsigned char
+#define YYNOCODE 28
+#define YYACTIONTYPE unsigned char
+#define ParseTOKENTYPE void *
+typedef union {
+  int yyinit;
+  ParseTOKENTYPE yy0;
+} YYMINORTYPE;
+#ifndef YYSTACKDEPTH
+#define YYSTACKDEPTH 1000000
+#endif
+#define ParseARG_SDECL  kmlNodePtr *result ;
+#define ParseARG_PDECL , kmlNodePtr *result 
+#define ParseARG_FETCH  kmlNodePtr *result  = yypParser->result 
+#define ParseARG_STORE yypParser->result  = result 
+#define YYNSTATE 49
+#define YYNRULE 34
+#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
+
+/* The yyzerominor constant is used to initialize instances of
+** YYMINORTYPE objects to zero. */
+static const YYMINORTYPE yyzerominor = { 0 };
+
+/* Define the yytestcase() macro to be a no-op if is not already defined
+** otherwise.
+**
+** Applications can choose to define yytestcase() in the %include section
+** to a macro that can assist in verifying code coverage.  For production
+** code the yytestcase() macro should be turned off.  But it is useful
+** for testing.
+*/
+#ifndef yytestcase
+# define yytestcase(X)
+#endif
+
+
+/* Next are the tables used to determine what action to take based on the
+** current state and lookahead token.  These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.  
+**
+** Suppose the action integer is N.  Then the action is determined as
+** follows
+**
+**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
+**                                      token onto the stack and goto state N.
+**
+**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
+**
+**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
+**
+**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
+**
+**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
+**                                      slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+**      yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.  
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+**  yy_action[]        A single table containing all actions.
+**  yy_lookahead[]     A table containing the lookahead for each entry in
+**                     yy_action.  Used to detect hash collisions.
+**  yy_shift_ofst[]    For each state, the offset into yy_action for
+**                     shifting terminals.
+**  yy_reduce_ofst[]   For each state, the offset into yy_action for
+**                     shifting non-terminals after a reduce.
+**  yy_default[]       Default action for each state.
+*/
+static const YYACTIONTYPE yy_action[] = {
+ /*     0 */    20,   28,   29,    4,   48,    5,    3,    3,    5,    5,
+ /*    10 */    42,   84,    1,   42,   42,   47,   46,    2,   10,    5,
+ /*    20 */    21,   12,   32,   23,   42,   38,   22,    6,   49,   23,
+ /*    30 */    13,   19,   14,   15,   35,    8,    8,   10,   25,   11,
+ /*    40 */    18,   34,   33,   45,   37,   16,   40,   17,   41,   14,
+ /*    50 */     9,   23,   43,    7,   45,   27,   30,   26,   31,   36,
+ /*    60 */    39,   44,   24,
+};
+static const YYCODETYPE yy_lookahead[] = {
+ /*     0 */    12,   13,   14,   15,   16,   17,   15,   15,   17,   17,
+ /*    10 */    22,   10,   11,   22,   22,   24,   24,   15,   18,   17,
+ /*    20 */     2,    3,    8,    5,   22,   25,    2,    3,    0,    5,
+ /*    30 */    18,   19,    4,   20,   21,   20,   20,   18,    2,    3,
+ /*    40 */     2,   26,   26,    5,   25,   20,   21,   20,   21,    4,
+ /*    50 */    18,    5,   23,   20,    5,    1,    3,   23,    3,    7,
+ /*    60 */     3,    3,    6,
+};
+#define YY_SHIFT_USE_DFLT (-1)
+#define YY_SHIFT_MAX 26
+static const signed char yy_shift_ofst[] = {
+ /*     0 */    -1,   28,   45,   45,   45,   18,   14,   14,   14,   46,
+ /*    10 */    46,   14,   14,   24,   38,   14,   14,   14,   49,   36,
+ /*    20 */    54,   53,   55,   56,   52,   57,   58,
+};
+#define YY_REDUCE_USE_DFLT (-13)
+#define YY_REDUCE_MAX 18
+static const signed char yy_reduce_ofst[] = {
+ /*     0 */     1,  -12,   -9,   -8,    2,   12,   13,   15,   16,    0,
+ /*    10 */    19,   25,   27,   32,   29,   33,   33,   33,   34,
+};
+static const YYACTIONTYPE yy_default[] = {
+ /*     0 */    50,   83,   72,   72,   54,   83,   60,   80,   80,   76,
+ /*    10 */    76,   61,   59,   83,   83,   64,   66,   62,   83,   83,
+ /*    20 */    83,   83,   83,   83,   83,   83,   83,   51,   52,   53,
+ /*    30 */    56,   57,   79,   81,   82,   65,   75,   77,   78,   58,
+ /*    40 */    67,   63,   68,   69,   70,   71,   73,   74,   55,
+};
+#define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0]))
+
+/* The next table maps tokens into fallback tokens.  If a construct
+** like the following:
+** 
+**      %fallback ID X Y Z.
+**
+** appears in the grammar, then ID becomes a fallback token for X, Y,
+** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack.  Information stored includes:
+**
+**   +  The state number for the parser at this level of the stack.
+**
+**   +  The value of the token stored at this level of the stack.
+**      (In other words, the "major" token.)
+**
+**   +  The semantic value stored at this level of the stack.  This is
+**      the information used by the action routines in the grammar.
+**      It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+  YYACTIONTYPE stateno;  /* The state-number */
+  YYCODETYPE major;      /* The major token value.  This is the code
+                         ** number for the token at this stack level */
+  YYMINORTYPE minor;     /* The user-supplied minor token value.  This
+                         ** is the value of the token  */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+  int yyidx;                    /* Index of top element in stack */
+#ifdef YYTRACKMAXSTACKDEPTH
+  int yyidxMax;                 /* Maximum value of yyidx */
+#endif
+  int yyerrcnt;                 /* Shifts left before out of the error */
+  ParseARG_SDECL                /* A place to hold %extra_argument */
+#if YYSTACKDEPTH<=0
+  int yystksz;                  /* Current side of the stack */
+  yyStackEntry *yystack;        /* The parser's stack */
+#else
+  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
+#endif
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* 
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message.  Tracing is turned off
+** by making either argument NULL 
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+**      If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+**      line of trace output.  If NULL, then tracing is
+**      turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void ParseTrace(FILE *TraceFILE, char *zTracePrompt){
+  yyTraceFILE = TraceFILE;
+  yyTracePrompt = zTracePrompt;
+  if( yyTraceFILE==0 ) yyTracePrompt = 0;
+  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required.  The following table supplies these names */
+static const char *const yyTokenName[] = { 
+  "$",             "KML_NEWLINE",   "KML_END",       "KML_CLOSE",   
+  "KML_OPEN",      "KML_KEYWORD",   "KML_EQ",        "KML_VALUE",   
+  "KML_COORD",     "error",         "main",          "in",          
+  "state",         "program",       "kml_tree",      "node",        
+  "node_chain",    "open_tag",      "attr",          "attributes",  
+  "coord",         "coord_chain",   "close_tag",     "keyword",     
+  "extra_nodes",   "extra_attr",    "extra_coord", 
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *const yyRuleName[] = {
+ /*   0 */ "main ::= in",
+ /*   1 */ "in ::=",
+ /*   2 */ "in ::= in state KML_NEWLINE",
+ /*   3 */ "state ::= program",
+ /*   4 */ "program ::= kml_tree",
+ /*   5 */ "kml_tree ::= node",
+ /*   6 */ "kml_tree ::= node_chain",
+ /*   7 */ "node ::= open_tag KML_END KML_CLOSE",
+ /*   8 */ "node ::= open_tag attr KML_END KML_CLOSE",
+ /*   9 */ "node ::= open_tag attributes KML_END KML_CLOSE",
+ /*  10 */ "node ::= open_tag KML_CLOSE",
+ /*  11 */ "node ::= open_tag attr KML_CLOSE",
+ /*  12 */ "node ::= open_tag attributes KML_CLOSE",
+ /*  13 */ "node ::= open_tag KML_CLOSE coord",
+ /*  14 */ "node ::= open_tag KML_CLOSE coord_chain",
+ /*  15 */ "node ::= open_tag attr KML_CLOSE coord",
+ /*  16 */ "node ::= open_tag attr KML_CLOSE coord_chain",
+ /*  17 */ "node ::= open_tag attributes KML_CLOSE coord",
+ /*  18 */ "node ::= open_tag attributes KML_CLOSE coord_chain",
+ /*  19 */ "node ::= close_tag",
+ /*  20 */ "open_tag ::= KML_OPEN keyword",
+ /*  21 */ "close_tag ::= KML_OPEN KML_END keyword KML_CLOSE",
+ /*  22 */ "keyword ::= KML_KEYWORD",
+ /*  23 */ "extra_nodes ::=",
+ /*  24 */ "extra_nodes ::= node extra_nodes",
+ /*  25 */ "node_chain ::= node node extra_nodes",
+ /*  26 */ "attr ::= KML_KEYWORD KML_EQ KML_VALUE",
+ /*  27 */ "extra_attr ::=",
+ /*  28 */ "extra_attr ::= attr extra_attr",
+ /*  29 */ "attributes ::= attr attr extra_attr",
+ /*  30 */ "coord ::= KML_COORD",
+ /*  31 */ "extra_coord ::=",
+ /*  32 */ "extra_coord ::= coord extra_coord",
+ /*  33 */ "coord_chain ::= coord coord extra_coord",
+};
+#endif /* NDEBUG */
+
+
+#if YYSTACKDEPTH<=0
+/*
+** Try to increase the size of the parser stack.
+*/
+static void yyGrowStack(yyParser *p){
+  int newSize;
+  yyStackEntry *pNew;
+
+  newSize = p->yystksz*2 + 100;
+  pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+  if( pNew ){
+    p->yystack = pNew;
+    p->yystksz = newSize;
+#ifndef NDEBUG
+    if( yyTraceFILE ){
+      fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
+              yyTracePrompt, p->yystksz);
+    }
+#endif
+  }
+}
+#endif
+
+/* 
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser.  This pointer is used in subsequent calls
+** to Parse and ParseFree.
+*/
+void *ParseAlloc(void *(*mallocProc)(size_t)){
+  yyParser *pParser;
+  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+  if( pParser ){
+    pParser->yyidx = -1;
+#ifdef YYTRACKMAXSTACKDEPTH
+    pParser->yyidxMax = 0;
+#endif
+#if YYSTACKDEPTH<=0
+    pParser->yystack = NULL;
+    pParser->yystksz = 0;
+    yyGrowStack(pParser);
+#endif
+  }
+  return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol.  The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(
+  yyParser *yypParser,    /* The parser */
+  YYCODETYPE yymajor,     /* Type code for object to destroy */
+  YYMINORTYPE *yypminor   /* The object to be destroyed */
+){
+  ParseARG_FETCH;
+  switch( yymajor ){
+    /* Here is inserted the actions which take place when a
+    ** terminal or non-terminal is destroyed.  This can happen
+    ** when the symbol is popped from the stack during a
+    ** reduce or during error processing or when a parser is 
+    ** being destroyed before it is finished parsing.
+    **
+    ** Note: during a reduce, the only symbols destroyed are those
+    ** which appear on the RHS of the rule, but which are not used
+    ** inside the C code.
+    */
+    default:  break;   /* If no destructor action specified: do nothing */
+  }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+  YYCODETYPE yymajor;
+  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+  if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+  if( yyTraceFILE && pParser->yyidx>=0 ){
+    fprintf(yyTraceFILE,"%sPopping %s\n",
+      yyTracePrompt,
+      yyTokenName[yytos->major]);
+  }
+#endif
+  yymajor = yytos->major;
+  yy_destructor(pParser, yymajor, &yytos->minor);
+  pParser->yyidx--;
+  return yymajor;
+}
+
+/* 
+** Deallocate and destroy a parser.  Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li>  A pointer to the parser.  This should be a pointer
+**       obtained from ParseAlloc.
+** <li>  A pointer to a function used to reclaim memory obtained
+**       from malloc.
+** </ul>
+*/
+void ParseFree(
+  void *p,                    /* The parser to be deleted */
+  void (*freeProc)(void*)     /* Function used to reclaim memory */
+){
+  yyParser *pParser = (yyParser*)p;
+  if( pParser==0 ) return;
+  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+#if YYSTACKDEPTH<=0
+  free(pParser->yystack);
+#endif
+  (*freeProc)((void*)pParser);
+}
+
+/*
+** Return the peak depth of the stack for a parser.
+*/
+#ifdef YYTRACKMAXSTACKDEPTH
+int ParseStackPeak(void *p){
+  yyParser *pParser = (yyParser*)p;
+  return pParser->yyidxMax;
+}
+#endif
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+  yyParser *pParser,        /* The parser */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+ 
+  if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    if( iLookAhead>0 ){
+#ifdef YYFALLBACK
+      YYCODETYPE iFallback;            /* Fallback token */
+      if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+             && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+             yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+        }
+#endif
+        return yy_find_shift_action(pParser, iFallback);
+      }
+#endif
+#ifdef YYWILDCARD
+      {
+        int j = i - iLookAhead + YYWILDCARD;
+        if( j>=0 && j<YY_SZ_ACTTAB && yy_lookahead[j]==YYWILDCARD ){
+#ifndef NDEBUG
+          if( yyTraceFILE ){
+            fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
+               yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
+          }
+#endif /* NDEBUG */
+          return yy_action[j];
+        }
+      }
+#endif /* YYWILDCARD */
+    }
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+  int stateno,              /* Current state number */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+#ifdef YYERRORSYMBOL
+  if( stateno>YY_REDUCE_MAX ){
+    return yy_default[stateno];
+  }
+#else
+  assert( stateno<=YY_REDUCE_MAX );
+#endif
+  i = yy_reduce_ofst[stateno];
+  assert( i!=YY_REDUCE_USE_DFLT );
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+#ifdef YYERRORSYMBOL
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    return yy_default[stateno];
+  }
+#else
+  assert( i>=0 && i<YY_SZ_ACTTAB );
+  assert( yy_lookahead[i]==iLookAhead );
+#endif
+  return yy_action[i];
+}
+
+/*
+** The following routine is called if the stack overflows.
+*/
+static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
+   ParseARG_FETCH;
+   yypParser->yyidx--;
+#ifndef NDEBUG
+   if( yyTraceFILE ){
+     fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+   }
+#endif
+   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+   /* Here code is inserted which will execute if the parser
+   ** stack every overflows */
+
+     fprintf(stderr,"Giving up.  Parser stack overflow\n");
+   ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+  yyParser *yypParser,          /* The parser to be shifted */
+  int yyNewState,               /* The new state to shift in */
+  int yyMajor,                  /* The major token to shift in */
+  YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
+){
+  yyStackEntry *yytos;
+  yypParser->yyidx++;
+#ifdef YYTRACKMAXSTACKDEPTH
+  if( yypParser->yyidx>yypParser->yyidxMax ){
+    yypParser->yyidxMax = yypParser->yyidx;
+  }
+#endif
+#if YYSTACKDEPTH>0 
+  if( yypParser->yyidx>=YYSTACKDEPTH ){
+    yyStackOverflow(yypParser, yypMinor);
+    return;
+  }
+#else
+  if( yypParser->yyidx>=yypParser->yystksz ){
+    yyGrowStack(yypParser);
+    if( yypParser->yyidx>=yypParser->yystksz ){
+      yyStackOverflow(yypParser, yypMinor);
+      return;
+    }
+  }
+#endif
+  yytos = &yypParser->yystack[yypParser->yyidx];
+  yytos->stateno = (YYACTIONTYPE)yyNewState;
+  yytos->major = (YYCODETYPE)yyMajor;
+  yytos->minor = *yypMinor;
+#ifndef NDEBUG
+  if( yyTraceFILE && yypParser->yyidx>0 ){
+    int i;
+    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+    for(i=1; i<=yypParser->yyidx; i++)
+      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+    fprintf(yyTraceFILE,"\n");
+  }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static const struct {
+  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
+  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+  { 10, 1 },
+  { 11, 0 },
+  { 11, 3 },
+  { 12, 1 },
+  { 13, 1 },
+  { 14, 1 },
+  { 14, 1 },
+  { 15, 3 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 2 },
+  { 15, 3 },
+  { 15, 3 },
+  { 15, 3 },
+  { 15, 3 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 4 },
+  { 15, 1 },
+  { 17, 2 },
+  { 22, 4 },
+  { 23, 1 },
+  { 24, 0 },
+  { 24, 2 },
+  { 16, 3 },
+  { 18, 3 },
+  { 25, 0 },
+  { 25, 2 },
+  { 19, 3 },
+  { 20, 1 },
+  { 26, 0 },
+  { 26, 2 },
+  { 21, 3 },
+};
+
+static void yy_accept(yyParser*);  /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+  yyParser *yypParser,         /* The parser */
+  int yyruleno                 /* Number of the rule by which to reduce */
+){
+  int yygoto;                     /* The next state */
+  int yyact;                      /* The next action */
+  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
+  yyStackEntry *yymsp;            /* The top of the parser's stack */
+  int yysize;                     /* Amount to pop the stack */
+  ParseARG_FETCH;
+  yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+  if( yyTraceFILE && yyruleno>=0 
+        && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
+    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+      yyRuleName[yyruleno]);
+  }
+#endif /* NDEBUG */
+
+  /* Silence complaints from purify about yygotominor being uninitialized
+  ** in some cases when it is copied into the stack after the following
+  ** switch.  yygotominor is uninitialized when a rule reduces that does
+  ** not set the value of its left-hand side nonterminal.  Leaving the
+  ** value of the nonterminal uninitialized is utterly harmless as long
+  ** as the value is never used.  So really the only thing this code
+  ** accomplishes is to quieten purify.  
+  **
+  ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
+  ** without this code, their parser segfaults.  I'm not sure what there
+  ** parser is doing to make this happen.  This is the second bug report
+  ** from wireshark this week.  Clearly they are stressing Lemon in ways
+  ** that it has not been previously stressed...  (SQLite ticket #2172)
+  */
+  /*memset(&yygotominor, 0, sizeof(yygotominor));*/
+  yygotominor = yyzerominor;
+
+
+  switch( yyruleno ){
+  /* Beginning here are the reduction cases.  A typical example
+  ** follows:
+  **   case 0:
+  **  #line <lineno> <grammarfile>
+  **     { ... }           // User supplied code
+  **  #line <lineno> <thisfile>
+  **     break;
+  */
+      case 5: /* kml_tree ::= node */
+      case 6: /* kml_tree ::= node_chain */ yytestcase(yyruleno==6);
+{ *result = yymsp[0].minor.yy0; }
+        break;
+      case 7: /* node ::= open_tag KML_END KML_CLOSE */
+{ yygotominor.yy0 = kml_createSelfClosedNode((void *)yymsp[-2].minor.yy0, NULL); }
+        break;
+      case 8: /* node ::= open_tag attr KML_END KML_CLOSE */
+      case 9: /* node ::= open_tag attributes KML_END KML_CLOSE */ yytestcase(yyruleno==9);
+{ yygotominor.yy0 = kml_createSelfClosedNode((void *)yymsp[-3].minor.yy0, (void *)yymsp[-2].minor.yy0); }
+        break;
+      case 10: /* node ::= open_tag KML_CLOSE */
+{ yygotominor.yy0 = kml_createNode((void *)yymsp[-1].minor.yy0, NULL, NULL); }
+        break;
+      case 11: /* node ::= open_tag attr KML_CLOSE */
+      case 12: /* node ::= open_tag attributes KML_CLOSE */ yytestcase(yyruleno==12);
+{ yygotominor.yy0 = kml_createNode((void *)yymsp[-2].minor.yy0, (void *)yymsp[-1].minor.yy0, NULL); }
+        break;
+      case 13: /* node ::= open_tag KML_CLOSE coord */
+      case 14: /* node ::= open_tag KML_CLOSE coord_chain */ yytestcase(yyruleno==14);
+{ yygotominor.yy0 = kml_createNode((void *)yymsp[-2].minor.yy0, NULL, (void *)yymsp[0].minor.yy0); }
+        break;
+      case 15: /* node ::= open_tag attr KML_CLOSE coord */
+      case 16: /* node ::= open_tag attr KML_CLOSE coord_chain */ yytestcase(yyruleno==16);
+      case 17: /* node ::= open_tag attributes KML_CLOSE coord */ yytestcase(yyruleno==17);
+      case 18: /* node ::= open_tag attributes KML_CLOSE coord_chain */ yytestcase(yyruleno==18);
+{ yygotominor.yy0 = kml_createNode((void *)yymsp[-3].minor.yy0, (void *)yymsp[-2].minor.yy0, (void *)yymsp[0].minor.yy0); }
+        break;
+      case 19: /* node ::= close_tag */
+{ yygotominor.yy0 = kml_closingNode((void *)yymsp[0].minor.yy0); }
+        break;
+      case 20: /* open_tag ::= KML_OPEN keyword */
+      case 22: /* keyword ::= KML_KEYWORD */ yytestcase(yyruleno==22);
+{ yygotominor.yy0 = yymsp[0].minor.yy0; }
+        break;
+      case 21: /* close_tag ::= KML_OPEN KML_END keyword KML_CLOSE */
+{ yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 23: /* extra_nodes ::= */
+      case 27: /* extra_attr ::= */ yytestcase(yyruleno==27);
+      case 31: /* extra_coord ::= */ yytestcase(yyruleno==31);
+{ yygotominor.yy0 = NULL; }
+        break;
+      case 24: /* extra_nodes ::= node extra_nodes */
+{ ((kmlNodePtr)yymsp[-1].minor.yy0)->Next = (kmlNodePtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 25: /* node_chain ::= node node extra_nodes */
+{ 
+	   ((kmlNodePtr)yymsp[-1].minor.yy0)->Next = (kmlNodePtr)yymsp[0].minor.yy0; 
+	   ((kmlNodePtr)yymsp[-2].minor.yy0)->Next = (kmlNodePtr)yymsp[-1].minor.yy0;
+	   yygotominor.yy0 = yymsp[-2].minor.yy0;
+	}
+        break;
+      case 26: /* attr ::= KML_KEYWORD KML_EQ KML_VALUE */
+{ yygotominor.yy0 = kml_attribute((void *)yymsp[-2].minor.yy0, (void *)yymsp[0].minor.yy0); }
+        break;
+      case 28: /* extra_attr ::= attr extra_attr */
+{ ((kmlAttrPtr)yymsp[-1].minor.yy0)->Next = (kmlAttrPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 29: /* attributes ::= attr attr extra_attr */
+{ 
+	   ((kmlAttrPtr)yymsp[-1].minor.yy0)->Next = (kmlAttrPtr)yymsp[0].minor.yy0; 
+	   ((kmlAttrPtr)yymsp[-2].minor.yy0)->Next = (kmlAttrPtr)yymsp[-1].minor.yy0;
+	   yygotominor.yy0 = yymsp[-2].minor.yy0;
+	}
+        break;
+      case 30: /* coord ::= KML_COORD */
+{ yygotominor.yy0 = kml_coord((void *)yymsp[0].minor.yy0); }
+        break;
+      case 32: /* extra_coord ::= coord extra_coord */
+{ ((kmlCoordPtr)yymsp[-1].minor.yy0)->Next = (kmlCoordPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+        break;
+      case 33: /* coord_chain ::= coord coord extra_coord */
+{ 
+	   ((kmlCoordPtr)yymsp[-1].minor.yy0)->Next = (kmlCoordPtr)yymsp[0].minor.yy0; 
+	   ((kmlCoordPtr)yymsp[-2].minor.yy0)->Next = (kmlCoordPtr)yymsp[-1].minor.yy0;
+	   yygotominor.yy0 = yymsp[-2].minor.yy0;
+	}
+        break;
+      default:
+      /* (0) main ::= in */ yytestcase(yyruleno==0);
+      /* (1) in ::= */ yytestcase(yyruleno==1);
+      /* (2) in ::= in state KML_NEWLINE */ yytestcase(yyruleno==2);
+      /* (3) state ::= program */ yytestcase(yyruleno==3);
+      /* (4) program ::= kml_tree */ yytestcase(yyruleno==4);
+        break;
+  };
+  yygoto = yyRuleInfo[yyruleno].lhs;
+  yysize = yyRuleInfo[yyruleno].nrhs;
+  yypParser->yyidx -= yysize;
+  yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
+  if( yyact < YYNSTATE ){
+#ifdef NDEBUG
+    /* If we are not debugging and the reduce action popped at least
+    ** one element off the stack, then we can push the new element back
+    ** onto the stack here, and skip the stack overflow test in yy_shift().
+    ** That gives a significant speed improvement. */
+    if( yysize ){
+      yypParser->yyidx++;
+      yymsp -= yysize-1;
+      yymsp->stateno = (YYACTIONTYPE)yyact;
+      yymsp->major = (YYCODETYPE)yygoto;
+      yymsp->minor = yygotominor;
+    }else
+#endif
+    {
+      yy_shift(yypParser,yyact,yygoto,&yygotominor);
+    }
+  }else{
+    assert( yyact == YYNSTATE + YYNRULE + 1 );
+    yy_accept(yypParser);
+  }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+#ifndef YYNOERRORRECOVERY
+static void yy_parse_failed(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser fails */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+#endif /* YYNOERRORRECOVERY */
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+  yyParser *yypParser,           /* The parser */
+  int yymajor,                   /* The major type of the error token */
+  YYMINORTYPE yyminor            /* The minor type of the error token */
+){
+  ParseARG_FETCH;
+#define TOKEN (yyminor.yy0)
+
+/* 
+** when the LEMON parser encounters an error
+** then this global variable is set 
+*/
+	kml_parse_error = 1;
+	*result = NULL;
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser accepts */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "ParseAlloc" which describes the current state of the parser.
+** The second argument is the major token number.  The third is
+** the minor token.  The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void Parse(
+  void *yyp,                   /* The parser */
+  int yymajor,                 /* The major token code number */
+  ParseTOKENTYPE yyminor       /* The value for the token */
+  ParseARG_PDECL               /* Optional %extra_argument parameter */
+){
+  YYMINORTYPE yyminorunion;
+  int yyact;            /* The parser action. */
+  int yyendofinput;     /* True if we are at the end of input */
+#ifdef YYERRORSYMBOL
+  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+#endif
+  yyParser *yypParser;  /* The parser */
+
+  /* (re)initialize the parser, if necessary */
+  yypParser = (yyParser*)yyp;
+  if( yypParser->yyidx<0 ){
+#if YYSTACKDEPTH<=0
+    if( yypParser->yystksz <=0 ){
+      /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
+      yyminorunion = yyzerominor;
+      yyStackOverflow(yypParser, &yyminorunion);
+      return;
+    }
+#endif
+    yypParser->yyidx = 0;
+    yypParser->yyerrcnt = -1;
+    yypParser->yystack[0].stateno = 0;
+    yypParser->yystack[0].major = 0;
+  }
+  yyminorunion.yy0 = yyminor;
+  yyendofinput = (yymajor==0);
+  ParseARG_STORE;
+
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+  }
+#endif
+
+  do{
+    yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
+    if( yyact<YYNSTATE ){
+      assert( !yyendofinput );  /* Impossible to shift the $ token */
+      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+      yypParser->yyerrcnt--;
+      yymajor = YYNOCODE;
+    }else if( yyact < YYNSTATE + YYNRULE ){
+      yy_reduce(yypParser,yyact-YYNSTATE);
+    }else{
+      assert( yyact == YY_ERROR_ACTION );
+#ifdef YYERRORSYMBOL
+      int yymx;
+#endif
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+      }
+#endif
+#ifdef YYERRORSYMBOL
+      /* A syntax error has occurred.
+      ** The response to an error depends upon whether or not the
+      ** grammar defines an error token "ERROR".  
+      **
+      ** This is what we do if the grammar does define ERROR:
+      **
+      **  * Call the %syntax_error function.
+      **
+      **  * Begin popping the stack until we enter a state where
+      **    it is legal to shift the error symbol, then shift
+      **    the error symbol.
+      **
+      **  * Set the error count to three.
+      **
+      **  * Begin accepting and shifting new tokens.  No new error
+      **    processing will occur until three tokens have been
+      **    shifted successfully.
+      **
+      */
+      if( yypParser->yyerrcnt<0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yymx = yypParser->yystack[yypParser->yyidx].major;
+      if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+             yyTracePrompt,yyTokenName[yymajor]);
+        }
+#endif
+        yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
+        yymajor = YYNOCODE;
+      }else{
+         while(
+          yypParser->yyidx >= 0 &&
+          yymx != YYERRORSYMBOL &&
+          (yyact = yy_find_reduce_action(
+                        yypParser->yystack[yypParser->yyidx].stateno,
+                        YYERRORSYMBOL)) >= YYNSTATE
+        ){
+          yy_pop_parser_stack(yypParser);
+        }
+        if( yypParser->yyidx < 0 || yymajor==0 ){
+          yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+          yy_parse_failed(yypParser);
+          yymajor = YYNOCODE;
+        }else if( yymx!=YYERRORSYMBOL ){
+          YYMINORTYPE u2;
+          u2.YYERRSYMDT = 0;
+          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+        }
+      }
+      yypParser->yyerrcnt = 3;
+      yyerrorhit = 1;
+#elif defined(YYNOERRORRECOVERY)
+      /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
+      ** do any kind of error recovery.  Instead, simply invoke the syntax
+      ** error routine and continue going as if nothing had happened.
+      **
+      ** Applications can set this macro (for example inside %include) if
+      ** they intend to abandon the parse upon the first syntax error seen.
+      */
+      yy_syntax_error(yypParser,yymajor,yyminorunion);
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      yymajor = YYNOCODE;
+      
+#else  /* YYERRORSYMBOL is not defined */
+      /* This is what we do if the grammar does not define ERROR:
+      **
+      **  * Report an error message, and throw away the input token.
+      **
+      **  * If the input token is $, then fail the parse.
+      **
+      ** As before, subsequent error messages are suppressed until
+      ** three input tokens have been successfully shifted.
+      */
+      if( yypParser->yyerrcnt<=0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yypParser->yyerrcnt = 3;
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      if( yyendofinput ){
+        yy_parse_failed(yypParser);
+      }
+      yymajor = YYNOCODE;
+#endif
+    }
+  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  return;
+}
+
+
+/*
+ KML_LEMON_END - LEMON generated code ends here 
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+** CAVEAT: there is an incompatibility between LEMON and FLEX
+** this macro resolves the issue
+*/
+#undef yy_accept
+#define yy_accept	yy_kml_flex_accept
+
+
+
+/*
+ KML_FLEX_START - FLEX generated code starts here 
+*/
+
+#line 3 "lex.Kml.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define yy_create_buffer Kml_create_buffer
+#define yy_delete_buffer Kml_delete_buffer
+#define yy_flex_debug Kml_flex_debug
+#define yy_init_buffer Kml_init_buffer
+#define yy_flush_buffer Kml_flush_buffer
+#define yy_load_buffer_state Kml_load_buffer_state
+#define yy_switch_to_buffer Kml_switch_to_buffer
+#define yyin Kmlin
+#define yyleng Kmlleng
+#define yylex Kmllex
+#define yylineno Kmllineno
+#define yyout Kmlout
+#define yyrestart Kmlrestart
+#define yytext Kmltext
+#define yywrap Kmlwrap
+#define yyalloc Kmlalloc
+#define yyrealloc Kmlrealloc
+#define yyfree Kmlfree
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE Kmlrestart(Kmlin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
+#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int Kmlleng;
+
+extern FILE *Kmlin, *Kmlout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up Kmltext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up Kmltext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via Kmlrestart()), so that the user can continue scanning by
+	 * just pointing Kmlin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when Kmltext is formed. */
+static char yy_hold_char;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int Kmlleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow Kmlwrap()'s to do buffer switches
+ * instead of setting up a fresh Kmlin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void Kmlrestart (FILE *input_file  );
+void Kml_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE Kml_create_buffer (FILE *file,int size  );
+void Kml_delete_buffer (YY_BUFFER_STATE b  );
+void Kml_flush_buffer (YY_BUFFER_STATE b  );
+void Kmlpush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void Kmlpop_buffer_state (void );
+
+static void Kmlensure_buffer_stack (void );
+static void Kml_load_buffer_state (void );
+static void Kml_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER Kml_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE Kml_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE Kml_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE Kml_scan_bytes (yyconst char *bytes,int len  );
+
+void *Kmlalloc (yy_size_t  );
+void *Kmlrealloc (void *,yy_size_t  );
+void Kmlfree (void *  );
+
+#define yy_new_buffer Kml_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        Kmlensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            Kml_create_buffer(Kmlin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        Kmlensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            Kml_create_buffer(Kmlin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *Kmlin = (FILE *) 0, *Kmlout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int Kmllineno;
+
+int Kmllineno = 1;
+
+extern char *Kmltext;
+#define yytext_ptr Kmltext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up Kmltext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+	Kmlleng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	(yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 11
+#define YY_END_OF_BUFFER 12
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[19] =
+    {   0,
+        5,    5,   12,   10,    8,    9,   10,    5,    1,    3,
+        2,    4,    7,    0,    6,    5,    7,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    4,    1,    1,    1,    1,    1,    1,
+        1,    1,    5,    5,    5,    5,    6,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    8,    1,    9,
+       10,   11,    1,    1,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+        1,    1,    1,    1,   12,    1,   12,   12,   12,   12,
+
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[13] =
+    {   0,
+        1,    1,    1,    1,    2,    1,    3,    4,    5,    1,
+        5,    4
+    } ;
+
+static yyconst flex_int16_t yy_base[22] =
+    {   0,
+        0,    0,   23,   24,   24,   24,   18,    0,   24,   24,
+       24,   24,    0,   17,   24,    0,    0,   24,   12,   15,
+       16
+    } ;
+
+static yyconst flex_int16_t yy_def[22] =
+    {   0,
+       18,    1,   18,   18,   18,   18,   19,   20,   18,   18,
+       18,   18,   21,   19,   18,   20,   21,    0,   18,   18,
+       18
+    } ;
+
+static yyconst flex_int16_t yy_nxt[37] =
+    {   0,
+        4,    5,    6,    7,    8,    9,    8,    4,   10,   11,
+       12,   13,   14,   14,   14,   14,   16,   16,   17,   17,
+       15,   15,   18,    3,   18,   18,   18,   18,   18,   18,
+       18,   18,   18,   18,   18,   18
+    } ;
+
+static yyconst flex_int16_t yy_chk[37] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,   19,   19,   19,   19,   20,   20,   21,   21,
+       14,    7,    3,   18,   18,   18,   18,   18,   18,   18,
+       18,   18,   18,   18,   18,   18
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int Kml_flex_debug;
+int Kml_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *Kmltext;
+/* 
+ kmlLexer.l -- KML parser - FLEX config
+  
+ version 2.4, 2011 June 14
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+/* For debugging purposes */
+int kml_line = 1, kml_col = 1;
+
+/**
+*  The main string-token matcher.
+*  The lower case part is probably not needed.  We should really be converting 
+*  The string to all uppercase/lowercase to make it case iNsEnSiTiVe.
+*  What Flex will do is, For the input string, beginning from the front, Flex
+*  will try to match with any of the defined tokens from below.  Flex will 
+*  then match the string of longest length.  Suppose the string is: POINTM,
+*  Flex would match both POINT and POINTM, but since POINTM is the longer
+*  of the two tokens, FLEX will match POINTM.
+*/
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int Kmllex_destroy (void );
+
+int Kmlget_debug (void );
+
+void Kmlset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE Kmlget_extra (void );
+
+void Kmlset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *Kmlget_in (void );
+
+void Kmlset_in  (FILE * in_str  );
+
+FILE *Kmlget_out (void );
+
+void Kmlset_out  (FILE * out_str  );
+
+int Kmlget_leng (void );
+
+char *Kmlget_text (void );
+
+int Kmlget_lineno (void );
+
+void Kmlset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int Kmlwrap (void );
+#else
+extern int Kmlwrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
+#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( Kmltext, Kmlleng, 1, Kmlout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( Kmlin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( Kmlin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, Kmlin))==0 && ferror(Kmlin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(Kmlin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int Kmllex (void);
+
+#define YY_DECL int Kmllex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after Kmltext and Kmlleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! Kmlin )
+			Kmlin = stdin;
+
+		if ( ! Kmlout )
+			Kmlout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			Kmlensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				Kml_create_buffer(Kmlin,YY_BUF_SIZE );
+		}
+
+		Kml_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of Kmltext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = (yy_start);
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 19 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 24 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+{ kml_freeString(&(KmlLval.pval)); return KML_END; }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+{ kml_freeString(&(KmlLval.pval)); return KML_EQ; }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+{ kml_freeString(&(KmlLval.pval)); return KML_OPEN; }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+{ kml_freeString(&(KmlLval.pval)); return KML_CLOSE; }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ kml_saveString(&(KmlLval.pval), Kmltext); return KML_COORD; }
+	YY_BREAK
+case 6:
+/* rule 6 can match eol */
+YY_RULE_SETUP
+{ kml_saveString(&(KmlLval.pval), Kmltext); return KML_VALUE; }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+{ kml_saveString(&(KmlLval.pval), Kmltext); return KML_KEYWORD; }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+{ kml_freeString(&(KmlLval.pval)); kml_col += (int) strlen(Kmltext); }               /* ignore but count white space */
+	YY_BREAK
+case 9:
+/* rule 9 can match eol */
+YY_RULE_SETUP
+{ kml_freeString(&(KmlLval.pval)); kml_col = 0; ++kml_line; }
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+{ kml_freeString(&(KmlLval.pval)); kml_col += (int) strlen(Kmltext); return -1; }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+case YY_STATE_EOF(INITIAL):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed Kmlin at a new source and called
+			 * Kmllex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = Kmlin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( Kmlwrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * Kmltext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of Kmllex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					Kmlrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			Kmlrestart(Kmlin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) Kmlrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 19 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+	register int yy_is_jam;
+    	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 19 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 18);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+	register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up Kmltext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			int offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					Kmlrestart(Kmlin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( Kmlwrap( ) )
+						return EOF;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve Kmltext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void Kmlrestart  (FILE * input_file )
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        Kmlensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            Kml_create_buffer(Kmlin,YY_BUF_SIZE );
+	}
+
+	Kml_init_buffer(YY_CURRENT_BUFFER,input_file );
+	Kml_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void Kml_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		Kmlpop_buffer_state();
+	 *		Kmlpush_buffer_state(new_buffer);
+     */
+	Kmlensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	Kml_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (Kmlwrap()) processing, but the only time this flag
+	 * is looked at is after Kmlwrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void Kml_load_buffer_state  (void)
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	Kmlin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE Kml_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) Kmlalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in Kml_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) Kmlalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in Kml_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	Kml_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with Kml_create_buffer()
+ * 
+ */
+    void Kml_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		Kmlfree((void *) b->yy_ch_buf  );
+
+	Kmlfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a Kmlrestart() or at EOF.
+ */
+    static void Kml_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+    
+	Kml_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then Kml_init_buffer was _probably_
+     * called from Kmlrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void Kml_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		Kml_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void Kmlpush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	Kmlensure_buffer_stack();
+
+	/* This block is copied from Kml_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from Kml_switch_to_buffer. */
+	Kml_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void Kmlpop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	Kml_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		Kml_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void Kmlensure_buffer_stack (void)
+{
+	int num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)Kmlalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in Kmlensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)Kmlrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in Kmlensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE Kml_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) Kmlalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in Kml_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	Kml_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to Kmllex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       Kml_scan_bytes() instead.
+ */
+YY_BUFFER_STATE Kml_scan_string (yyconst char * yystr )
+{
+    
+	return Kml_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to Kmllex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE Kml_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) Kmlalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in Kml_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = Kml_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in Kml_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up Kmltext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		Kmltext[Kmlleng] = (yy_hold_char); \
+		(yy_c_buf_p) = Kmltext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		Kmlleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int Kmlget_lineno  (void)
+{
+        
+    return Kmllineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *Kmlget_in  (void)
+{
+        return Kmlin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *Kmlget_out  (void)
+{
+        return Kmlout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+int Kmlget_leng  (void)
+{
+        return Kmlleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *Kmlget_text  (void)
+{
+        return Kmltext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void Kmlset_lineno (int  line_number )
+{
+    
+    Kmllineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see Kml_switch_to_buffer
+ */
+void Kmlset_in (FILE *  in_str )
+{
+        Kmlin = in_str ;
+}
+
+void Kmlset_out (FILE *  out_str )
+{
+        Kmlout = out_str ;
+}
+
+int Kmlget_debug  (void)
+{
+        return Kml_flex_debug;
+}
+
+void Kmlset_debug (int  bdebug )
+{
+        Kml_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from Kmllex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    Kmlin = stdin;
+    Kmlout = stdout;
+#else
+    Kmlin = (FILE *) 0;
+    Kmlout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * Kmllex_init()
+     */
+    return 0;
+}
+
+/* Kmllex_destroy is for both reentrant and non-reentrant scanners. */
+int Kmllex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		Kml_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		Kmlpop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	Kmlfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * Kmllex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *Kmlalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *Kmlrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void Kmlfree (void * ptr )
+{
+	free( (char *) ptr );	/* see Kmlrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+/**
+ * reset the line and column count
+ *
+ *
+ */
+void kml_reset_lexer(void)
+{
+
+  kml_line = 1;
+  kml_col  = 1;
+
+}
+
+/**
+ * kmlError() is invoked when the lexer or the parser encounter
+ * an error. The error message is passed via *s
+ *
+ *
+ */
+void KmlError(char *s)
+{
+  printf("error: %s at line: %d col: %d\n",s,kml_line,kml_col);
+
+}
+
+int Kmlwrap(void)
+{
+  return 1;
+}
+
+
+/* 
+ KML_FLEX_END - FLEX generated code ends here 
+*/
+
+
+
+gaiaGeomCollPtr
+gaiaParseKml (const unsigned char *dirty_buffer)
+{
+    void *pParser = ParseAlloc (malloc);
+    /* Linked-list of token values */
+    kmlFlexToken *tokens = malloc (sizeof (kmlFlexToken));
+    /* Pointer to the head of the list */
+    kmlFlexToken *head = tokens;
+    int yv;
+    kmlNodePtr result = NULL;
+    gaiaGeomCollPtr geom = NULL;
+
+    KmlLval.pval = NULL;
+    tokens->value = NULL;
+    tokens->Next = NULL;
+    kml_parse_error = 0;
+    Kml_scan_string ((char *) dirty_buffer);
+
+    /*
+       / Keep tokenizing until we reach the end
+       / yylex() will return the next matching Token for us.
+     */
+    while ((yv = yylex ()) != 0)
+      {
+	  if (yv == -1)
+	    {
+		kml_parse_error = 1;
+		break;
+	    }
+	  tokens->Next = malloc (sizeof (kmlFlexToken));
+	  tokens->Next->Next = NULL;
+	  /*
+	     /KmlLval is a global variable from FLEX.
+	     /KmlLval is defined in kmlLexglobal.h
+	   */
+	  kml_xferString (&(tokens->Next->value), KmlLval.pval);
+	  /* Pass the token to the wkt parser created from lemon */
+	  Parse (pParser, yv, &(tokens->Next->value), &result);
+	  tokens = tokens->Next;
+      }
+    /* This denotes the end of a line as well as the end of the parser */
+    Parse (pParser, KML_NEWLINE, 0, &result);
+    ParseFree (pParser, free);
+    Kmllex_destroy ();
+
+    /* Assigning the token as the end to avoid seg faults while cleaning */
+    tokens->Next = NULL;
+    kml_cleanup (head);
+    kml_freeString (&(KmlLval.pval));
+
+    if (kml_parse_error)
+      {
+	  if (result)
+	      kml_freeTree (result);
+	  return NULL;
+      }
+
+    /* attempting to build a geometry from KML */
+    geom = kml_build_geometry (result);
+    geom->Srid = 4326;
+    kml_freeTree (result);
+    return geom;
+}
+
+
+/*
+** CAVEAT: we must now undefine any Lemon/Flex own macro
+*/
+#undef YYNOCODE
+#undef YYNSTATE
+#undef YYNRULE
+#undef YY_SHIFT_MAX
+#undef YY_REDUCE_USE_DFLT
+#undef YY_REDUCE_MAX
+#undef YY_FLUSH_BUFFER
+#undef YY_DO_BEFORE_ACTION
+#undef YY_NUM_RULES
+#undef YY_END_OF_BUFFER
+#undef YY_END_FILE
+#undef YYACTIONTYPE
+#undef YY_SZ_ACTTAB
+#undef YY_NEW_FILE
+#undef BEGIN
+#undef YY_START
+#undef YY_CURRENT_BUFFER
+#undef YY_CURRENT_BUFFER_LVALUE
+#undef YY_STATE_BUF_SIZE
+#undef YY_DECL
+#undef YY_FATAL_ERROR
+#undef YYMINORTYPE
+#undef YY_CHAR
+#undef YYSTYPE
+#undef input
+#undef ParseAlloc
+#undef ParseFree
+#undef ParseStackPeak
+#undef Parse
+#undef yyalloc
+#undef yyfree
+#undef yyin
+#undef yyleng
+#undef yyless
+#undef yylex
+#undef yylineno
+#undef yyout
+#undef yyrealloc
+#undef yyrestart
+#undef yyStackEntry
+#undef yytext
+#undef yywrap
+#undef yyzerominor
+#undef yy_accept
+#undef yy_action
+#undef yy_base
+#undef yy_buffer_stack
+#undef yy_buffer_stack_max
+#undef yy_buffer_stack_top
+#undef yy_c_buf_p
+#undef yy_chk
+#undef yy_create_buffer
+#undef yy_def
+#undef yy_default
+#undef yy_delete_buffer
+#undef yy_destructor
+#undef yy_ec
+#undef yy_fatal_error
+#undef yy_find_reduce_action
+#undef yy_find_shift_action
+#undef yy_flex_debug
+#undef yy_flush_buffer
+#undef yy_get_next_buffer
+#undef yy_get_previous_state
+#undef yy_init
+#undef yy_init_buffer
+#undef yy_init_globals
+#undef yy_load_buffer
+#undef yy_load_buffer_state
+#undef yy_lookahead
+#undef yy_meta
+#undef yy_new_buffer
+#undef yy_nxt
+#undef yy_parse_failed
+#undef yy_pop_parser_stack
+#undef yy_reduce
+#undef yy_reduce_ofst
+#undef yy_set_bol
+#undef yy_set_interactive
+#undef yy_shift
+#undef yy_shift_ofst
+#undef yy_start
+#undef yy_state_type
+#undef yy_switch_to_buffer
+#undef yy_syntax_error
+#undef yy_trans_info
+#undef yy_try_NUL_trans
+#undef yyParser
+#undef yyStackEntry
+#undef yyStackOverflow
+#undef yyRuleInfo
+#undef yytext_ptr
+#undef yyunput
+#undef yyzerominor
+#undef ParseARG_SDECL
+#undef ParseARG_PDECL
+#undef ParseARG_FETCH
+#undef ParseARG_STORE
+#undef REJECT
+#undef yymore
+#undef YY_MORE_ADJ
+#undef YY_RESTORE_YY_MORE_OFFSET
+#undef YY_LESS_LINENO
+#undef yyTracePrompt
+#undef yyTraceFILE
+#undef yyTokenName
+#undef yyRuleName
+#undef ParseTrace
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_relations.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_relations.c
new file mode 100644
index 0000000..982bfef
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_relations.c
@@ -0,0 +1,3713 @@
+/*
+
+ gg_relations.c -- Gaia spatial relations
+    
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <float.h>
+
+#ifndef OMIT_GEOS		/* including GEOS */
+#include <geos_c.h>
+#endif
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+/* GLOBAL variables */
+char gaia_geos_error_msg[2048];
+char gaia_geos_warning_msg[2048];
+
+GAIAGEO_DECLARE void
+gaiaResetGeosMsg ()
+{
+/* resets the GEOS error and warning messages */
+    *gaia_geos_error_msg = '\0';
+    *gaia_geos_warning_msg = '\0';
+}
+
+GAIAGEO_DECLARE const char *
+gaiaGetGeosErrorMsg ()
+{
+/* return the latest GEOS error message */
+    return gaia_geos_error_msg;
+}
+
+GAIAGEO_DECLARE const char *
+gaiaGetGeosWarningMsg ()
+{
+/* return the latest GEOS error message */
+    return gaia_geos_warning_msg;
+}
+
+GAIAGEO_DECLARE void
+gaiaSetGeosErrorMsg (const char *msg)
+{
+/* return the latest GEOS error message */
+    strcpy (gaia_geos_error_msg, msg);
+}
+
+GAIAGEO_DECLARE void
+gaiaSetGeosWarningMsg (const char *msg)
+{
+/* return the latest GEOS error message */
+    strcpy (gaia_geos_warning_msg, msg);
+}
+
+static int
+check_point (double *coords, int points, double x, double y)
+{
+/* checks if [X,Y] point is defined into this coordinate array [Linestring or Ring] */
+    int iv;
+    double xx;
+    double yy;
+    for (iv = 0; iv < points; iv++)
+      {
+	  gaiaGetPoint (coords, iv, &xx, &yy);
+	  if (xx == x && yy == y)
+	      return 1;
+      }
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaLinestringEquals (gaiaLinestringPtr line1, gaiaLinestringPtr line2)
+{
+/* checks if two Linestrings are "spatially equal" */
+    int iv;
+    double x;
+    double y;
+    if (line1->Points != line2->Points)
+	return 0;
+    for (iv = 0; iv < line1->Points; iv++)
+      {
+	  gaiaGetPoint (line1->Coords, iv, &x, &y);
+	  if (!check_point (line2->Coords, line2->Points, x, y))
+	      return 0;
+      }
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaPolygonEquals (gaiaPolygonPtr polyg1, gaiaPolygonPtr polyg2)
+{
+/* checks if two Polygons are "spatially equal" */
+    int ib;
+    int ib2;
+    int iv;
+    int ok2;
+    double x;
+    double y;
+    gaiaRingPtr ring1;
+    gaiaRingPtr ring2;
+    if (polyg1->NumInteriors != polyg2->NumInteriors)
+	return 0;
+/* checking the EXTERIOR RINGs */
+    ring1 = polyg1->Exterior;
+    ring2 = polyg2->Exterior;
+    if (ring1->Points != ring2->Points)
+	return 0;
+    for (iv = 0; iv < ring1->Points; iv++)
+      {
+	  gaiaGetPoint (ring1->Coords, iv, &x, &y);
+	  if (!check_point (ring2->Coords, ring2->Points, x, y))
+	      return 0;
+      }
+    for (ib = 0; ib < polyg1->NumInteriors; ib++)
+      {
+	  /* checking the INTERIOR RINGS */
+	  int ok = 0;
+	  ring1 = polyg1->Interiors + ib;
+	  for (ib2 = 0; ib2 < polyg2->NumInteriors; ib2++)
+	    {
+		ok2 = 1;
+		ring2 = polyg2->Interiors + ib2;
+		for (iv = 0; iv < ring1->Points; iv++)
+		  {
+		      gaiaGetPoint (ring1->Coords, iv, &x, &y);
+		      if (!check_point (ring2->Coords, ring2->Points, x, y))
+			{
+			    ok2 = 0;
+			    break;
+			}
+		  }
+		if (ok2)
+		  {
+		      ok = 1;
+		      break;
+		  }
+	    }
+	  if (!ok)
+	      return 0;
+      }
+    return 1;
+}
+
+#ifndef OMIT_GEOS		/* including GEOS */
+
+GAIAGEO_DECLARE int
+gaiaGeomCollEquals (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if two Geometries are "spatially equal" */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSEquals (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollIntersects (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if two Geometries do "spatially intersects" */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSIntersects (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollDisjoint (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if two Geometries are "spatially disjoint" */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSDisjoint (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollOverlaps (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if two Geometries do "spatially overlaps" */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSOverlaps (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollCrosses (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if two Geometries do "spatially crosses" */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSCrosses (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollTouches (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if two Geometries do "spatially touches" */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSTouches (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollWithin (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if GEOM-1 is completely contained within GEOM-2 */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSWithin (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollContains (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if GEOM-1 completely contains GEOM-2 */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSContains (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollRelate (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2,
+		    const char *pattern)
+{
+/* checks if if GEOM-1 and GEOM-2 have a spatial relationship as specified by the pattern Matrix */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSRelatePattern (g1, g2, pattern);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollLength (gaiaGeomCollPtr geom, double *xlength)
+{
+/* computes the total length for this Geometry */
+    double length;
+    int ret;
+    GEOSGeometry *g;
+    if (!geom)
+	return 0;
+    g = gaiaToGeos (geom);
+    ret = GEOSLength (g, &length);
+    GEOSGeom_destroy (g);
+    if (ret)
+	*xlength = length;
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollArea (gaiaGeomCollPtr geom, double *xarea)
+{
+/* computes the total area for this Geometry */
+    double area;
+    int ret;
+    GEOSGeometry *g;
+    if (!geom)
+	return 0;
+    g = gaiaToGeos (geom);
+    ret = GEOSArea (g, &area);
+    GEOSGeom_destroy (g);
+    if (ret)
+	*xarea = area;
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollDistance (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2,
+		      double *xdist)
+{
+/* computes the minimum distance intercurring between GEOM-1 and GEOM-2 */
+    double dist;
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return 0;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSDistance (g1, g2, &dist);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (ret)
+	*xdist = dist;
+    return ret;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaGeometryIntersection (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* builds a new geometry representing the "spatial intersection" of GEOM-1 and GEOM-2 */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSGeometry *g3;
+    if (!geom1 || !geom2)
+	return NULL;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    g3 = GEOSIntersection (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (!g3)
+	return NULL;
+    if (geom1->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g3);
+    else if (geom1->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g3);
+    else if (geom1->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g3);
+    else
+	geo = gaiaFromGeos_XY (g3);
+    GEOSGeom_destroy (g3);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom1->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaGeometryUnion (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* builds a new geometry representing the "spatial union" of GEOM-1 and GEOM-2 */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSGeometry *g3;
+    if (!geom1 || !geom2)
+	return NULL;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    g3 = GEOSUnion (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (geom1->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g3);
+    else if (geom1->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g3);
+    else if (geom1->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g3);
+    else
+	geo = gaiaFromGeos_XY (g3);
+    GEOSGeom_destroy (g3);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom1->Srid;
+    if (geo->DeclaredType == GAIA_POINT &&
+	geom1->DeclaredType == GAIA_MULTIPOINT)
+	geo->DeclaredType = GAIA_MULTIPOINT;
+    if (geo->DeclaredType == GAIA_LINESTRING &&
+	geom1->DeclaredType == GAIA_MULTILINESTRING)
+	geo->DeclaredType = GAIA_MULTILINESTRING;
+    if (geo->DeclaredType == GAIA_POLYGON &&
+	geom1->DeclaredType == GAIA_MULTIPOLYGON)
+	geo->DeclaredType = GAIA_MULTIPOLYGON;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaGeometryDifference (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* builds a new geometry representing the "spatial difference" of GEOM-1 and GEOM-2 */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSGeometry *g3;
+    if (!geom1 || !geom2)
+	return NULL;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    g3 = GEOSDifference (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (!g3)
+	return NULL;
+    if (geom1->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g3);
+    else if (geom1->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g3);
+    else if (geom1->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g3);
+    else
+	geo = gaiaFromGeos_XY (g3);
+    GEOSGeom_destroy (g3);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom1->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaGeometrySymDifference (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* builds a new geometry representing the "spatial symmetric difference" of GEOM-1 and GEOM-2 */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSGeometry *g3;
+    if (!geom1 || !geom2)
+	return NULL;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    g3 = GEOSSymDifference (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (!g3)
+	return NULL;
+    if (geom1->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g3);
+    else if (geom1->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g3);
+    else if (geom1->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g3);
+    else
+	geo = gaiaFromGeos_XY (g3);
+    GEOSGeom_destroy (g3);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom1->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaBoundary (gaiaGeomCollPtr geom)
+{
+/* builds a new geometry representing the conbinatorial boundary of GEOM */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom)
+	return NULL;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSBoundary (g1);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollCentroid (gaiaGeomCollPtr geom, double *x, double *y)
+{
+/* returns a Point representing the centroid for this Geometry */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom)
+	return 0;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSGetCentroid (g1);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return 0;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return 0;
+    if (geo->FirstPoint)
+      {
+	  *x = geo->FirstPoint->X;
+	  *y = geo->FirstPoint->Y;
+	  gaiaFreeGeomColl (geo);
+	  return 1;
+      }
+    gaiaFreeGeomColl (geo);
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaGetPointOnSurface (gaiaGeomCollPtr geom, double *x, double *y)
+{
+/* returns a Point guaranteed to lie on the Surface */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom)
+	return 0;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSPointOnSurface (g1);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return 0;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return 0;
+    if (geo->FirstPoint)
+      {
+	  *x = geo->FirstPoint->X;
+	  *y = geo->FirstPoint->Y;
+	  gaiaFreeGeomColl (geo);
+	  return 1;
+      }
+    gaiaFreeGeomColl (geo);
+    return 0;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsSimple (gaiaGeomCollPtr geom)
+{
+/* checks if this GEOMETRYCOLLECTION is a simple one */
+    int ret;
+    GEOSGeometry *g;
+    if (!geom)
+	return -1;
+    if (gaiaIsToxic (geom))
+	return 0;
+    g = gaiaToGeos (geom);
+    ret = GEOSisSimple (g);
+    GEOSGeom_destroy (g);
+    if (ret == 2)
+	return -1;
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsRing (gaiaLinestringPtr line)
+{
+/* checks if this LINESTRING can be a valid RING */
+    gaiaGeomCollPtr geo;
+    gaiaLinestringPtr line2;
+    int ret;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    GEOSGeometry *g;
+    if (!line)
+	return -1;
+    if (line->DimensionModel == GAIA_XY_Z)
+	geo = gaiaAllocGeomCollXYZ ();
+    else if (line->DimensionModel == GAIA_XY_M)
+	geo = gaiaAllocGeomCollXYM ();
+    else if (line->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaAllocGeomCollXYZM ();
+    else
+	geo = gaiaAllocGeomColl ();
+    line2 = gaiaAddLinestringToGeomColl (geo, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  z = 0.0;
+	  m = 0.0;
+	  if (line->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+	    }
+	  else if (line->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (line->Coords, iv, &x, &y);
+	    }
+	  if (line2->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaSetPointXYZ (line2->Coords, iv, x, y, z);
+	    }
+	  else if (line2->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaSetPointXYM (line2->Coords, iv, x, y, m);
+	    }
+	  else if (line2->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaSetPointXYZM (line2->Coords, iv, x, y, z, m);
+	    }
+	  else
+	    {
+		gaiaSetPoint (line2->Coords, iv, x, y);
+	    }
+      }
+    g = gaiaToGeos (geo);
+    gaiaFreeGeomColl (geo);
+    ret = GEOSisRing (g);
+    GEOSGeom_destroy (g);
+    if (ret == 2)
+	return -1;
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaIsValid (gaiaGeomCollPtr geom)
+{
+/* checks if this GEOMETRYCOLLECTION is a valid one */
+    int ret;
+    GEOSGeometry *g;
+    gaiaResetGeosMsg ();
+    if (!geom)
+	return -1;
+    if (gaiaIsToxic (geom))
+	return 0;
+    g = gaiaToGeos (geom);
+    ret = GEOSisValid (g);
+    GEOSGeom_destroy (g);
+    if (ret == 2)
+	return -1;
+    return ret;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaGeomCollSimplify (gaiaGeomCollPtr geom, double tolerance)
+{
+/* builds a simplified geometry using the Douglas-Peuker algorihtm */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom)
+	return NULL;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSSimplify (g1, tolerance);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaGeomCollSimplifyPreserveTopology (gaiaGeomCollPtr geom, double tolerance)
+{
+/* builds a simplified geometry using the Douglas-Peuker algorihtm [preserving topology] */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom)
+	return NULL;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSTopologyPreserveSimplify (g1, tolerance);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaConvexHull (gaiaGeomCollPtr geom)
+{
+/* builds a geometry that is the convex hull of GEOM */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom)
+	return NULL;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSConvexHull (g1);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaGeomCollBuffer (gaiaGeomCollPtr geom, double radius, int points)
+{
+/* builds a geometry that is the GIS buffer of GEOM */
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom)
+	return NULL;
+    if (gaiaIsToxic (geom))
+	return NULL;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSBuffer (g1, radius, points);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+static void
+test_interior_ring (gaiaDynamicLinePtr dyn1, gaiaDynamicLinePtr dyn2,
+		    int *contains, int *within, int *crosses)
+{
+/* testing if Ring-1 contains Ring-2 */
+    gaiaGeomCollPtr geom1;
+    gaiaGeomCollPtr geom2;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int iv;
+    int pts;
+    gaiaPointPtr pt;
+
+/* creating the Polygon-1 geometry */
+    pts = 0;
+    pt = dyn1->First;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    geom1 = gaiaAllocGeomColl ();
+    pg = gaiaAddPolygonToGeomColl (geom1, pts, 0);
+    rng = pg->Exterior;
+    iv = 0;
+    pt = dyn1->First;
+    while (pt)
+      {
+	  /* EXTERIOR RING */
+	  gaiaSetPoint (rng->Coords, iv, pt->X, pt->Y);
+	  iv++;
+	  pt = pt->Next;
+      }
+
+/* creating the Polygon-2 geometry */
+    pts = 0;
+    pt = dyn2->First;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    geom2 = gaiaAllocGeomColl ();
+    pg = gaiaAddPolygonToGeomColl (geom2, pts, 0);
+    rng = pg->Exterior;
+    iv = 0;
+    pt = dyn2->First;
+    while (pt)
+      {
+	  /* EXTERIOR RING */
+	  gaiaSetPoint (rng->Coords, iv, pt->X, pt->Y);
+	  iv++;
+	  pt = pt->Next;
+      }
+    *contains = gaiaGeomCollContains (geom1, geom2);
+    *within = gaiaGeomCollWithin (geom1, geom2);
+    *crosses = gaiaGeomCollCrosses (geom1, geom2);
+    gaiaFreeGeomColl (geom1);
+    gaiaFreeGeomColl (geom2);
+}
+
+static gaiaDynamicLinePtr
+build_dyn_ring (gaiaLinestringPtr ln)
+{
+/* creating a DynamicLine from a Linestring */
+    int iv;
+    double x;
+    double y;
+    double m;
+    double z;
+    gaiaDynamicLinePtr dyn = gaiaAllocDynamicLine ();
+    for (iv = 0; iv < ln->Points; iv++)
+      {
+	  if (ln->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		gaiaAppendPointZMToDynamicLine (dyn, x, y, z, m);
+	    }
+	  else if (ln->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+	    }
+	  else if (ln->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		gaiaAppendPointMToDynamicLine (dyn, x, y, m);
+	    }
+	  else
+	    {
+		gaiaGetPoint (ln->Coords, iv, &x, &y);
+		gaiaAppendPointToDynamicLine (dyn, x, y);
+	    }
+      }
+    return dyn;
+}
+
+static int
+is_closed_dyn_ring (gaiaDynamicLinePtr dyn)
+{
+/* checking if a candidate Ring is already closed */
+    gaiaPointPtr pt1;
+    gaiaPointPtr pt2;
+    if (!dyn)
+	return 0;
+    pt1 = dyn->First;
+    pt2 = dyn->Last;
+    if (pt1 == NULL || pt2 == NULL)
+	return 0;
+    if (pt1 == pt2)
+	return 0;
+    if (pt1->X == pt2->X && pt1->Y == pt2->Y && pt1->Z == pt2->Z)
+	return 1;
+    return 0;
+}
+
+static int
+to_be_appended (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln)
+{
+/* checks is the Linestring has to be appended to the DynamicLine */
+    gaiaPointPtr pt = dyn->Last;
+    int iv = 0;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (ln->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+      }
+    else if (ln->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+      }
+    else if (ln->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (ln->Coords, iv, &x, &y);
+      }
+    if (ln->DimensionModel == GAIA_XY_Z_M || ln->DimensionModel == GAIA_XY_Z)
+      {
+	  if (pt->X == x && pt->Y == y && pt->Z == z)
+	      return 1;
+      }
+    else
+      {
+	  if (pt->X == x && pt->Y == y)
+	      return 1;
+      }
+    return 0;
+}
+
+static int
+to_be_prepended (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln)
+{
+/* checks is the Linestring has to be prepended to the DynamicLine */
+    gaiaPointPtr pt = dyn->First;
+    int iv = ln->Points - 1;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (ln->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+      }
+    else if (ln->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+      }
+    else if (ln->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (ln->Coords, iv, &x, &y);
+      }
+    if (ln->DimensionModel == GAIA_XY_Z_M || ln->DimensionModel == GAIA_XY_Z)
+      {
+	  if (pt->X == x && pt->Y == y && pt->Z == z)
+	      return 1;
+      }
+    else
+      {
+	  if (pt->X == x && pt->Y == y)
+	      return 1;
+      }
+    return 0;
+}
+
+static int
+to_be_appended_reverse (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln)
+{
+/* checks is the Linestring (reversed) has to be appended to the DynamicLine */
+    gaiaPointPtr pt = dyn->Last;
+    int iv = ln->Points - 1;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (ln->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+      }
+    else if (ln->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+      }
+    else if (ln->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (ln->Coords, iv, &x, &y);
+      }
+    if (ln->DimensionModel == GAIA_XY_Z_M || ln->DimensionModel == GAIA_XY_Z)
+      {
+	  if (pt->X == x && pt->Y == y && pt->Z == z)
+	      return 1;
+      }
+    else
+      {
+	  if (pt->X == x && pt->Y == y)
+	      return 1;
+      }
+    return 0;
+}
+
+static int
+to_be_prepended_reverse (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln)
+{
+/* checks is the Linestring (reversed) has to be prepended to the DynamicLine */
+    gaiaPointPtr pt = dyn->First;
+    int iv = 0;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (ln->DimensionModel == GAIA_XY_Z_M)
+      {
+	  gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+      }
+    else if (ln->DimensionModel == GAIA_XY_Z)
+      {
+	  gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+      }
+    else if (ln->DimensionModel == GAIA_XY_M)
+      {
+	  gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+      }
+    else
+      {
+	  gaiaGetPoint (ln->Coords, iv, &x, &y);
+      }
+    if (ln->DimensionModel == GAIA_XY_Z_M || ln->DimensionModel == GAIA_XY_Z)
+      {
+	  if (pt->X == x && pt->Y == y && pt->Z == z)
+	      return 1;
+      }
+    else
+      {
+	  if (pt->X == x && pt->Y == y)
+	      return 1;
+      }
+    return 0;
+}
+
+static void
+append_to_ring (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln, int reversed)
+{
+/* appending a Linestring to a DynamicRing */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (reversed)
+      {
+	  for (iv = ln->Points - 2; iv >= 0; iv--)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      gaiaAppendPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      gaiaAppendPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      gaiaAppendPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+    else
+      {
+	  for (iv = 1; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      gaiaAppendPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      gaiaAppendPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      gaiaAppendPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+}
+
+static void
+prepend_to_ring (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln, int reversed)
+{
+/* appending a Linestring to a DynamicRing */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (reversed)
+      {
+	  for (iv = 1; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      gaiaPrependPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      gaiaPrependPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      gaiaPrependPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      gaiaPrependPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+    else
+      {
+	  for (iv = ln->Points - 2; iv >= 0; iv--)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      gaiaPrependPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      gaiaPrependPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      gaiaPrependPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      gaiaPrependPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaPolygonize (gaiaGeomCollPtr geom, int force_multi)
+{
+/* attempts to rearrange a generic Geometry into a (multi)polygon */
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int dummy;
+    int ok;
+    int ok2;
+    int i;
+    int i2;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double m;
+    double z;
+    double x0;
+    double y0;
+    double z0;
+    int contains;
+    int within;
+    int crosses;
+    int num_interiors;
+    gaiaLinestringPtr *ln_array = NULL;
+    gaiaDynamicLinePtr *dyn_array = NULL;
+    gaiaDynamicLinePtr *ext_array = NULL;
+    gaiaDynamicLinePtr dyn;
+    gaiaDynamicLinePtr dyn2;
+
+    if (!geom)
+	return NULL;
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts || pgs)
+	return NULL;
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    if (!lns)
+	return NULL;
+/* allocating and initializing aux-arrays */
+    ln_array = malloc (sizeof (gaiaLinestringPtr) * lns);
+    dyn_array = malloc (sizeof (gaiaDynamicLinePtr) * lns);
+    ext_array = malloc (sizeof (gaiaDynamicLinePtr) * lns);
+    i = 0;
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  ln_array[i] = ln;
+	  dyn_array[i] = NULL;
+	  ext_array[i] = NULL;
+	  i++;
+	  ln = ln->Next;
+      }
+
+    for (i = 0; i < lns; i++)
+      {
+	  /* processing closed rings */
+	  ln = ln_array[i];
+	  iv = ln->Points - 1;
+	  if (ln->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaGetPointXYZM (ln->Coords, 0, &x0, &y0, &z0, &m);
+		gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		if (x0 == x && y0 == y && z0 == z)
+		  {
+		      dyn_array[i] = build_dyn_ring (ln);
+		      ln_array[i] = NULL;
+		  }
+	    }
+	  else if (ln->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaGetPointXYZ (ln->Coords, 0, &x0, &y0, &z0);
+		gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		if (x0 == x && y0 == y && z0 == z)
+		  {
+		      dyn_array[i] = build_dyn_ring (ln);
+		      ln_array[i] = NULL;
+		  }
+	    }
+	  else if (ln->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaGetPointXYM (ln->Coords, 0, &x0, &y0, &m);
+		gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		if (x0 == x && y0 == y)
+		  {
+		      dyn_array[i] = build_dyn_ring (ln);
+		      ln_array[i] = NULL;
+		  }
+	    }
+	  else
+	    {
+		gaiaGetPoint (ln->Coords, 0, &x0, &y0);
+		gaiaGetPoint (ln->Coords, iv, &x, &y);
+		if (x0 == x && y0 == y)
+		  {
+		      dyn_array[i] = build_dyn_ring (ln);
+		      ln_array[i] = NULL;
+		  }
+	    }
+      }
+
+    ok = 1;
+    while (ok)
+      {
+	  if (dummy == 0)
+	      ok = dummy;	/* simply suppressing stupid compiler warnings */
+	  ok = 0;
+	  for (i = 0; i < lns; i++)
+	    {
+		/* attempting to create rings */
+		ln = ln_array[i];
+		if (ln == NULL)
+		    continue;
+		ok = 1;
+		dyn_array[i] = build_dyn_ring (ln);
+		ln_array[i] = NULL;
+		dyn = dyn_array[i];
+		ok2 = 1;
+		while (ok2)
+		  {
+		      ok2 = 0;
+		      for (i2 = 0; i2 < lns; i2++)
+			{
+			    if (is_closed_dyn_ring (dyn) == 1)
+				goto ring_done;
+			    ln = ln_array[i2];
+			    if (ln == NULL)
+				continue;
+			    if (to_be_appended (dyn, ln) == 1)
+			      {
+				  append_to_ring (dyn, ln, 0);
+				  ln_array[i2] = NULL;
+				  ok2 = 1;
+				  break;
+			      }
+			    if (to_be_prepended (dyn, ln) == 1)
+			      {
+				  prepend_to_ring (dyn, ln, 0);
+				  ln_array[i2] = NULL;
+				  ok2 = 1;
+				  break;
+			      }
+			    if (to_be_appended_reverse (dyn, ln) == 1)
+			      {
+				  append_to_ring (dyn, ln, 1);
+				  ln_array[i2] = NULL;
+				  ok2 = 1;
+				  break;
+			      }
+			    if (to_be_prepended_reverse (dyn, ln) == 1)
+			      {
+				  prepend_to_ring (dyn, ln, 1);
+				  ln_array[i2] = NULL;
+				  ok2 = 1;
+				  break;
+			      }
+			}
+		  }
+	    }
+	ring_done:
+	  dummy = 0;
+      }
+
+    ok = 1;
+    for (i = 0; i < lns; i++)
+      {
+	  /* checking if any ring is closed */
+	  dyn = dyn_array[i];
+	  if (dyn == NULL)
+	      continue;
+	  if (is_closed_dyn_ring (dyn) == 0)
+	      ok = 0;
+      }
+    if (ok == 0)
+      {
+	  /* invalid: quitting */
+	  for (i = 0; i < lns; i++)
+	    {
+		dyn = dyn_array[i];
+		if (dyn == NULL)
+		    continue;
+		gaiaFreeDynamicLine (dyn);
+	    }
+	  free (dyn_array);
+	  free (ext_array);
+	  free (ln_array);
+	  return NULL;
+      }
+
+    ok = 1;
+    for (i = 0; i < lns; i++)
+      {
+	  /* testing interior/exterior relationships */
+	  dyn = dyn_array[i];
+	  if (dyn == NULL)
+	      continue;
+	  for (i2 = i + 1; i2 < lns; i2++)
+	    {
+		/* testing interior/exterior relationships */
+		dyn2 = dyn_array[i2];
+		if (dyn2 == NULL)
+		    continue;
+		test_interior_ring (dyn, dyn2, &contains, &within, &crosses);
+		if (contains)
+		    ext_array[i2] = dyn;
+		if (within)
+		    ext_array[i] = dyn2;
+		if (crosses)
+		    ok = 0;
+	    }
+      }
+    if (ok == 0)
+      {
+	  /* invalid: quitting */
+	  for (i = 0; i < lns; i++)
+	    {
+		dyn = dyn_array[i];
+		if (dyn == NULL)
+		    continue;
+		gaiaFreeDynamicLine (dyn);
+	    }
+	  free (dyn_array);
+	  free (ext_array);
+	  free (ln_array);
+	  return NULL;
+      }
+
+    if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaAllocGeomCollXYZM ();
+    else if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaAllocGeomCollXYZ ();
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaAllocGeomCollXYM ();
+    else
+	result = gaiaAllocGeomColl ();
+    result->Srid = geom->Srid;
+    if (force_multi)
+	result->DeclaredType = GAIA_MULTIPOLYGON;
+
+    for (i = 0; i < lns; i++)
+      {
+	  /* creating Polygons */
+	  dyn = dyn_array[i];
+	  if (dyn == NULL)
+	      continue;
+	  if (ext_array[i] != NULL)
+	    {
+		/* skipping any INTERIOR RING */
+		continue;
+	    }
+	  pts = 0;
+	  pt = dyn->First;
+	  while (pt)
+	    {
+		/* counting how many points are there */
+		pts++;
+		pt = pt->Next;
+	    }
+	  num_interiors = 0;
+	  for (i2 = 0; i2 < lns; i2++)
+	    {
+		if (ext_array[i2] == dyn)
+		    num_interiors++;
+	    }
+	  pg = gaiaAddPolygonToGeomColl (result, pts, num_interiors);
+	  rng = pg->Exterior;
+	  iv = 0;
+	  pt = dyn->First;
+	  while (pt)
+	    {
+		/* EXTERIOR RING */
+		if (result->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (rng->Coords, iv, pt->X, pt->Y, pt->Z,
+					pt->M);
+		  }
+		else if (result->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (rng->Coords, iv, pt->X, pt->Y, pt->Z);
+		  }
+		else if (result->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (rng->Coords, iv, pt->X, pt->Y, pt->M);
+		  }
+		else
+		  {
+		      gaiaSetPoint (rng->Coords, iv, pt->X, pt->Y);
+		  }
+		iv++;
+		pt = pt->Next;
+	    }
+	  ib = 0;
+	  for (i2 = 0; i2 < lns; i2++)
+	    {
+		/* inserting any INTERIOR RING */
+		if (ext_array[i2] == dyn)
+		  {
+		      dyn2 = dyn_array[i2];
+		      ok = 1;
+		      pts = 0;
+		      pt = dyn2->First;
+		      while (pt)
+			{
+			    /* counting how many points are there */
+			    pts++;
+			    pt = pt->Next;
+			}
+		      rng = gaiaAddInteriorRing (pg, ib, pts);
+		      ib++;
+		      iv = 0;
+		      pt = dyn2->First;
+		      while (pt)
+			{
+			    /* INTERIOR RING */
+			    if (result->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaSetPointXYZM (rng->Coords, iv, pt->X,
+						    pt->Y, pt->Z, pt->M);
+			      }
+			    else if (result->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaSetPointXYZ (rng->Coords, iv, pt->X,
+						   pt->Y, pt->Z);
+			      }
+			    else if (result->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaSetPointXYM (rng->Coords, iv, pt->X,
+						   pt->Y, pt->M);
+			      }
+			    else
+			      {
+				  gaiaSetPoint (rng->Coords, iv, pt->X, pt->Y);
+			      }
+			    iv++;
+			    pt = pt->Next;
+			}
+		  }
+	    }
+      }
+
+/* memory cleanup */
+    for (i = 0; i < lns; i++)
+      {
+	  dyn = dyn_array[i];
+	  if (dyn == NULL)
+	      continue;
+	  gaiaFreeDynamicLine (dyn);
+      }
+    free (dyn_array);
+    free (ext_array);
+    free (ln_array);
+    if (result->FirstPolygon == NULL)
+      {
+	  gaiaFreeGeomColl (result);
+	  return NULL;
+      }
+    return result;
+}
+
+#ifdef GEOS_ADVANCED		/* GEOS advanced and experimental features */
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaOffsetCurve (gaiaGeomCollPtr geom, double radius, int points,
+		 int left_right)
+{
+/*
+// builds a geometry that is the OffsetCurve of GEOM 
+// (which is expected to be of the LINESTRING type)
+//
+*/
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    int closed = 0;
+    if (!geom)
+	return NULL;
+
+/* checking the input geometry for validity */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  /* counting how many POINTs are there */
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* counting how many LINESTRINGs are there */
+	  lns++;
+	  if (gaiaIsClosed (ln))
+	      closed++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  /* counting how many POLYGON are there */
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts > 0 || pgs > 0 || lns > 1 || closed > 0)
+	return NULL;
+
+/* all right: this one simply is a LINESTRING */
+    geom->DeclaredType = GAIA_LINESTRING;
+
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSSingleSidedBuffer (g1, radius, points, GEOSBUF_JOIN_ROUND, 5.0,
+				left_right);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaSingleSidedBuffer (gaiaGeomCollPtr geom, double radius, int points,
+		       int left_right)
+{
+/*
+// builds a geometry that is the SingleSided BUFFER of GEOM 
+// (which is expected to be of the LINESTRING type)
+//
+*/
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSBufferParams *params = NULL;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    int closed = 0;
+    if (!geom)
+	return NULL;
+
+/* checking the input geometry for validity */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  /* counting how many POINTs are there */
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* counting how many LINESTRINGs are there */
+	  lns++;
+	  if (gaiaIsClosed (ln))
+	      closed++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  /* counting how many POLYGON are there */
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts > 0 || pgs > 0 || lns > 1 || closed > 0)
+	return NULL;
+
+/* all right: this one simply is a LINESTRING */
+    geom->DeclaredType = GAIA_LINESTRING;
+
+    g1 = gaiaToGeos (geom);
+/* setting up Buffer params */
+    params = GEOSBufferParams_create ();
+    GEOSBufferParams_setJoinStyle (params, GEOSBUF_JOIN_ROUND);
+    GEOSBufferParams_setMitreLimit (params, 5.0);
+    GEOSBufferParams_setQuadrantSegments (params, points);
+    GEOSBufferParams_setSingleSided (params, 1);
+
+/* creating the SingleSided Buffer */
+    if (left_right == 0)
+      {
+	  /* right-sided requires NEGATIVE radius */
+	  radius *= -1.0;
+      }
+    g2 = GEOSBufferWithParams (g1, params, radius);
+    GEOSGeom_destroy (g1);
+    GEOSBufferParams_destroy (params);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE int
+gaiaHausdorffDistance (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2,
+		       double *xdist)
+{
+/* 
+/ computes the (discrete) Hausdorff distance intercurring 
+/ between GEOM-1 and GEOM-2 
+*/
+    double dist;
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return 0;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSHausdorffDistance (g1, g2, &dist);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (ret)
+	*xdist = dist;
+    return ret;
+}
+
+static gaiaGeomCollPtr
+geom_as_lines (gaiaGeomCollPtr geom)
+{
+/* transforms a Geometry into a LINESTRING/MULTILINESTRING (if possible) */
+    gaiaGeomCollPtr result;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr new_ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+
+    if (!geom)
+	return NULL;
+    if (geom->FirstPoint != NULL)
+      {
+	  /* invalid: GEOM contains at least one POINT */
+	  return NULL;
+      }
+
+    switch (geom->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  result = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  result = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  result = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  result = gaiaAllocGeomColl ();
+	  break;
+      };
+    result->Srid = geom->Srid;
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* copying any Linestring */
+	  new_ln = gaiaAddLinestringToGeomColl (result, ln->Points);
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      gaiaSetPoint (new_ln->Coords, iv, x, y);
+		  }
+	    }
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  /* copying any Polygon Ring (as Linestring) */
+	  rng = pg->Exterior;
+	  new_ln = gaiaAddLinestringToGeomColl (result, rng->Points);
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		/* exterior Ring */
+		if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      gaiaSetPoint (new_ln->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		new_ln = gaiaAddLinestringToGeomColl (result, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      /* any interior Ring */
+		      if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			    gaiaSetPointXYZ (new_ln->Coords, iv, x, y, z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			    gaiaSetPointXYM (new_ln->Coords, iv, x, y, m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			    gaiaSetPointXYZM (new_ln->Coords, iv, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			    gaiaSetPoint (new_ln->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  pg = pg->Next;
+      }
+    return result;
+}
+
+static void
+add_shared_linestring (gaiaGeomCollPtr geom, gaiaDynamicLinePtr dyn)
+{
+/* adding a LINESTRING from Dynamic Line */
+    int count = 0;
+    gaiaLinestringPtr ln;
+    gaiaPointPtr pt;
+    int iv;
+
+    if (!geom)
+	return;
+    if (!dyn)
+	return;
+    pt = dyn->First;
+    while (pt)
+      {
+	  /* counting how many Points are there */
+	  count++;
+	  pt = pt->Next;
+      }
+    if (count == 0)
+	return;
+    ln = gaiaAddLinestringToGeomColl (geom, count);
+    iv = 0;
+    pt = dyn->First;
+    while (pt)
+      {
+	  /* copying points into the LINESTRING */
+	  if (ln->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaSetPointXYZ (ln->Coords, iv, pt->X, pt->Y, pt->Z);
+	    }
+	  else if (ln->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaSetPointXYM (ln->Coords, iv, pt->X, pt->Y, pt->M);
+	    }
+	  else if (ln->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaSetPointXYZM (ln->Coords, iv, pt->X, pt->Y, pt->Z, pt->M);
+	    }
+	  else
+	    {
+		gaiaSetPoint (ln->Coords, iv, pt->X, pt->Y);
+	    }
+	  iv++;
+	  pt = pt->Next;
+      }
+}
+
+static void
+append_shared_path (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln, int order)
+{
+/* appends a Shared Path item to Dynamic Line */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (order)
+      {
+	  /* reversed order */
+	  for (iv = ln->Points - 1; iv >= 0; iv--)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      if (x == dyn->Last->X && y == dyn->Last->Y
+			  && z == dyn->Last->Z)
+			  ;
+		      else
+			  gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      if (x == dyn->Last->X && y == dyn->Last->Y
+			  && m == dyn->Last->M)
+			  ;
+		      else
+			  gaiaAppendPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      if (x == dyn->Last->X && y == dyn->Last->Y
+			  && z == dyn->Last->Z && m == dyn->Last->M)
+			  ;
+		      else
+			  gaiaAppendPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      if (x == dyn->Last->X && y == dyn->Last->Y)
+			  ;
+		      else
+			  gaiaAppendPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+    else
+      {
+	  /* conformant order */
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      if (x == dyn->Last->X && y == dyn->Last->Y
+			  && z == dyn->Last->Z)
+			  ;
+		      else
+			  gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      if (x == dyn->Last->X && y == dyn->Last->Y
+			  && m == dyn->Last->M)
+			  ;
+		      else
+			  gaiaAppendPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      if (x == dyn->Last->X && y == dyn->Last->Y
+			  && z == dyn->Last->Z && m == dyn->Last->M)
+			  ;
+		      else
+			  gaiaAppendPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      if (x == dyn->Last->X && y == dyn->Last->Y)
+			  ;
+		      else
+			  gaiaAppendPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+}
+
+static void
+prepend_shared_path (gaiaDynamicLinePtr dyn, gaiaLinestringPtr ln, int order)
+{
+/* prepends a Shared Path item to Dynamic Line */
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    if (order)
+      {
+	  /* reversed order */
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      if (x == dyn->First->X && y == dyn->First->Y
+			  && z == dyn->First->Z)
+			  ;
+		      else
+			  gaiaPrependPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      if (x == dyn->First->X && y == dyn->First->Y
+			  && m == dyn->First->M)
+			  ;
+		      else
+			  gaiaPrependPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      if (x == dyn->First->X && y == dyn->First->Y
+			  && z == dyn->First->Z && m == dyn->First->M)
+			  ;
+		      else
+			  gaiaPrependPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      if (x == dyn->First->X && y == dyn->First->Y)
+			  ;
+		      else
+			  gaiaPrependPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+    else
+      {
+	  /* conformant order */
+	  for (iv = ln->Points - 1; iv >= 0; iv--)
+	    {
+		if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      if (x == dyn->First->X && y == dyn->First->Y
+			  && z == dyn->First->Z)
+			  ;
+		      else
+			  gaiaPrependPointZToDynamicLine (dyn, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      if (x == dyn->First->X && y == dyn->First->Y
+			  && m == dyn->First->M)
+			  ;
+		      else
+			  gaiaPrependPointMToDynamicLine (dyn, x, y, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      if (x == dyn->First->X && y == dyn->First->Y
+			  && z == dyn->First->Z && m == dyn->First->M)
+			  ;
+		      else
+			  gaiaPrependPointZMToDynamicLine (dyn, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      if (x == dyn->First->X && y == dyn->First->Y)
+			  ;
+		      else
+			  gaiaPrependPointToDynamicLine (dyn, x, y);
+		  }
+	    }
+      }
+}
+
+static gaiaGeomCollPtr
+arrange_shared_paths (gaiaGeomCollPtr geom)
+{
+/* final aggregation step for shared paths */
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr *ln_array;
+    gaiaGeomCollPtr result;
+    gaiaDynamicLinePtr dyn;
+    int count;
+    int i;
+    int i2;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    int ok;
+    int ok2;
+
+    if (!geom)
+	return NULL;
+    count = 0;
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* counting how many Linestrings are there */
+	  count++;
+	  ln = ln->Next;
+      }
+    if (count == 0)
+	return NULL;
+
+    ln_array = malloc (sizeof (gaiaLinestringPtr) * count);
+    i = 0;
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* populating the Linestring references array */
+	  ln_array[i++] = ln;
+	  ln = ln->Next;
+      }
+
+/* allocating a new Geometry [MULTILINESTRING] */
+    switch (geom->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  result = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  result = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  result = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  result = gaiaAllocGeomColl ();
+	  break;
+      };
+    result->Srid = geom->Srid;
+    result->DeclaredType = GAIA_MULTILINESTRING;
+
+    ok = 1;
+    while (ok)
+      {
+	  /* looping until we have processed any input item */
+	  ok = 0;
+	  for (i = 0; i < count; i++)
+	    {
+		if (ln_array[i] != NULL)
+		  {
+		      /* starting a new LINESTRING */
+		      dyn = gaiaAllocDynamicLine ();
+		      ln = ln_array[i];
+		      ln_array[i] = NULL;
+		      for (iv = 0; iv < ln->Points; iv++)
+			{
+			    /* inserting the 'seed' path */
+			    if (ln->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+				  gaiaAppendPointZToDynamicLine (dyn, x, y, z);
+			      }
+			    else if (ln->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+				  gaiaAppendPointMToDynamicLine (dyn, x, y, m);
+			      }
+			    else if (ln->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z,
+						    &m);
+				  gaiaAppendPointZMToDynamicLine (dyn, x, y, z,
+								  m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (ln->Coords, iv, &x, &y);
+				  gaiaAppendPointToDynamicLine (dyn, x, y);
+			      }
+			}
+		      ok2 = 1;
+		      while (ok2)
+			{
+			    /* looping until we have checked any other item */
+			    ok2 = 0;
+			    for (i2 = 0; i2 < count; i2++)
+			      {
+				  /* expanding the 'seed' path */
+				  if (ln_array[i2] == NULL)
+				      continue;
+				  ln = ln_array[i2];
+				  /* checking the first vertex */
+				  iv = 0;
+				  if (ln->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ln->Coords, iv, &x, &y,
+							 &z);
+				    }
+				  else if (ln->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ln->Coords, iv, &x, &y,
+							 &m);
+				    }
+				  else if (ln->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ln->Coords, iv, &x,
+							  &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ln->Coords, iv, &x, &y);
+				    }
+				  if (x == dyn->Last->X && y == dyn->Last->Y)
+				    {
+					/* appending this item to the 'seed' (conformant order) */
+					append_shared_path (dyn, ln, 0);
+					ln_array[i2] = NULL;
+					ok2 = 1;
+					continue;
+				    }
+				  if (x == dyn->First->X && y == dyn->First->Y)
+				    {
+					/* prepending this item to the 'seed' (reversed order) */
+					prepend_shared_path (dyn, ln, 1);
+					ln_array[i2] = NULL;
+					ok2 = 1;
+					continue;
+				    }
+				  /* checking the last vertex */
+				  iv = ln->Points - 1;
+				  if (ln->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ln->Coords, iv, &x, &y,
+							 &z);
+				    }
+				  else if (ln->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ln->Coords, iv, &x, &y,
+							 &m);
+				    }
+				  else if (ln->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ln->Coords, iv, &x,
+							  &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ln->Coords, iv, &x, &y);
+				    }
+				  if (x == dyn->Last->X && y == dyn->Last->Y)
+				    {
+					/* appending this item to the 'seed' (reversed order) */
+					append_shared_path (dyn, ln, 1);
+					ln_array[i2] = NULL;
+					ok2 = 1;
+					continue;
+				    }
+				  if (x == dyn->First->X && y == dyn->First->Y)
+				    {
+					/* prepending this item to the 'seed' (conformant order) */
+					prepend_shared_path (dyn, ln, 0);
+					ln_array[i2] = NULL;
+					ok2 = 1;
+					continue;
+				    }
+			      }
+			}
+		      add_shared_linestring (result, dyn);
+		      gaiaFreeDynamicLine (dyn);
+		      ok = 1;
+		      break;
+		  }
+	    }
+      }
+    free (ln_array);
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaSharedPaths (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/*
+// builds a geometry containing Shared Paths commons to GEOM1 & GEOM2 
+// (which are expected to be of the LINESTRING/MULTILINESTRING type)
+//
+*/
+    gaiaGeomCollPtr geo;
+    gaiaGeomCollPtr result;
+    gaiaGeomCollPtr line1;
+    gaiaGeomCollPtr line2;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSGeometry *g3;
+    if (!geom1)
+	return NULL;
+    if (!geom2)
+	return NULL;
+/* transforming input geoms as Lines */
+    line1 = geom_as_lines (geom1);
+    line2 = geom_as_lines (geom2);
+    if (line1 == NULL || line2 == NULL)
+      {
+	  if (line1)
+	      gaiaFreeGeomColl (line1);
+	  if (line2)
+	      gaiaFreeGeomColl (line2);
+	  return NULL;
+      }
+
+    g1 = gaiaToGeos (line1);
+    g2 = gaiaToGeos (line2);
+    gaiaFreeGeomColl (line1);
+    gaiaFreeGeomColl (line2);
+    g3 = GEOSSharedPaths (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (!g3)
+	return NULL;
+    if (geom1->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g3);
+    else if (geom1->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g3);
+    else if (geom1->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g3);
+    else
+	geo = gaiaFromGeos_XY (g3);
+    GEOSGeom_destroy (g3);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom1->Srid;
+    result = arrange_shared_paths (geo);
+    gaiaFreeGeomColl (geo);
+    return result;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollCovers (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if geom1 "spatially covers" geom2 */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSCovers (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE int
+gaiaGeomCollCoveredBy (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* checks if geom1 is "spatially covered by" geom2 */
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSCoveredBy (g1, g2);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return ret;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaLineInterpolatePoint (gaiaGeomCollPtr geom, double fraction)
+{
+/*
+ * attempts to intepolate a point on line at dist "fraction" 
+ *
+ * the fraction is expressed into the range from 0.0 to 1.0
+ */
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    GEOSGeometry *g;
+    GEOSGeometry *g_pt;
+    double length;
+    double projection;
+    if (!geom)
+	return NULL;
+
+/* checking if a single Linestring has been passed */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts == 0 && lns == 1 && pgs == 0)
+	;
+    else
+	return NULL;
+
+    g = gaiaToGeos (geom);
+    if (GEOSLength (g, &length))
+      {
+	  /* transforming fraction to length */
+	  if (fraction < 0.0)
+	      fraction = 0.0;
+	  if (fraction > 1.0)
+	      fraction = 1.0;
+	  projection = length * fraction;
+      }
+    else
+      {
+	  GEOSGeom_destroy (g);
+	  return NULL;
+      }
+    g_pt = GEOSInterpolate (g, projection);
+    GEOSGeom_destroy (g);
+    if (!g_pt)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaFromGeos_XYZ (g_pt);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaFromGeos_XYM (g_pt);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaFromGeos_XYZM (g_pt);
+    else
+	result = gaiaFromGeos_XY (g_pt);
+    GEOSGeom_destroy (g_pt);
+    if (result == NULL)
+	return NULL;
+    result->Srid = geom->Srid;
+    return result;
+}
+
+GAIAGEO_DECLARE double
+gaiaLineLocatePoint (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* 
+ * attempts to compute the location of the closest point on LineString 
+ * to the given Point, as a fraction of total 2d line length 
+ *
+ * the fraction is expressed into the range from 0.0 to 1.0
+ */
+    int pts1 = 0;
+    int lns1 = 0;
+    int pgs1 = 0;
+    int pts2 = 0;
+    int lns2 = 0;
+    int pgs2 = 0;
+    double length;
+    double projection;
+    double result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return -1.0;
+
+/* checking if a single Linestring has been passed */
+    pt = geom1->FirstPoint;
+    while (pt)
+      {
+	  pts1++;
+	  pt = pt->Next;
+      }
+    ln = geom1->FirstLinestring;
+    while (ln)
+      {
+	  lns1++;
+	  ln = ln->Next;
+      }
+    pg = geom1->FirstPolygon;
+    while (pg)
+      {
+	  pgs1++;
+	  pg = pg->Next;
+      }
+    if (pts1 == 0 && lns1 >= 1 && pgs1 == 0)
+	;
+    else
+	return -1.0;
+
+/* checking if a single Point has been passed */
+    pt = geom2->FirstPoint;
+    while (pt)
+      {
+	  pts2++;
+	  pt = pt->Next;
+      }
+    ln = geom2->FirstLinestring;
+    while (ln)
+      {
+	  lns2++;
+	  ln = ln->Next;
+      }
+    pg = geom2->FirstPolygon;
+    while (pg)
+      {
+	  pgs2++;
+	  pg = pg->Next;
+      }
+    if (pts2 == 1 && lns2 == 0 && pgs2 == 0)
+	;
+    else
+	return -1.0;
+
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    projection = GEOSProject (g1, g2);
+    if (GEOSLength (g1, &length))
+      {
+	  /* normalizing as a fraction between 0.0 and 1.0 */
+	  result = projection / length;
+      }
+    else
+	result = -1.0;
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaLineSubstring (gaiaGeomCollPtr geom, double start_fraction,
+		   double end_fraction)
+{
+/* 
+ * attempts to build a new Linestring being a substring of the input one starting 
+ * and ending at the given fractions of total 2d length 
+ */
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    gaiaGeomCollPtr result;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr out;
+    gaiaPolygonPtr pg;
+    GEOSGeometry *g;
+    GEOSGeometry *g_start;
+    GEOSGeometry *g_end;
+    GEOSCoordSequence *cs;
+    const GEOSCoordSequence *in_cs;
+    GEOSGeometry *segm;
+    double length;
+    double total = 0.0;
+    double start;
+    double end;
+    int iv;
+    int i_start = -1;
+    int i_end = -1;
+    int points;
+    double x;
+    double y;
+    double z;
+    double m;
+    unsigned int dims;
+    if (!geom)
+	return NULL;
+
+/* checking if a single Linestring has been passed */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts == 0 && lns == 1 && pgs == 0)
+	;
+    else
+	return NULL;
+
+    if (start_fraction < 0.0)
+	start_fraction = 0.0;
+    if (start_fraction > 1.0)
+	start_fraction = 1.0;
+    if (end_fraction < 0.0)
+	end_fraction = 0.0;
+    if (end_fraction > 1.0)
+	end_fraction = 1.0;
+    if (start_fraction >= end_fraction)
+	return NULL;
+    g = gaiaToGeos (geom);
+    if (GEOSLength (g, &length))
+      {
+	  start = length * start_fraction;
+	  end = length * end_fraction;
+      }
+    else
+      {
+	  GEOSGeom_destroy (g);
+	  return NULL;
+      }
+    g_start = GEOSInterpolate (g, start);
+    g_end = GEOSInterpolate (g, end);
+    GEOSGeom_destroy (g);
+    if (!g_start || !g_end)
+	return NULL;
+
+/* identifying first and last valid vertex */
+    ln = geom->FirstLinestring;
+    for (iv = 0; iv < ln->Points; iv++)
+      {
+
+	  double x0;
+	  double y0;
+	  switch (ln->DimensionModel)
+	    {
+	    case GAIA_XY_Z:
+		gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		break;
+	    case GAIA_XY_M:
+		gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		break;
+	    case GAIA_XY_Z_M:
+		gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		break;
+	    default:
+		gaiaGetPoint (ln->Coords, iv, &x, &y);
+		break;
+	    };
+
+	  if (iv > 0)
+	    {
+		cs = GEOSCoordSeq_create (2, 2);
+		GEOSCoordSeq_setX (cs, 0, x0);
+		GEOSCoordSeq_setY (cs, 0, y0);
+		GEOSCoordSeq_setX (cs, 1, x);
+		GEOSCoordSeq_setY (cs, 1, y);
+		segm = GEOSGeom_createLineString (cs);
+		GEOSLength (segm, &length);
+		total += length;
+		GEOSGeom_destroy (segm);
+		if (total > start && i_start < 0)
+		    i_start = iv;
+		if (total < end)
+		    i_end = iv;
+	    }
+	  x0 = x;
+	  y0 = y;
+      }
+    if (i_start < 0 || i_end < 0)
+      {
+	  i_start = -1;
+	  i_end = -1;
+	  points = 2;
+      }
+    else
+	points = i_end - i_start + 3;
+
+/* creating the output geometry */
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY_Z:
+	  result = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  result = gaiaAllocGeomCollXYM ();
+	  break;
+      case GAIA_XY_Z_M:
+	  result = gaiaAllocGeomCollXYZM ();
+	  break;
+      default:
+	  result = gaiaAllocGeomColl ();
+	  break;
+      };
+    result->Srid = geom->Srid;
+    out = gaiaAddLinestringToGeomColl (result, points);
+
+/* start vertex */
+    points = 0;
+    in_cs = GEOSGeom_getCoordSeq (g_start);
+    GEOSCoordSeq_getDimensions (in_cs, &dims);
+    if (dims == 3)
+      {
+	  GEOSCoordSeq_getX (in_cs, 0, &x);
+	  GEOSCoordSeq_getY (in_cs, 0, &y);
+	  GEOSCoordSeq_getZ (in_cs, 0, &z);
+	  m = 0.0;
+      }
+    else
+      {
+	  GEOSCoordSeq_getX (in_cs, 0, &x);
+	  GEOSCoordSeq_getY (in_cs, 0, &y);
+	  z = 0.0;
+	  m = 0.0;
+      }
+    GEOSGeom_destroy (g_start);
+    switch (out->DimensionModel)
+      {
+      case GAIA_XY_Z:
+	  gaiaSetPointXYZ (out->Coords, points, x, y, z);
+	  break;
+      case GAIA_XY_M:
+	  gaiaSetPointXYM (out->Coords, points, x, y, 0.0);
+	  break;
+      case GAIA_XY_Z_M:
+	  gaiaSetPointXYZM (out->Coords, points, x, y, z, 0.0);
+	  break;
+      default:
+	  gaiaSetPoint (out->Coords, points, x, y);
+	  break;
+      };
+    points++;
+
+    if (i_start < 0 || i_end < 0)
+	;
+    else
+      {
+	  for (iv = i_start; iv <= i_end; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		switch (ln->DimensionModel)
+		  {
+		  case GAIA_XY_Z:
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      break;
+		  case GAIA_XY_M:
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      break;
+		  case GAIA_XY_Z_M:
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      break;
+		  default:
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      break;
+		  };
+		switch (out->DimensionModel)
+		  {
+		  case GAIA_XY_Z:
+		      gaiaSetPointXYZ (out->Coords, points, x, y, z);
+		      break;
+		  case GAIA_XY_M:
+		      gaiaSetPointXYM (out->Coords, points, x, y, 0.0);
+		      break;
+		  case GAIA_XY_Z_M:
+		      gaiaSetPointXYZM (out->Coords, points, x, y, z, 0.0);
+		      break;
+		  default:
+		      gaiaSetPoint (out->Coords, points, x, y);
+		      break;
+		  };
+		points++;
+	    }
+      }
+
+/* end vertex */
+    in_cs = GEOSGeom_getCoordSeq (g_end);
+    GEOSCoordSeq_getDimensions (in_cs, &dims);
+    if (dims == 3)
+      {
+	  GEOSCoordSeq_getX (in_cs, 0, &x);
+	  GEOSCoordSeq_getY (in_cs, 0, &y);
+	  GEOSCoordSeq_getZ (in_cs, 0, &z);
+	  m = 0.0;
+      }
+    else
+      {
+	  GEOSCoordSeq_getX (in_cs, 0, &x);
+	  GEOSCoordSeq_getY (in_cs, 0, &y);
+	  z = 0.0;
+	  m = 0.0;
+      }
+    GEOSGeom_destroy (g_end);
+    switch (out->DimensionModel)
+      {
+      case GAIA_XY_Z:
+	  gaiaSetPointXYZ (out->Coords, points, x, y, z);
+	  break;
+      case GAIA_XY_M:
+	  gaiaSetPointXYM (out->Coords, points, x, y, 0.0);
+	  break;
+      case GAIA_XY_Z_M:
+	  gaiaSetPointXYZM (out->Coords, points, x, y, z, 0.0);
+	  break;
+      default:
+	  gaiaSetPoint (out->Coords, points, x, y);
+	  break;
+      };
+    return result;
+}
+
+static GEOSGeometry *
+buildGeosPoints (const gaiaGeomCollPtr gaia)
+{
+/* converting a GAIA Geometry into a GEOS Geometry of POINTS */
+    int pts = 0;
+    unsigned int dims;
+    int iv;
+    int ib;
+    int nItem;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    GEOSGeometry *geos;
+    GEOSGeometry *geos_item;
+    GEOSGeometry **geos_coll;
+    GEOSCoordSequence *cs;
+    if (!gaia)
+	return NULL;
+    pt = gaia->FirstPoint;
+    while (pt)
+      {
+	  /* counting how many POINTs are there */
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = gaia->FirstLinestring;
+    while (ln)
+      {
+	  /* counting how many POINTs are there */
+	  pts += ln->Points;
+	  ln = ln->Next;
+      }
+    pg = gaia->FirstPolygon;
+    while (pg)
+      {
+	  /* counting how many POINTs are there */
+	  rng = pg->Exterior;
+	  pts += rng->Points - 1;	/* exterior ring */
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		/* interior ring */
+		rng = pg->Interiors + ib;
+		pts += rng->Points - 1;
+	    }
+	  pg = pg->Next;
+      }
+    if (pts == 0)
+	return NULL;
+    switch (gaia->DimensionModel)
+      {
+      case GAIA_XY_Z:
+      case GAIA_XY_Z_M:
+	  dims = 3;
+	  break;
+      default:
+	  dims = 2;
+	  break;
+      };
+    nItem = 0;
+    geos_coll = malloc (sizeof (GEOSGeometry *) * (pts));
+    pt = gaia->FirstPoint;
+    while (pt)
+      {
+	  cs = GEOSCoordSeq_create (1, dims);
+	  switch (pt->DimensionModel)
+	    {
+	    case GAIA_XY_Z:
+	    case GAIA_XY_Z_M:
+		GEOSCoordSeq_setX (cs, 0, pt->X);
+		GEOSCoordSeq_setY (cs, 0, pt->Y);
+		GEOSCoordSeq_setZ (cs, 0, pt->Z);
+		break;
+	    default:
+		GEOSCoordSeq_setX (cs, 0, pt->X);
+		GEOSCoordSeq_setY (cs, 0, pt->Y);
+		break;
+	    };
+	  geos_item = GEOSGeom_createPoint (cs);
+	  *(geos_coll + nItem++) = geos_item;
+	  pt = pt->Next;
+      }
+    ln = gaia->FirstLinestring;
+    while (ln)
+      {
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		switch (ln->DimensionModel)
+		  {
+		  case GAIA_XY_Z:
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      break;
+		  case GAIA_XY_M:
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      break;
+		  case GAIA_XY_Z_M:
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      break;
+		  default:
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      break;
+		  };
+		cs = GEOSCoordSeq_create (1, dims);
+		if (dims == 3)
+		  {
+		      GEOSCoordSeq_setX (cs, 0, x);
+		      GEOSCoordSeq_setY (cs, 0, y);
+		      GEOSCoordSeq_setZ (cs, 0, z);
+		  }
+		else
+		  {
+		      GEOSCoordSeq_setX (cs, 0, x);
+		      GEOSCoordSeq_setY (cs, 0, y);
+		  }
+		geos_item = GEOSGeom_createPoint (cs);
+		*(geos_coll + nItem++) = geos_item;
+	    }
+	  ln = ln->Next;
+      }
+    pg = gaia->FirstPolygon;
+    while (pg)
+      {
+	  rng = pg->Exterior;
+	  for (iv = 1; iv < rng->Points; iv++)
+	    {
+		/* exterior ring */
+		z = 0.0;
+		m = 0.0;
+		switch (rng->DimensionModel)
+		  {
+		  case GAIA_XY_Z:
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      break;
+		  case GAIA_XY_M:
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      break;
+		  case GAIA_XY_Z_M:
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      break;
+		  default:
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      break;
+		  };
+		cs = GEOSCoordSeq_create (1, dims);
+		if (dims == 3)
+		  {
+		      GEOSCoordSeq_setX (cs, 0, x);
+		      GEOSCoordSeq_setY (cs, 0, y);
+		      GEOSCoordSeq_setZ (cs, 0, z);
+		  }
+		else
+		  {
+		      GEOSCoordSeq_setX (cs, 0, x);
+		      GEOSCoordSeq_setY (cs, 0, y);
+		  }
+		geos_item = GEOSGeom_createPoint (cs);
+		*(geos_coll + nItem++) = geos_item;
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		/* interior ring */
+		rng = pg->Interiors + ib;
+		for (iv = 1; iv < rng->Points; iv++)
+		  {
+		      /* exterior ring */
+		      z = 0.0;
+		      m = 0.0;
+		      switch (rng->DimensionModel)
+			{
+			case GAIA_XY_Z:
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			    break;
+			case GAIA_XY_M:
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			    break;
+			case GAIA_XY_Z_M:
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			    break;
+			default:
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			    break;
+			};
+		      cs = GEOSCoordSeq_create (1, dims);
+		      if (dims == 3)
+			{
+			    GEOSCoordSeq_setX (cs, 0, x);
+			    GEOSCoordSeq_setY (cs, 0, y);
+			    GEOSCoordSeq_setZ (cs, 0, z);
+			}
+		      else
+			{
+			    GEOSCoordSeq_setX (cs, 0, x);
+			    GEOSCoordSeq_setY (cs, 0, y);
+			}
+		      geos_item = GEOSGeom_createPoint (cs);
+		      *(geos_coll + nItem++) = geos_item;
+		  }
+	    }
+	  pg = pg->Next;
+      }
+    geos = GEOSGeom_createCollection (GEOS_MULTIPOINT, geos_coll, pts);
+    free (geos_coll);
+    GEOSSetSRID (geos, gaia->Srid);
+    return geos;
+}
+
+static GEOSGeometry *
+buildGeosSegments (const gaiaGeomCollPtr gaia)
+{
+/* converting a GAIA Geometry into a GEOS Geometry of SEGMENTS */
+    int segms = 0;
+    unsigned int dims;
+    int iv;
+    int ib;
+    int nItem;
+    double x;
+    double y;
+    double z;
+    double m;
+    double x0;
+    double y0;
+    double z0;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    GEOSGeometry *geos;
+    GEOSGeometry *geos_item;
+    GEOSGeometry **geos_coll;
+    GEOSCoordSequence *cs;
+    if (!gaia)
+	return NULL;
+    ln = gaia->FirstLinestring;
+    while (ln)
+      {
+	  /* counting how many SEGMENTs are there */
+	  segms += ln->Points - 1;
+	  ln = ln->Next;
+      }
+    pg = gaia->FirstPolygon;
+    while (pg)
+      {
+	  /* counting how many SEGMENTs are there */
+	  rng = pg->Exterior;
+	  segms += rng->Points - 1;	/* exterior ring */
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		/* interior ring */
+		rng = pg->Interiors + ib;
+		segms += rng->Points - 1;
+	    }
+	  pg = pg->Next;
+      }
+    if (segms == 0)
+	return NULL;
+    switch (gaia->DimensionModel)
+      {
+      case GAIA_XY_Z:
+      case GAIA_XY_Z_M:
+	  dims = 3;
+	  break;
+      default:
+	  dims = 2;
+	  break;
+      };
+    nItem = 0;
+    geos_coll = malloc (sizeof (GEOSGeometry *) * (segms));
+    ln = gaia->FirstLinestring;
+    while (ln)
+      {
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		switch (ln->DimensionModel)
+		  {
+		  case GAIA_XY_Z:
+		      gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		      break;
+		  case GAIA_XY_M:
+		      gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		      break;
+		  case GAIA_XY_Z_M:
+		      gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		      break;
+		  default:
+		      gaiaGetPoint (ln->Coords, iv, &x, &y);
+		      break;
+		  };
+		if (iv > 0)
+		  {
+		      cs = GEOSCoordSeq_create (2, dims);
+		      if (dims == 3)
+			{
+			    GEOSCoordSeq_setX (cs, 0, x0);
+			    GEOSCoordSeq_setY (cs, 0, y0);
+			    GEOSCoordSeq_setZ (cs, 0, z0);
+			    GEOSCoordSeq_setX (cs, 1, x);
+			    GEOSCoordSeq_setY (cs, 1, y);
+			    GEOSCoordSeq_setZ (cs, 1, z);
+			}
+		      else
+			{
+			    GEOSCoordSeq_setX (cs, 0, x0);
+			    GEOSCoordSeq_setY (cs, 0, y0);
+			    GEOSCoordSeq_setX (cs, 1, x);
+			    GEOSCoordSeq_setY (cs, 1, y);
+			}
+		      geos_item = GEOSGeom_createLineString (cs);
+		      *(geos_coll + nItem++) = geos_item;
+		  }
+		x0 = x;
+		y0 = y;
+		z0 = z;
+	    }
+	  ln = ln->Next;
+      }
+    pg = gaia->FirstPolygon;
+    while (pg)
+      {
+	  rng = pg->Exterior;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		/* exterior ring */
+		z = 0.0;
+		m = 0.0;
+		switch (rng->DimensionModel)
+		  {
+		  case GAIA_XY_Z:
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      break;
+		  case GAIA_XY_M:
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      break;
+		  case GAIA_XY_Z_M:
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      break;
+		  default:
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      break;
+		  };
+		if (iv > 0)
+		  {
+		      cs = GEOSCoordSeq_create (2, dims);
+		      if (dims == 3)
+			{
+			    GEOSCoordSeq_setX (cs, 0, x0);
+			    GEOSCoordSeq_setY (cs, 0, y0);
+			    GEOSCoordSeq_setZ (cs, 0, z0);
+			    GEOSCoordSeq_setX (cs, 1, x);
+			    GEOSCoordSeq_setY (cs, 1, y);
+			    GEOSCoordSeq_setZ (cs, 1, z);
+			}
+		      else
+			{
+			    GEOSCoordSeq_setX (cs, 0, x0);
+			    GEOSCoordSeq_setY (cs, 0, y0);
+			    GEOSCoordSeq_setX (cs, 1, x);
+			    GEOSCoordSeq_setY (cs, 1, y);
+			}
+		      geos_item = GEOSGeom_createLineString (cs);
+		      *(geos_coll + nItem++) = geos_item;
+		  }
+		x0 = x;
+		y0 = y;
+		z0 = z;
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		/* interior ring */
+		rng = pg->Interiors + ib;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      /* exterior ring */
+		      z = 0.0;
+		      m = 0.0;
+		      switch (rng->DimensionModel)
+			{
+			case GAIA_XY_Z:
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			    break;
+			case GAIA_XY_M:
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			    break;
+			case GAIA_XY_Z_M:
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			    break;
+			default:
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			    break;
+			};
+		      if (iv > 0)
+			{
+			    cs = GEOSCoordSeq_create (2, dims);
+			    if (dims == 3)
+			      {
+				  GEOSCoordSeq_setX (cs, 0, x0);
+				  GEOSCoordSeq_setY (cs, 0, y0);
+				  GEOSCoordSeq_setZ (cs, 0, z0);
+				  GEOSCoordSeq_setX (cs, 1, x);
+				  GEOSCoordSeq_setY (cs, 1, y);
+				  GEOSCoordSeq_setZ (cs, 1, z);
+			      }
+			    else
+			      {
+				  GEOSCoordSeq_setX (cs, 0, x0);
+				  GEOSCoordSeq_setY (cs, 0, y0);
+				  GEOSCoordSeq_setX (cs, 1, x);
+				  GEOSCoordSeq_setY (cs, 1, y);
+			      }
+			    geos_item = GEOSGeom_createLineString (cs);
+			    *(geos_coll + nItem++) = geos_item;
+			}
+		      x0 = x;
+		      y0 = y;
+		      z0 = z;
+		  }
+	    }
+	  pg = pg->Next;
+      }
+    geos = GEOSGeom_createCollection (GEOS_MULTILINESTRING, geos_coll, segms);
+    free (geos_coll);
+    GEOSSetSRID (geos, gaia->Srid);
+    return geos;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaShortestLine (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
+{
+/* attempts to compute the the shortest line between two geometries */
+    GEOSGeometry *g1_points;
+    GEOSGeometry *g1_segments;
+    const GEOSGeometry *g1_item;
+    GEOSGeometry *g2_points;
+    GEOSGeometry *g2_segments;
+    const GEOSGeometry *g2_item;
+    const GEOSCoordSequence *cs;
+    GEOSGeometry *g_pt;
+    gaiaGeomCollPtr result;
+    gaiaLinestringPtr ln;
+    int nItems1;
+    int nItems2;
+    int it1;
+    int it2;
+    unsigned int dims;
+    double x_ini;
+    double y_ini;
+    double z_ini;
+    double x_fin;
+    double y_fin;
+    double z_fin;
+    double dist;
+    double min_dist = DBL_MAX;
+    double projection;
+    if (!geom1 || !geom2)
+	return NULL;
+
+    g1_points = buildGeosPoints (geom1);
+    g1_segments = buildGeosSegments (geom1);
+    g2_points = buildGeosPoints (geom2);
+    g2_segments = buildGeosSegments (geom2);
+
+    if (g1_points && g2_points)
+      {
+	  /* computing distances between POINTs */
+	  nItems1 = GEOSGetNumGeometries (g1_points);
+	  nItems2 = GEOSGetNumGeometries (g2_points);
+	  for (it1 = 0; it1 < nItems1; it1++)
+	    {
+		g1_item = GEOSGetGeometryN (g1_points, it1);
+		for (it2 = 0; it2 < nItems2; it2++)
+		  {
+		      g2_item = GEOSGetGeometryN (g2_points, it2);
+		      if (GEOSDistance (g1_item, g2_item, &dist))
+			{
+			    if (dist < min_dist)
+			      {
+				  /* saving min-dist points */
+				  min_dist = dist;
+				  cs = GEOSGeom_getCoordSeq (g1_item);
+				  GEOSCoordSeq_getDimensions (cs, &dims);
+				  if (dims == 3)
+				    {
+					GEOSCoordSeq_getX (cs, 0, &x_ini);
+					GEOSCoordSeq_getY (cs, 0, &y_ini);
+					GEOSCoordSeq_getZ (cs, 0, &z_ini);
+				    }
+				  else
+				    {
+					GEOSCoordSeq_getX (cs, 0, &x_ini);
+					GEOSCoordSeq_getY (cs, 0, &y_ini);
+					z_ini = 0.0;
+				    }
+				  cs = GEOSGeom_getCoordSeq (g2_item);
+				  GEOSCoordSeq_getDimensions (cs, &dims);
+				  if (dims == 3)
+				    {
+					GEOSCoordSeq_getX (cs, 0, &x_fin);
+					GEOSCoordSeq_getY (cs, 0, &y_fin);
+					GEOSCoordSeq_getZ (cs, 0, &z_fin);
+				    }
+				  else
+				    {
+					GEOSCoordSeq_getX (cs, 0, &x_fin);
+					GEOSCoordSeq_getY (cs, 0, &y_fin);
+					z_fin = 0.0;
+				    }
+			      }
+			}
+		  }
+	    }
+      }
+
+    if (g1_points && g2_segments)
+      {
+	  /* computing distances between POINTs (g1) and SEGMENTs (g2) */
+	  nItems1 = GEOSGetNumGeometries (g1_points);
+	  nItems2 = GEOSGetNumGeometries (g2_segments);
+	  for (it1 = 0; it1 < nItems1; it1++)
+	    {
+		g1_item = GEOSGetGeometryN (g1_points, it1);
+		for (it2 = 0; it2 < nItems2; it2++)
+		  {
+		      g2_item = GEOSGetGeometryN (g2_segments, it2);
+		      if (GEOSDistance (g1_item, g2_item, &dist))
+			{
+			    if (dist < min_dist)
+			      {
+				  /* saving min-dist points */
+				  projection = GEOSProject (g2_item, g1_item);
+				  g_pt = GEOSInterpolate (g2_item, projection);
+				  if (g_pt)
+				    {
+					min_dist = dist;
+					cs = GEOSGeom_getCoordSeq (g1_item);
+					GEOSCoordSeq_getDimensions (cs, &dims);
+					if (dims == 3)
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_ini);
+					      GEOSCoordSeq_getY (cs, 0, &y_ini);
+					      GEOSCoordSeq_getZ (cs, 0, &z_ini);
+					  }
+					else
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_ini);
+					      GEOSCoordSeq_getY (cs, 0, &y_ini);
+					      z_ini = 0.0;
+					  }
+					cs = GEOSGeom_getCoordSeq (g_pt);
+					GEOSCoordSeq_getDimensions (cs, &dims);
+					if (dims == 3)
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_fin);
+					      GEOSCoordSeq_getY (cs, 0, &y_fin);
+					      GEOSCoordSeq_getZ (cs, 0, &z_fin);
+					  }
+					else
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_fin);
+					      GEOSCoordSeq_getY (cs, 0, &y_fin);
+					      z_fin = 0.0;
+					  }
+					GEOSGeom_destroy (g_pt);
+				    }
+			      }
+			}
+		  }
+	    }
+      }
+
+    if (g1_segments && g2_points)
+      {
+	  /* computing distances between SEGMENTs (g1) and POINTs (g2) */
+	  nItems1 = GEOSGetNumGeometries (g1_segments);
+	  nItems2 = GEOSGetNumGeometries (g2_points);
+	  for (it1 = 0; it1 < nItems1; it1++)
+	    {
+		g1_item = GEOSGetGeometryN (g1_segments, it1);
+		for (it2 = 0; it2 < nItems2; it2++)
+		  {
+		      g2_item = GEOSGetGeometryN (g2_points, it2);
+		      if (GEOSDistance (g1_item, g2_item, &dist))
+			{
+			    if (dist < min_dist)
+			      {
+				  /* saving min-dist points */
+				  projection = GEOSProject (g1_item, g2_item);
+				  g_pt = GEOSInterpolate (g1_item, projection);
+				  if (g_pt)
+				    {
+					min_dist = dist;
+					cs = GEOSGeom_getCoordSeq (g_pt);
+					GEOSCoordSeq_getDimensions (cs, &dims);
+					if (dims == 3)
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_ini);
+					      GEOSCoordSeq_getY (cs, 0, &y_ini);
+					      GEOSCoordSeq_getZ (cs, 0, &z_ini);
+					  }
+					else
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_ini);
+					      GEOSCoordSeq_getY (cs, 0, &y_ini);
+					      z_ini = 0.0;
+					  }
+					cs = GEOSGeom_getCoordSeq (g2_item);
+					GEOSCoordSeq_getDimensions (cs, &dims);
+					if (dims == 3)
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_fin);
+					      GEOSCoordSeq_getY (cs, 0, &y_fin);
+					      GEOSCoordSeq_getZ (cs, 0, &z_fin);
+					  }
+					else
+					  {
+					      GEOSCoordSeq_getX (cs, 0, &x_fin);
+					      GEOSCoordSeq_getY (cs, 0, &y_fin);
+					      z_fin = 0.0;
+					  }
+					GEOSGeom_destroy (g_pt);
+				    }
+			      }
+			}
+		  }
+	    }
+      }
+    if (g1_points)
+	GEOSGeom_destroy (g1_points);
+    if (g1_segments)
+	GEOSGeom_destroy (g1_segments);
+    if (g2_points)
+	GEOSGeom_destroy (g2_points);
+    if (g2_segments)
+	GEOSGeom_destroy (g2_segments);
+    if (min_dist == DBL_MAX || min_dist <= 0.0)
+	return NULL;
+
+/* building the shortest line */
+    switch (geom1->DimensionModel)
+      {
+      case GAIA_XY_Z:
+	  result = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  result = gaiaAllocGeomCollXYM ();
+	  break;
+      case GAIA_XY_Z_M:
+	  result = gaiaAllocGeomCollXYZM ();
+	  break;
+      default:
+	  result = gaiaAllocGeomColl ();
+	  break;
+      };
+    result->Srid = geom1->Srid;
+    ln = gaiaAddLinestringToGeomColl (result, 2);
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY_Z:
+	  gaiaSetPointXYZ (ln->Coords, 0, x_ini, y_ini, z_ini);
+	  gaiaSetPointXYZ (ln->Coords, 1, x_fin, y_fin, z_fin);
+	  break;
+      case GAIA_XY_M:
+	  gaiaSetPointXYM (ln->Coords, 0, x_ini, y_ini, 0.0);
+	  gaiaSetPointXYM (ln->Coords, 1, x_fin, y_fin, 0.0);
+	  break;
+      case GAIA_XY_Z_M:
+	  gaiaSetPointXYZM (ln->Coords, 0, x_ini, y_ini, z_ini, 0.0);
+	  gaiaSetPointXYZM (ln->Coords, 1, x_fin, y_fin, z_fin, 0.0);
+	  break;
+      default:
+	  gaiaSetPoint (ln->Coords, 0, x_ini, y_ini);
+	  gaiaSetPoint (ln->Coords, 1, x_fin, y_fin);
+	  break;
+      };
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaSnap (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2, double tolerance)
+{
+/* attempts to "snap" geom1 on geom2 using the given tolerance */
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSGeometry *g3;
+    gaiaGeomCollPtr result;
+    if (!geom1 || !geom2)
+	return NULL;
+
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    g3 = GEOSSnap (g1, g2, tolerance);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (!g3)
+	return NULL;
+    if (geom1->DimensionModel == GAIA_XY_Z)
+	result = gaiaFromGeos_XYZ (g3);
+    else if (geom1->DimensionModel == GAIA_XY_M)
+	result = gaiaFromGeos_XYM (g3);
+    else if (geom1->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaFromGeos_XYZM (g3);
+    else
+	result = gaiaFromGeos_XY (g3);
+    GEOSGeom_destroy (g3);
+    if (result == NULL)
+	return NULL;
+    result->Srid = geom1->Srid;
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaLineMerge (gaiaGeomCollPtr geom)
+{
+/* attempts to reassemble lines from a collection of sparse fragments */
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    gaiaGeomCollPtr result;
+    if (!geom)
+	return NULL;
+    if (gaiaIsToxic (geom))
+	return NULL;
+
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSLineMerge (g1);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaFromGeos_XYZM (g2);
+    else
+	result = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (result == NULL)
+	return NULL;
+    result->Srid = geom->Srid;
+    return result;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaUnaryUnion (gaiaGeomCollPtr geom)
+{
+/* Unary Union (single Collection) */
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    gaiaGeomCollPtr result;
+    if (!geom)
+	return NULL;
+    if (gaiaIsToxic (geom))
+	return NULL;
+    g1 = gaiaToGeos (geom);
+    g2 = GEOSUnaryUnion (g1);
+    GEOSGeom_destroy (g1);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	result = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	result = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	result = gaiaFromGeos_XYZM (g2);
+    else
+	result = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (result == NULL)
+	return NULL;
+    result->Srid = geom->Srid;
+    return result;
+}
+
+#endif /* end GEOS advanced and experimental features */
+
+#endif /* end including GEOS */
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_shape.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_shape.c
new file mode 100644
index 0000000..3f63cd9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_shape.c
@@ -0,0 +1,4723 @@
+/*
+
+ gg_shape.c -- Gaia shapefile handling
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+#include <errno.h>
+
+#if OMIT_ICONV == 0		/* if ICONV is disabled no SHP support is available */
+
+#if defined(__MINGW32__) || defined(_WIN32)
+#define LIBICONV_STATIC
+#include <iconv.h>
+#define LIBCHARSET_STATIC
+#ifdef _MSC_VER
+/* <localcharset.h> isn't supported on OSGeo4W */
+/* applying a tricky workaround to fix this issue */
+extern const char *locale_charset (void);
+#else /* sane Windows - not OSGeo4W */
+#include <localcharset.h>
+#endif /* end localcharset */
+#else /* not MINGW32 */
+#ifdef __APPLE__
+#include <iconv.h>
+#include <localcharset.h>
+#else /* not Mac OsX */
+#include <iconv.h>
+#include <langinfo.h>
+#endif
+#endif
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+#ifdef _WIN32
+#define atoll	_atoi64
+#endif /* not WIN32 */
+
+#define SHAPEFILE_NO_DATA 1e-38
+
+GAIAGEO_DECLARE void
+gaiaFreeValue (gaiaValuePtr p)
+{
+/* frees all memory allocations for this DBF Field value */
+    if (!p)
+	return;
+    if (p->TxtValue)
+	free (p->TxtValue);
+    free (p);
+}
+
+GAIAGEO_DECLARE void
+gaiaSetNullValue (gaiaDbfFieldPtr field)
+{
+/* assignes a NULL value to some DBF field */
+    if (field->Value)
+	gaiaFreeValue (field->Value);
+    field->Value = malloc (sizeof (gaiaValue));
+    field->Value->Type = GAIA_NULL_VALUE;
+    field->Value->TxtValue = NULL;
+}
+
+GAIAGEO_DECLARE void
+gaiaSetIntValue (gaiaDbfFieldPtr field, sqlite3_int64 value)
+{
+/* assignes an INTEGER value to some DBF field */
+    if (field->Value)
+	gaiaFreeValue (field->Value);
+    field->Value = malloc (sizeof (gaiaValue));
+    field->Value->Type = GAIA_INT_VALUE;
+    field->Value->TxtValue = NULL;
+    field->Value->IntValue = value;
+}
+
+GAIAGEO_DECLARE void
+gaiaSetDoubleValue (gaiaDbfFieldPtr field, double value)
+{
+/* assignes a DOUBLE value to some DBF field */
+    if (field->Value)
+	gaiaFreeValue (field->Value);
+    field->Value = malloc (sizeof (gaiaValue));
+    field->Value->Type = GAIA_DOUBLE_VALUE;
+    field->Value->TxtValue = NULL;
+    field->Value->DblValue = value;
+}
+
+GAIAGEO_DECLARE void
+gaiaSetStrValue (gaiaDbfFieldPtr field, char *str)
+{
+/* assignes a STRING value to some DBF field */
+    int len = strlen (str);
+    if (field->Value)
+	gaiaFreeValue (field->Value);
+    field->Value = malloc (sizeof (gaiaValue));
+    field->Value->Type = GAIA_TEXT_VALUE;
+    field->Value->TxtValue = malloc (len + 1);
+    strcpy (field->Value->TxtValue, str);
+}
+
+GAIAGEO_DECLARE gaiaDbfFieldPtr
+gaiaAllocDbfField (char *name, unsigned char type,
+		   int offset, unsigned char length, unsigned char decimals)
+{
+/* allocates and initializes a DBF Field definition */
+    gaiaDbfFieldPtr p = malloc (sizeof (gaiaDbfField));
+    int len = strlen (name);
+    p->Name = malloc (len + 1);
+    strcpy (p->Name, name);
+    p->Type = type;
+    p->Offset = offset;
+    p->Length = length;
+    p->Decimals = decimals;
+    p->Value = NULL;
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeDbfField (gaiaDbfFieldPtr p)
+{
+/* frees all memory allocations for this DBF Field definition */
+    if (!p)
+	return;
+    if (p->Name)
+	free (p->Name);
+    if (p->Value)
+	gaiaFreeValue (p->Value);
+    free (p);
+}
+
+GAIAGEO_DECLARE gaiaDbfFieldPtr
+gaiaCloneDbfField (gaiaDbfFieldPtr org)
+{
+/* creating a new DBF LIST copied from the original one */
+    gaiaDbfFieldPtr p = malloc (sizeof (gaiaDbfField));
+    int len = strlen (org->Name);
+    p->Name = malloc (len + 1);
+    strcpy (p->Name, org->Name);
+    p->Type = org->Type;
+    p->Offset = org->Offset;
+    p->Length = org->Length;
+    p->Decimals = org->Decimals;
+    p->Value = gaiaCloneValue (org->Value);
+    p->Next = NULL;
+    return p;
+}
+
+GAIAGEO_DECLARE gaiaDbfListPtr
+gaiaAllocDbfList ()
+{
+/* allocates and initializes the DBF Fields list */
+    gaiaDbfListPtr list = malloc (sizeof (gaiaDbfList));
+    list->RowId = 0;
+    list->Geometry = NULL;
+    list->First = NULL;
+    list->Last = NULL;
+    return list;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeDbfList (gaiaDbfListPtr list)
+{
+/* frees all memory allocations related to DBF Fields list */
+    gaiaDbfFieldPtr p;
+    gaiaDbfFieldPtr pn;
+    if (!list)
+	return;
+    p = list->First;
+    while (p)
+      {
+	  pn = p->Next;
+	  gaiaFreeDbfField (p);
+	  p = pn;
+      }
+    if (list->Geometry)
+	gaiaFreeGeomColl (list->Geometry);
+    free (list);
+}
+
+GAIAGEO_DECLARE int
+gaiaIsValidDbfList (gaiaDbfListPtr list)
+{
+/* checks if the DBF fields list contains any invalid data type */
+    gaiaDbfFieldPtr p;
+    if (!list)
+	return 0;
+    p = list->First;
+    while (p)
+      {
+	  if (p->Type == 'N' || p->Type == 'C' || p->Type == 'L'
+	      || p->Type == 'D' || p->Type == 'F')
+	      ;
+	  else
+	      return 0;
+	  p = p->Next;
+      }
+    return 1;
+}
+
+GAIAGEO_DECLARE gaiaDbfFieldPtr
+gaiaAddDbfField (gaiaDbfListPtr list, char *name, unsigned char type,
+		 int offset, unsigned char length, unsigned char decimals)
+{
+/* inserts a Field in the DBF Fields list */
+    gaiaDbfFieldPtr p;
+    if (!list)
+	return NULL;
+    p = gaiaAllocDbfField (name, type, offset, length, decimals);
+    if (!(list->First))
+	list->First = p;
+    if (list->Last)
+	list->Last->Next = p;
+    list->Last = p;
+    return p;
+}
+
+GAIAGEO_DECLARE void
+gaiaResetDbfEntity (gaiaDbfListPtr list)
+{
+/* resets data values */
+    gaiaDbfFieldPtr p;
+    if (!list)
+	return;
+    p = list->First;
+    while (p)
+      {
+	  if (p->Value)
+	      gaiaFreeValue (p->Value);
+	  p->Value = NULL;
+	  p = p->Next;
+      }
+    if (list->Geometry)
+	gaiaFreeGeomColl (list->Geometry);
+    list->Geometry = NULL;
+}
+
+GAIAGEO_DECLARE gaiaValuePtr
+gaiaCloneValue (gaiaValuePtr org)
+{
+/* creating a new VARIANT value copied from the original one */
+    gaiaValuePtr value;
+    int len;
+    value = malloc (sizeof (gaiaValue));
+    value->Type = GAIA_NULL_VALUE;
+    value->TxtValue = NULL;
+    switch (org->Type)
+      {
+      case GAIA_INT_VALUE:
+	  value->Type = GAIA_INT_VALUE;
+	  value->IntValue = org->IntValue;
+	  break;
+      case GAIA_DOUBLE_VALUE:
+	  value->Type = GAIA_DOUBLE_VALUE;
+	  value->DblValue = org->DblValue;
+	  break;
+      case GAIA_TEXT_VALUE:
+	  value->Type = GAIA_TEXT_VALUE;
+	  len = strlen (org->TxtValue);
+	  value->TxtValue = malloc (len + 1);
+	  strcpy (value->TxtValue, org->TxtValue);
+      };
+    return value;
+}
+
+GAIAGEO_DECLARE gaiaDbfListPtr
+gaiaCloneDbfEntity (gaiaDbfListPtr org)
+{
+/* creating a new DBF LIST copied from the original one */
+    gaiaDbfFieldPtr p;
+    gaiaDbfFieldPtr newFld;
+    gaiaDbfListPtr entity = gaiaAllocDbfList ();
+    entity->RowId = org->RowId;
+    if (org->Geometry)
+	entity->Geometry = gaiaCloneGeomColl (org->Geometry);
+    p = org->First;
+    while (p)
+      {
+	  newFld =
+	      gaiaAddDbfField (entity, p->Name, p->Type, p->Offset, p->Length,
+			       p->Decimals);
+	  if (p->Value)
+	      newFld->Value = gaiaCloneValue (p->Value);
+	  p = p->Next;
+      }
+    return entity;
+}
+
+GAIAGEO_DECLARE gaiaShapefilePtr
+gaiaAllocShapefile ()
+{
+/* allocates and initializes the Shapefile object */
+    gaiaShapefilePtr shp = malloc (sizeof (gaiaShapefile));
+    shp->endian_arch = 1;
+    shp->Path = NULL;
+    shp->Shape = -1;
+    shp->EffectiveType = GAIA_UNKNOWN;
+    shp->EffectiveDims = GAIA_XY;
+    shp->flShp = NULL;
+    shp->flShx = NULL;
+    shp->flDbf = NULL;
+    shp->Dbf = NULL;
+    shp->BufShp = NULL;
+    shp->ShpBfsz = 0;
+    shp->BufDbf = NULL;
+    shp->DbfHdsz = 0;
+    shp->DbfReclen = 0;
+    shp->DbfSize = 0;
+    shp->DbfRecno = 0;
+    shp->ShpSize = 0;
+    shp->ShxSize = 0;
+    shp->MinX = DBL_MAX;
+    shp->MinY = DBL_MAX;
+    shp->MaxX = -DBL_MAX;
+    shp->MaxY = -DBL_MAX;
+    shp->Valid = 0;
+    shp->IconvObj = NULL;
+    shp->LastError = NULL;
+    return shp;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeShapefile (gaiaShapefilePtr shp)
+{
+/* frees all memory allocations related to the Shapefile object */
+    if (shp->Path)
+	free (shp->Path);
+    if (shp->flShp)
+	fclose (shp->flShp);
+    if (shp->flShx)
+	fclose (shp->flShx);
+    if (shp->flDbf)
+	fclose (shp->flDbf);
+    if (shp->Dbf)
+	gaiaFreeDbfList (shp->Dbf);
+    if (shp->BufShp)
+	free (shp->BufShp);
+    if (shp->BufDbf)
+	free (shp->BufDbf);
+    if (shp->IconvObj)
+	iconv_close ((iconv_t) shp->IconvObj);
+    if (shp->LastError)
+	free (shp->LastError);
+    free (shp);
+}
+
+GAIAGEO_DECLARE void
+gaiaOpenShpRead (gaiaShapefilePtr shp, const char *path, const char *charFrom,
+		 const char *charTo)
+{
+/* trying to open the shapefile and initial checkings */
+    FILE *fl_shx = NULL;
+    FILE *fl_shp = NULL;
+    FILE *fl_dbf = NULL;
+    char xpath[1024];
+    int rd;
+    unsigned char buf_shx[256];
+    unsigned char *buf_shp = NULL;
+    int buf_size = 1024;
+    int shape;
+    unsigned char bf[1024];
+    int dbf_size;
+    int dbf_reclen = 0;
+    int off_dbf;
+    int ind;
+    char field_name[2048];
+    char *sys_err;
+    char errMsg[1024];
+    iconv_t iconv_ret;
+    char utf8buf[2048];
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    int endian_arch = gaiaEndianArch ();
+    gaiaDbfListPtr dbf_list = NULL;
+    if (charFrom && charTo)
+      {
+	  iconv_ret = iconv_open (charTo, charFrom);
+	  if (iconv_ret == (iconv_t) (-1))
+	    {
+		sprintf (errMsg, "conversion from '%s' to '%s' not available\n",
+			 charFrom, charTo);
+		goto unsupported_conversion;
+	    }
+	  shp->IconvObj = iconv_ret;
+      }
+    else
+      {
+	  sprintf (errMsg, "a NULL charset-name was passed\n");
+	  goto unsupported_conversion;
+      }
+    if (shp->flShp != NULL || shp->flShx != NULL || shp->flDbf != NULL)
+      {
+	  sprintf (errMsg,
+		   "attempting to reopen an already opened Shapefile\n");
+	  goto unsupported_conversion;
+      }
+    sprintf (xpath, "%s.shx", path);
+    fl_shx = fopen (xpath, "rb");
+    if (!fl_shx)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for reading: %s", xpath,
+		   sys_err);
+	  goto no_file;
+      }
+    sprintf (xpath, "%s.shp", path);
+    fl_shp = fopen (xpath, "rb");
+    if (!fl_shp)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for reading: %s", xpath,
+		   sys_err);
+	  goto no_file;
+      }
+    sprintf (xpath, "%s.dbf", path);
+    fl_dbf = fopen (xpath, "rb");
+    if (!fl_dbf)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for reading: %s", xpath,
+		   sys_err);
+	  goto no_file;
+      }
+/* reading SHX file header */
+    rd = fread (buf_shx, sizeof (unsigned char), 100, fl_shx);
+    if (rd != 100)
+	goto error;
+    if (gaiaImport32 (buf_shx + 0, GAIA_BIG_ENDIAN, endian_arch) != 9994)	/* checks the SHX magic number */
+	goto error;
+/* reading SHP file header */
+    buf_shp = malloc (sizeof (unsigned char) * buf_size);
+    rd = fread (buf_shp, sizeof (unsigned char), 100, fl_shp);
+    if (rd != 100)
+	goto error;
+    if (gaiaImport32 (buf_shp + 0, GAIA_BIG_ENDIAN, endian_arch) != 9994)	/* checks the SHP magic number */
+	goto error;
+    shape = gaiaImport32 (buf_shp + 32, GAIA_LITTLE_ENDIAN, endian_arch);
+    if (shape == GAIA_SHP_POINT || shape == GAIA_SHP_POINTZ
+	|| shape == GAIA_SHP_POINTM || shape == GAIA_SHP_POLYLINE
+	|| shape == GAIA_SHP_POLYLINEZ || shape == GAIA_SHP_POLYLINEM
+	|| shape == GAIA_SHP_POLYGON || shape == GAIA_SHP_POLYGONZ
+	|| shape == GAIA_SHP_POLYGONM || shape == GAIA_SHP_MULTIPOINT
+	|| shape == GAIA_SHP_MULTIPOINTZ || shape == GAIA_SHP_MULTIPOINTM)
+	;
+    else
+	goto unsupported;
+/* reading DBF file header */
+    rd = fread (bf, sizeof (unsigned char), 32, fl_dbf);
+    if (rd != 32)
+	goto error;
+    if (*bf != 0x03)		/* checks the DBF magic number */
+	goto error;
+    dbf_size = gaiaImport16 (bf + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+    dbf_reclen = gaiaImport16 (bf + 10, GAIA_LITTLE_ENDIAN, endian_arch);
+    dbf_size--;
+    off_dbf = 0;
+    dbf_list = gaiaAllocDbfList ();
+    for (ind = 32; ind < dbf_size; ind += 32)
+      {
+	  /* fetches DBF fields definitions */
+	  rd = fread (bf, sizeof (unsigned char), 32, fl_dbf);
+	  if (rd != 32)
+	      goto error;
+	  memcpy (field_name, bf, 11);
+	  field_name[11] = '\0';
+	  len = strlen ((char *) field_name);
+	  utf8len = 2048;
+	  pBuf = (char *) field_name;
+	  pUtf8buf = utf8buf;
+	  if (iconv
+	      ((iconv_t) (shp->IconvObj), &pBuf, &len, &pUtf8buf,
+	       &utf8len) == (size_t) (-1))
+	      goto conversion_error;
+	  memcpy (field_name, utf8buf, 2048 - utf8len);
+	  field_name[2048 - utf8len] = '\0';
+	  gaiaAddDbfField (dbf_list, field_name, *(bf + 11), off_dbf,
+			   *(bf + 16), *(bf + 17));
+	  off_dbf += *(bf + 16);
+      }
+    if (!gaiaIsValidDbfList (dbf_list))
+      {
+	  /* invalid DBF */
+	  goto illegal_dbf;
+      }
+    len = strlen (path);
+    shp->Path = malloc (len + 1);
+    strcpy (shp->Path, path);
+    shp->ReadOnly = 1;
+    shp->Shape = shape;
+    switch (shape)
+      {
+	  /* setting up a prudential geometry type */
+      case GAIA_SHP_POINT:
+      case GAIA_SHP_POINTZ:
+      case GAIA_SHP_POINTM:
+	  shp->EffectiveType = GAIA_POINT;
+	  break;
+      case GAIA_SHP_POLYLINE:
+      case GAIA_SHP_POLYLINEZ:
+      case GAIA_SHP_POLYLINEM:
+	  shp->EffectiveType = GAIA_MULTILINESTRING;
+	  break;
+      case GAIA_SHP_POLYGON:
+      case GAIA_SHP_POLYGONZ:
+      case GAIA_SHP_POLYGONM:
+	  shp->EffectiveType = GAIA_MULTIPOLYGON;
+	  break;
+      case GAIA_SHP_MULTIPOINT:
+      case GAIA_SHP_MULTIPOINTZ:
+      case GAIA_SHP_MULTIPOINTM:
+	  shp->EffectiveType = GAIA_MULTIPOINT;
+	  break;
+      }
+    switch (shape)
+      {
+	  /* setting up a prudential dimension model */
+      case GAIA_SHP_POINTZ:
+      case GAIA_SHP_POLYLINEZ:
+      case GAIA_SHP_POLYGONZ:
+      case GAIA_SHP_MULTIPOINTZ:
+	  shp->EffectiveDims = GAIA_XY_Z_M;
+	  break;
+      case GAIA_SHP_POINTM:
+      case GAIA_SHP_POLYLINEM:
+      case GAIA_SHP_POLYGONM:
+      case GAIA_SHP_MULTIPOINTM:
+	  shp->EffectiveDims = GAIA_XY_M;
+	  break;
+      default:
+	  shp->EffectiveDims = GAIA_XY;
+	  break;
+      }
+    shp->flShp = fl_shp;
+    shp->flShx = fl_shx;
+    shp->flDbf = fl_dbf;
+    shp->Dbf = dbf_list;
+/* saving the SHP buffer */
+    shp->BufShp = buf_shp;
+    shp->ShpBfsz = buf_size;
+/* allocating DBF buffer */
+    shp->BufDbf = malloc (sizeof (unsigned char) * dbf_reclen);
+    shp->DbfHdsz = dbf_size + 1;
+    shp->DbfReclen = dbf_reclen;
+    shp->Valid = 1;
+    shp->endian_arch = endian_arch;
+    return;
+  unsupported_conversion:
+/* illegal charset */
+    if (shp->LastError)
+	free (shp->LastError);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    return;
+  no_file:
+/* one of shapefile's files can't be accessed */
+    if (shp->LastError)
+	free (shp->LastError);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    if (fl_shx)
+	fclose (fl_shx);
+    if (fl_shp)
+	fclose (fl_shp);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+  error:
+/* the shapefile is invalid or corrupted */
+    if (shp->LastError)
+	free (shp->LastError);
+    sprintf (errMsg, "'%s' is corrupted / has invalid format", path);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    gaiaFreeDbfList (dbf_list);
+    if (buf_shp)
+	free (buf_shp);
+    fclose (fl_shx);
+    fclose (fl_shp);
+    fclose (fl_dbf);
+    return;
+  unsupported:
+/* the shapefile has an unrecognized shape type */
+    if (shp->LastError)
+	free (shp->LastError);
+    sprintf (errMsg, "'%s' shape=%d is not supported", path, shape);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    gaiaFreeDbfList (dbf_list);
+    if (buf_shp)
+	free (buf_shp);
+    fclose (fl_shx);
+    fclose (fl_shp);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+  illegal_dbf:
+/* the DBF-file contains unsupported data types */
+    if (shp->LastError)
+	free (shp->LastError);
+    sprintf (errMsg, "'%s.dbf' contains unsupported data types", path);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    gaiaFreeDbfList (dbf_list);
+    if (buf_shp)
+	free (buf_shp);
+    fclose (fl_shx);
+    fclose (fl_shp);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+  conversion_error:
+/* libiconv error */
+    if (shp->LastError)
+	free (shp->LastError);
+    sprintf (errMsg, "'%s.dbf' field name: invalid character sequence", path);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    gaiaFreeDbfList (dbf_list);
+    if (buf_shp)
+	free (buf_shp);
+    fclose (fl_shx);
+    fclose (fl_shp);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+}
+
+GAIAGEO_DECLARE void
+gaiaOpenShpWrite (gaiaShapefilePtr shp, const char *path, int shape,
+		  gaiaDbfListPtr dbf_list, const char *charFrom,
+		  const char *charTo)
+{
+/* trying to create the shapefile */
+    FILE *fl_shx = NULL;
+    FILE *fl_shp = NULL;
+    FILE *fl_dbf = NULL;
+    char xpath[1024];
+    unsigned char *buf_shp = NULL;
+    int buf_size = 1024;
+    unsigned char *dbf_buf = NULL;
+    gaiaDbfFieldPtr fld;
+    char *sys_err;
+    char errMsg[1024];
+    short dbf_reclen = 0;
+    int shp_size = 0;
+    int shx_size = 0;
+    unsigned short dbf_size = 0;
+    iconv_t iconv_ret;
+    int endian_arch = gaiaEndianArch ();
+    char buf[2048];
+    char utf8buf[2048];
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    int defaultId = 1;
+    if (charFrom && charTo)
+      {
+	  iconv_ret = iconv_open (charTo, charFrom);
+	  if (iconv_ret == (iconv_t) (-1))
+	    {
+		sprintf (errMsg, "conversion from '%s' to '%s' not available\n",
+			 charFrom, charTo);
+		goto unsupported_conversion;
+	    }
+	  shp->IconvObj = iconv_ret;
+      }
+    else
+      {
+	  sprintf (errMsg, "a NULL charset-name was passed\n");
+	  goto unsupported_conversion;
+      }
+    if (shp->flShp != NULL || shp->flShx != NULL || shp->flDbf != NULL)
+      {
+	  sprintf (errMsg,
+		   "attempting to reopen an already opened Shapefile\n");
+	  goto unsupported_conversion;
+      }
+    buf_shp = malloc (buf_size);
+/* trying to open shapefile files */
+    sprintf (xpath, "%s.shx", path);
+    fl_shx = fopen (xpath, "wb");
+    if (!fl_shx)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for writing: %s", xpath,
+		   sys_err);
+	  goto no_file;
+      }
+    sprintf (xpath, "%s.shp", path);
+    fl_shp = fopen (xpath, "wb");
+    if (!fl_shp)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for writing: %s", xpath,
+		   sys_err);
+	  goto no_file;
+      }
+    sprintf (xpath, "%s.dbf", path);
+    fl_dbf = fopen (xpath, "wb");
+    if (!fl_dbf)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for writing: %s", xpath,
+		   sys_err);
+	  goto no_file;
+      }
+/* allocating DBF buffer */
+    dbf_reclen = 1;		/* an extra byte is needed because in DBF rows first byte is a marker for deletion */
+    fld = dbf_list->First;
+    while (fld)
+      {
+	  /* computing the DBF record length */
+	  dbf_reclen += fld->Length;
+	  fld = fld->Next;
+      }
+    dbf_buf = malloc (dbf_reclen);
+/* writing an empty SHP file header */
+    memset (buf_shp, 0, 100);
+    fwrite (buf_shp, 1, 100, fl_shp);
+    shp_size = 50;		/* note: shapefile [SHP and SHX] counts sizes in WORDS of 16 bits, not in bytes of 8 bits !!!! */
+/* writing an empty SHX file header */
+    memset (buf_shp, 0, 100);
+    fwrite (buf_shp, 1, 100, fl_shx);
+    shx_size = 50;
+/* writing the DBF file header */
+    memset (buf_shp, '\0', 32);
+    fwrite (buf_shp, 1, 32, fl_dbf);
+    dbf_size = 32;		/* note: DBF counts sizes in bytes */
+    fld = dbf_list->First;
+    while (fld)
+      {
+	  /* exporting DBF Fields specifications */
+	  memset (buf_shp, 0, 32);
+	  strcpy (buf, fld->Name);
+	  len = strlen (buf);
+	  utf8len = 2048;
+	  pBuf = buf;
+	  pUtf8buf = utf8buf;
+	  if (iconv
+	      ((iconv_t) (shp->IconvObj), &pBuf, &len, &pUtf8buf,
+	       &utf8len) == (size_t) (-1))
+	      sprintf (buf, "FLD#%d", defaultId++);
+	  else
+	    {
+		memcpy (buf, utf8buf, 2048 - utf8len);
+		buf[2048 - utf8len] = '\0';
+		if (strlen (buf) > 10)
+		    sprintf (buf, "FLD#%d", defaultId++);
+	    }
+	  memcpy (buf_shp, buf, strlen (buf));
+	  *(buf_shp + 11) = fld->Type;
+	  *(buf_shp + 16) = fld->Length;
+	  *(buf_shp + 17) = fld->Decimals;
+	  fwrite (buf_shp, 1, 32, fl_dbf);
+	  dbf_size += 32;
+	  fld = fld->Next;
+      }
+    fwrite ("\r", 1, 1, fl_dbf);	/* this one is a special DBF delimiter that closes file header */
+    dbf_size++;
+/* setting up the SHP struct */
+    len = strlen (path);
+    shp->Path = malloc (len + 1);
+    strcpy (shp->Path, path);
+    shp->ReadOnly = 0;
+    switch (shape)
+      {
+	  /* setting up SHAPE and dimensions */
+      case GAIA_POINT:
+	  shp->Shape = GAIA_SHP_POINT;
+	  shp->EffectiveType = GAIA_POINT;
+	  shp->EffectiveDims = GAIA_XY;
+	  break;
+      case GAIA_POINTZ:
+	  shp->Shape = GAIA_SHP_POINTZ;
+	  shp->EffectiveType = GAIA_POINT;
+	  shp->EffectiveDims = GAIA_XY_Z;
+	  break;
+      case GAIA_POINTM:
+	  shp->Shape = GAIA_SHP_POINTM;
+	  shp->EffectiveType = GAIA_POINT;
+	  shp->EffectiveDims = GAIA_XY_M;
+	  break;
+      case GAIA_POINTZM:
+	  shp->Shape = GAIA_SHP_POINTZ;
+	  shp->EffectiveType = GAIA_POINT;
+	  shp->EffectiveDims = GAIA_XY_Z_M;
+	  break;
+      case GAIA_MULTIPOINT:
+	  shp->Shape = GAIA_SHP_MULTIPOINT;
+	  shp->EffectiveType = GAIA_MULTIPOINT;
+	  shp->EffectiveDims = GAIA_XY;
+	  break;
+      case GAIA_MULTIPOINTZ:
+	  shp->Shape = GAIA_SHP_MULTIPOINTZ;
+	  shp->EffectiveType = GAIA_MULTIPOINT;
+	  shp->EffectiveDims = GAIA_XY_Z;
+	  break;
+      case GAIA_MULTIPOINTM:
+	  shp->Shape = GAIA_SHP_MULTIPOINTM;
+	  shp->EffectiveType = GAIA_MULTIPOINT;
+	  shp->EffectiveDims = GAIA_XY_M;
+	  break;
+      case GAIA_MULTIPOINTZM:
+	  shp->Shape = GAIA_SHP_MULTIPOINTZ;
+	  shp->EffectiveType = GAIA_MULTIPOINT;
+	  shp->EffectiveDims = GAIA_XY_Z_M;
+	  break;
+      case GAIA_LINESTRING:
+	  shp->Shape = GAIA_SHP_POLYLINE;
+	  shp->EffectiveType = GAIA_LINESTRING;
+	  shp->EffectiveDims = GAIA_XY;
+	  break;
+      case GAIA_LINESTRINGZ:
+	  shp->Shape = GAIA_SHP_POLYLINEZ;
+	  shp->EffectiveType = GAIA_LINESTRING;
+	  shp->EffectiveDims = GAIA_XY_Z;
+	  break;
+      case GAIA_LINESTRINGM:
+	  shp->Shape = GAIA_SHP_POLYLINEM;
+	  shp->EffectiveType = GAIA_LINESTRING;
+	  shp->EffectiveDims = GAIA_XY_M;
+	  break;
+      case GAIA_LINESTRINGZM:
+	  shp->Shape = GAIA_SHP_POLYLINEZ;
+	  shp->EffectiveType = GAIA_LINESTRING;
+	  shp->EffectiveDims = GAIA_XY_Z_M;
+	  break;
+      case GAIA_MULTILINESTRING:
+	  shp->Shape = GAIA_SHP_POLYLINE;
+	  shp->EffectiveType = GAIA_MULTILINESTRING;
+	  shp->EffectiveDims = GAIA_XY;
+	  break;
+      case GAIA_MULTILINESTRINGZ:
+	  shp->Shape = GAIA_SHP_POLYLINEZ;
+	  shp->EffectiveType = GAIA_MULTILINESTRING;
+	  shp->EffectiveDims = GAIA_XY_Z;
+	  break;
+      case GAIA_MULTILINESTRINGM:
+	  shp->Shape = GAIA_SHP_POLYLINEM;
+	  shp->EffectiveType = GAIA_MULTILINESTRING;
+	  shp->EffectiveDims = GAIA_XY_M;
+	  break;
+      case GAIA_MULTILINESTRINGZM:
+	  shp->Shape = GAIA_SHP_POLYLINEZ;
+	  shp->EffectiveType = GAIA_MULTILINESTRING;
+	  shp->EffectiveDims = GAIA_XY_Z_M;
+	  break;
+      case GAIA_POLYGON:
+	  shp->Shape = GAIA_SHP_POLYGON;
+	  shp->EffectiveType = GAIA_POLYGON;
+	  shp->EffectiveDims = GAIA_XY;
+	  break;
+      case GAIA_POLYGONZ:
+	  shp->Shape = GAIA_SHP_POLYGONZ;
+	  shp->EffectiveType = GAIA_POLYGON;
+	  shp->EffectiveDims = GAIA_XY_Z;
+	  break;
+      case GAIA_POLYGONM:
+	  shp->Shape = GAIA_SHP_POLYGONM;
+	  shp->EffectiveType = GAIA_POLYGON;
+	  shp->EffectiveDims = GAIA_XY_M;
+	  break;
+      case GAIA_POLYGONZM:
+	  shp->Shape = GAIA_SHP_POLYGONZ;
+	  shp->EffectiveType = GAIA_POLYGON;
+	  shp->EffectiveDims = GAIA_XY_Z_M;
+	  break;
+      case GAIA_MULTIPOLYGON:
+	  shp->Shape = GAIA_SHP_POLYGON;
+	  shp->EffectiveType = GAIA_MULTIPOLYGON;
+	  shp->EffectiveDims = GAIA_XY;
+	  break;
+      case GAIA_MULTIPOLYGONZ:
+	  shp->Shape = GAIA_SHP_POLYGONZ;
+	  shp->EffectiveType = GAIA_MULTIPOLYGON;
+	  shp->EffectiveDims = GAIA_XY_Z;
+	  break;
+      case GAIA_MULTIPOLYGONM:
+	  shp->Shape = GAIA_SHP_POLYGONM;
+	  shp->EffectiveType = GAIA_MULTIPOLYGON;
+	  shp->EffectiveDims = GAIA_XY_M;
+	  break;
+      case GAIA_MULTIPOLYGONZM:
+	  shp->Shape = GAIA_SHP_POLYGONZ;
+	  shp->EffectiveType = GAIA_MULTIPOLYGON;
+	  shp->EffectiveDims = GAIA_XY_Z_M;
+	  break;
+      };
+    shp->flShp = fl_shp;
+    shp->flShx = fl_shx;
+    shp->flDbf = fl_dbf;
+    shp->Dbf = dbf_list;
+    shp->BufShp = buf_shp;
+    shp->ShpBfsz = buf_size;
+    shp->BufDbf = dbf_buf;
+    shp->DbfHdsz = dbf_size + 1;
+    shp->DbfReclen = dbf_reclen;
+    shp->DbfSize = dbf_size;
+    shp->DbfRecno = 0;
+    shp->ShpSize = shp_size;
+    shp->ShxSize = shx_size;
+    shp->MinX = DBL_MAX;
+    shp->MinY = DBL_MAX;
+    shp->MaxX = -DBL_MAX;
+    shp->MaxY = -DBL_MAX;
+    shp->Valid = 1;
+    shp->endian_arch = endian_arch;
+    return;
+  unsupported_conversion:
+/* illegal charset */
+    if (shp->LastError)
+	free (shp->LastError);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    return;
+  no_file:
+/* one of shapefile's files can't be created/opened */
+    if (shp->LastError)
+	free (shp->LastError);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    if (buf_shp)
+	free (buf_shp);
+    if (fl_shx)
+	fclose (fl_shx);
+    if (fl_shp)
+	fclose (fl_shp);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+}
+
+static double
+to_sqlite_julian_date (int year, int month, int day, double *julian)
+{
+/* trying to convert an 'YYYY-MM-DD' date into a JulianDate [double] */
+    int Y;
+    int M;
+    int D;
+    int A;
+    int B;
+    int X1;
+    int X2;
+    if (year < 1900 || year > 2400)
+	return 0;
+    if (month < 1 || month > 12)
+	return 0;
+    if (day < 1)
+	return 0;
+    switch (month)
+      {
+      case 2:
+	  if ((year / 4) == 0)
+	    {
+		if (day > 29)
+		    return 0;
+	    }
+	  else
+	    {
+		if (day > 28)
+		    return 0;
+	    }
+	  break;
+      case 4:
+      case 6:
+      case 9:
+      case 11:
+	  if (day > 30)
+	      return 0;
+	  break;
+      default:
+	  if (day > 31)
+	      return 0;
+      };
+/* computing the Julian date */
+    Y = year;
+    M = month;
+    D = day;
+    if (M <= 2)
+      {
+	  Y--;
+	  M += 12;
+      }
+    A = Y / 100;
+    B = 2 - A + (A / 4);
+    X1 = 36525 * (Y + 4716) / 100;
+    X2 = 306001 * (M + 1) / 10000;
+    *julian = (double) (X1 + X2 + D + B - 1524.5);
+    return 1;
+}
+
+static int
+parseDbfField (unsigned char *buf_dbf, void *iconv_obj, gaiaDbfFieldPtr pFld)
+{
+/* parsing a generic DBF field */
+    unsigned char buf[512];
+    char utf8buf[2048];
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    int i;
+    memcpy (buf, buf_dbf + pFld->Offset + 1, pFld->Length);
+    buf[pFld->Length] = '\0';
+    if (*buf == '\0')
+	gaiaSetNullValue (pFld);
+    else
+      {
+	  if (pFld->Type == 'N')
+	    {
+		/* NUMERIC value */
+		if (pFld->Decimals > 0 || pFld->Length > 18)
+		    gaiaSetDoubleValue (pFld, atof ((char *) buf));
+		else
+		    gaiaSetIntValue (pFld, atoll ((char *) buf));
+	    }
+	  else if (pFld->Type == 'F')
+	    {
+		/* FLOAT value */
+		gaiaSetDoubleValue (pFld, atof ((char *) buf));
+	    }
+	  else if (pFld->Type == 'D')
+	    {
+		/* DATE value */
+		if (strlen ((char *) buf) != 8)
+		    gaiaSetNullValue (pFld);
+		else
+		  {
+		      /* converting into a Julian Date */
+		      double julian;
+		      char date[5];
+		      int year = 0;
+		      int month = 0;
+		      int day = 0;
+		      date[0] = buf[0];
+		      date[1] = buf[1];
+		      date[2] = buf[2];
+		      date[3] = buf[3];
+		      date[4] = '\0';
+		      year = atoi (date);
+		      date[0] = buf[4];
+		      date[1] = buf[5];
+		      date[2] = '\0';
+		      month = atoi (date);
+		      date[0] = buf[6];
+		      date[1] = buf[7];
+		      date[2] = '\0';
+		      day = atoi (date);
+		      if (to_sqlite_julian_date (year, month, day, &julian))
+			  gaiaSetDoubleValue (pFld, julian);
+		      else
+			  gaiaSetNullValue (pFld);
+		  }
+	    }
+	  else if (pFld->Type == 'L')
+	    {
+		/* LOGICAL [aka Boolean] value */
+		if (*buf == '1' || *buf == 't' || *buf == 'T'
+		    || *buf == 'Y' || *buf == 'y')
+		    gaiaSetIntValue (pFld, 1);
+		else
+		    gaiaSetIntValue (pFld, 0);
+	    }
+	  else
+	    {
+		/* CHARACTER [aka String, Text] value */
+		for (i = strlen ((char *) buf) - 1; i > 1; i--)
+		  {
+		      /* cleaning up trailing spaces */
+		      if (buf[i] == ' ')
+			  buf[i] = '\0';
+		      else
+			  break;
+		  }
+		len = strlen ((char *) buf);
+		utf8len = 2048;
+		pBuf = (char *) buf;
+		pUtf8buf = utf8buf;
+		if (iconv
+		    ((iconv_t) (iconv_obj), &pBuf, &len, &pUtf8buf,
+		     &utf8len) == (size_t) (-1))
+		    return 0;
+		memcpy (buf, utf8buf, 2048 - utf8len);
+		buf[2048 - utf8len] = '\0';
+		gaiaSetStrValue (pFld, (char *) buf);
+	    }
+      }
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaReadShpEntity (gaiaShapefilePtr shp, int current_row, int srid)
+{
+/* trying to read an entity from shapefile */
+    unsigned char buf[512];
+    int len;
+    int rd;
+    int skpos;
+    int offset;
+    int off_shp;
+    int sz;
+    int shape;
+    double x;
+    double y;
+    double z;
+    double m;
+    int points;
+    int n;
+    int n1;
+    int base;
+    int baseZ;
+    int baseM;
+    int start;
+    int end;
+    int iv;
+    int ind;
+    int max_size;
+    int min_size;
+    int hasM;
+    char errMsg[1024];
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring = NULL;
+    gaiaDbfFieldPtr pFld;
+/* positioning and reading the SHX file */
+    offset = 100 + (current_row * 8);	/* 100 bytes for the header + current row displacement; each SHX row = 8 bytes */
+    skpos = fseek (shp->flShx, offset, SEEK_SET);
+    if (skpos != 0)
+	goto eof;
+    rd = fread (buf, sizeof (unsigned char), 8, shp->flShx);
+    if (rd != 8)
+	goto eof;
+    off_shp = gaiaImport32 (buf, GAIA_BIG_ENDIAN, shp->endian_arch);
+/* positioning and reading the DBF file */
+    offset = shp->DbfHdsz + (current_row * shp->DbfReclen);
+    skpos = fseek (shp->flDbf, offset, SEEK_SET);
+    if (skpos != 0)
+	goto error;
+    rd = fread (shp->BufDbf, sizeof (unsigned char), shp->DbfReclen,
+		shp->flDbf);
+    if (rd != shp->DbfReclen)
+	goto error;
+/* positioning and reading corresponding SHP entity - geometry */
+    offset = off_shp * 2;
+    skpos = fseek (shp->flShp, offset, SEEK_SET);
+    if (skpos != 0)
+	goto error;
+    rd = fread (buf, sizeof (unsigned char), 12, shp->flShp);
+    if (rd != 12)
+	goto error;
+    sz = gaiaImport32 (buf + 4, GAIA_BIG_ENDIAN, shp->endian_arch);
+    shape = gaiaImport32 (buf + 8, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+    if (shape == GAIA_SHP_NULL)
+      {
+	  /* handling a NULL shape */
+	  goto null_shape;
+      }
+    else if (shape != shp->Shape)
+	goto error;
+    if ((sz * 2) > shp->ShpBfsz)
+      {
+	  /* current buffer is too small; we need to allocate a bigger buffer */
+	  free (shp->BufShp);
+	  shp->ShpBfsz = sz * 2;
+	  shp->BufShp = malloc (sizeof (unsigned char) * shp->ShpBfsz);
+      }
+    if (shape == GAIA_SHP_POINT)
+      {
+	  /* shape point */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 16, shp->flShp);
+	  if (rd != 16)
+	      goto error;
+	  x = gaiaImport64 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  y = gaiaImport64 (shp->BufShp + 8, GAIA_LITTLE_ENDIAN,
+			    shp->endian_arch);
+	  if (shp->EffectiveDims == GAIA_XY_Z)
+	    {
+		geom = gaiaAllocGeomCollXYZ ();
+		gaiaAddPointToGeomCollXYZ (geom, x, y, 0.0);
+	    }
+	  else if (shp->EffectiveDims == GAIA_XY_M)
+	    {
+		geom = gaiaAllocGeomCollXYM ();
+		gaiaAddPointToGeomCollXYM (geom, x, y, 0.0);
+	    }
+	  else if (shp->EffectiveDims == GAIA_XY_Z_M)
+	    {
+		geom = gaiaAllocGeomCollXYZM ();
+		gaiaAddPointToGeomCollXYZM (geom, x, y, 0.0, 0.0);
+	    }
+	  else
+	    {
+		geom = gaiaAllocGeomColl ();
+		gaiaAddPointToGeomColl (geom, x, y);
+	    }
+	  geom->DeclaredType = GAIA_POINT;
+	  geom->Srid = srid;
+      }
+    if (shape == GAIA_SHP_POINTZ)
+      {
+	  /* shape point Z */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	    {
+		/* required by some buggish SHP (e.g. the GDAL/OGR ones) */
+		if (rd != 24)
+		    goto error;
+	    }
+	  x = gaiaImport64 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  y = gaiaImport64 (shp->BufShp + 8, GAIA_LITTLE_ENDIAN,
+			    shp->endian_arch);
+	  z = gaiaImport64 (shp->BufShp + 16, GAIA_LITTLE_ENDIAN,
+			    shp->endian_arch);
+	  if (rd == 24)
+	      m = 0.0;
+	  else
+	      m = gaiaImport64 (shp->BufShp + 24, GAIA_LITTLE_ENDIAN,
+				shp->endian_arch);
+	  if (shp->EffectiveDims == GAIA_XY_Z)
+	    {
+		geom = gaiaAllocGeomCollXYZ ();
+		gaiaAddPointToGeomCollXYZ (geom, x, y, z);
+	    }
+	  else if (shp->EffectiveDims == GAIA_XY_M)
+	    {
+		geom = gaiaAllocGeomCollXYM ();
+		gaiaAddPointToGeomCollXYM (geom, x, y, m);
+	    }
+	  else if (shp->EffectiveDims == GAIA_XY_Z_M)
+	    {
+		geom = gaiaAllocGeomCollXYZM ();
+		gaiaAddPointToGeomCollXYZM (geom, x, y, z, m);
+	    }
+	  else
+	    {
+		geom = gaiaAllocGeomColl ();
+		gaiaAddPointToGeomColl (geom, x, y);
+	    }
+	  geom->DeclaredType = GAIA_POINT;
+	  geom->Srid = srid;
+      }
+    if (shape == GAIA_SHP_POINTM)
+      {
+	  /* shape point M */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 24, shp->flShp);
+	  if (rd != 24)
+	      goto error;
+	  x = gaiaImport64 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  y = gaiaImport64 (shp->BufShp + 8, GAIA_LITTLE_ENDIAN,
+			    shp->endian_arch);
+	  m = gaiaImport64 (shp->BufShp + 16, GAIA_LITTLE_ENDIAN,
+			    shp->endian_arch);
+	  if (shp->EffectiveDims == GAIA_XY_Z)
+	    {
+		geom = gaiaAllocGeomCollXYZ ();
+		gaiaAddPointToGeomCollXYZ (geom, x, y, 0.0);
+	    }
+	  else if (shp->EffectiveDims == GAIA_XY_M)
+	    {
+		geom = gaiaAllocGeomCollXYM ();
+		gaiaAddPointToGeomCollXYM (geom, x, y, m);
+	    }
+	  else if (shp->EffectiveDims == GAIA_XY_Z_M)
+	    {
+		geom = gaiaAllocGeomCollXYZM ();
+		gaiaAddPointToGeomCollXYZM (geom, x, y, 0.0, m);
+	    }
+	  else
+	    {
+		geom = gaiaAllocGeomColl ();
+		gaiaAddPointToGeomColl (geom, x, y);
+	    }
+	  geom->DeclaredType = GAIA_POINT;
+	  geom->Srid = srid;
+      }
+    if (shape == GAIA_SHP_POLYLINE)
+      {
+	  /* shape polyline */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+			     shp->endian_arch);
+	  base = 8 + (n * 4);
+	  start = 0;
+	  for (ind = 0; ind < n; ind++)
+	    {
+		if (ind < (n - 1))
+		    end =
+			gaiaImport32 (shp->BufShp + 8 + ((ind + 1) * 4),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    end = n1;
+		points = end - start;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    line = gaiaAllocLinestringXYZ (points);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    line = gaiaAllocLinestringXYM (points);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    line = gaiaAllocLinestringXYZM (points);
+		else
+		    line = gaiaAllocLinestring (points);
+		points = 0;
+		for (iv = start; iv < end; iv++)
+		  {
+		      x = gaiaImport64 (shp->BufShp + base + (iv * 16),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      y = gaiaImport64 (shp->BufShp + base + (iv * 16) +
+					8, GAIA_LITTLE_ENDIAN,
+					shp->endian_arch);
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (line->Coords, points, x, y, 0.0);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (line->Coords, points, x, y, 0.0);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (line->Coords, points, x, y,
+					      0.0, 0.0);
+			}
+		      else
+			{
+			    gaiaSetPoint (line->Coords, points, x, y);
+			}
+		      start++;
+		      points++;
+		  }
+		if (!geom)
+		  {
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			  geom = gaiaAllocGeomCollXYZ ();
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			  geom = gaiaAllocGeomCollXYM ();
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			  geom = gaiaAllocGeomCollXYZM ();
+		      else
+			  geom = gaiaAllocGeomColl ();
+		      if (shp->EffectiveType == GAIA_LINESTRING)
+			  geom->DeclaredType = GAIA_LINESTRING;
+		      else
+			  geom->DeclaredType = GAIA_MULTILINESTRING;
+		      geom->Srid = srid;
+		  }
+		gaiaInsertLinestringInGeomColl (geom, line);
+	    }
+      }
+    if (shape == GAIA_SHP_POLYLINEZ)
+      {
+	  /* shape polyline Z */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+			     shp->endian_arch);
+	  hasM = 0;
+	  max_size = 38 + (2 * n) + (n1 * 16);	/* size [in 16 bits words !!!] ZM */
+	  min_size = 30 + (2 * n) + (n1 * 12);	/* size [in 16 bits words !!!] Z-only */
+	  if (sz < min_size)
+	      goto error;
+	  if (sz == max_size)
+	      hasM = 1;
+	  base = 8 + (n * 4);
+	  baseZ = base + (n1 * 16) + 16;
+	  baseM = baseZ + (n1 * 8) + 16;
+	  start = 0;
+	  for (ind = 0; ind < n; ind++)
+	    {
+		if (ind < (n - 1))
+		    end =
+			gaiaImport32 (shp->BufShp + 8 + ((ind + 1) * 4),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    end = n1;
+		points = end - start;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    line = gaiaAllocLinestringXYZ (points);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    line = gaiaAllocLinestringXYM (points);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    line = gaiaAllocLinestringXYZM (points);
+		else
+		    line = gaiaAllocLinestring (points);
+		points = 0;
+		for (iv = start; iv < end; iv++)
+		  {
+		      x = gaiaImport64 (shp->BufShp + base + (iv * 16),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      y = gaiaImport64 (shp->BufShp + base + (iv * 16) +
+					8, GAIA_LITTLE_ENDIAN,
+					shp->endian_arch);
+		      z = gaiaImport64 (shp->BufShp + baseZ + (iv * 8),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      if (hasM)
+			  m = gaiaImport64 (shp->BufShp + baseM +
+					    (iv * 8), GAIA_LITTLE_ENDIAN,
+					    shp->endian_arch);
+		      else
+			  m = 0.0;
+		      if (m < SHAPEFILE_NO_DATA)
+			  m = 0.0;
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (line->Coords, points, x, y, z);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (line->Coords, points, x, y, m);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (line->Coords, points, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (line->Coords, points, x, y);
+			}
+		      start++;
+		      points++;
+		  }
+		if (!geom)
+		  {
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			  geom = gaiaAllocGeomCollXYZ ();
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			  geom = gaiaAllocGeomCollXYM ();
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			  geom = gaiaAllocGeomCollXYZM ();
+		      else
+			  geom = gaiaAllocGeomColl ();
+		      if (shp->EffectiveType == GAIA_LINESTRING)
+			  geom->DeclaredType = GAIA_LINESTRING;
+		      else
+			  geom->DeclaredType = GAIA_MULTILINESTRING;
+		      geom->Srid = srid;
+		  }
+		gaiaInsertLinestringInGeomColl (geom, line);
+	    }
+      }
+    if (shape == GAIA_SHP_POLYLINEM)
+      {
+	  /* shape polyline M */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+			     shp->endian_arch);
+	  hasM = 0;
+	  max_size = 30 + (2 * n) + (n1 * 12);	/* size [in 16 bits words !!!] M */
+	  min_size = 22 + (2 * n) + (n1 * 8);	/* size [in 16 bits words !!!] no-M */
+	  if (sz < min_size)
+	      goto error;
+	  if (sz == max_size)
+	      hasM = 1;
+	  base = 8 + (n * 4);
+	  baseM = base + (n1 * 16) + 16;
+	  start = 0;
+	  for (ind = 0; ind < n; ind++)
+	    {
+		if (ind < (n - 1))
+		    end =
+			gaiaImport32 (shp->BufShp + 8 + ((ind + 1) * 4),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    end = n1;
+		points = end - start;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    line = gaiaAllocLinestringXYZ (points);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    line = gaiaAllocLinestringXYM (points);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    line = gaiaAllocLinestringXYZM (points);
+		else
+		    line = gaiaAllocLinestring (points);
+		points = 0;
+		for (iv = start; iv < end; iv++)
+		  {
+		      x = gaiaImport64 (shp->BufShp + base + (iv * 16),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      y = gaiaImport64 (shp->BufShp + base + (iv * 16) +
+					8, GAIA_LITTLE_ENDIAN,
+					shp->endian_arch);
+		      if (hasM)
+			  m = gaiaImport64 (shp->BufShp + baseM +
+					    (iv * 8), GAIA_LITTLE_ENDIAN,
+					    shp->endian_arch);
+		      else
+			  m = 0.0;
+		      if (m < SHAPEFILE_NO_DATA)
+			  m = 0.0;
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (line->Coords, points, x, y, 0.0);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (line->Coords, points, x, y, m);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (line->Coords, points, x, y,
+					      0.0, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (line->Coords, points, x, y);
+			}
+		      start++;
+		      points++;
+		  }
+		if (!geom)
+		  {
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			  geom = gaiaAllocGeomCollXYZ ();
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			  geom = gaiaAllocGeomCollXYM ();
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			  geom = gaiaAllocGeomCollXYZM ();
+		      else
+			  geom = gaiaAllocGeomColl ();
+		      if (shp->EffectiveType == GAIA_LINESTRING)
+			  geom->DeclaredType = GAIA_LINESTRING;
+		      else
+			  geom->DeclaredType = GAIA_MULTILINESTRING;
+		      geom->Srid = srid;
+		  }
+		gaiaInsertLinestringInGeomColl (geom, line);
+	    }
+      }
+    if (shape == GAIA_SHP_POLYGON)
+      {
+	  /* shape polygon */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+			     shp->endian_arch);
+	  base = 8 + (n * 4);
+	  start = 0;
+	  for (ind = 0; ind < n; ind++)
+	    {
+		if (ind < (n - 1))
+		    end =
+			gaiaImport32 (shp->BufShp + 8 + ((ind + 1) * 4),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    end = n1;
+		points = end - start;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    ring = gaiaAllocRingXYZ (points);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    ring = gaiaAllocRingXYM (points);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    ring = gaiaAllocRingXYZM (points);
+		else
+		    ring = gaiaAllocRing (points);
+		points = 0;
+		for (iv = start; iv < end; iv++)
+		  {
+		      x = gaiaImport64 (shp->BufShp + base + (iv * 16),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      y = gaiaImport64 (shp->BufShp + base + (iv * 16) +
+					8, GAIA_LITTLE_ENDIAN,
+					shp->endian_arch);
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, points, x, y, 0.0);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, points, x, y, 0.0);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, points, x, y,
+					      0.0, 0.0);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, points, x, y);
+			}
+		      start++;
+		      points++;
+		  }
+		if (!geom)
+		  {
+		      /* new geometry - new need to allocate a new POLYGON */
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			  geom = gaiaAllocGeomCollXYZ ();
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			  geom = gaiaAllocGeomCollXYM ();
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			  geom = gaiaAllocGeomCollXYZM ();
+		      else
+			  geom = gaiaAllocGeomColl ();
+		      if (shp->EffectiveType == GAIA_POLYGON)
+			  geom->DeclaredType = GAIA_POLYGON;
+		      else
+			  geom->DeclaredType = GAIA_MULTIPOLYGON;
+		      geom->Srid = srid;
+		      polyg = gaiaInsertPolygonInGeomColl (geom, ring);
+		  }
+		else
+		  {
+		      gaiaClockwise (ring);
+		      if (ring->Clockwise)
+			{
+			    /* this one is a POLYGON exterior ring - we need to allocate e new POLYGON */
+			    polyg = gaiaInsertPolygonInGeomColl (geom, ring);
+			}
+		      else
+			{
+			    /* adding an interior ring to current POLYGON */
+			    gaiaAddRingToPolyg (polyg, ring);
+			}
+		  }
+	    }
+      }
+    if (shape == GAIA_SHP_POLYGONZ)
+      {
+	  /* shape polygon Z */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+			     shp->endian_arch);
+	  hasM = 0;
+	  max_size = 38 + (2 * n) + (n1 * 16);	/* size [in 16 bits words !!!] ZM */
+	  min_size = 30 + (2 * n) + (n1 * 12);	/* size [in 16 bits words !!!] Z-only */
+	  if (sz < min_size)
+	      goto error;
+	  if (sz == max_size)
+	      hasM = 1;
+	  base = 8 + (n * 4);
+	  baseZ = base + (n1 * 16) + 16;
+	  baseM = baseZ + (n1 * 8) + 16;
+	  start = 0;
+	  for (ind = 0; ind < n; ind++)
+	    {
+		if (ind < (n - 1))
+		    end =
+			gaiaImport32 (shp->BufShp + 8 + ((ind + 1) * 4),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    end = n1;
+		points = end - start;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    ring = gaiaAllocRingXYZ (points);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    ring = gaiaAllocRingXYM (points);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    ring = gaiaAllocRingXYZM (points);
+		else
+		    ring = gaiaAllocRing (points);
+		points = 0;
+		for (iv = start; iv < end; iv++)
+		  {
+		      x = gaiaImport64 (shp->BufShp + base + (iv * 16),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      y = gaiaImport64 (shp->BufShp + base + (iv * 16) +
+					8, GAIA_LITTLE_ENDIAN,
+					shp->endian_arch);
+		      z = gaiaImport64 (shp->BufShp + baseZ + (iv * 8),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      if (hasM)
+			  m = gaiaImport64 (shp->BufShp + baseM +
+					    (iv * 8), GAIA_LITTLE_ENDIAN,
+					    shp->endian_arch);
+		      else
+			  m = 0.0;
+		      if (m < SHAPEFILE_NO_DATA)
+			  m = 0.0;
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, points, x, y, z);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, points, x, y, m);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, points, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, points, x, y);
+			}
+		      start++;
+		      points++;
+		  }
+		if (!geom)
+		  {
+		      /* new geometry - new need to allocate a new POLYGON */
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			  geom = gaiaAllocGeomCollXYZ ();
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			  geom = gaiaAllocGeomCollXYM ();
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			  geom = gaiaAllocGeomCollXYZM ();
+		      else
+			  geom = gaiaAllocGeomColl ();
+		      if (shp->EffectiveType == GAIA_POLYGON)
+			  geom->DeclaredType = GAIA_POLYGON;
+		      else
+			  geom->DeclaredType = GAIA_MULTIPOLYGON;
+		      geom->Srid = srid;
+		      polyg = gaiaInsertPolygonInGeomColl (geom, ring);
+		  }
+		else
+		  {
+		      gaiaClockwise (ring);
+		      if (ring->Clockwise)
+			{
+			    /* this one is a POLYGON exterior ring - we need to allocate e new POLYGON */
+			    polyg = gaiaInsertPolygonInGeomColl (geom, ring);
+			}
+		      else
+			{
+			    /* adding an interior ring to current POLYGON */
+			    gaiaAddRingToPolyg (polyg, ring);
+			}
+		  }
+	    }
+      }
+    if (shape == GAIA_SHP_POLYGONM)
+      {
+	  /* shape polygon M */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+			     shp->endian_arch);
+	  hasM = 0;
+	  max_size = 30 + (2 * n) + (n1 * 12);	/* size [in 16 bits words !!!] M */
+	  min_size = 22 + (2 * n) + (n1 * 8);	/* size [in 16 bits words !!!] no-M */
+	  if (sz < min_size)
+	      goto error;
+	  if (sz == max_size)
+	      hasM = 1;
+	  base = 8 + (n * 4);
+	  baseM = base + (n1 * 16) + 16;
+	  start = 0;
+	  for (ind = 0; ind < n; ind++)
+	    {
+		if (ind < (n - 1))
+		    end =
+			gaiaImport32 (shp->BufShp + 8 + ((ind + 1) * 4),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    end = n1;
+		points = end - start;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    ring = gaiaAllocRingXYZ (points);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    ring = gaiaAllocRingXYM (points);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    ring = gaiaAllocRingXYZM (points);
+		else
+		    ring = gaiaAllocRing (points);
+		points = 0;
+		for (iv = start; iv < end; iv++)
+		  {
+		      x = gaiaImport64 (shp->BufShp + base + (iv * 16),
+					GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		      y = gaiaImport64 (shp->BufShp + base + (iv * 16) +
+					8, GAIA_LITTLE_ENDIAN,
+					shp->endian_arch);
+		      if (hasM)
+			  m = gaiaImport64 (shp->BufShp + baseM +
+					    (iv * 8), GAIA_LITTLE_ENDIAN,
+					    shp->endian_arch);
+		      m = 0.0;
+		      if (m < SHAPEFILE_NO_DATA)
+			  m = 0.0;
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, points, x, y, 0.0);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, points, x, y, m);
+			}
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, points, x, y,
+					      0.0, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, points, x, y);
+			}
+		      start++;
+		      points++;
+		  }
+		if (!geom)
+		  {
+		      /* new geometry - new need to allocate a new POLYGON */
+		      if (shp->EffectiveDims == GAIA_XY_Z)
+			  geom = gaiaAllocGeomCollXYZ ();
+		      else if (shp->EffectiveDims == GAIA_XY_M)
+			  geom = gaiaAllocGeomCollXYM ();
+		      else if (shp->EffectiveDims == GAIA_XY_Z_M)
+			  geom = gaiaAllocGeomCollXYZM ();
+		      else
+			  geom = gaiaAllocGeomColl ();
+		      if (shp->EffectiveType == GAIA_POLYGON)
+			  geom->DeclaredType = GAIA_POLYGON;
+		      else
+			  geom->DeclaredType = GAIA_MULTIPOLYGON;
+		      geom->Srid = srid;
+		      polyg = gaiaInsertPolygonInGeomColl (geom, ring);
+		  }
+		else
+		  {
+		      gaiaClockwise (ring);
+		      if (ring->Clockwise)
+			{
+			    /* this one is a POLYGON exterior ring - we need to allocate e new POLYGON */
+			    polyg = gaiaInsertPolygonInGeomColl (geom, ring);
+			}
+		      else
+			{
+			    /* adding an interior ring to current POLYGON */
+			    gaiaAddRingToPolyg (polyg, ring);
+			}
+		  }
+	    }
+      }
+    if (shape == GAIA_SHP_MULTIPOINT)
+      {
+	  /* shape multipoint */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  if (shp->EffectiveDims == GAIA_XY_Z)
+	      geom = gaiaAllocGeomCollXYZ ();
+	  else if (shp->EffectiveDims == GAIA_XY_M)
+	      geom = gaiaAllocGeomCollXYM ();
+	  else if (shp->EffectiveDims == GAIA_XY_Z_M)
+	      geom = gaiaAllocGeomCollXYZM ();
+	  else
+	      geom = gaiaAllocGeomColl ();
+	  geom->DeclaredType = GAIA_MULTIPOINT;
+	  geom->Srid = srid;
+	  for (iv = 0; iv < n; iv++)
+	    {
+		x = gaiaImport64 (shp->BufShp + 4 + (iv * 16),
+				  GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		y = gaiaImport64 (shp->BufShp + 4 + (iv * 16) + 8,
+				  GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    gaiaAddPointToGeomCollXYZ (geom, x, y, 0.0);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    gaiaAddPointToGeomCollXYM (geom, x, y, 0.0);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    gaiaAddPointToGeomCollXYZM (geom, x, y, 0.0, 0.0);
+		else
+		    gaiaAddPointToGeomColl (geom, x, y);
+	    }
+      }
+    if (shape == GAIA_SHP_MULTIPOINTZ)
+      {
+	  /* shape multipoint Z */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  hasM = 0;
+	  max_size = 38 + (n * 16);	/* size [in 16 bits words !!!] ZM */
+	  min_size = 30 + (n * 12);	/* size [in 16 bits words !!!] Z-only */
+	  if (sz < min_size)
+	      goto error;
+	  if (sz == max_size)
+	      hasM = 1;
+	  baseZ = 4 + (n * 16) + 16;
+	  baseM = baseZ + (n * 8) + 16;
+	  if (shp->EffectiveDims == GAIA_XY_Z)
+	      geom = gaiaAllocGeomCollXYZ ();
+	  else if (shp->EffectiveDims == GAIA_XY_M)
+	      geom = gaiaAllocGeomCollXYM ();
+	  else if (shp->EffectiveDims == GAIA_XY_Z_M)
+	      geom = gaiaAllocGeomCollXYZM ();
+	  else
+	      geom = gaiaAllocGeomColl ();
+	  geom->DeclaredType = GAIA_MULTIPOINT;
+	  geom->Srid = srid;
+	  for (iv = 0; iv < n; iv++)
+	    {
+		x = gaiaImport64 (shp->BufShp + 4 + (iv * 16),
+				  GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		y = gaiaImport64 (shp->BufShp + 4 + (iv * 16) + 8,
+				  GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		z = gaiaImport64 (shp->BufShp + baseZ + (iv * 8),
+				  GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		if (hasM)
+		    m = gaiaImport64 (shp->BufShp + baseM + (iv * 8),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    m = 0.0;
+		if (m < SHAPEFILE_NO_DATA)
+		    m = 0.0;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    gaiaAddPointToGeomCollXYZ (geom, x, y, z);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    gaiaAddPointToGeomCollXYM (geom, x, y, m);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    gaiaAddPointToGeomCollXYZM (geom, x, y, z, m);
+		else
+		    gaiaAddPointToGeomColl (geom, x, y);
+	    }
+      }
+    if (shape == GAIA_SHP_MULTIPOINTM)
+      {
+	  /* shape multipoint M */
+	  rd = fread (shp->BufShp, sizeof (unsigned char), 32, shp->flShp);
+	  if (rd != 32)
+	      goto error;
+	  rd = fread (shp->BufShp, sizeof (unsigned char), (sz * 2) - 36,
+		      shp->flShp);
+	  if (rd != (sz * 2) - 36)
+	      goto error;
+	  n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  hasM = 0;
+	  max_size = 30 + (n * 12);	/* size [in 16 bits words !!!] M */
+	  min_size = 22 + (n * 8);	/* size [in 16 bits words !!!] no-M */
+	  if (sz < min_size)
+	      goto error;
+	  if (sz == max_size)
+	      hasM = 1;
+	  baseM = 4 + (n * 16) + 16;
+	  if (shp->EffectiveDims == GAIA_XY_Z)
+	      geom = gaiaAllocGeomCollXYZ ();
+	  else if (shp->EffectiveDims == GAIA_XY_M)
+	      geom = gaiaAllocGeomCollXYM ();
+	  else if (shp->EffectiveDims == GAIA_XY_Z_M)
+	      geom = gaiaAllocGeomCollXYZM ();
+	  else
+	      geom = gaiaAllocGeomColl ();
+	  geom->DeclaredType = GAIA_MULTIPOINT;
+	  geom->Srid = srid;
+	  for (iv = 0; iv < n; iv++)
+	    {
+		x = gaiaImport64 (shp->BufShp + 4 + (iv * 16),
+				  GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		y = gaiaImport64 (shp->BufShp + 4 + (iv * 16) + 8,
+				  GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		if (hasM)
+		    m = gaiaImport64 (shp->BufShp + baseM + (iv * 8),
+				      GAIA_LITTLE_ENDIAN, shp->endian_arch);
+		else
+		    m = 0.0;
+		if (m < SHAPEFILE_NO_DATA)
+		    m = 0.0;
+		if (shp->EffectiveDims == GAIA_XY_Z)
+		    gaiaAddPointToGeomCollXYZ (geom, x, y, 0.0);
+		else if (shp->EffectiveDims == GAIA_XY_M)
+		    gaiaAddPointToGeomCollXYM (geom, x, y, m);
+		else if (shp->EffectiveDims == GAIA_XY_Z_M)
+		    gaiaAddPointToGeomCollXYZM (geom, x, y, 0.0, m);
+		else
+		    gaiaAddPointToGeomColl (geom, x, y);
+	    }
+      }
+/* setting up the current SHP ENTITY */
+  null_shape:
+    gaiaResetDbfEntity (shp->Dbf);
+    shp->Dbf->RowId = current_row;
+    shp->Dbf->Geometry = geom;
+/* fetching the DBF values */
+    pFld = shp->Dbf->First;
+    while (pFld)
+      {
+	  if (!parseDbfField (shp->BufDbf, shp->IconvObj, pFld))
+	      goto conversion_error;
+	  pFld = pFld->Next;
+      }
+    if (shp->LastError)
+	free (shp->LastError);
+    shp->LastError = NULL;
+    return 1;
+  eof:
+    if (shp->LastError)
+	free (shp->LastError);
+    shp->LastError = NULL;
+    return 0;
+  error:
+    if (shp->LastError)
+	free (shp->LastError);
+    sprintf (errMsg, "'%s' is corrupted / has invalid format", shp->Path);
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    return 0;
+  conversion_error:
+    if (shp->LastError)
+	free (shp->LastError);
+    sprintf (errMsg, "Invalid character sequence");
+    len = strlen (errMsg);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, errMsg);
+    return 0;
+}
+
+static void
+gaiaSaneClockwise (gaiaPolygonPtr polyg)
+{
+/*
+/ when exporting POLYGONs to SHAPEFILE, we must guarantee that:
+/ - all EXTERIOR RING must be clockwise
+/ - all INTERIOR RING must be anti-clockwise
+/
+/ this function checks for the above conditions,
+/ and if needed inverts the rings
+*/
+    int ib;
+    int iv;
+    int iv2;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaRingPtr new_ring;
+    gaiaRingPtr ring = polyg->Exterior;
+    gaiaClockwise (ring);
+    if (!(ring->Clockwise))
+      {
+	  /* exterior ring needs inversion */
+	  if (ring->DimensionModel == GAIA_XY_Z)
+	      new_ring = gaiaAllocRingXYZ (ring->Points);
+	  else if (ring->DimensionModel == GAIA_XY_M)
+	      new_ring = gaiaAllocRingXYM (ring->Points);
+	  else if (ring->DimensionModel == GAIA_XY_Z_M)
+	      new_ring = gaiaAllocRingXYZM (ring->Points);
+	  else
+	      new_ring = gaiaAllocRing (ring->Points);
+	  iv2 = 0;
+	  for (iv = ring->Points - 1; iv >= 0; iv--)
+	    {
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (new_ring->Coords, iv2, x, y, z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (new_ring->Coords, iv2, x, y, m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (new_ring->Coords, iv2, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ring->Coords, iv, &x, &y);
+		      gaiaSetPoint (new_ring->Coords, iv2, x, y);
+		  }
+		iv2++;
+	    }
+	  polyg->Exterior = new_ring;
+	  gaiaFreeRing (ring);
+      }
+    for (ib = 0; ib < polyg->NumInteriors; ib++)
+      {
+	  ring = polyg->Interiors + ib;
+	  gaiaClockwise (ring);
+	  if (ring->Clockwise)
+	    {
+		/* interior ring needs inversion */
+		if (ring->DimensionModel == GAIA_XY_Z)
+		    new_ring = gaiaAllocRingXYZ (ring->Points);
+		else if (ring->DimensionModel == GAIA_XY_M)
+		    new_ring = gaiaAllocRingXYM (ring->Points);
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		    new_ring = gaiaAllocRingXYZM (ring->Points);
+		else
+		    new_ring = gaiaAllocRing (ring->Points);
+		iv2 = 0;
+		for (iv = ring->Points - 1; iv >= 0; iv--)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+			    gaiaSetPointXYZ (new_ring->Coords, iv2, x, y, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+			    gaiaSetPointXYM (new_ring->Coords, iv2, x, y, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+			    gaiaSetPointXYZM (new_ring->Coords, iv2, x, y,
+					      z, m);
+			}
+		      else
+			{
+			    gaiaGetPoint (ring->Coords, iv, &x, &y);
+			    gaiaSetPoint (new_ring->Coords, iv2, x, y);
+			}
+		      iv2++;
+		  }
+		for (iv = 0; iv < ring->Points; iv++)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (new_ring->Coords, iv, &x, &y, &z);
+			    gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (new_ring->Coords, iv, &x, &y, &m);
+			    gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (new_ring->Coords, iv, &x, &y,
+					      &z, &m);
+			    gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaGetPoint (new_ring->Coords, iv, &x, &y);
+			    gaiaSetPoint (ring->Coords, iv, x, y);
+			}
+		  }
+		gaiaFreeRing (new_ring);
+	    }
+      }
+}
+
+GAIAGEO_DECLARE int
+gaiaWriteShpEntity (gaiaShapefilePtr shp, gaiaDbfListPtr entity)
+{
+/* trying to write an entity into shapefile */
+    char dummy[128];
+    char fmt[16];
+    int endian_arch = shp->endian_arch;
+    gaiaDbfFieldPtr fld;
+    int iv;
+    int tot_ln;
+    int tot_v;
+    int tot_pts;
+    int this_size;
+    int ix;
+    double x;
+    double y;
+    double z;
+    double m;
+    int hasM;
+    double minZ;
+    double maxZ;
+    double minM;
+    double maxM;
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    char buf[512];
+    char utf8buf[2048];
+/* writing the DBF record */
+    memset (shp->BufDbf, '\0', shp->DbfReclen);
+    *(shp->BufDbf) = ' ';	/* in DBF first byte of each row marks for validity or deletion */
+    fld = entity->First;
+    while (fld)
+      {
+	  /* transferring field values */
+	  switch (fld->Type)
+	    {
+	    case 'L':
+		if (!(fld->Value))
+		    *(shp->BufDbf + fld->Offset) = '?';
+		else if (fld->Value->Type != GAIA_INT_VALUE)
+		    *(shp->BufDbf + fld->Offset + 1) = '?';
+		else
+		  {
+		      if (fld->Value->IntValue == 0)
+			  *(shp->BufDbf + fld->Offset + 1) = 'N';
+		      else
+			  *(shp->BufDbf + fld->Offset + 1) = 'Y';
+		  }
+		break;
+	    case 'D':
+		memset (shp->BufDbf + fld->Offset + 1, '0', 8);
+		if (fld->Value)
+		  {
+		      if (fld->Value->Type == GAIA_TEXT_VALUE)
+			{
+			    if (strlen (fld->Value->TxtValue) == 8)
+				memcpy (shp->BufDbf + fld->Offset + 1,
+					fld->Value->TxtValue, 8);
+			}
+		  }
+		break;
+	    case 'C':
+		memset (shp->BufDbf + fld->Offset + 1, ' ', fld->Length);
+		if (fld->Value)
+		  {
+		      if (fld->Value->Type == GAIA_TEXT_VALUE)
+			{
+			    strcpy (buf, fld->Value->TxtValue);
+			    len = strlen (buf);
+			    utf8len = 2048;
+			    pBuf = buf;
+			    pUtf8buf = utf8buf;
+			    if (iconv
+				((iconv_t) (shp->IconvObj), &pBuf, &len,
+				 &pUtf8buf, &utf8len) == (size_t) (-1))
+				goto conversion_error;
+			    memcpy (buf, utf8buf, 2048 - utf8len);
+			    buf[2048 - utf8len] = '\0';
+			    if (strlen (buf) < fld->Length)
+				memcpy (shp->BufDbf + fld->Offset + 1, buf,
+					strlen (buf));
+			    else
+				memcpy (shp->BufDbf + fld->Offset + 1, buf,
+					fld->Length);
+			}
+		  }
+		break;
+	    case 'N':
+		memset (shp->BufDbf + fld->Offset + 1, '\0', fld->Length);
+		if (fld->Value)
+		  {
+		      if (fld->Value->Type == GAIA_INT_VALUE)
+			{
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+			    sprintf (dummy, "%I64d", fld->Value->IntValue);
+#else
+			    sprintf (dummy, "%lld", fld->Value->IntValue);
+#endif
+			    if (strlen (dummy) <= fld->Length)
+				memcpy (shp->BufDbf + fld->Offset + 1,
+					dummy, strlen (dummy));
+			}
+		      if (fld->Value->Type == GAIA_DOUBLE_VALUE)
+			{
+			    sprintf (fmt, "%%1.%df", fld->Decimals);
+			    sprintf (dummy, fmt, fld->Value->DblValue);
+			    if (strlen (dummy) <= fld->Length)
+				memcpy (shp->BufDbf + fld->Offset + 1,
+					dummy, strlen (dummy));
+			}
+		  }
+		break;
+	    };
+	  fld = fld->Next;
+      }
+    if (!(entity->Geometry))
+      {
+	  /* exporting a NULL Shape */
+	  gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+	  gaiaExport32 (shp->BufShp + 4, 2, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+	  fwrite (shp->BufShp, 1, 8, shp->flShx);
+	  (shp->ShxSize) += 4;	/* updating current SHX file position [in 16 bits words !!!] */
+	  gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+	  gaiaExport32 (shp->BufShp + 4, 2, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+	  gaiaExport32 (shp->BufShp + 8, GAIA_SHP_NULL, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = NULL */
+	  fwrite (shp->BufShp, 1, 12, shp->flShp);
+	  (shp->ShpSize) += 6;	/* updating current SHP file position [in 16 bits words !!!] */
+      }
+    else
+      {
+	  /* updates the shapefile main MBR-BBOX */
+	  gaiaMbrGeometry (entity->Geometry);
+	  if (entity->Geometry->MinX < shp->MinX)
+	      shp->MinX = entity->Geometry->MinX;
+	  if (entity->Geometry->MaxX > shp->MaxX)
+	      shp->MaxX = entity->Geometry->MaxX;
+	  if (entity->Geometry->MinY < shp->MinY)
+	      shp->MinY = entity->Geometry->MinY;
+	  if (entity->Geometry->MaxY > shp->MaxY)
+	      shp->MaxY = entity->Geometry->MaxY;
+	  if (shp->Shape == GAIA_SHP_POINT)
+	    {
+		/* this one is expected to be a POINT */
+		gaiaPointPtr pt = entity->Geometry->FirstPoint;
+		if (!pt)
+		  {
+		      strcpy (dummy,
+			      "a POINT is expected, but there is no POINT in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		/* inserting POINT entity into SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, 10, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;	/* updating current SHX file position [in 16 bits words !!!] */
+		/* inserting POINT into SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, 10, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POINT, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POINT */
+		gaiaExport64 (shp->BufShp + 12, pt->X, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports X coordinate */
+		gaiaExport64 (shp->BufShp + 20, pt->Y, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports Y coordinate */
+		fwrite (shp->BufShp, 1, 28, shp->flShp);
+		(shp->ShpSize) += 14;	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_POINTZ)
+	    {
+		/* this one is expected to be a POINT Z */
+		gaiaPointPtr pt = entity->Geometry->FirstPoint;
+		if (!pt)
+		  {
+		      strcpy (dummy,
+			      "a POINT is expected, but there is no POINT in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		/* inserting POINT Z entity into SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, 18, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;	/* updating current SHX file position [in 16 bits words !!!] */
+		/* inserting POINT into SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, 18, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POINTZ, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POINT Z */
+		gaiaExport64 (shp->BufShp + 12, pt->X, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports X coordinate */
+		gaiaExport64 (shp->BufShp + 20, pt->Y, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports Y coordinate */
+		gaiaExport64 (shp->BufShp + 28, pt->Z, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports Z coordinate */
+		gaiaExport64 (shp->BufShp + 36, pt->M, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports M coordinate */
+		fwrite (shp->BufShp, 1, 44, shp->flShp);
+		(shp->ShpSize) += 22;	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_POINTM)
+	    {
+		/* this one is expected to be a POINT M */
+		gaiaPointPtr pt = entity->Geometry->FirstPoint;
+		if (!pt)
+		  {
+		      strcpy (dummy,
+			      "a POINT is expected, but there is no POINT in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		/* inserting POINT entity into SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, 14, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;	/* updating current SHX file position [in 16 bits words !!!] */
+		/* inserting POINT into SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, 14, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POINTM, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POINT M */
+		gaiaExport64 (shp->BufShp + 12, pt->X, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports X coordinate */
+		gaiaExport64 (shp->BufShp + 20, pt->Y, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports Y coordinate */
+		gaiaExport64 (shp->BufShp + 28, pt->Y, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports M coordinate */
+		fwrite (shp->BufShp, 1, 36, shp->flShp);
+		(shp->ShpSize) += 18;	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_POLYLINE)
+	    {
+		/* this one is expected to be a LINESTRING / MULTILINESTRING */
+		gaiaLinestringPtr line;
+		tot_ln = 0;
+		tot_v = 0;
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* computes # lines and total # points */
+		      tot_v += line->Points;
+		      tot_ln++;
+		      line = line->Next;
+		  }
+		if (!tot_ln)
+		  {
+		      strcpy (dummy,
+			      "a LINESTRING is expected, but there is no LINESTRING in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		this_size = 22 + (2 * tot_ln) + (tot_v * 8);	/* size [in 16 bits words !!!] for this SHP entity */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting LINESTRING or MULTILINESTRING in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting LINESTRING or MULTILINESTRING in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POLYLINE, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POLYLINE */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_ln, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # lines in this polyline */
+		gaiaExport32 (shp->BufShp + 48, tot_v, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		tot_v = 0;	/* resets points counter */
+		ix = 52;	/* sets current buffer offset */
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports start point index for each line */
+		      gaiaExport32 (shp->BufShp + ix, tot_v,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      tot_v += line->Points;
+		      ix += 4;
+		      line = line->Next;
+		  }
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports points for each line */
+		      for (iv = 0; iv < line->Points; iv++)
+			{
+			    /* exports a POINT [x,y] */
+			    if (line->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (line->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (line->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (line->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (line->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, x,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			    gaiaExport64 (shp->BufShp + ix, y,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      line = line->Next;
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_POLYLINEZ)
+	    {
+		/* this one is expected to be a LINESTRING / MULTILINESTRING Z */
+		gaiaLinestringPtr line;
+		gaiaZRangeGeometry (entity->Geometry, &minZ, &maxZ);
+		gaiaMRangeGeometry (entity->Geometry, &minM, &maxM);
+		tot_ln = 0;
+		tot_v = 0;
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* computes # lines and total # points */
+		      tot_v += line->Points;
+		      tot_ln++;
+		      line = line->Next;
+		  }
+		if (!tot_ln)
+		  {
+		      strcpy (dummy,
+			      "a LINESTRING is expected, but there is no LINESTRING in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		hasM = 0;
+		if (shp->EffectiveDims == GAIA_XY_M
+		    || shp->EffectiveDims == GAIA_XY_Z_M)
+		    hasM = 1;
+		if (hasM)
+		    this_size = 38 + (2 * tot_ln) + (tot_v * 16);	/* size [in 16 bits words !!!] ZM */
+		else
+		    this_size = 30 + (2 * tot_ln) + (tot_v * 12);	/* size [in 16 bits words !!!] Z-only */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting LINESTRING or MULTILINESTRING in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting LINESTRING or MULTILINESTRING in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POLYLINEZ, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POLYLINE Z */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_ln, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # lines in this polyline */
+		gaiaExport32 (shp->BufShp + 48, tot_v, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		tot_v = 0;	/* resets points counter */
+		ix = 52;	/* sets current buffer offset */
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports start point index for each line */
+		      gaiaExport32 (shp->BufShp + ix, tot_v,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      tot_v += line->Points;
+		      ix += 4;
+		      line = line->Next;
+		  }
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports points for each line */
+		      for (iv = 0; iv < line->Points; iv++)
+			{
+			    /* exports a POINT [x,y] */
+			    if (line->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (line->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (line->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (line->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (line->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, x,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			    gaiaExport64 (shp->BufShp + ix, y,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      line = line->Next;
+		  }
+		/* exporting the Z-range [min/max] */
+		gaiaExport64 (shp->BufShp + ix, minZ, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		gaiaExport64 (shp->BufShp + ix, maxZ, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports Z-values for each line */
+		      for (iv = 0; iv < line->Points; iv++)
+			{
+			    /* exports Z-value */
+			    z = 0.0;
+			    if (line->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (line->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (line->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (line->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (line->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, z,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      line = line->Next;
+		  }
+		if (hasM)
+		  {
+		      /* exporting the M-range [min/max] */
+		      gaiaExport64 (shp->BufShp + ix, minM,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      gaiaExport64 (shp->BufShp + ix, maxM,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      line = entity->Geometry->FirstLinestring;
+		      while (line)
+			{
+			    /* exports M-values for each line */
+			    for (iv = 0; iv < line->Points; iv++)
+			      {
+				  /* exports M-value */
+				  m = 0.0;
+				  if (line->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (line->Coords, iv,
+							 &x, &y, &z);
+				    }
+				  else if (line->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (line->Coords, iv,
+							 &x, &y, &m);
+				    }
+				  else if (line->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (line->Coords, iv,
+							  &x, &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (line->Coords, iv, &x, &y);
+				    }
+				  gaiaExport64 (shp->BufShp + ix, m,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+			      }
+			    line = line->Next;
+			}
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_POLYLINEM)
+	    {
+		/* this one is expected to be a LINESTRING / MULTILINESTRING M */
+		gaiaLinestringPtr line;
+		gaiaMRangeGeometry (entity->Geometry, &minM, &maxM);
+		tot_ln = 0;
+		tot_v = 0;
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* computes # lines and total # points */
+		      tot_v += line->Points;
+		      tot_ln++;
+		      line = line->Next;
+		  }
+		if (!tot_ln)
+		  {
+		      strcpy (dummy,
+			      "a LINESTRING is expected, but there is no LINESTRING in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		this_size = 30 + (2 * tot_ln) + (tot_v * 12);	/* size [in 16 bits words !!!] for this SHP entity */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting LINESTRING or MULTILINESTRING in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting LINESTRING or MULTILINESTRING in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POLYLINEM, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POLYLINE M */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_ln, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # lines in this polyline */
+		gaiaExport32 (shp->BufShp + 48, tot_v, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		tot_v = 0;	/* resets points counter */
+		ix = 52;	/* sets current buffer offset */
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports start point index for each line */
+		      gaiaExport32 (shp->BufShp + ix, tot_v,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      tot_v += line->Points;
+		      ix += 4;
+		      line = line->Next;
+		  }
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports points for each line */
+		      for (iv = 0; iv < line->Points; iv++)
+			{
+			    /* exports a POINT [x,y] */
+			    if (line->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (line->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (line->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (line->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (line->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, x,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			    gaiaExport64 (shp->BufShp + ix, y,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      line = line->Next;
+		  }
+		/* exporting the M-range [min/max] */
+		gaiaExport64 (shp->BufShp + ix, minM, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		gaiaExport64 (shp->BufShp + ix, maxM, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		line = entity->Geometry->FirstLinestring;
+		while (line)
+		  {
+		      /* exports M-values for each line */
+		      for (iv = 0; iv < line->Points; iv++)
+			{
+			    /* exports M-value */
+			    m = 0.0;
+			    if (line->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (line->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (line->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (line->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (line->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, m,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      line = line->Next;
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_POLYGON)
+	    {
+		/* this one is expected to be a POLYGON or a MULTIPOLYGON */
+		gaiaPolygonPtr polyg;
+		gaiaRingPtr ring;
+		int ib;
+		tot_ln = 0;
+		tot_v = 0;
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* computes # rings and total # points */
+		      gaiaSaneClockwise (polyg);	/* we must assure that exterior ring is clockwise, and interior rings are anti-clockwise */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      tot_v += ring->Points;
+		      tot_ln++;
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    tot_v += ring->Points;
+			    tot_ln++;
+			}
+		      polyg = polyg->Next;
+		  }
+		if (!tot_ln)
+		  {
+		      strcpy (dummy,
+			      "a POLYGON is expected, but there is no POLYGON in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		this_size = 22 + (2 * tot_ln) + (tot_v * 8);	/* size [in 16 bits words !!!] for this SHP entity */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting POLYGON or MULTIPOLYGON in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting POLYGON or MULTIPOLYGON in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POLYGON, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POLYGON */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_ln, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # rings in this polygon */
+		gaiaExport32 (shp->BufShp + 48, tot_v, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		tot_v = 0;	/* resets points counter */
+		ix = 52;	/* sets current buffer offset */
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports start point index for each line */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      gaiaExport32 (shp->BufShp + ix, tot_v,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      tot_v += ring->Points;
+		      ix += 4;
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    gaiaExport32 (shp->BufShp + ix, tot_v,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    tot_v += ring->Points;
+			    ix += 4;
+			}
+		      polyg = polyg->Next;
+		  }
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports points for each ring */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      for (iv = 0; iv < ring->Points; iv++)
+			{
+			    /* exports a POINT [x,y] - exterior ring */
+			    if (ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (ring->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (ring->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (ring->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (ring->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, x,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			    gaiaExport64 (shp->BufShp + ix, y,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    for (iv = 0; iv < ring->Points; iv++)
+			      {
+				  /* exports a POINT [x,y] - interior ring */
+				  if (ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ring->Coords, iv,
+							 &x, &y, &z);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ring->Coords, iv,
+							 &x, &y, &m);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ring->Coords, iv,
+							  &x, &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ring->Coords, iv, &x, &y);
+				    }
+				  gaiaExport64 (shp->BufShp + ix, x,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+				  gaiaExport64 (shp->BufShp + ix, y,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+			      }
+			}
+		      polyg = polyg->Next;
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);
+	    }
+	  if (shp->Shape == GAIA_SHP_POLYGONZ)
+	    {
+		/* this one is expected to be a POLYGON or a MULTIPOLYGON Z */
+		gaiaPolygonPtr polyg;
+		gaiaRingPtr ring;
+		int ib;
+		gaiaZRangeGeometry (entity->Geometry, &minZ, &maxZ);
+		gaiaMRangeGeometry (entity->Geometry, &minM, &maxM);
+		tot_ln = 0;
+		tot_v = 0;
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* computes # rings and total # points */
+		      gaiaSaneClockwise (polyg);	/* we must assure that exterior ring is clockwise, and interior rings are anti-clockwise */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      tot_v += ring->Points;
+		      tot_ln++;
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    tot_v += ring->Points;
+			    tot_ln++;
+			}
+		      polyg = polyg->Next;
+		  }
+		if (!tot_ln)
+		  {
+		      strcpy (dummy,
+			      "a POLYGON is expected, but there is no POLYGON in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		hasM = 0;
+		if (shp->EffectiveDims == GAIA_XY_M
+		    || shp->EffectiveDims == GAIA_XY_Z_M)
+		    hasM = 1;
+		if (hasM)
+		    this_size = 38 + (2 * tot_ln) + (tot_v * 16);	/* size [in 16 bits words !!!] ZM */
+		else
+		    this_size = 30 + (2 * tot_ln) + (tot_v * 12);	/* size [in 16 bits words !!!] Z-only */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting POLYGON or MULTIPOLYGON in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting POLYGON or MULTIPOLYGON in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POLYGONZ, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POLYGON Z */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_ln, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # rings in this polygon */
+		gaiaExport32 (shp->BufShp + 48, tot_v, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		tot_v = 0;	/* resets points counter */
+		ix = 52;	/* sets current buffer offset */
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports start point index for each line */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      gaiaExport32 (shp->BufShp + ix, tot_v,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      tot_v += ring->Points;
+		      ix += 4;
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    gaiaExport32 (shp->BufShp + ix, tot_v,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    tot_v += ring->Points;
+			    ix += 4;
+			}
+		      polyg = polyg->Next;
+		  }
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports points for each ring */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      for (iv = 0; iv < ring->Points; iv++)
+			{
+			    /* exports a POINT [x,y] - exterior ring */
+			    if (ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (ring->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (ring->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (ring->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (ring->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, x,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			    gaiaExport64 (shp->BufShp + ix, y,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    for (iv = 0; iv < ring->Points; iv++)
+			      {
+				  /* exports a POINT [x,y] - interior ring */
+				  if (ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ring->Coords, iv,
+							 &x, &y, &z);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ring->Coords, iv,
+							 &x, &y, &m);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ring->Coords, iv,
+							  &x, &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ring->Coords, iv, &x, &y);
+				    }
+				  gaiaExport64 (shp->BufShp + ix, x,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+				  gaiaExport64 (shp->BufShp + ix, y,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+			      }
+			}
+		      polyg = polyg->Next;
+		  }
+		/* exporting the Z-range [min/max] */
+		gaiaExport64 (shp->BufShp + ix, minZ, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		gaiaExport64 (shp->BufShp + ix, maxZ, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports Z-values for each ring */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      for (iv = 0; iv < ring->Points; iv++)
+			{
+			    /* exports Z-values - exterior ring */
+			    z = 0.0;
+			    if (ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (ring->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (ring->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (ring->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (ring->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, z,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    for (iv = 0; iv < ring->Points; iv++)
+			      {
+				  /* exports Z-values - interior ring */
+				  z = 0.0;
+				  if (ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ring->Coords, iv,
+							 &x, &y, &z);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ring->Coords, iv,
+							 &x, &y, &m);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ring->Coords, iv,
+							  &x, &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ring->Coords, iv, &x, &y);
+				    }
+				  gaiaExport64 (shp->BufShp + ix, z,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+			      }
+			}
+		      polyg = polyg->Next;
+		  }
+		if (hasM)
+		  {
+		      /* exporting the M-range [min/max] */
+		      gaiaExport64 (shp->BufShp + ix, minM,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      gaiaExport64 (shp->BufShp + ix, maxM,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      polyg = entity->Geometry->FirstPolygon;
+		      while (polyg)
+			{
+			    /* exports M-values for each ring */
+			    ring = polyg->Exterior;	/* this one is the exterior ring */
+			    for (iv = 0; iv < ring->Points; iv++)
+			      {
+				  /* exports M-values - exterior ring */
+				  m = 0.0;
+				  if (ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ring->Coords, iv,
+							 &x, &y, &z);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ring->Coords, iv,
+							 &x, &y, &m);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ring->Coords, iv,
+							  &x, &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ring->Coords, iv, &x, &y);
+				    }
+				  gaiaExport64 (shp->BufShp + ix, m,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+			      }
+			    for (ib = 0; ib < polyg->NumInteriors; ib++)
+			      {
+				  /* that ones are the interior rings */
+				  ring = polyg->Interiors + ib;
+				  for (iv = 0; iv < ring->Points; iv++)
+				    {
+					/* exports M-values - interior ring */
+					m = 0.0;
+					if (ring->DimensionModel == GAIA_XY_Z)
+					  {
+					      gaiaGetPointXYZ (ring->Coords,
+							       iv, &x, &y, &z);
+					  }
+					else if (ring->DimensionModel ==
+						 GAIA_XY_M)
+					  {
+					      gaiaGetPointXYM (ring->Coords,
+							       iv, &x, &y, &m);
+					  }
+					else if (ring->DimensionModel ==
+						 GAIA_XY_Z_M)
+					  {
+					      gaiaGetPointXYZM (ring->Coords,
+								iv, &x, &y, &z,
+								&m);
+					  }
+					else
+					  {
+					      gaiaGetPoint (ring->Coords,
+							    iv, &x, &y);
+					  }
+					gaiaExport64 (shp->BufShp + ix, m,
+						      GAIA_LITTLE_ENDIAN,
+						      endian_arch);
+					ix += 8;
+				    }
+			      }
+			    polyg = polyg->Next;
+			}
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);
+	    }
+	  if (shp->Shape == GAIA_SHP_POLYGONM)
+	    {
+		/* this one is expected to be a POLYGON or a MULTIPOLYGON M */
+		gaiaPolygonPtr polyg;
+		gaiaRingPtr ring;
+		int ib;
+		gaiaMRangeGeometry (entity->Geometry, &minM, &maxM);
+		tot_ln = 0;
+		tot_v = 0;
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* computes # rings and total # points */
+		      gaiaSaneClockwise (polyg);	/* we must assure that exterior ring is clockwise, and interior rings are anti-clockwise */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      tot_v += ring->Points;
+		      tot_ln++;
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    tot_v += ring->Points;
+			    tot_ln++;
+			}
+		      polyg = polyg->Next;
+		  }
+		if (!tot_ln)
+		  {
+		      strcpy (dummy,
+			      "a POLYGON is expected, but there is no POLYGON in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		this_size = 30 + (2 * tot_ln) + (tot_v * 12);	/* size [in 16 bits words !!!] for this SHP entity */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting POLYGON or MULTIPOLYGON in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting POLYGON or MULTIPOLYGON in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_POLYGONM, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = POLYGON M */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_ln, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # rings in this polygon */
+		gaiaExport32 (shp->BufShp + 48, tot_v, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		tot_v = 0;	/* resets points counter */
+		ix = 52;	/* sets current buffer offset */
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports start point index for each line */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      gaiaExport32 (shp->BufShp + ix, tot_v,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      tot_v += ring->Points;
+		      ix += 4;
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    gaiaExport32 (shp->BufShp + ix, tot_v,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    tot_v += ring->Points;
+			    ix += 4;
+			}
+		      polyg = polyg->Next;
+		  }
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports points for each ring */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      for (iv = 0; iv < ring->Points; iv++)
+			{
+			    /* exports a POINT [x,y] - exterior ring */
+			    if (ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (ring->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (ring->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (ring->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (ring->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, x,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			    gaiaExport64 (shp->BufShp + ix, y,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    for (iv = 0; iv < ring->Points; iv++)
+			      {
+				  /* exports a POINT [x,y] - interior ring */
+				  if (ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ring->Coords, iv,
+							 &x, &y, &z);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ring->Coords, iv,
+							 &x, &y, &m);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ring->Coords, iv,
+							  &x, &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ring->Coords, iv, &x, &y);
+				    }
+				  gaiaExport64 (shp->BufShp + ix, x,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+				  gaiaExport64 (shp->BufShp + ix, y,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+			      }
+			}
+		      polyg = polyg->Next;
+		  }
+		/* exporting the M-range [min/max] */
+		gaiaExport64 (shp->BufShp + ix, minM, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		gaiaExport64 (shp->BufShp + ix, maxM, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		polyg = entity->Geometry->FirstPolygon;
+		while (polyg)
+		  {
+		      /* exports M-values for each ring */
+		      ring = polyg->Exterior;	/* this one is the exterior ring */
+		      for (iv = 0; iv < ring->Points; iv++)
+			{
+			    /* exports M-values - exterior ring */
+			    m = 0.0;
+			    if (ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (ring->Coords, iv, &x, &y,
+						   &z);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (ring->Coords, iv, &x, &y,
+						   &m);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (ring->Coords, iv, &x,
+						    &y, &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (ring->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (shp->BufShp + ix, m,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			}
+		      for (ib = 0; ib < polyg->NumInteriors; ib++)
+			{
+			    /* that ones are the interior rings */
+			    ring = polyg->Interiors + ib;
+			    for (iv = 0; iv < ring->Points; iv++)
+			      {
+				  /* exports M-values - interior ring */
+				  m = 0.0;
+				  if (ring->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ring->Coords, iv,
+							 &x, &y, &z);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ring->Coords, iv,
+							 &x, &y, &m);
+				    }
+				  else if (ring->DimensionModel == GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ring->Coords, iv,
+							  &x, &y, &z, &m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ring->Coords, iv, &x, &y);
+				    }
+				  gaiaExport64 (shp->BufShp + ix, m,
+						GAIA_LITTLE_ENDIAN,
+						endian_arch);
+				  ix += 8;
+			      }
+			}
+		      polyg = polyg->Next;
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);
+	    }
+	  if (shp->Shape == GAIA_SHP_MULTIPOINT)
+	    {
+		/* this one is expected to be a MULTIPOINT */
+		gaiaPointPtr pt;
+		tot_pts = 0;
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* computes # points */
+		      tot_pts++;
+		      pt = pt->Next;
+		  }
+		if (!tot_pts)
+		  {
+		      strcpy (dummy,
+			      "a MULTIPOINT is expected, but there is no POINT/MULTIPOINT in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		this_size = 20 + (tot_pts * 8);	/* size [in 16 bits words !!!] for this SHP entity */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting MULTIPOINT in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting MULTIPOINT in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_MULTIPOINT, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = MULTIPOINT */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_pts, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		ix = 48;	/* sets current buffer offset */
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* exports each point */
+		      gaiaExport64 (shp->BufShp + ix, pt->X,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      gaiaExport64 (shp->BufShp + ix, pt->Y,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      pt = pt->Next;
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_MULTIPOINTZ)
+	    {
+		/* this one is expected to be a MULTIPOINT Z */
+		gaiaPointPtr pt;
+		gaiaZRangeGeometry (entity->Geometry, &minZ, &maxZ);
+		gaiaMRangeGeometry (entity->Geometry, &minM, &maxM);
+		tot_pts = 0;
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* computes # points */
+		      tot_pts++;
+		      pt = pt->Next;
+		  }
+		if (!tot_pts)
+		  {
+		      strcpy (dummy,
+			      "a MULTIPOINT is expected, but there is no POINT/MULTIPOINT in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		hasM = 0;
+		if (shp->EffectiveDims == GAIA_XY_M
+		    || shp->EffectiveDims == GAIA_XY_Z_M)
+		    hasM = 1;
+		if (hasM)
+		    this_size = 36 + (tot_pts * 16);	/* size [in 16 bits words !!!] ZM */
+		else
+		    this_size = 28 + (tot_pts * 12);	/* size [in 16 bits words !!!] Z-only */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting MULTIPOINT in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting MULTIPOINT in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_MULTIPOINTZ, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = MULTIPOINT Z */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_pts, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		ix = 48;	/* sets current buffer offset */
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* exports each point */
+		      gaiaExport64 (shp->BufShp + ix, pt->X,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      gaiaExport64 (shp->BufShp + ix, pt->Y,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      pt = pt->Next;
+		  }
+		/* exporting the Z-range [min/max] */
+		gaiaExport64 (shp->BufShp + ix, minZ, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		gaiaExport64 (shp->BufShp + ix, maxZ, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* exports Z-values */
+		      gaiaExport64 (shp->BufShp + ix, pt->Z,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      pt = pt->Next;
+		  }
+		if (hasM)
+		  {
+		      /* exporting the M-range [min/max] */
+		      gaiaExport64 (shp->BufShp + ix, minM,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      gaiaExport64 (shp->BufShp + ix, maxM,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      pt = entity->Geometry->FirstPoint;
+		      while (pt)
+			{
+			    /* exports M-values */
+			    gaiaExport64 (shp->BufShp + ix, pt->M,
+					  GAIA_LITTLE_ENDIAN, endian_arch);
+			    ix += 8;
+			    pt = pt->Next;
+			}
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+	  if (shp->Shape == GAIA_SHP_MULTIPOINTM)
+	    {
+		/* this one is expected to be a MULTIPOINT M */
+		gaiaPointPtr pt;
+		gaiaMRangeGeometry (entity->Geometry, &minM, &maxM);
+		tot_pts = 0;
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* computes # points */
+		      tot_pts++;
+		      pt = pt->Next;
+		  }
+		if (!tot_pts)
+		  {
+		      strcpy (dummy,
+			      "a MULTIPOINT is expected, but there is no POINT/MULTIPOINT in geometry");
+		      if (shp->LastError)
+			  free (shp->LastError);
+		      len = strlen (dummy);
+		      shp->LastError = malloc (len + 1);
+		      strcpy (shp->LastError, dummy);
+		      return 0;
+		  }
+		this_size = 28 + (tot_pts * 12);	/* size [in 16 bits words !!!] for this SHP entity */
+		if ((this_size * 2) + 1024 > shp->ShpBfsz)
+		  {
+		      /* current buffer is too small; we need to allocate a bigger one */
+		      free (shp->BufShp);
+		      shp->ShpBfsz = (this_size * 2) + 1024;
+		      shp->BufShp = malloc (shp->ShpBfsz);
+		  }
+		/* inserting MULTIPOINT in SHX file */
+		gaiaExport32 (shp->BufShp, shp->ShpSize, GAIA_BIG_ENDIAN, endian_arch);	/* exports current SHP file position */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entitiy size [in 16 bits words !!!] */
+		fwrite (shp->BufShp, 1, 8, shp->flShx);
+		(shp->ShxSize) += 4;
+		/* inserting MULTIPOINT in SHP file */
+		gaiaExport32 (shp->BufShp, shp->DbfRecno + 1, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity ID */
+		gaiaExport32 (shp->BufShp + 4, this_size, GAIA_BIG_ENDIAN, endian_arch);	/* exports entity size [in 16 bits words !!!] */
+		gaiaExport32 (shp->BufShp + 8, GAIA_SHP_MULTIPOINTM, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports geometry type = MULTIPOINT M */
+		gaiaExport64 (shp->BufShp + 12, entity->Geometry->MinX, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the MBR for this geometry */
+		gaiaExport64 (shp->BufShp + 20, entity->Geometry->MinY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 28, entity->Geometry->MaxX,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport64 (shp->BufShp + 36, entity->Geometry->MaxY,
+			      GAIA_LITTLE_ENDIAN, endian_arch);
+		gaiaExport32 (shp->BufShp + 44, tot_pts, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports total # points */
+		ix = 48;	/* sets current buffer offset */
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* exports each point */
+		      gaiaExport64 (shp->BufShp + ix, pt->X,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      gaiaExport64 (shp->BufShp + ix, pt->Y,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      pt = pt->Next;
+		  }
+		/* exporting the M-range [min/max] */
+		gaiaExport64 (shp->BufShp + ix, minM, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		gaiaExport64 (shp->BufShp + ix, maxM, GAIA_LITTLE_ENDIAN,
+			      endian_arch);
+		ix += 8;
+		pt = entity->Geometry->FirstPoint;
+		while (pt)
+		  {
+		      /* exports M-values */
+		      gaiaExport64 (shp->BufShp + ix, pt->M,
+				    GAIA_LITTLE_ENDIAN, endian_arch);
+		      ix += 8;
+		      pt = pt->Next;
+		  }
+		fwrite (shp->BufShp, 1, ix, shp->flShp);
+		(shp->ShpSize) += (ix / 2);	/* updating current SHP file position [in 16 bits words !!!] */
+	    }
+      }
+/* inserting entity in DBF file */
+    fwrite (shp->BufDbf, 1, shp->DbfReclen, shp->flDbf);
+    (shp->DbfRecno)++;
+    return 1;
+  conversion_error:
+    if (shp->LastError)
+	free (shp->LastError);
+    sprintf (dummy, "Invalid character sequence");
+    len = strlen (dummy);
+    shp->LastError = malloc (len + 1);
+    strcpy (shp->LastError, dummy);
+    return 0;
+}
+
+GAIAGEO_DECLARE void
+gaiaFlushShpHeaders (gaiaShapefilePtr shp)
+{
+/* updates the various file headers */
+    FILE *fl_shp = shp->flShp;
+    FILE *fl_shx = shp->flShx;
+    FILE *fl_dbf = shp->flDbf;
+    int shp_size = shp->ShpSize;
+    int shx_size = shp->ShxSize;
+    int dbf_size = shp->DbfSize;
+    int dbf_reclen = shp->DbfReclen;
+    int dbf_recno = shp->DbfRecno;
+    int endian_arch = shp->endian_arch;
+    double minx = shp->MinX;
+    double miny = shp->MinY;
+    double maxx = shp->MaxX;
+    double maxy = shp->MaxY;
+    unsigned char *buf_shp = shp->BufShp;
+/* writing the SHP file header */
+    fseek (fl_shp, 0, SEEK_SET);	/* repositioning at SHP file start */
+    gaiaExport32 (buf_shp, 9994, GAIA_BIG_ENDIAN, endian_arch);	/* SHP magic number */
+    gaiaExport32 (buf_shp + 4, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 8, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 12, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 16, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 20, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 24, shp_size, GAIA_BIG_ENDIAN, endian_arch);	/* SHP file size - measured in 16 bits words !!! */
+    gaiaExport32 (buf_shp + 28, 1000, GAIA_LITTLE_ENDIAN, endian_arch);	/* version */
+    gaiaExport32 (buf_shp + 32, shp->Shape, GAIA_LITTLE_ENDIAN, endian_arch);	/* ESRI shape */
+    gaiaExport64 (buf_shp + 36, minx, GAIA_LITTLE_ENDIAN, endian_arch);	/* the MBR/BBOX for the whole shapefile */
+    gaiaExport64 (buf_shp + 44, miny, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 52, maxx, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 60, maxy, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 68, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 76, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 84, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 92, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    fwrite (buf_shp, 1, 100, fl_shp);
+/* writing the SHX file header */
+    fseek (fl_shx, 0, SEEK_SET);	/* repositioning at SHX file start */
+    gaiaExport32 (buf_shp, 9994, GAIA_BIG_ENDIAN, endian_arch);	/* SHP magic number */
+    gaiaExport32 (buf_shp + 4, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 8, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 12, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 16, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 20, 0, GAIA_BIG_ENDIAN, endian_arch);
+    gaiaExport32 (buf_shp + 24, shx_size, GAIA_BIG_ENDIAN, endian_arch);	/* SHXfile size - measured in 16 bits words !!! */
+    gaiaExport32 (buf_shp + 28, 1000, GAIA_LITTLE_ENDIAN, endian_arch);	/* version */
+    gaiaExport32 (buf_shp + 32, shp->Shape, GAIA_LITTLE_ENDIAN, endian_arch);	/* ESRI shape */
+    gaiaExport64 (buf_shp + 36, minx, GAIA_LITTLE_ENDIAN, endian_arch);	/* the MBR for the whole shapefile */
+    gaiaExport64 (buf_shp + 44, miny, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 52, maxx, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 60, maxy, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 68, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 76, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 84, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    gaiaExport64 (buf_shp + 92, 0.0, GAIA_LITTLE_ENDIAN, endian_arch);
+    fwrite (buf_shp, 1, 100, fl_shx);
+/* writing the DBF file header */
+    *buf_shp = 0x1a;		/* DBF - this is theEOF marker */
+    fwrite (buf_shp, 1, 1, fl_dbf);
+    fseek (fl_dbf, 0, SEEK_SET);	/* repositioning at DBF file start */
+    memset (buf_shp, '\0', 32);
+    *buf_shp = 0x03;		/* DBF magic number */
+    *(buf_shp + 1) = 1;		/* this is supposed to be the last update date [Year, Month, Day], but we ignore it at all */
+    *(buf_shp + 2) = 1;
+    *(buf_shp + 3) = 1;
+    gaiaExport32 (buf_shp + 4, dbf_recno, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # records in this DBF */
+    gaiaExport16 (buf_shp + 8, (short) dbf_size, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the file header size */
+    gaiaExport16 (buf_shp + 10, (short) dbf_reclen, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the record length */
+    fwrite (buf_shp, 1, 32, fl_dbf);
+}
+
+GAIAGEO_DECLARE void
+gaiaShpAnalyze (gaiaShapefilePtr shp)
+{
+/* analyzing the SHP content, in order to detect if there are LINESTRINGS or MULTILINESTRINGS 
+/ the same check is needed in order to detect if there are POLYGONS or MULTIPOLYGONS 
+ */
+    unsigned char buf[512];
+    int rd;
+    int skpos;
+    int offset;
+    int off_shp;
+    int sz;
+    int shape;
+    int points;
+    int n;
+    int n1;
+    int base;
+    int start;
+    int end;
+    int iv;
+    int ind;
+    double x;
+    double y;
+    int polygons;
+    int ZM_size;
+    int multi = 0;
+    int hasM = 0;
+    int current_row = 0;
+    gaiaRingPtr ring = NULL;
+    while (1)
+      {
+	  /* positioning and reading the SHX file */
+	  offset = 100 + (current_row * 8);	/* 100 bytes for the header + current row displacement; each SHX row = 8 bytes */
+	  skpos = fseek (shp->flShx, offset, SEEK_SET);
+	  if (skpos != 0)
+	      goto exit;
+	  rd = fread (buf, sizeof (unsigned char), 8, shp->flShx);
+	  if (rd != 8)
+	      goto exit;
+	  off_shp = gaiaImport32 (buf, GAIA_BIG_ENDIAN, shp->endian_arch);
+	  /* positioning and reading corresponding SHP entity - geometry */
+	  offset = off_shp * 2;
+	  skpos = fseek (shp->flShp, offset, SEEK_SET);
+	  if (skpos != 0)
+	      goto exit;
+	  rd = fread (buf, sizeof (unsigned char), 12, shp->flShp);
+	  if (rd != 12)
+	      goto exit;
+	  sz = gaiaImport32 (buf + 4, GAIA_BIG_ENDIAN, shp->endian_arch);
+	  shape = gaiaImport32 (buf + 8, GAIA_LITTLE_ENDIAN, shp->endian_arch);
+	  if ((sz * 2) > shp->ShpBfsz)
+	    {
+		/* current buffer is too small; we need to allocate a bigger buffer */
+		free (shp->BufShp);
+		shp->ShpBfsz = sz * 2;
+		shp->BufShp = malloc (sizeof (unsigned char) * shp->ShpBfsz);
+	    }
+	  if (shape == GAIA_SHP_POLYLINE || shape == GAIA_SHP_POLYLINEZ
+	      || shape == GAIA_SHP_POLYLINEM)
+	    {
+		/* shape polyline */
+		rd = fread (shp->BufShp, sizeof (unsigned char), 32,
+			    shp->flShp);
+		if (rd != 32)
+		    goto exit;
+		rd = fread (shp->BufShp, sizeof (unsigned char),
+			    (sz * 2) - 36, shp->flShp);
+		if (rd != (sz * 2) - 36)
+		    goto exit;
+		n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN,
+				  shp->endian_arch);
+		n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+				   shp->endian_arch);
+		if (n > 1)
+		    multi++;
+		if (shape == GAIA_SHP_POLYLINEZ)
+		  {
+		      ZM_size = 38 + (2 * n) + (n1 * 16);	/* size [in 16 bits words !!!] ZM */
+		      if (sz == ZM_size)
+			  hasM = 1;
+		  }
+	    }
+	  if (shape == GAIA_SHP_POLYGON || shape == GAIA_SHP_POLYGONZ
+	      || shape == GAIA_SHP_POLYGONM)
+	    {
+		/* shape polygon */
+		polygons = 0;
+		rd = fread (shp->BufShp, sizeof (unsigned char), 32,
+			    shp->flShp);
+		if (rd != 32)
+		    goto exit;
+		rd = fread (shp->BufShp, sizeof (unsigned char),
+			    (sz * 2) - 36, shp->flShp);
+		if (rd != (sz * 2) - 36)
+		    goto exit;
+		n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN,
+				  shp->endian_arch);
+		n1 = gaiaImport32 (shp->BufShp + 4, GAIA_LITTLE_ENDIAN,
+				   shp->endian_arch);
+		base = 8 + (n * 4);
+		start = 0;
+		for (ind = 0; ind < n; ind++)
+		  {
+		      if (ind < (n - 1))
+			  end =
+			      gaiaImport32 (shp->BufShp + 8 +
+					    ((ind + 1) * 4),
+					    GAIA_LITTLE_ENDIAN,
+					    shp->endian_arch);
+		      else
+			  end = n1;
+		      points = end - start;
+		      ring = gaiaAllocRing (points);
+		      points = 0;
+		      for (iv = start; iv < end; iv++)
+			{
+			    x = gaiaImport64 (shp->BufShp + base +
+					      (iv * 16), GAIA_LITTLE_ENDIAN,
+					      shp->endian_arch);
+			    y = gaiaImport64 (shp->BufShp + base +
+					      (iv * 16) + 8,
+					      GAIA_LITTLE_ENDIAN,
+					      shp->endian_arch);
+			    gaiaSetPoint (ring->Coords, points, x, y);
+			    start++;
+			    points++;
+			}
+		      if (!polygons)
+			{
+			    /* this one is the first POLYGON */
+			    polygons = 1;
+			}
+		      else
+			{
+			    gaiaClockwise (ring);
+			    if (ring->Clockwise)
+			      {
+				  /* this one is a different POLYGON exterior ring - we need to allocate e new POLYGON */
+				  polygons++;
+			      }
+			}
+		      gaiaFreeRing (ring);
+		      ring = NULL;
+		  }
+		if (polygons > 1)
+		    multi++;
+		if (shape == GAIA_SHP_POLYGONZ)
+		  {
+		      ZM_size = 38 + (2 * n) + (n1 * 16);	/* size [in 16 bits words !!!] ZM */
+		      if (sz == ZM_size)
+			  hasM = 1;
+		  }
+	    }
+	  if (shape == GAIA_SHP_MULTIPOINTZ)
+	    {
+		/* shape multipoint Z */
+		rd = fread (shp->BufShp, sizeof (unsigned char), 32,
+			    shp->flShp);
+		if (rd != 32)
+		    goto exit;
+		rd = fread (shp->BufShp, sizeof (unsigned char),
+			    (sz * 2) - 36, shp->flShp);
+		if (rd != (sz * 2) - 36)
+		    goto exit;
+		n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN,
+				  shp->endian_arch);
+		ZM_size = 38 + (n * 16);	/* size [in 16 bits words !!!] ZM */
+		if (sz == ZM_size)
+		    hasM = 1;
+	    }
+	  current_row++;
+      }
+  exit:
+    if (ring)
+	gaiaFreeRing (ring);
+    if (shp->LastError)
+	free (shp->LastError);
+    shp->LastError = NULL;
+/* setting the EffectiveType, as determined by this analysis */
+    if (shp->Shape == GAIA_SHP_POLYLINE || shp->Shape == GAIA_SHP_POLYLINEZ
+	|| shp->Shape == GAIA_SHP_POLYLINEM)
+      {
+	  /* SHAPE polyline */
+	  if (multi)
+	      shp->EffectiveType = GAIA_MULTILINESTRING;
+	  else
+	      shp->EffectiveType = GAIA_LINESTRING;
+      }
+    if (shp->Shape == GAIA_SHP_POLYGON || shp->Shape == GAIA_SHP_POLYGONZ
+	|| shp->Shape == GAIA_SHP_POLYGONM)
+      {
+	  /* SHAPE polygon */
+	  if (multi)
+	      shp->EffectiveType = GAIA_MULTIPOLYGON;
+	  else
+	      shp->EffectiveType = GAIA_POLYGON;
+      }
+    if (shp->Shape == GAIA_SHP_POLYLINEZ || shp->Shape == GAIA_SHP_POLYGONZ
+	|| shp->Shape == GAIA_SHP_MULTIPOINTZ)
+      {
+	  if (hasM)
+	      shp->EffectiveDims = GAIA_XY_Z_M;
+	  else
+	      shp->EffectiveDims = GAIA_XY_Z;
+      }
+}
+
+GAIAGEO_DECLARE gaiaDbfPtr
+gaiaAllocDbf ()
+{
+/* allocates and initializes the DBF object */
+    gaiaDbfPtr dbf = malloc (sizeof (gaiaDbf));
+    dbf->endian_arch = 1;
+    dbf->Path = NULL;
+    dbf->flDbf = NULL;
+    dbf->Dbf = NULL;
+    dbf->BufDbf = NULL;
+    dbf->DbfHdsz = 0;
+    dbf->DbfReclen = 0;
+    dbf->DbfSize = 0;
+    dbf->DbfRecno = 0;
+    dbf->Valid = 0;
+    dbf->IconvObj = NULL;
+    dbf->LastError = NULL;
+    return dbf;
+}
+
+GAIAGEO_DECLARE void
+gaiaFreeDbf (gaiaDbfPtr dbf)
+{
+/* frees all memory allocations related to the DBF object */
+    if (dbf->Path)
+	free (dbf->Path);
+    if (dbf->flDbf)
+	fclose (dbf->flDbf);
+    if (dbf->Dbf)
+	gaiaFreeDbfList (dbf->Dbf);
+    if (dbf->BufDbf)
+	free (dbf->BufDbf);
+    if (dbf->IconvObj)
+	iconv_close ((iconv_t) dbf->IconvObj);
+    if (dbf->LastError)
+	free (dbf->LastError);
+    free (dbf);
+}
+
+GAIAGEO_DECLARE void
+gaiaOpenDbfRead (gaiaDbfPtr dbf, const char *path, const char *charFrom,
+		 const char *charTo)
+{
+/* trying to open the DBF and initial checkings */
+    FILE *fl_dbf = NULL;
+    int rd;
+    unsigned char bf[1024];
+    int dbf_size;
+    int dbf_reclen = 0;
+    int off_dbf;
+    int ind;
+    char field_name[2048];
+    char *sys_err;
+    char errMsg[1024];
+    iconv_t iconv_ret;
+    char utf8buf[2048];
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    int endian_arch = gaiaEndianArch ();
+    gaiaDbfListPtr dbf_list = NULL;
+    if (charFrom && charTo)
+      {
+	  iconv_ret = iconv_open (charTo, charFrom);
+	  if (iconv_ret == (iconv_t) (-1))
+	    {
+		sprintf (errMsg,
+			 "conversion from '%s' to '%s' not available\n",
+			 charFrom, charTo);
+		goto unsupported_conversion;
+	    }
+	  dbf->IconvObj = iconv_ret;
+      }
+    else
+      {
+	  sprintf (errMsg, "a NULL charset-name was passed\n");
+	  goto unsupported_conversion;
+      }
+    if (dbf->flDbf != NULL)
+      {
+	  sprintf (errMsg, "attempting to reopen an already opened DBF\n");
+	  goto unsupported_conversion;
+      }
+    fl_dbf = fopen (path, "rb");
+    if (!fl_dbf)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for reading: %s", path,
+		   sys_err);
+	  goto no_file;
+      }
+/* reading DBF file header */
+    rd = fread (bf, sizeof (unsigned char), 32, fl_dbf);
+    if (rd != 32)
+	goto error;
+    if (*bf != 0x03)		/* checks the DBF magic number */
+	goto error;
+    dbf_size = gaiaImport16 (bf + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+    dbf_reclen = gaiaImport16 (bf + 10, GAIA_LITTLE_ENDIAN, endian_arch);
+    dbf_size--;
+    off_dbf = 0;
+    dbf_list = gaiaAllocDbfList ();
+    for (ind = 32; ind < dbf_size; ind += 32)
+      {
+	  /* fetches DBF fields definitions */
+	  rd = fread (bf, sizeof (unsigned char), 32, fl_dbf);
+	  if (rd != 32)
+	      goto error;
+	  memcpy (field_name, bf, 11);
+	  field_name[11] = '\0';
+	  len = strlen ((char *) field_name);
+	  utf8len = 2048;
+	  pBuf = (char *) field_name;
+	  pUtf8buf = utf8buf;
+	  if (iconv
+	      ((iconv_t) (dbf->IconvObj), &pBuf, &len, &pUtf8buf,
+	       &utf8len) == (size_t) (-1))
+	      goto conversion_error;
+	  memcpy (field_name, utf8buf, 2048 - utf8len);
+	  field_name[2048 - utf8len] = '\0';
+	  gaiaAddDbfField (dbf_list, field_name, *(bf + 11), off_dbf,
+			   *(bf + 16), *(bf + 17));
+	  off_dbf += *(bf + 16);
+      }
+    if (!gaiaIsValidDbfList (dbf_list))
+      {
+	  /* invalid DBF */
+	  goto illegal_dbf;
+      }
+    len = strlen (path);
+    dbf->Path = malloc (len + 1);
+    strcpy (dbf->Path, path);
+    dbf->flDbf = fl_dbf;
+    dbf->Dbf = dbf_list;
+/* allocating DBF buffer */
+    dbf->BufDbf = malloc (sizeof (unsigned char) * dbf_reclen);
+    dbf->DbfHdsz = dbf_size + 1;
+    dbf->DbfReclen = dbf_reclen;
+    dbf->Valid = 1;
+    dbf->endian_arch = endian_arch;
+    return;
+  unsupported_conversion:
+/* illegal charset */
+    if (dbf->LastError)
+	free (dbf->LastError);
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    return;
+  no_file:
+/* the DBF file can't be accessed */
+    if (dbf->LastError)
+	free (dbf->LastError);
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+  error:
+/* the DBF is invalid or corrupted */
+    if (dbf->LastError)
+	free (dbf->LastError);
+    sprintf (errMsg, "'%s' is corrupted / has invalid format", path);
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    gaiaFreeDbfList (dbf_list);
+    fclose (fl_dbf);
+    return;
+  illegal_dbf:
+/* the DBF-file contains unsupported data types */
+    if (dbf->LastError)
+	free (dbf->LastError);
+    sprintf (errMsg, "'%s' contains unsupported data types", path);
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    gaiaFreeDbfList (dbf_list);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+  conversion_error:
+/* libiconv error */
+    if (dbf->LastError)
+	free (dbf->LastError);
+    sprintf (errMsg, "'%s' field name: invalid character sequence", path);
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    gaiaFreeDbfList (dbf_list);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+}
+
+GAIAGEO_DECLARE void
+gaiaOpenDbfWrite (gaiaDbfPtr dbf, const char *path, const char *charFrom,
+		  const char *charTo)
+{
+/* trying to create the DBF file */
+    FILE *fl_dbf = NULL;
+    unsigned char bf[1024];
+    unsigned char *dbf_buf = NULL;
+    gaiaDbfFieldPtr fld;
+    char *sys_err;
+    char errMsg[1024];
+    short dbf_reclen = 0;
+    unsigned short dbf_size = 0;
+    iconv_t iconv_ret;
+    char buf[2048];
+    char utf8buf[2048];
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    int defaultId = 1;
+    if (charFrom && charTo)
+      {
+	  iconv_ret = iconv_open (charTo, charFrom);
+	  if (iconv_ret == (iconv_t) (-1))
+	    {
+		sprintf (errMsg, "conversion from '%s' to '%s' not available\n",
+			 charFrom, charTo);
+		goto unsupported_conversion;
+	    }
+	  dbf->IconvObj = iconv_ret;
+      }
+    else
+      {
+	  sprintf (errMsg, "a NULL charset-name was passed\n");
+	  goto unsupported_conversion;
+      }
+    if (dbf->flDbf != NULL)
+      {
+	  sprintf (errMsg, "attempting to reopen an already opened DBF file\n");
+	  goto unsupported_conversion;
+      }
+/* trying to open the DBF file */
+    fl_dbf = fopen (path, "wb");
+    if (!fl_dbf)
+      {
+	  sys_err = strerror (errno);
+	  sprintf (errMsg, "unable to open '%s' for writing: %s", path,
+		   sys_err);
+	  goto no_file;
+      }
+/* allocating DBF buffer */
+    dbf_reclen = 1;		/* an extra byte is needed because in DBF rows first byte is a marker for deletion */
+    fld = dbf->Dbf->First;
+    while (fld)
+      {
+	  /* computing the DBF record length */
+	  dbf_reclen += fld->Length;
+	  fld = fld->Next;
+      }
+    dbf_buf = malloc (dbf_reclen);
+/* writing the DBF file header */
+    memset (bf, '\0', 32);
+    fwrite (bf, 1, 32, fl_dbf);
+    dbf_size = 32;		/* note: DBF counts sizes in bytes */
+    fld = dbf->Dbf->First;
+    while (fld)
+      {
+	  /* exporting DBF Fields specifications */
+	  memset (bf, 0, 32);
+	  strcpy (buf, fld->Name);
+	  len = strlen (buf);
+	  utf8len = 2048;
+	  pBuf = buf;
+	  pUtf8buf = utf8buf;
+	  if (iconv
+	      ((iconv_t) (dbf->IconvObj), &pBuf, &len, &pUtf8buf,
+	       &utf8len) == (size_t) (-1))
+	      sprintf (buf, "FLD#%d", defaultId++);
+	  else
+	    {
+		memcpy (buf, utf8buf, 2048 - utf8len);
+		buf[2048 - utf8len] = '\0';
+		if (strlen (buf) > 10)
+		    sprintf (buf, "FLD#%d", defaultId++);
+	    }
+	  memcpy (bf, buf, strlen (buf));
+	  *(bf + 11) = fld->Type;
+	  *(bf + 16) = fld->Length;
+	  *(bf + 17) = fld->Decimals;
+	  fwrite (bf, 1, 32, fl_dbf);
+	  dbf_size += 32;
+	  fld = fld->Next;
+      }
+    fwrite ("\r", 1, 1, fl_dbf);	/* this one is a special DBF delimiter that closes file header */
+    dbf_size++;
+    dbf->Valid = 1;
+    dbf->flDbf = fl_dbf;
+    dbf->BufDbf = dbf_buf;
+    dbf->DbfHdsz = dbf_size + 1;
+    dbf->DbfReclen = dbf_reclen;
+    dbf->DbfSize = dbf_size;
+    dbf->DbfRecno = 0;
+    return;
+  unsupported_conversion:
+/* illegal charset */
+    if (dbf->LastError)
+	free (dbf->LastError);
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    return;
+  no_file:
+/* the DBF file can't be created/opened */
+    if (dbf->LastError)
+	free (dbf->LastError);
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    if (dbf_buf)
+	free (dbf_buf);
+    if (fl_dbf)
+	fclose (fl_dbf);
+    return;
+}
+
+GAIAGEO_DECLARE int
+gaiaWriteDbfEntity (gaiaDbfPtr dbf, gaiaDbfListPtr entity)
+{
+/* trying to write an entity into some DBF file */
+    char dummy[128];
+    char fmt[16];
+    gaiaDbfFieldPtr fld;
+#if !defined(__MINGW32__) && defined(_WIN32)
+    const char *pBuf;
+#else /* not WIN32 */
+    char *pBuf;
+#endif
+    size_t len;
+    size_t utf8len;
+    char *pUtf8buf;
+    char buf[512];
+    char utf8buf[2048];
+/* writing the DBF record */
+    memset (dbf->BufDbf, '\0', dbf->DbfReclen);
+    *(dbf->BufDbf) = ' ';	/* in DBF first byte of each row marks for validity or deletion */
+    fld = entity->First;
+    while (fld)
+      {
+	  /* transferring field values */
+	  switch (fld->Type)
+	    {
+	    case 'L':
+		if (!(fld->Value))
+		    *(dbf->BufDbf + fld->Offset) = '?';
+		else if (fld->Value->Type != GAIA_INT_VALUE)
+		    *(dbf->BufDbf + fld->Offset + 1) = '?';
+		else
+		  {
+		      if (fld->Value->IntValue == 0)
+			  *(dbf->BufDbf + fld->Offset + 1) = 'N';
+		      else
+			  *(dbf->BufDbf + fld->Offset + 1) = 'Y';
+		  }
+		break;
+	    case 'D':
+		memset (dbf->BufDbf + fld->Offset + 1, '0', 8);
+		if (fld->Value)
+		  {
+		      if (fld->Value->Type == GAIA_TEXT_VALUE)
+			{
+			    if (strlen (fld->Value->TxtValue) == 8)
+				memcpy (dbf->BufDbf + fld->Offset + 1,
+					fld->Value->TxtValue, 8);
+			}
+		  }
+		break;
+	    case 'C':
+		memset (dbf->BufDbf + fld->Offset + 1, ' ', fld->Length);
+		if (fld->Value)
+		  {
+		      if (fld->Value->Type == GAIA_TEXT_VALUE)
+			{
+			    strcpy (buf, fld->Value->TxtValue);
+			    len = strlen (buf);
+			    utf8len = 2048;
+			    pBuf = buf;
+			    pUtf8buf = utf8buf;
+			    if (iconv
+				((iconv_t) (dbf->IconvObj), &pBuf, &len,
+				 &pUtf8buf, &utf8len) == (size_t) (-1))
+				goto conversion_error;
+			    memcpy (buf, utf8buf, 2048 - utf8len);
+			    buf[2048 - utf8len] = '\0';
+			    if (strlen (buf) < fld->Length)
+				memcpy (dbf->BufDbf + fld->Offset + 1, buf,
+					strlen (buf));
+			    else
+				memcpy (dbf->BufDbf + fld->Offset + 1, buf,
+					fld->Length);
+			}
+		  }
+		break;
+	    case 'N':
+		memset (dbf->BufDbf + fld->Offset + 1, '\0', fld->Length);
+		if (fld->Value)
+		  {
+		      if (fld->Value->Type == GAIA_INT_VALUE)
+			{
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+			    sprintf (dummy, "%I64d", fld->Value->IntValue);
+#else
+			    sprintf (dummy, "%lld", fld->Value->IntValue);
+#endif
+			    if (strlen (dummy) <= fld->Length)
+				memcpy (dbf->BufDbf + fld->Offset + 1,
+					dummy, strlen (dummy));
+			}
+		      if (fld->Value->Type == GAIA_DOUBLE_VALUE)
+			{
+			    sprintf (fmt, "%%1.%df", fld->Decimals);
+			    sprintf (dummy, fmt, fld->Value->DblValue);
+			    if (strlen (dummy) <= fld->Length)
+				memcpy (dbf->BufDbf + fld->Offset + 1,
+					dummy, strlen (dummy));
+			}
+		  }
+		break;
+	    };
+	  fld = fld->Next;
+      }
+/* inserting entity in DBF file */
+    fwrite (dbf->BufDbf, 1, dbf->DbfReclen, dbf->flDbf);
+    (dbf->DbfRecno)++;
+    return 1;
+  conversion_error:
+    if (dbf->LastError)
+	free (dbf->LastError);
+    sprintf (dummy, "Invalid character sequence");
+    len = strlen (dummy);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, dummy);
+    return 0;
+}
+
+GAIAGEO_DECLARE void
+gaiaFlushDbfHeader (gaiaDbfPtr dbf)
+{
+/* updates the DBF file header */
+    FILE *fl_dbf = dbf->flDbf;
+    int dbf_size = dbf->DbfSize;
+    int dbf_reclen = dbf->DbfReclen;
+    int dbf_recno = dbf->DbfRecno;
+    int endian_arch = dbf->endian_arch;
+    unsigned char bf[64];
+/* writing the DBF file header */
+    *bf = 0x1a;			/* DBF - this is theEOF marker */
+    fwrite (bf, 1, 1, fl_dbf);
+    fseek (fl_dbf, 0, SEEK_SET);	/* repositioning at DBF file start */
+    memset (bf, '\0', 32);
+    *bf = 0x03;			/* DBF magic number */
+    *(bf + 1) = 1;		/* this is supposed to be the last update date [Year, Month, Day], but we ignore it at all */
+    *(bf + 2) = 1;
+    *(bf + 3) = 1;
+    gaiaExport32 (bf + 4, dbf_recno, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports # records in this DBF */
+    gaiaExport16 (bf + 8, (short) dbf_size, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the file header size */
+    gaiaExport16 (bf + 10, (short) dbf_reclen, GAIA_LITTLE_ENDIAN, endian_arch);	/* exports the record length */
+    fwrite (bf, 1, 32, fl_dbf);
+}
+
+GAIAGEO_DECLARE int
+gaiaReadDbfEntity (gaiaDbfPtr dbf, int current_row, int *deleted)
+{
+/* trying to read an entity from DBF */
+    int rd;
+    int skpos;
+    int offset;
+    int len;
+    char errMsg[1024];
+    gaiaDbfFieldPtr pFld;
+/* positioning and reading the DBF file */
+    offset = dbf->DbfHdsz + (current_row * dbf->DbfReclen);
+    skpos = fseek (dbf->flDbf, offset, SEEK_SET);
+    if (skpos != 0)
+	goto eof;
+    rd = fread (dbf->BufDbf, sizeof (unsigned char), dbf->DbfReclen,
+		dbf->flDbf);
+    if (rd != dbf->DbfReclen)
+	goto eof;
+/* setting up the current DBF ENTITY */
+    gaiaResetDbfEntity (dbf->Dbf);
+    dbf->Dbf->RowId = current_row;
+    if (*(dbf->BufDbf) == '*')
+      {
+	  /* deleted row */
+	  *deleted = 1;
+	  if (dbf->LastError)
+	      free (dbf->LastError);
+	  dbf->LastError = NULL;
+	  return 1;
+      }
+/* fetching the DBF values */
+    pFld = dbf->Dbf->First;
+    while (pFld)
+      {
+	  if (!parseDbfField (dbf->BufDbf, dbf->IconvObj, pFld))
+	      goto conversion_error;
+	  pFld = pFld->Next;
+      }
+    if (dbf->LastError)
+	free (dbf->LastError);
+    dbf->LastError = NULL;
+    *deleted = 0;
+    return 1;
+  eof:
+    if (dbf->LastError)
+	free (dbf->LastError);
+    dbf->LastError = NULL;
+    return 0;
+  conversion_error:
+    if (dbf->LastError)
+	free (dbf->LastError);
+    sprintf (errMsg, "Invalid character sequence");
+    len = strlen (errMsg);
+    dbf->LastError = malloc (len + 1);
+    strcpy (dbf->LastError, errMsg);
+    return 0;
+}
+
+#endif /* ICONV enabled/disabled */
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_transform.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_transform.c
new file mode 100644
index 0000000..c2837b5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_transform.c
@@ -0,0 +1,1397 @@
+/*
+
+ gg_transform.c -- Gaia PROJ.4 wrapping
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifndef OMIT_PROJ		/* including PROJ.4 */
+#include <proj_api.h>
+#endif
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+GAIAGEO_DECLARE void
+gaiaShiftCoords (gaiaGeomCollPtr geom, double shift_x, double shift_y)
+{
+/* returns a geometry that is the old old geometry with required shifting applied to coordinates */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaPointPtr point;
+    gaiaPolygonPtr polyg;
+    gaiaLinestringPtr line;
+    gaiaRingPtr ring;
+    if (!geom)
+	return;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* shifting POINTs */
+	  point->X += shift_x;
+	  point->Y += shift_y;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* shifting LINESTRINGs */
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		x += shift_x;
+		y += shift_y;
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (line->Coords, iv, x, y, m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (line->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (line->Coords, iv, x, y);
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* shifting POLYGONs */
+	  ring = polyg->Exterior;
+	  for (iv = 0; iv < ring->Points; iv++)
+	    {
+		/* shifting the EXTERIOR RING */
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ring->Coords, iv, &x, &y);
+		  }
+		x += shift_x;
+		y += shift_y;
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (ring->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		/* shifting the INTERIOR RINGs */
+		ring = polyg->Interiors + ib;
+		for (iv = 0; iv < ring->Points; iv++)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (ring->Coords, iv, &x, &y);
+			}
+		      x += shift_x;
+		      y += shift_y;
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+    gaiaMbrGeometry (geom);
+}
+
+GAIAGEO_DECLARE void
+gaiaScaleCoords (gaiaGeomCollPtr geom, double scale_x, double scale_y)
+{
+/* returns a geometry that is the old old geometry with required scaling applied to coordinates */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaPointPtr point;
+    gaiaPolygonPtr polyg;
+    gaiaLinestringPtr line;
+    gaiaRingPtr ring;
+    if (!geom)
+	return;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* scaling POINTs */
+	  point->X *= scale_x;
+	  point->Y *= scale_y;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* scaling LINESTRINGs */
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		x *= scale_x;
+		y *= scale_y;
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (line->Coords, iv, x, y, m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (line->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (line->Coords, iv, x, y);
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* scaling POLYGONs */
+	  ring = polyg->Exterior;
+	  for (iv = 0; iv < ring->Points; iv++)
+	    {
+		/* scaling the EXTERIOR RING */
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ring->Coords, iv, &x, &y);
+		  }
+		x *= scale_x;
+		y *= scale_y;
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (ring->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		/* scaling the INTERIOR RINGs */
+		ring = polyg->Interiors + ib;
+		for (iv = 0; iv < ring->Points; iv++)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (ring->Coords, iv, &x, &y);
+			}
+		      x *= scale_x;
+		      y *= scale_y;
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+    gaiaMbrGeometry (geom);
+}
+
+GAIAGEO_DECLARE void
+gaiaRotateCoords (gaiaGeomCollPtr geom, double angle)
+{
+/* returns a geometry that is the old old geometry with required rotation applied to coordinates */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    double nx;
+    double ny;
+    double rad = angle * 0.0174532925199432958;
+    double cosine = cos (rad);
+    double sine = sin (rad);
+    gaiaPointPtr point;
+    gaiaPolygonPtr polyg;
+    gaiaLinestringPtr line;
+    gaiaRingPtr ring;
+    if (!geom)
+	return;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* shifting POINTs */
+	  x = point->X;
+	  y = point->Y;
+	  point->X = (x * cosine) + (y * sine);
+	  point->Y = (y * cosine) - (x * sine);
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* rotating LINESTRINGs */
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		nx = (x * cosine) + (y * sine);
+		ny = (y * cosine) - (x * sine);
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (line->Coords, iv, nx, ny, z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (line->Coords, iv, nx, ny, m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (line->Coords, iv, nx, ny, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (line->Coords, iv, nx, ny);
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* rotating POLYGONs */
+	  ring = polyg->Exterior;
+	  for (iv = 0; iv < ring->Points; iv++)
+	    {
+		/* rotating the EXTERIOR RING */
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ring->Coords, iv, &x, &y);
+		  }
+		nx = (x * cosine) + (y * sine);
+		ny = (y * cosine) - (x * sine);
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (ring->Coords, iv, nx, ny, z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (ring->Coords, iv, nx, ny, m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (ring->Coords, iv, nx, ny, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (ring->Coords, iv, nx, ny);
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		/* rotating the INTERIOR RINGs */
+		ring = polyg->Interiors + ib;
+		for (iv = 0; iv < ring->Points; iv++)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (ring->Coords, iv, &x, &y);
+			}
+		      nx = (x * cosine) + (y * sine);
+		      ny = (y * cosine) - (x * sine);
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, iv, nx, ny, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, iv, nx, ny, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, iv, nx, ny, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, iv, nx, ny);
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+    gaiaMbrGeometry (geom);
+}
+
+GAIAGEO_DECLARE void
+gaiaReflectCoords (gaiaGeomCollPtr geom, int x_axis, int y_axis)
+{
+/* returns a geometry that is the old old geometry with required reflection applied to coordinates */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z = 0.0;
+    double m = 0.0;
+    gaiaPointPtr point;
+    gaiaPolygonPtr polyg;
+    gaiaLinestringPtr line;
+    gaiaRingPtr ring;
+    if (!geom)
+	return;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* reflecting POINTs */
+	  if (x_axis)
+	      point->X *= -1.0;
+	  if (y_axis)
+	      point->Y *= -1.0;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* reflecting LINESTRINGs */
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		if (x_axis)
+		    x *= -1.0;
+		if (y_axis)
+		    y *= -1.0;
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (line->Coords, iv, x, y, m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (line->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (line->Coords, iv, x, y);
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* reflecting POLYGONs */
+	  ring = polyg->Exterior;
+	  for (iv = 0; iv < ring->Points; iv++)
+	    {
+		/* reflecting the EXTERIOR RING */
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ring->Coords, iv, &x, &y);
+		  }
+		if (x_axis)
+		    x *= -1.0;
+		if (y_axis)
+		    y *= -1.0;
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (ring->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		/* reflecting the INTERIOR RINGs */
+		ring = polyg->Interiors + ib;
+		for (iv = 0; iv < ring->Points; iv++)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (ring->Coords, iv, &x, &y);
+			}
+		      if (x_axis)
+			  x *= -1.0;
+		      if (y_axis)
+			  y *= -1.0;
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+    gaiaMbrGeometry (geom);
+}
+
+GAIAGEO_DECLARE void
+gaiaSwapCoords (gaiaGeomCollPtr geom)
+{
+/* returns a geometry that is the old old geometry with swapped x- and y-coordinates */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    double sv;
+    gaiaPointPtr point;
+    gaiaPolygonPtr polyg;
+    gaiaLinestringPtr line;
+    gaiaRingPtr ring;
+    if (!geom)
+	return;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* swapping POINTs */
+	  sv = point->X;
+	  point->X = point->Y;
+	  point->Y = sv;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* swapping LINESTRINGs */
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		sv = x;
+		x = y;
+		y = sv;
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (line->Coords, iv, x, y, m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (line->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (line->Coords, iv, x, y);
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* swapping POLYGONs */
+	  ring = polyg->Exterior;
+	  for (iv = 0; iv < ring->Points; iv++)
+	    {
+		/* shifting the EXTERIOR RING */
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ring->Coords, iv, &x, &y);
+		  }
+		sv = x;
+		x = y;
+		y = sv;
+		if (ring->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+		  }
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaSetPoint (ring->Coords, iv, x, y);
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		/* swapping the INTERIOR RINGs */
+		ring = polyg->Interiors + ib;
+		for (iv = 0; iv < ring->Points; iv++)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (ring->Coords, iv, &x, &y);
+			}
+		      sv = x;
+		      x = y;
+		      y = sv;
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (ring->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+    gaiaMbrGeometry (geom);
+}
+
+#ifndef OMIT_PROJ		/* including PROJ.4 */
+
+static int
+gaiaIsLongLat (char *str)
+{
+/* checks if we have to do with ANGLES if +proj=longlat is defined */
+    if (strstr (str, "+proj=longlat") != NULL)
+	return 1;
+    return 0;
+}
+
+GAIAGEO_DECLARE double
+gaiaRadsToDegs (double rads)
+{
+/* converts an ANGLE from radians to degrees */
+    return rads * RAD_TO_DEG;
+}
+
+GAIAGEO_DECLARE double
+gaiaDegsToRads (double degs)
+{
+/* converts an ANGLE from degrees to radians */
+    return degs * DEG_TO_RAD;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaTransform (gaiaGeomCollPtr org, char *proj_from, char *proj_to)
+{
+/* creates a new GEOMETRY reprojecting coordinates from the original one */
+    int ib;
+    int cnt;
+    int i;
+    double *xx;
+    double *yy;
+    double *zz;
+    double *mm = NULL;
+    double x;
+    double y;
+    double z = 0.0;
+    double m = 0.0;
+    int error = 0;
+    int from_angle;
+    int to_angle;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr dst_ln;
+    gaiaPolygonPtr pg;
+    gaiaPolygonPtr dst_pg;
+    gaiaRingPtr rng;
+    gaiaRingPtr dst_rng;
+    projPJ from_cs = pj_init_plus (proj_from);
+    projPJ to_cs = pj_init_plus (proj_to);
+    gaiaGeomCollPtr dst;
+    if (org->DimensionModel == GAIA_XY_Z)
+	dst = gaiaAllocGeomCollXYZ ();
+    else if (org->DimensionModel == GAIA_XY_M)
+	dst = gaiaAllocGeomCollXYM ();
+    else if (org->DimensionModel == GAIA_XY_Z_M)
+	dst = gaiaAllocGeomCollXYZM ();
+    else
+	dst = gaiaAllocGeomColl ();
+/* setting up projection parameters */
+    from_angle = gaiaIsLongLat (proj_from);
+    to_angle = gaiaIsLongLat (proj_to);
+    if (!from_cs)
+	return dst;
+    if (!to_cs)
+	return dst;
+    cnt = 0;
+    pt = org->FirstPoint;
+    while (pt)
+      {
+	  /* counting POINTs */
+	  cnt++;
+	  pt = pt->Next;
+      }
+    if (cnt)
+      {
+	  /* reprojecting POINTs */
+	  xx = malloc (sizeof (double) * cnt);
+	  yy = malloc (sizeof (double) * cnt);
+	  zz = malloc (sizeof (double) * cnt);
+	  if (org->DimensionModel == GAIA_XY_M
+	      || org->DimensionModel == GAIA_XY_Z_M)
+	      mm = malloc (sizeof (double) * cnt);
+	  i = 0;
+	  pt = org->FirstPoint;
+	  while (pt)
+	    {
+		/* inserting points to be converted in temporary arrays */
+		if (from_angle)
+		  {
+		      xx[i] = gaiaDegsToRads (pt->X);
+		      yy[i] = gaiaDegsToRads (pt->Y);
+		  }
+		else
+		  {
+		      xx[i] = pt->X;
+		      yy[i] = pt->Y;
+		  }
+		if (org->DimensionModel == GAIA_XY_Z
+		    || org->DimensionModel == GAIA_XY_Z_M)
+		    zz[i] = pt->Z;
+		else
+		    zz[i] = 0.0;
+		if (org->DimensionModel == GAIA_XY_M
+		    || org->DimensionModel == GAIA_XY_Z_M)
+		    mm[i] = pt->M;
+		i++;
+		pt = pt->Next;
+	    }
+	  /* applying reprojection        */
+	  if (pj_transform (from_cs, to_cs, cnt, 0, xx, yy, zz) == 0)
+	    {
+		/* inserting the reprojected POINTs in the new GEOMETRY */
+		for (i = 0; i < cnt; i++)
+		  {
+		      if (to_angle)
+			{
+			    x = gaiaRadsToDegs (xx[i]);
+			    y = gaiaRadsToDegs (yy[i]);
+			}
+		      else
+			{
+			    x = xx[i];
+			    y = yy[i];
+			}
+		      if (org->DimensionModel == GAIA_XY_Z
+			  || org->DimensionModel == GAIA_XY_Z_M)
+			  z = zz[i];
+		      else
+			  z = 0.0;
+		      if (org->DimensionModel == GAIA_XY_M
+			  || org->DimensionModel == GAIA_XY_Z_M)
+			  m = mm[i];
+		      else
+			  m = 0.0;
+		      if (dst->DimensionModel == GAIA_XY_Z)
+			  gaiaAddPointToGeomCollXYZ (dst, x, y, z);
+		      else if (dst->DimensionModel == GAIA_XY_M)
+			  gaiaAddPointToGeomCollXYM (dst, x, y, m);
+		      else if (dst->DimensionModel == GAIA_XY_Z_M)
+			  gaiaAddPointToGeomCollXYZM (dst, x, y, z, m);
+		      else
+			  gaiaAddPointToGeomColl (dst, x, y);
+		  }
+	    }
+	  else
+	      error = 1;
+	  free (xx);
+	  free (yy);
+	  free (zz);
+	  if (org->DimensionModel == GAIA_XY_M
+	      || org->DimensionModel == GAIA_XY_Z_M)
+	      free (mm);
+      }
+    if (error)
+	goto stop;
+    ln = org->FirstLinestring;
+    while (ln)
+      {
+	  /* reprojecting LINESTRINGs */
+	  cnt = ln->Points;
+	  xx = malloc (sizeof (double) * cnt);
+	  yy = malloc (sizeof (double) * cnt);
+	  zz = malloc (sizeof (double) * cnt);
+	  if (ln->DimensionModel == GAIA_XY_M
+	      || ln->DimensionModel == GAIA_XY_Z_M)
+	      mm = malloc (sizeof (double) * cnt);
+	  for (i = 0; i < cnt; i++)
+	    {
+		/* inserting points to be converted in temporary arrays */
+		if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, i, &x, &y, &z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, i, &x, &y, &m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, i, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, i, &x, &y);
+		  }
+		if (from_angle)
+		  {
+		      xx[i] = gaiaDegsToRads (x);
+		      yy[i] = gaiaDegsToRads (y);
+		  }
+		else
+		  {
+		      xx[i] = x;
+		      yy[i] = y;
+		  }
+		if (ln->DimensionModel == GAIA_XY_Z
+		    || ln->DimensionModel == GAIA_XY_Z_M)
+		    zz[i] = z;
+		else
+		    zz[i] = 0.0;
+		if (ln->DimensionModel == GAIA_XY_M
+		    || ln->DimensionModel == GAIA_XY_Z_M)
+		    mm[i] = m;
+	    }
+	  /* applying reprojection        */
+	  if (pj_transform (from_cs, to_cs, cnt, 0, xx, yy, zz) == 0)
+	    {
+		/* inserting the reprojected LINESTRING in the new GEOMETRY */
+		dst_ln = gaiaAddLinestringToGeomColl (dst, cnt);
+		for (i = 0; i < cnt; i++)
+		  {
+		      /* setting LINESTRING points */
+		      if (to_angle)
+			{
+			    x = gaiaRadsToDegs (xx[i]);
+			    y = gaiaRadsToDegs (yy[i]);
+			}
+		      else
+			{
+			    x = xx[i];
+			    y = yy[i];
+			}
+		      if (ln->DimensionModel == GAIA_XY_Z
+			  || ln->DimensionModel == GAIA_XY_Z_M)
+			  z = zz[i];
+		      else
+			  z = 0.0;
+		      if (ln->DimensionModel == GAIA_XY_M
+			  || ln->DimensionModel == GAIA_XY_Z_M)
+			  m = mm[i];
+		      else
+			  m = 0.0;
+		      if (dst_ln->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (dst_ln->Coords, i, x, y, z);
+			}
+		      else if (dst_ln->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (dst_ln->Coords, i, x, y, m);
+			}
+		      else if (dst_ln->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (dst_ln->Coords, i, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (dst_ln->Coords, i, x, y);
+			}
+		  }
+	    }
+	  else
+	      error = 1;
+	  free (xx);
+	  free (yy);
+	  free (zz);
+	  if (ln->DimensionModel == GAIA_XY_M
+	      || ln->DimensionModel == GAIA_XY_Z_M)
+	      free (mm);
+	  if (error)
+	      goto stop;
+	  ln = ln->Next;
+      }
+    pg = org->FirstPolygon;
+    while (pg)
+      {
+	  /* reprojecting POLYGONs */
+	  rng = pg->Exterior;
+	  cnt = rng->Points;
+	  dst_pg = gaiaAddPolygonToGeomColl (dst, cnt, pg->NumInteriors);
+	  xx = malloc (sizeof (double) * cnt);
+	  yy = malloc (sizeof (double) * cnt);
+	  zz = malloc (sizeof (double) * cnt);
+	  if (rng->DimensionModel == GAIA_XY_M
+	      || rng->DimensionModel == GAIA_XY_Z_M)
+	      mm = malloc (sizeof (double) * cnt);
+	  for (i = 0; i < cnt; i++)
+	    {
+		/* inserting points to be converted in temporary arrays [EXTERIOR RING] */
+		if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, i, &x, &y, &z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, i, &x, &y, &m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, i, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, i, &x, &y);
+		  }
+		if (from_angle)
+		  {
+		      xx[i] = gaiaDegsToRads (x);
+		      yy[i] = gaiaDegsToRads (y);
+		  }
+		else
+		  {
+		      xx[i] = x;
+		      yy[i] = y;
+		  }
+		if (rng->DimensionModel == GAIA_XY_Z
+		    || rng->DimensionModel == GAIA_XY_Z_M)
+		    zz[i] = z;
+		else
+		    zz[i] = 0.0;
+		if (rng->DimensionModel == GAIA_XY_M
+		    || rng->DimensionModel == GAIA_XY_Z_M)
+		    mm[i] = m;
+	    }
+	  /* applying reprojection        */
+	  if (pj_transform (from_cs, to_cs, cnt, 0, xx, yy, zz) == 0)
+	    {
+		/* inserting the reprojected POLYGON in the new GEOMETRY */
+		dst_rng = dst_pg->Exterior;
+		for (i = 0; i < cnt; i++)
+		  {
+		      /* setting EXTERIOR RING points */
+		      if (to_angle)
+			{
+			    x = gaiaRadsToDegs (xx[i]);
+			    y = gaiaRadsToDegs (yy[i]);
+			}
+		      else
+			{
+			    x = xx[i];
+			    y = yy[i];
+			}
+		      if (rng->DimensionModel == GAIA_XY_Z
+			  || rng->DimensionModel == GAIA_XY_Z_M)
+			  z = zz[i];
+		      else
+			  z = 0.0;
+		      if (rng->DimensionModel == GAIA_XY_M
+			  || rng->DimensionModel == GAIA_XY_Z_M)
+			  m = mm[i];
+		      else
+			  m = 0.0;
+		      if (dst_rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaSetPointXYZ (dst_rng->Coords, i, x, y, z);
+			}
+		      else if (dst_rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaSetPointXYM (dst_rng->Coords, i, x, y, m);
+			}
+		      else if (dst_rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaSetPointXYZM (dst_rng->Coords, i, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaSetPoint (dst_rng->Coords, i, x, y);
+			}
+		  }
+	    }
+	  else
+	      error = 1;
+	  free (xx);
+	  free (yy);
+	  free (zz);
+	  if (rng->DimensionModel == GAIA_XY_M
+	      || rng->DimensionModel == GAIA_XY_Z_M)
+	      free (mm);
+	  if (error)
+	      goto stop;
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		/* processing INTERIOR RINGS */
+		rng = pg->Interiors + ib;
+		cnt = rng->Points;
+		xx = malloc (sizeof (double) * cnt);
+		yy = malloc (sizeof (double) * cnt);
+		zz = malloc (sizeof (double) * cnt);
+		if (rng->DimensionModel == GAIA_XY_M
+		    || rng->DimensionModel == GAIA_XY_Z_M)
+		    mm = malloc (sizeof (double) * cnt);
+		for (i = 0; i < cnt; i++)
+		  {
+		      /* inserting points to be converted in temporary arrays [INTERIOR RING] */
+		      if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, i, &x, &y, &z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, i, &x, &y, &m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, i, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, i, &x, &y);
+			}
+		      if (from_angle)
+			{
+			    xx[i] = gaiaDegsToRads (x);
+			    yy[i] = gaiaDegsToRads (y);
+			}
+		      else
+			{
+			    xx[i] = x;
+			    yy[i] = y;
+			}
+		      if (rng->DimensionModel == GAIA_XY_Z
+			  || rng->DimensionModel == GAIA_XY_Z_M)
+			  zz[i] = z;
+		      else
+			  zz[i] = 0.0;
+		      if (rng->DimensionModel == GAIA_XY_M
+			  || rng->DimensionModel == GAIA_XY_Z_M)
+			  mm[i] = m;
+		  }
+		/* applying reprojection        */
+		if (pj_transform (from_cs, to_cs, cnt, 0, xx, yy, zz) == 0)
+		  {
+		      /* inserting the reprojected POLYGON in the new GEOMETRY */
+		      dst_rng = gaiaAddInteriorRing (dst_pg, ib, cnt);
+		      for (i = 0; i < cnt; i++)
+			{
+			    /* setting INTERIOR RING points */
+			    if (to_angle)
+			      {
+				  x = gaiaRadsToDegs (xx[i]);
+				  y = gaiaRadsToDegs (yy[i]);
+			      }
+			    else
+			      {
+				  x = xx[i];
+				  y = yy[i];
+			      }
+			    if (rng->DimensionModel == GAIA_XY_Z
+				|| rng->DimensionModel == GAIA_XY_Z_M)
+				z = zz[i];
+			    else
+				z = 0.0;
+			    if (rng->DimensionModel == GAIA_XY_M
+				|| rng->DimensionModel == GAIA_XY_Z_M)
+				m = mm[i];
+			    else
+				m = 0.0;
+			    if (dst_rng->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaSetPointXYZ (dst_rng->Coords, i, x, y, z);
+			      }
+			    else if (dst_rng->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaSetPointXYM (dst_rng->Coords, i, x, y, m);
+			      }
+			    else if (dst_rng->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaSetPointXYZM (dst_rng->Coords, i, x, y, z,
+						    m);
+			      }
+			    else
+			      {
+				  gaiaSetPoint (dst_rng->Coords, i, x, y);
+			      }
+			}
+		  }
+		else
+		    error = 1;
+		free (xx);
+		free (yy);
+		free (zz);
+		if (rng->DimensionModel == GAIA_XY_M
+		    || rng->DimensionModel == GAIA_XY_Z_M)
+		    free (mm);
+		if (error)
+		    goto stop;
+	    }
+	  pg = pg->Next;
+      }
+/* destroying the PROJ4 params */
+  stop:
+    pj_free (from_cs);
+    pj_free (to_cs);
+    if (error)
+      {
+	  /* some error occurred */
+	  gaiaPointPtr pP;
+	  gaiaPointPtr pPn;
+	  gaiaLinestringPtr pL;
+	  gaiaLinestringPtr pLn;
+	  gaiaPolygonPtr pA;
+	  gaiaPolygonPtr pAn;
+	  pP = dst->FirstPoint;
+	  while (pP != NULL)
+	    {
+		pPn = pP->Next;
+		gaiaFreePoint (pP);
+		pP = pPn;
+	    }
+	  pL = dst->FirstLinestring;
+	  while (pL != NULL)
+	    {
+		pLn = pL->Next;
+		gaiaFreeLinestring (pL);
+		pL = pLn;
+	    }
+	  pA = dst->FirstPolygon;
+	  while (pA != NULL)
+	    {
+		pAn = pA->Next;
+		gaiaFreePolygon (pA);
+		pA = pAn;
+	    }
+	  dst->FirstPoint = NULL;
+	  dst->LastPoint = NULL;
+	  dst->FirstLinestring = NULL;
+	  dst->LastLinestring = NULL;
+	  dst->FirstPolygon = NULL;
+	  dst->LastPolygon = NULL;
+      }
+    if (dst)
+      {
+	  gaiaMbrGeometry (dst);
+	  dst->DeclaredType = org->DeclaredType;
+      }
+    return dst;
+}
+
+#endif /* end including PROJ.4 */
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_vanuatu.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_vanuatu.c
new file mode 100644
index 0000000..209d1f8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_vanuatu.c
@@ -0,0 +1,5860 @@
+/*
+
+ gg_vanuatu.c -- WKT parser/lexer 
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+The Vanuatu Team - University of Toronto - Supervisor:
+Greg Wilson	gvwilson at cs.toronto.ca
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <assert.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty  _isatty
+#define fileno  _fileno
+#endif
+
+int vanuatu_parse_error;
+
+static int
+vanuatuCheckValidity (gaiaGeomCollPtr geom)
+{
+/* checks if this one is a degenerated geometry */
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    int ib;
+    int entities = 0;
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  /* checking points */
+	  entities++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* checking linestrings */
+	  if (ln->Points < 2)
+	      return 0;
+	  entities++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  /* checking polygons */
+	  rng = pg->Exterior;
+	  if (rng->Points < 4)
+	      return 0;
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		if (rng->Points < 4)
+		    return 0;
+	    }
+	  entities++;
+	  pg = pg->Next;
+      }
+    if (!entities)
+	return 0;
+    return 1;
+}
+
+static gaiaGeomCollPtr
+gaiaGeometryFromPoint (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINT */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomColl ();
+    geom->DeclaredType = GAIA_POINT;
+    gaiaAddPointToGeomColl (geom, point->X, point->Y);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaGeometryFromPointZ (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINTZ */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomCollXYZ ();
+    geom->DeclaredType = GAIA_POINTZ;
+    gaiaAddPointToGeomCollXYZ (geom, point->X, point->Y, point->Z);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaGeometryFromPointM (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINTM */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomCollXYM ();
+    geom->DeclaredType = GAIA_POINTM;
+    gaiaAddPointToGeomCollXYM (geom, point->X, point->Y, point->M);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaGeometryFromPointZM (gaiaPointPtr point)
+{
+/* builds a GEOMETRY containing a POINTZM */
+    gaiaGeomCollPtr geom = NULL;
+    geom = gaiaAllocGeomCollXYZM ();
+    geom->DeclaredType = GAIA_POINTZM;
+    gaiaAddPointToGeomCollXYZM (geom, point->X, point->Y, point->Z, point->M);
+    gaiaFreePoint (point);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaGeometryFromLinestring (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRING */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    geom = gaiaAllocGeomColl ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPoint (line->Coords, iv, &x, &y);
+	  gaiaSetPoint (line2->Coords, iv, x, y);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaGeometryFromLinestringZ (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRINGZ */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    double z;
+    geom = gaiaAllocGeomCollXYZ ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+	  gaiaSetPointXYZ (line2->Coords, iv, x, y, z);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+
+static gaiaGeomCollPtr
+gaiaGeometryFromLinestringM (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRINGM */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    double m;
+    geom = gaiaAllocGeomCollXYM ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+	  gaiaSetPointXYM (line2->Coords, iv, x, y, m);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+static gaiaGeomCollPtr
+gaiaGeometryFromLinestringZM (gaiaLinestringPtr line)
+{
+/* builds a GEOMETRY containing a LINESTRINGZM */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr line2;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    geom = gaiaAllocGeomCollXYZM ();
+    geom->DeclaredType = GAIA_LINESTRING;
+    line2 = gaiaAddLinestringToGeomColl (geom, line->Points);
+    for (iv = 0; iv < line2->Points; iv++)
+      {
+	  /* sets the POINTS for the exterior ring */
+	  gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+	  gaiaSetPointXYZM (line2->Coords, iv, x, y, z, m);
+      }
+    gaiaFreeLinestring (line);
+    return geom;
+}
+
+/******************************************************************************
+** The following code was created by Team Vanuatu of The University of Toronto.
+** It is responsible for handling the parsing of wkt expressions.  The parser
+** is built using LEMON and the cooresponding methods were written by the 
+** students.
+
+Authors:
+Ruppi Rana			ruppi.rana at gmail.com
+Dev Tanna			dev.tanna at gmail.com
+Elias Adum			elias.adum at gmail.com
+Benton Hui			benton.hui at gmail.com
+Abhayan Sundararajan		abhayan at gmail.com
+Chee-Lun Michael Stephen Cho	cheelun.cho at gmail.com
+Nikola Banovic			nikola.banovic at gmail.com
+Yong Jian			yong.jian at utoronto.ca
+
+Supervisor:
+Greg Wilson			gvwilson at cs.toronto.ca
+
+-------------------------------------------------------------------------------
+*/
+
+/* 
+ * Creates a 2D (xy) point in SpatiaLite
+ * x and y are pointers to doubles which represent the x and y coordinates of the point to be created.
+ * Returns a gaiaPointPtr representing the created point.
+ *
+ * Creates a 2D (xy) point. This is a parser helper function which is called when 2D coordinates are encountered.
+ * Parameters x and y are pointers to doubles which represent the x and y coordinates of the point to be created.
+ * Returns a gaiaPointPtr pointing to the created 2D point.
+ */
+static gaiaPointPtr
+vanuatu_point_xy (double *x, double *y)
+{
+    return gaiaAllocPoint (*x, *y);
+}
+
+/* 
+ * Creates a 3D (xyz) point in SpatiaLite
+ * x, y, and z are pointers to doubles which represent the x, y, and z coordinates of the point to be created.
+ * Returns a gaiaPointPtr representing the created point.
+ *
+ * Creates a 3D (xyz) point. This is a parser helper function which is called when 3D coordinates are encountered.
+ * Parameters x, y, and z are pointers to doubles which represent the x, y, and z coordinates of the point to be created.
+ * Returns a gaiaPointPtr pointing to the 3D created point.
+ */
+static gaiaPointPtr
+vanuatu_point_xyz (double *x, double *y, double *z)
+{
+    return gaiaAllocPointXYZ (*x, *y, *z);
+}
+
+/* 
+ * Creates a 2D (xy) point with an m value which is a part of the linear reference system. This is a parser helper
+ * function which is called when 2D   *coordinates with an m value are encountered.
+ * Parameters x and y are pointers to doubles which represent the x and y coordinates of the point to be created.
+ * Parameter m is a pointer to a double which represents the part of the linear reference system.
+ * Returns a gaiaPointPtr pointing to the created 2D point with an m value.
+ */
+static gaiaPointPtr
+vanuatu_point_xym (double *x, double *y, double *m)
+{
+    return gaiaAllocPointXYM (*x, *y, *m);
+}
+
+/* 
+ * Creates a 4D (xyz) point with an m value which is a part of the linear reference system. This is a parser helper
+ * function which is called when  *4Dcoordinates with an m value are encountered
+ * Parameters x, y, and z are pointers to doubles which represent the x, y, and z coordinates of the point to be created. 
+ * Parameter m is a pointer to a double which represents the part of the linear reference system.
+ * Returns a gaiaPointPtr pointing the created 4D point with an m value.
+ */
+gaiaPointPtr
+vanuatu_point_xyzm (double *x, double *y, double *z, double *m)
+{
+    return gaiaAllocPointXYZM (*x, *y, *z, *m);
+}
+
+/*
+ * Builds a geometry collection from a point. The geometry collection should contain only one element ? the point. 
+ * The correct geometry type must be *decided based on the point type. The parser should call this function when the 
+ * ?POINT? WKT expression is encountered.
+ * Parameter point is a pointer to a 2D, 3D, 2D with an m value, or 4D with an m value point.
+ * Returns a geometry collection containing the point. The geometry must have FirstPoint and LastPoint  pointing to the
+ * same place as point.  *DimensionModel must be the same as the model of the point and DimensionType must be GAIA_TYPE_POINT.
+ */
+static gaiaGeomCollPtr
+vanuatu_buildGeomFromPoint (gaiaPointPtr point)
+{
+    switch (point->DimensionModel)
+      {
+      case GAIA_XY:
+	  return gaiaGeometryFromPoint (point);
+	  break;
+      case GAIA_XY_Z:
+	  return gaiaGeometryFromPointZ (point);
+	  break;
+      case GAIA_XY_M:
+	  return gaiaGeometryFromPointM (point);
+	  break;
+      case GAIA_XY_Z_M:
+	  return gaiaGeometryFromPointZM (point);
+	  break;
+      }
+    return NULL;
+}
+
+/* 
+ * Creates a 2D (xy) linestring from a list of 2D points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 2D (xy) points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+vanuatu_linestring_xy (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestring (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPoint (linestring->Coords, i, p->X, p->Y);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/* 
+ * Creates a 3D (xyz) linestring from a list of 3D points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 3D (xyz) points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+vanuatu_linestring_xyz (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestringXYZ (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPointXYZ (linestring->Coords, i, p->X, p->Y, p->Z);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/* 
+ * Creates a 2D (xy) with m value linestring from a list of 2D with m value points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 2D (xy) with m value points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+vanuatu_linestring_xym (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestringXYM (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPointXYM (linestring->Coords, i, p->X, p->Y, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/* 
+ * Creates a 4D (xyz) with m value linestring from a list of 4D with m value points.
+ *
+ * Parameter first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points in the list must be 4D (xyz) with m value points. There must be at least 2 points in the list.
+ *
+ * Returns a pointer to linestring containing all of the points in the list.
+ */
+static gaiaLinestringPtr
+vanuatu_linestring_xyzm (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    int points = 0;
+    int i = 0;
+    gaiaLinestringPtr linestring;
+
+    while (p != NULL)
+      {
+	  p = p->Next;
+	  points++;
+      }
+
+    linestring = gaiaAllocLinestringXYZM (points);
+
+    p = first;
+    while (p != NULL)
+      {
+	  gaiaSetPointXYZM (linestring->Coords, i, p->X, p->Y, p->Z, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+	  i++;
+      }
+
+    return linestring;
+}
+
+/*
+ * Builds a geometry collection from a linestring.
+ */
+static gaiaGeomCollPtr
+vanuatu_buildGeomFromLinestring (gaiaLinestringPtr line)
+{
+    switch (line->DimensionModel)
+      {
+      case GAIA_XY:
+	  return gaiaGeometryFromLinestring (line);
+	  break;
+      case GAIA_XY_Z:
+	  return gaiaGeometryFromLinestringZ (line);
+	  break;
+      case GAIA_XY_M:
+	  return gaiaGeometryFromLinestringM (line);
+	  break;
+      case GAIA_XY_Z_M:
+	  return gaiaGeometryFromLinestringZM (line);
+	  break;
+      }
+    return NULL;
+}
+
+/*
+ * Helper function that determines the number of points in the linked list.
+ */
+static int
+vanuatu_count_points (gaiaPointPtr first)
+{
+    /* Counts the number of points in the ring. */
+    gaiaPointPtr p = first;
+    int numpoints = 0;
+    while (p != NULL)
+      {
+	  numpoints++;
+	  p = p->Next;
+      }
+    return numpoints;
+}
+
+/*
+ * Creates a 2D (xy) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 2D (xy) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+vanuatu_ring_xy (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = vanuatu_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRing (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPoint (ring->Coords, index, p->X, p->Y);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Creates a 3D (xyz) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 3D (xyz) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+vanuatu_ring_xyz (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = vanuatu_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRingXYZ (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPointXYZ (ring->Coords, index, p->X, p->Y, p->Z);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Creates a 2D (xym) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 2D (xym) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+vanuatu_ring_xym (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = vanuatu_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRingXYM (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPointXYM (ring->Coords, index, p->X, p->Y, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Creates a 3D (xyzm) ring in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the polygon.
+ * All of the points given to the function are 3D (xyzm) points. There will be at least 4 points in the list.
+ *
+ * Returns the ring defined by the points given to the function.
+ */
+static gaiaRingPtr
+vanuatu_ring_xyzm (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaRingPtr ring = NULL;
+    int numpoints;
+    int index;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Counts the number of points in the ring. */
+    numpoints = vanuatu_count_points (first);
+    if (numpoints < 4)
+	return NULL;
+
+    /* Creates and allocates a ring structure. */
+    ring = gaiaAllocRingXYZM (numpoints);
+    if (ring == NULL)
+	return NULL;
+
+    /* Adds every point into the ring structure. */
+    p = first;
+    for (index = 0; index < numpoints; index++)
+      {
+	  gaiaSetPointXYZM (ring->Coords, index, p->X, p->Y, p->Z, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+
+    return ring;
+}
+
+/*
+ * Helper function that will create any type of polygon (xy, xym, xyz, xyzm) in SpatiaLite.
+ * 
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are of the same type. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+vanuatu_polygon_any_type (gaiaRingPtr first)
+{
+    gaiaRingPtr p;
+    gaiaRingPtr p_n;
+    gaiaPolygonPtr polygon;
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a polygon structure with the exterior ring. */
+    polygon = gaiaCreatePolygon (first);
+    if (polygon == NULL)
+	return NULL;
+
+    /* Adds all interior rings into the polygon structure. */
+    p = first;
+    while (p != NULL)
+      {
+	  p_n = p->Next;
+	  if (p == first)
+	      gaiaFreeRing (p);
+	  else
+	      gaiaAddRingToPolyg (polygon, p);
+	  p = p_n;
+      }
+
+    return polygon;
+}
+
+/* 
+ * Creates a 2D (xy) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 2D (xy) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+vanuatu_polygon_xy (gaiaRingPtr first)
+{
+    return vanuatu_polygon_any_type (first);
+}
+
+/* 
+ * Creates a 3D (xyz) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 3D (xyz) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+vanuatu_polygon_xyz (gaiaRingPtr first)
+{
+    return vanuatu_polygon_any_type (first);
+}
+
+/* 
+ * Creates a 2D (xym) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 2D (xym) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+vanuatu_polygon_xym (gaiaRingPtr first)
+{
+    return vanuatu_polygon_any_type (first);
+}
+
+/* 
+ * Creates a 3D (xyzm) polygon in SpatiaLite
+ *
+ * first is a gaiaRingPtr to the first ring in a linked list of rings which define the polygon.
+ * The first ring in the linked list is the external ring while the rest (if any) are internal rings.
+ * All of the rings given to the function are 3D (xyzm) rings. There will be at least 1 ring in the list.
+ *
+ * Returns the polygon defined by the rings given to the function.
+ */
+static gaiaPolygonPtr
+vanuatu_polygon_xyzm (gaiaRingPtr first)
+{
+    return vanuatu_polygon_any_type (first);
+}
+
+/*
+ * Builds a geometry collection from a polygon.
+ * NOTE: This function may already be implemented in the SpatiaLite code base. If it is, make sure that we
+ *              can use it (ie. it doesn't use any other variables or anything else set by Sandro's parser). If you find
+ *              that we can use an existing function then ignore this one.
+ */
+static gaiaGeomCollPtr
+vanuatu_buildGeomFromPolygon (gaiaPolygonPtr polygon)
+{
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (polygon == NULL)
+      {
+	  return NULL;
+      }
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    switch (polygon->DimensionModel)
+      {
+      case GAIA_XY:
+	  geom = gaiaAllocGeomColl ();
+	  break;
+      case GAIA_XY_Z:
+	  geom = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  geom = gaiaAllocGeomCollXYM ();
+	  break;
+      case GAIA_XY_Z_M:
+	  geom = gaiaAllocGeomCollXYZM ();
+	  break;
+      }
+    if (geom == NULL)
+      {
+	  return NULL;
+      }
+    geom->DeclaredType = GAIA_POLYGON;
+
+    /* Stores the location of the first and last polygons in the linked list. */
+    geom->FirstPolygon = polygon;
+    while (polygon != NULL)
+      {
+	  geom->LastPolygon = polygon;
+	  polygon = polygon->Next;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 2D (xy) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points.
+ * All of the points given to the function are 2D (xy) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+vanuatu_multipoint_xy (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 2D (xy) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomColl (geom, p->X, p->Y);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 3D (xyz) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points.
+ * All of the points given to the function are 3D (xyz) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+vanuatu_multipoint_xyz (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomCollXYZ ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 3D (xyz) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomCollXYZ (geom, p->X, p->Y, p->Z);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 2D (xym) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points.
+ * All of the points given to the function are 2D (xym) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+vanuatu_multipoint_xym (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomCollXYM ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 2D (xym) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomCollXYM (geom, p->X, p->Y, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/* 
+ * Creates a 3D (xyzm) multipoint object in SpatiaLite
+ *
+ * first is a gaiaPointPtr to the first point in a linked list of points which define the linestring.
+ * All of the points given to the function are 3D (xyzm) points. There will be at least 1 point in the list.
+ *
+ * Returns a geometry collection containing the created multipoint object.
+ */
+static gaiaGeomCollPtr
+vanuatu_multipoint_xyzm (gaiaPointPtr first)
+{
+    gaiaPointPtr p = first;
+    gaiaPointPtr p_n;
+    gaiaGeomCollPtr geom = NULL;
+
+    /* If no pointers are given, return. */
+    if (first == NULL)
+	return NULL;
+
+    /* Creates and allocates a geometry collection containing a multipoint. */
+    geom = gaiaAllocGeomCollXYZM ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_MULTIPOINT;
+
+    /* For every 3D (xyzm) point, add it to the geometry collection. */
+    while (p != NULL)
+      {
+	  gaiaAddPointToGeomCollXYZM (geom, p->X, p->Y, p->Z, p->M);
+	  p_n = p->Next;
+	  gaiaFreePoint (p);
+	  p = p_n;
+      }
+    return geom;
+}
+
+/*
+ * Creates a geometry collection containing 2D (xy) linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the *linestrings in the list must be 2D (xy) linestrings. There must be at least 1 linestring in the list.
+ * Returns a pointer to the created geometry collection of 2D linestrings. The geometry must have FirstLinestring pointing to the
+ * first linestring in the list pointed by first and LastLinestring pointing to the last element of the same list. DimensionModel
+ * must be GAIA_XY and DimensionType must be *GAIA_TYPE_LINESTRING.
+ */
+
+static gaiaGeomCollPtr
+vanuatu_multilinestring_xy (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomColl ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+
+    return a;
+}
+
+/* 
+ * Returns a geometry collection containing the created multilinestring object (?).
+ * Creates a geometry collection containing 3D (xyz) linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the *linestrings in the list must be 3D (xyz) linestrings. There must be at least 1 linestring in the list.
+ * Returns a pointer to the created geometry collection of 3D linestrings. The geometry must have FirstLinestring pointing to the
+ * first linestring in the *list pointed by first and LastLinestring pointing to the last element of the same list. DimensionModel
+ * must be GAIA_XYZ and DimensionType must be *GAIA_TYPE_LINESTRING.
+ */
+static gaiaGeomCollPtr
+vanuatu_multilinestring_xyz (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomCollXYZ ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY_Z;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+    return a;
+}
+
+/* 
+ * Creates a geometry collection containing 2D (xy) with m value linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the  *linestrings in the list must be 2D (xy) with m value linestrings. There must be at least 1 linestring 
+ * in the list.
+ * Returns a pointer to the created geometry collection of 2D with m value linestrings. The geometry must have FirstLinestring
+ * pointing to the first *linestring in the list pointed by first and LastLinestring pointing to the last element of the same list. 
+ * DimensionModel must be GAIA_XYM and *DimensionType must be GAIA_TYPE_LINESTRING.
+ */
+static gaiaGeomCollPtr
+vanuatu_multilinestring_xym (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomCollXYM ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY_M;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+
+    return a;
+}
+
+/* 
+ * Creates a geometry collection containing 4D (xyz) with m value linestrings.
+ * Parameter first is a gaiaLinestringPtr to the first linestring in a linked list of linestrings which should be added to the
+ * collection. All of the *linestrings in the list must be 4D (xyz) with m value linestrings. There must be at least 1 linestring
+ * in the list.
+ * Returns a pointer to the created geometry collection of 4D with m value linestrings. The geometry must have FirstLinestring
+ * pointing to the first *linestring in the list pointed by first and LastLinestring pointing to the last element of the same list. 
+ * DimensionModel must be GAIA_XYZM and *DimensionType must be GAIA_TYPE_LINESTRING.
+ */
+static gaiaGeomCollPtr
+vanuatu_multilinestring_xyzm (gaiaLinestringPtr first)
+{
+    gaiaLinestringPtr p = first;
+    gaiaLinestringPtr p_n;
+    gaiaLinestringPtr new_line;
+    gaiaGeomCollPtr a = gaiaAllocGeomCollXYZM ();
+    a->DeclaredType = GAIA_MULTILINESTRING;
+    a->DimensionModel = GAIA_XY_Z_M;
+
+    while (p)
+      {
+	  new_line = gaiaAddLinestringToGeomColl (a, p->Points);
+	  gaiaCopyLinestringCoords (new_line, p);
+	  p_n = p->Next;
+	  gaiaFreeLinestring (p);
+	  p = p_n;
+      }
+    return a;
+}
+
+/* 
+ * Creates a geometry collection containing 2D (xy) polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should 
+ * be added to the collection. All of the polygons in the list must be 2D (xy) polygons. There must be 
+ * at least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 2D polygons. The geometry must have 
+ * FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon pointing 
+ * to the last element of the same list. DimensionModel must be GAIA_XY and DimensionType must 
+ * be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+vanuatu_multipolygon_xy (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+/* 
+ * Creates a geometry collection containing 3D (xyz) polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should be 
+ * added to the collection. All of the polygons in the list must be 3D (xyz) polygons. There must be at
+ * least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 3D polygons. The geometry must have 
+ * FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon pointing to 
+ * the last element of the same list. DimensionModel must be GAIA_XYZ and DimensionType must 
+ * be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+vanuatu_multipolygon_xyz (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomCollXYZ ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+/* 
+ * Creates a geometry collection containing 2D (xy) with m value polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should
+ * be added to the collection. All of the polygons in the list must be 2D (xy) with m value polygons.
+ * There must be at least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 2D with m value polygons. The geometry 
+ * must have FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon 
+ * pointing to the last element of the same list. DimensionModel must be GAIA_XYM and DimensionType 
+ * must be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+vanuatu_multipolygon_xym (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomCollXYM ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+/*
+ * Creates a geometry collection containing 4D (xyz) with m value polygons.
+ *
+ * Parameter first is a gaiaPolygonPtr to the first polygon in a linked list of polygons which should be 
+ * added to the collection. All of the polygons in the list must be 4D (xyz) with m value polygons. 
+ * There must be at least 1 polygon in the list.
+ *
+ * Returns a pointer to the created geometry collection of 4D with m value polygons. The geometry must 
+ * have FirstPolygon pointing to the first polygon in the list pointed by first and LastPolygon pointing 
+//  * to the last element of the same list. DimensionModel must be GAIA_XYZM and DimensionType must 
+ * be GAIA_TYPE_POLYGON.
+ *
+ */
+static gaiaGeomCollPtr
+vanuatu_multipolygon_xyzm (gaiaPolygonPtr first)
+{
+    gaiaPolygonPtr p = first;
+    gaiaPolygonPtr p_n;
+    int i = 0;
+    gaiaPolygonPtr new_polyg;
+    gaiaRingPtr i_ring;
+    gaiaRingPtr o_ring;
+    gaiaGeomCollPtr geom = gaiaAllocGeomCollXYZM ();
+
+    geom->DeclaredType = GAIA_MULTIPOLYGON;
+
+    while (p)
+      {
+	  i_ring = p->Exterior;
+	  new_polyg =
+	      gaiaAddPolygonToGeomColl (geom, i_ring->Points, p->NumInteriors);
+	  o_ring = new_polyg->Exterior;
+	  gaiaCopyRingCoords (o_ring, i_ring);
+
+	  for (i = 0; i < new_polyg->NumInteriors; i++)
+	    {
+		i_ring = p->Interiors + i;
+		o_ring = gaiaAddInteriorRing (new_polyg, i, i_ring->Points);
+		gaiaCopyRingCoords (o_ring, i_ring);
+	    }
+
+	  p_n = p->Next;
+	  gaiaFreePolygon (p);
+	  p = p_n;
+      }
+
+    return geom;
+}
+
+static void
+vanuatu_geomColl_common (gaiaGeomCollPtr org, gaiaGeomCollPtr dst)
+{
+/* 
+/ helper function: xfers entities between the Origin and Destination 
+/ Sandro Furieri: 2010 October 12
+*/
+    gaiaGeomCollPtr p = org;
+    gaiaGeomCollPtr p_n;
+    gaiaPointPtr pt;
+    gaiaPointPtr pt_n;
+    gaiaLinestringPtr ln;
+    gaiaLinestringPtr ln_n;
+    gaiaPolygonPtr pg;
+    gaiaPolygonPtr pg_n;
+    while (p)
+      {
+	  pt = p->FirstPoint;
+	  while (pt)
+	    {
+		pt_n = pt->Next;
+		pt->Next = NULL;
+		if (dst->FirstPoint == NULL)
+		    dst->FirstPoint = pt;
+		if (dst->LastPoint != NULL)
+		    dst->LastPoint->Next = pt;
+		dst->LastPoint = pt;
+		pt = pt_n;
+	    }
+	  ln = p->FirstLinestring;
+	  while (ln)
+	    {
+		ln_n = ln->Next;
+		ln->Next = NULL;
+		if (dst->FirstLinestring == NULL)
+		    dst->FirstLinestring = ln;
+		if (dst->LastLinestring != NULL)
+		    dst->LastLinestring->Next = ln;
+		dst->LastLinestring = ln;
+		ln = ln_n;
+	    }
+	  pg = p->FirstPolygon;
+	  while (pg)
+	    {
+		pg_n = pg->Next;
+		pg->Next = NULL;
+		if (dst->FirstPolygon == NULL)
+		    dst->FirstPolygon = pg;
+		if (dst->LastPolygon != NULL)
+		    dst->LastPolygon->Next = pg;
+		dst->LastPolygon = pg;
+		pg = pg_n;
+	    }
+	  p_n = p->Next;
+	  p->FirstPoint = NULL;
+	  p->LastPoint = NULL;
+	  p->FirstLinestring = NULL;
+	  p->LastLinestring = NULL;
+	  p->FirstPolygon = NULL;
+	  p->LastPolygon = NULL;
+	  gaiaFreeGeomColl (p);
+	  p = p_n;
+      }
+}
+
+/* Creates a 2D (xy) geometry collection in SpatiaLite
+ *
+ * first is the first geometry collection in a linked list of geometry collections.
+ * Each geometry collection represents a single type of object (eg. one could be a POINT, 
+ * another could be a LINESTRING, another could be a MULTILINESTRING, etc.).
+ *
+ * The type of object represented by any geometry collection is stored in the declaredType 
+ * field of its struct. For example, if first->declaredType = GAIA_POINT, then first represents a point.
+ * If first->declaredType = GAIA_MULTIPOINT, then first represents a multipoint.
+ *
+ * NOTE: geometry collections cannot contain other geometry collections (have to confirm this 
+ * with Sandro).
+ *
+ * The goal of this function is to take the information from all of the structs in the linked list and 
+ * return one geomColl struct containing all of that information.
+ *
+ * The integers used for 'declaredType' are defined in gaiageo.h. In this function, the only values 
+ * contained in 'declaredType' that will be encountered will be:
+ *
+ *	GAIA_POINT, GAIA_LINESTRING, GAIA_POLYGON, 
+ *	GAIA_MULTIPOINT, GAIA_MULTILINESTRING, GAIA_MULTIPOLYGON
+ */
+static gaiaGeomCollPtr
+vanuatu_geomColl_xy (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY;
+    vanuatu_geomColl_common (first, geom);
+    return geom;
+}
+
+/*
+ * See geomColl_xy for description.
+ *
+ * The only difference between this function and geomColl_xy is that the 'declaredType' field of the structs
+ * in the linked list for this function will only contain the following types:
+ *
+ *	GAIA_POINTZ, GAIA_LINESTRINGZ, GAIA_POLYGONZ,
+ * 	GAIA_MULTIPOINTZ, GAIA_MULTILINESTRINGZ, GAIA_MULTIPOLYGONZ
+ */
+static gaiaGeomCollPtr
+vanuatu_geomColl_xyz (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY_Z;
+    vanuatu_geomColl_common (first, geom);
+    return geom;
+}
+
+/*
+ * See geomColl_xy for description.
+ *
+ * The only difference between this function and geomColl_xy is that the 'declaredType' field of the structs
+ * in the linked list for this function will only contain the following types:
+ *
+ *	GAIA_POINTM, GAIA_LINESTRINGM, GAIA_POLYGONM,
+ * 	GAIA_MULTIPOINTM, GAIA_MULTILINESTRINGM, GAIA_MULTIPOLYGONM
+ */
+static gaiaGeomCollPtr
+vanuatu_geomColl_xym (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY_M;
+    vanuatu_geomColl_common (first, geom);
+    return geom;
+}
+
+/*
+ * See geomColl_xy for description.
+ *
+ * The only difference between this function and geomColl_xy is that the 'declaredType' field of the structs
+ * in the linked list for this function will only contain the following types:
+ *
+ *	GAIA_POINTZM, GAIA_LINESTRINGZM, GAIA_POLYGONZM,
+ * 	GAIA_MULTIPOINTZM, GAIA_MULTILINESTRINGZM, GAIA_MULTIPOLYGONZM
+ */
+static gaiaGeomCollPtr
+vanuatu_geomColl_xyzm (gaiaGeomCollPtr first)
+{
+    gaiaGeomCollPtr geom = gaiaAllocGeomColl ();
+    if (geom == NULL)
+	return NULL;
+    geom->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+    geom->DimensionModel = GAIA_XY_Z_M;
+    vanuatu_geomColl_common (first, geom);
+    return geom;
+}
+
+
+
+/*
+** CAVEAT: we must redefine any Lemon/Flex own macro
+*/
+#define YYMINORTYPE		VANUATU_MINORTYPE
+#define YY_CHAR			VANUATU_YY_CHAR
+#define	input			vanuatu_input
+#define ParseAlloc		vanuatuParseAlloc
+#define ParseFree		vanuatuParseFree
+#define ParseStackPeak		vanuatuParseStackPeak
+#define Parse			vanuatuParse
+#define yyStackEntry		vanuatu_yyStackEntry
+#define yyzerominor		vanuatu_yyzerominor
+#define yy_accept		vanuatu_yy_accept
+#define yy_action		vanuatu_yy_action
+#define yy_base			vanuatu_yy_base
+#define yy_buffer_stack		vanuatu_yy_buffer_stack
+#define yy_buffer_stack_max	vanuatu_yy_buffer_stack_max
+#define yy_buffer_stack_top	vanuatu_yy_buffer_stack_top
+#define yy_c_buf_p		vanuatu_yy_c_buf_p
+#define yy_chk			vanuatu_yy_chk
+#define yy_def			vanuatu_yy_def
+#define yy_default		vanuatu_yy_default
+#define yy_destructor		vanuatu_yy_destructor
+#define yy_ec			vanuatu_yy_ec
+#define yy_fatal_error		vanuatu_yy_fatal_error
+#define yy_find_reduce_action	vanuatu_yy_find_reduce_action
+#define yy_find_shift_action	vanuatu_yy_find_shift_action
+#define yy_get_next_buffer	vanuatu_yy_get_next_buffer
+#define yy_get_previous_state	vanuatu_yy_get_previous_state
+#define yy_init			vanuatu_yy_init
+#define yy_init_globals		vanuatu_yy_init_globals
+#define yy_lookahead		vanuatu_yy_lookahead
+#define yy_meta			vanuatu_yy_meta
+#define yy_nxt			vanuatu_yy_nxt
+#define yy_parse_failed		vanuatu_yy_parse_failed
+#define yy_pop_parser_stack	vanuatu_yy_pop_parser_stack
+#define yy_reduce		vanuatu_yy_reduce
+#define yy_reduce_ofst		vanuatu_yy_reduce_ofst
+#define yy_shift		vanuatu_yy_shift
+#define yy_shift_ofst		vanuatu_yy_shift_ofst
+#define yy_start		vanuatu_yy_start
+#define yy_state_type		vanuatu_yy_state_type
+#define yy_syntax_error		vanuatu_yy_syntax_error
+#define yy_trans_info		vanuatu_yy_trans_info
+#define yy_try_NUL_trans	vanuatu_yy_try_NUL_trans
+#define yyParser		vanuatu_yyParser
+#define yyStackEntry		vanuatu_yyStackEntry
+#define yyStackOverflow		vanuatu_yyStackOverflow
+#define yyRuleInfo		vanuatu_yyRuleInfo
+#define yyunput			vanuatu_yyunput
+#define yyzerominor		vanuatu_yyzerominor
+#define yyTraceFILE		vanuatu_yyTraceFILE
+#define yyTracePrompt		vanuatu_yyTracePrompt
+#define yyTokenName		vanuatu_yyTokenName
+#define yyRuleName		vanuatu_yyRuleName
+#define ParseTrace		vanuatu_ParseTrace
+
+
+/*
+ VANUATU_LEMON_H_START - LEMON generated header starts here 
+*/
+#define VANUATU_NEWLINE                 1
+#define VANUATU_POINT                   2
+#define VANUATU_OPEN_BRACKET            3
+#define VANUATU_CLOSE_BRACKET           4
+#define VANUATU_POINT_M                 5
+#define VANUATU_POINT_Z                 6
+#define VANUATU_POINT_ZM                7
+#define VANUATU_NUM                     8
+#define VANUATU_COMMA                   9
+#define VANUATU_LINESTRING             10
+#define VANUATU_LINESTRING_M           11
+#define VANUATU_LINESTRING_Z           12
+#define VANUATU_LINESTRING_ZM          13
+#define VANUATU_POLYGON                14
+#define VANUATU_POLYGON_M              15
+#define VANUATU_POLYGON_Z              16
+#define VANUATU_POLYGON_ZM             17
+#define VANUATU_MULTIPOINT             18
+#define VANUATU_MULTIPOINT_M           19
+#define VANUATU_MULTIPOINT_Z           20
+#define VANUATU_MULTIPOINT_ZM          21
+#define VANUATU_MULTILINESTRING        22
+#define VANUATU_MULTILINESTRING_M      23
+#define VANUATU_MULTILINESTRING_Z      24
+#define VANUATU_MULTILINESTRING_ZM     25
+#define VANUATU_MULTIPOLYGON           26
+#define VANUATU_MULTIPOLYGON_M         27
+#define VANUATU_MULTIPOLYGON_Z         28
+#define VANUATU_MULTIPOLYGON_ZM        29
+#define VANUATU_GEOMETRYCOLLECTION     30
+#define VANUATU_GEOMETRYCOLLECTION_M   31
+#define VANUATU_GEOMETRYCOLLECTION_Z   32
+#define VANUATU_GEOMETRYCOLLECTION_ZM  33
+/*
+ VANUATU_LEMON_H_END - LEMON generated header ends here 
+*/
+
+
+
+typedef union
+{
+    double dval;
+    struct symtab *symp;
+} vanuatu_yystype;
+#define YYSTYPE vanuatu_yystype
+
+/* extern YYSTYPE yylval; */
+YYSTYPE VanuatuWktlval;
+
+
+
+/*
+ VANUATU_LEMON_START - LEMON generated code starts here 
+*/
+
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is included that follows the "include" declaration
+** in the input grammar file. */
+#include <stdio.h>
+#line 77 "vanuatuWkt.y"
+
+#line 10 "vanuatuWkt.c"
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/* 
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands. 
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+**    YYCODETYPE         is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 terminals
+**                       and nonterminals.  "int" is used otherwise.
+**    YYNOCODE           is a number of type YYCODETYPE which corresponds
+**                       to no legal terminal or nonterminal number.  This
+**                       number is used to fill in empty slots of the hash 
+**                       table.
+**    YYFALLBACK         If defined, this indicates that one or more tokens
+**                       have fall-back values which should be used if the
+**                       original value of the token will not parse.
+**    YYACTIONTYPE       is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 rules and
+**                       states combined.  "int" is used otherwise.
+**    ParseTOKENTYPE     is the data type used for minor tokens given 
+**                       directly to the parser from the tokenizer.
+**    YYMINORTYPE        is the data type used for all minor tokens.
+**                       This is typically a union of many types, one of
+**                       which is ParseTOKENTYPE.  The entry in the union
+**                       for base tokens is called "yy0".
+**    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
+**                       zero the stack is dynamically sized using realloc()
+**    ParseARG_SDECL     A static variable declaration for the %extra_argument
+**    ParseARG_PDECL     A parameter declaration for the %extra_argument
+**    ParseARG_STORE     Code to store %extra_argument into yypParser
+**    ParseARG_FETCH     Code to extract %extra_argument from yypParser
+**    YYNSTATE           the combined number of states.
+**    YYNRULE            the number of rules in the grammar
+**    YYERRORSYMBOL      is the code number of the error symbol.  If not
+**                       defined, then do no error processing.
+*/
+#define YYCODETYPE unsigned char
+#define YYNOCODE 125
+#define YYACTIONTYPE unsigned short int
+#define ParseTOKENTYPE void *
+typedef union {
+  int yyinit;
+  ParseTOKENTYPE yy0;
+} YYMINORTYPE;
+#ifndef YYSTACKDEPTH
+#define YYSTACKDEPTH 1000000
+#endif
+#define ParseARG_SDECL  gaiaGeomCollPtr *result ;
+#define ParseARG_PDECL , gaiaGeomCollPtr *result 
+#define ParseARG_FETCH  gaiaGeomCollPtr *result  = yypParser->result 
+#define ParseARG_STORE yypParser->result  = result 
+#define YYNSTATE 358
+#define YYNRULE 153
+#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
+
+/* The yyzerominor constant is used to initialize instances of
+** YYMINORTYPE objects to zero. */
+static const YYMINORTYPE yyzerominor = { 0 };
+
+/* Define the yytestcase() macro to be a no-op if is not already defined
+** otherwise.
+**
+** Applications can choose to define yytestcase() in the %include section
+** to a macro that can assist in verifying code coverage.  For production
+** code the yytestcase() macro should be turned off.  But it is useful
+** for testing.
+*/
+#ifndef yytestcase
+# define yytestcase(X)
+#endif
+
+
+/* Next are the tables used to determine what action to take based on the
+** current state and lookahead token.  These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.  
+**
+** Suppose the action integer is N.  Then the action is determined as
+** follows
+**
+**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
+**                                      token onto the stack and goto state N.
+**
+**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
+**
+**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
+**
+**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
+**
+**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
+**                                      slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+**      yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.  
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+**  yy_action[]        A single table containing all actions.
+**  yy_lookahead[]     A table containing the lookahead for each entry in
+**                     yy_action.  Used to detect hash collisions.
+**  yy_shift_ofst[]    For each state, the offset into yy_action for
+**                     shifting terminals.
+**  yy_reduce_ofst[]   For each state, the offset into yy_action for
+**                     shifting non-terminals after a reduce.
+**  yy_default[]       Default action for each state.
+*/
+static const YYACTIONTYPE yy_action[] = {
+ /*     0 */   166,  228,  229,  230,  231,  232,  233,  234,  235,  236,
+ /*    10 */   237,  238,  239,  240,  241,  242,  243,  244,  245,  246,
+ /*    20 */   247,  248,  249,  250,  251,  252,  253,  254,  255,  256,
+ /*    30 */   257,  258,  259,  260,  358,  263,  167,  512,    1,  169,
+ /*    40 */   171,  173,  174,   51,   54,   57,   60,   63,   66,   72,
+ /*    50 */    78,   84,   90,   92,   94,   96,   98,  103,  108,  113,
+ /*    60 */   118,  123,  128,  133,  138,  145,  152,  159,  167,  139,
+ /*    70 */   143,  144,  140,  141,  142,  169,   54,  146,  150,  151,
+ /*    80 */    66,   57,  147,  148,  149,   72,  171,  153,  157,  158,
+ /*    90 */   170,  262,   60,   47,  173,  270,   78,  154,  155,  156,
+ /*   100 */    63,  172,  273,   49,   84,  160,  164,  165,   48,  161,
+ /*   110 */   162,  163,   14,  168,  175,   55,  176,   46,   46,   46,
+ /*   120 */    56,  265,  177,   58,   46,   47,   47,   59,   50,  179,
+ /*   130 */    47,   49,   61,   62,   49,   49,  181,   51,   64,   51,
+ /*   140 */   184,   65,   51,  185,   46,  186,   70,   46,  189,   46,
+ /*   150 */    46,   47,  267,  190,  191,   76,   47,   47,   47,  194,
+ /*   160 */    52,   49,  195,  196,   49,   49,   82,   53,   49,  199,
+ /*   170 */    51,  200,   51,  201,   51,   88,   51,   91,   95,   93,
+ /*   180 */    49,   46,   47,  269,   97,   51,   16,  271,   17,   19,
+ /*   190 */   178,  274,   20,   22,  276,  180,  277,   23,  279,   25,
+ /*   200 */   182,  280,   67,  282,   26,   69,  187,   73,   68,  286,
+ /*   210 */    30,   75,  183,   71,  192,  285,   79,   74,  290,  188,
+ /*   220 */   289,   77,   34,   81,  197,   80,   85,  193,   83,  294,
+ /*   230 */    38,  293,  202,   86,   87,  198,  297,   89,   42,  203,
+ /*   240 */   298,   43,  300,  204,   44,  302,  205,   45,  304,  206,
+ /*   250 */    99,  306,  100,  102,  101,  104,  207,  309,  308,  105,
+ /*   260 */   106,  109,  208,  107,  311,  110,  312,  209,  111,  112,
+ /*   270 */   114,  314,  315,  116,  115,  117,  119,  120,  210,  121,
+ /*   280 */   124,  317,  122,  318,  126,  125,  129,  131,  211,  130,
+ /*   290 */   321,  320,  132,  127,  134,  136,    2,  135,    3,  212,
+ /*   300 */     4,  323,  137,    5,    6,  324,    8,    7,    9,  227,
+ /*   310 */    10,  213,  513,  261,   11,   15,  264,   12,   13,  326,
+ /*   320 */   327,  266,  268,  272,  275,   18,  214,  329,  278,  281,
+ /*   330 */    21,   24,  330,  283,  513,   27,   28,  215,  332,   29,
+ /*   340 */   333,  334,  216,  337,  217,  284,  287,   31,   32,  218,
+ /*   350 */   339,  340,  341,  219,  220,  344,  221,   33,  346,  288,
+ /*   360 */   291,  347,  348,   35,  222,  223,   36,  351,   37,  224,
+ /*   370 */   292,  295,  353,  354,   39,  513,  355,  225,  226,   40,
+ /*   380 */    41,  296,  299,  301,  303,  305,  307,  310,  313,  316,
+ /*   390 */   319,  322,  325,  328,  331,  335,  336,  338,  342,  343,
+ /*   400 */   345,  349,  350,  352,  356,  357,
+};
+static const YYCODETYPE yy_lookahead[] = {
+ /*     0 */    37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
+ /*    10 */    47,   48,   49,   50,   51,   52,   53,   54,   55,   56,
+ /*    20 */    57,   58,   59,   60,   61,   62,   63,   64,   65,   66,
+ /*    30 */    67,   68,   69,   70,    0,    8,    2,   35,   36,    5,
+ /*    40 */     6,    7,   74,   75,   10,   11,   12,   13,   14,   15,
+ /*    50 */    16,   17,   18,   19,   20,   21,   22,   23,   24,   25,
+ /*    60 */    26,   27,   28,   29,   30,   31,   32,   33,    2,   43,
+ /*    70 */    44,   45,   43,   44,   45,    5,   10,   57,   58,   59,
+ /*    80 */    14,   11,   57,   58,   59,   15,    6,   50,   51,   52,
+ /*    90 */    72,   75,   12,   75,    7,   80,   16,   50,   51,   52,
+ /*   100 */    13,   73,   81,   75,   17,   64,   65,   66,   75,   64,
+ /*   110 */    65,   66,    3,   71,   71,   71,   76,   75,   75,   75,
+ /*   120 */    71,   75,   72,   72,   75,   75,   75,   72,   75,   73,
+ /*   130 */    75,   75,   73,   73,   75,   75,   74,   75,   74,   75,
+ /*   140 */    71,   74,   75,   71,   75,   71,   71,   75,   72,   75,
+ /*   150 */    75,   75,   75,   72,   72,   72,   75,   75,   75,   73,
+ /*   160 */    75,   75,   73,   73,   75,   75,   73,   75,   75,   74,
+ /*   170 */    75,   74,   75,   74,   75,   74,   75,   71,   73,   72,
+ /*   180 */    75,   75,   75,   75,   74,   75,    9,   76,    3,    9,
+ /*   190 */    77,   77,    3,    9,   82,   78,   78,    3,   83,    9,
+ /*   200 */    79,   79,    3,   84,    3,    9,   76,    3,   88,   85,
+ /*   210 */     3,    9,   89,   88,   77,   89,    3,   90,   86,   91,
+ /*   220 */    91,   90,    3,    9,   78,   92,    3,   93,   92,   87,
+ /*   230 */     3,   93,   79,   94,    9,   95,   95,   94,    3,   76,
+ /*   240 */    96,    3,   97,   77,    3,   98,   78,    3,   99,   79,
+ /*   250 */     3,  100,   80,   80,    9,    3,  104,  101,  104,   81,
+ /*   260 */     9,    3,  105,   81,  105,   82,  102,  106,    9,   82,
+ /*   270 */     3,  106,  103,    9,   83,   83,    3,   84,  107,    9,
+ /*   280 */     3,  107,   84,  108,    9,   85,    3,    9,  112,   86,
+ /*   290 */   109,  112,   86,   85,    3,    9,    3,   87,    9,  113,
+ /*   300 */     3,  113,   87,    9,    3,  110,    3,    9,    9,    1,
+ /*   310 */     3,  114,  124,    4,    3,    9,    4,    3,    3,  114,
+ /*   320 */   111,    4,    4,    4,    4,    9,  115,  115,    4,    4,
+ /*   330 */     9,    9,  116,    4,  124,    9,    9,  120,  120,    9,
+ /*   340 */   120,  120,  120,  117,  120,    4,    4,    9,    9,  121,
+ /*   350 */   121,  121,  121,  121,  121,  118,  122,    9,  122,    4,
+ /*   360 */     4,  122,  122,    9,  122,  122,    9,  119,    9,  123,
+ /*   370 */     4,    4,  123,  123,    9,  124,  123,  123,  123,    9,
+ /*   380 */     9,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+ /*   390 */     4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+ /*   400 */     4,    4,    4,    4,    4,    4,
+};
+#define YY_SHIFT_USE_DFLT (-1)
+#define YY_SHIFT_MAX 226
+static const short yy_shift_ofst[] = {
+ /*     0 */    -1,   34,   66,   66,   70,   70,   80,   80,   87,   87,
+ /*    10 */    27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    20 */    27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    30 */    27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    40 */    27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+ /*    50 */    27,   27,   27,   27,  109,  177,  177,  185,  180,  180,
+ /*    60 */   189,  184,  184,  194,  190,  190,  199,  201,  196,  201,
+ /*    70 */   177,  196,  204,  207,  202,  207,  180,  202,  213,  219,
+ /*    80 */   214,  219,  184,  214,  223,  227,  225,  227,  190,  225,
+ /*    90 */   235,  177,  238,  180,  241,  184,  244,  190,  247,  109,
+ /*   100 */   245,  109,  245,  252,  185,  251,  185,  251,  258,  189,
+ /*   110 */   259,  189,  259,  267,  194,  264,  194,  264,  273,  199,
+ /*   120 */   270,  199,  270,  277,  204,  275,  204,  275,  283,  213,
+ /*   130 */   278,  213,  278,  291,  223,  286,  223,  286,  293,  289,
+ /*   140 */   289,  289,  289,  289,  289,  297,  294,  294,  294,  294,
+ /*   150 */   294,  294,  301,  298,  298,  298,  298,  298,  298,  303,
+ /*   160 */   299,  299,  299,  299,  299,  299,  308,  307,  309,  311,
+ /*   170 */   312,  314,  317,  315,  318,  306,  319,  316,  320,  321,
+ /*   180 */   324,  322,  325,  329,  326,  327,  330,  341,  342,  338,
+ /*   190 */   339,  348,  355,  356,  354,  357,  359,  366,  367,  365,
+ /*   200 */   370,  371,  377,  378,  379,  380,  381,  382,  383,  384,
+ /*   210 */   385,  386,  387,  388,  389,  390,  391,  392,  393,  394,
+ /*   220 */   395,  396,  397,  398,  399,  400,  401,
+};
+#define YY_REDUCE_USE_DFLT (-38)
+#define YY_REDUCE_MAX 165
+static const short yy_reduce_ofst[] = {
+ /*     0 */     2,  -37,   26,   29,   20,   25,   37,   47,   41,   45,
+ /*    10 */    42,   18,   28,  -32,   43,   44,   49,   50,   51,   55,
+ /*    20 */    56,   59,   60,   62,   64,   67,   69,   72,   74,   75,
+ /*    30 */    76,   81,   82,   83,   86,   89,   90,   93,   95,   97,
+ /*    40 */    99,  101,  106,  107,  105,  110,   16,   33,   46,   53,
+ /*    50 */    77,   85,   92,  108,   15,   40,  111,   21,  113,  114,
+ /*    60 */   112,  117,  118,  115,  121,  122,  119,  120,  123,  125,
+ /*    70 */   130,  126,  124,  127,  128,  131,  137,  129,  132,  133,
+ /*    80 */   134,  136,  146,  138,  142,  139,  140,  143,  153,  141,
+ /*    90 */   144,  163,  145,  166,  147,  168,  149,  170,  151,  172,
+ /*   100 */   152,  173,  154,  156,  178,  157,  182,  159,  164,  183,
+ /*   110 */   161,  187,  165,  169,  191,  171,  192,  174,  175,  193,
+ /*   120 */   176,  198,  179,  181,  200,  186,  208,  188,  195,  203,
+ /*   130 */   197,  206,  205,  209,  210,  211,  215,  212,  216,  217,
+ /*   140 */   218,  220,  221,  222,  224,  226,  228,  229,  230,  231,
+ /*   150 */   232,  233,  237,  234,  236,  239,  240,  242,  243,  248,
+ /*   160 */   246,  249,  250,  253,  254,  255,
+};
+static const YYACTIONTYPE yy_default[] = {
+ /*     0 */   359,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*    10 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*    20 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*    30 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*    40 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*    50 */   511,  511,  511,  511,  511,  403,  403,  511,  405,  405,
+ /*    60 */   511,  407,  407,  511,  409,  409,  511,  511,  428,  511,
+ /*    70 */   403,  428,  511,  511,  431,  511,  405,  431,  511,  511,
+ /*    80 */   434,  511,  407,  434,  511,  511,  437,  511,  409,  437,
+ /*    90 */   511,  403,  511,  405,  511,  407,  511,  409,  511,  511,
+ /*   100 */   452,  511,  452,  511,  511,  455,  511,  455,  511,  511,
+ /*   110 */   458,  511,  458,  511,  511,  461,  511,  461,  511,  511,
+ /*   120 */   468,  511,  468,  511,  511,  471,  511,  471,  511,  511,
+ /*   130 */   474,  511,  474,  511,  511,  477,  511,  477,  511,  486,
+ /*   140 */   486,  486,  486,  486,  486,  511,  493,  493,  493,  493,
+ /*   150 */   493,  493,  511,  500,  500,  500,  500,  500,  500,  511,
+ /*   160 */   507,  507,  507,  507,  507,  507,  511,  511,  511,  511,
+ /*   170 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*   180 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*   190 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*   200 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*   210 */   511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+ /*   220 */   511,  511,  511,  511,  511,  511,  511,  360,  361,  362,
+ /*   230 */   363,  364,  365,  366,  367,  368,  369,  370,  371,  372,
+ /*   240 */   373,  374,  375,  376,  377,  378,  379,  380,  381,  382,
+ /*   250 */   383,  384,  385,  386,  387,  388,  389,  390,  391,  392,
+ /*   260 */   393,  394,  398,  402,  395,  399,  396,  400,  397,  401,
+ /*   270 */   411,  404,  415,  412,  406,  416,  413,  408,  417,  414,
+ /*   280 */   410,  418,  419,  423,  427,  429,  420,  424,  430,  432,
+ /*   290 */   421,  425,  433,  435,  422,  426,  436,  438,  439,  443,
+ /*   300 */   440,  444,  441,  445,  442,  446,  447,  451,  453,  448,
+ /*   310 */   454,  456,  449,  457,  459,  450,  460,  462,  463,  467,
+ /*   320 */   469,  464,  470,  472,  465,  473,  475,  466,  476,  478,
+ /*   330 */   479,  483,  487,  488,  489,  484,  485,  480,  490,  494,
+ /*   340 */   495,  496,  491,  492,  481,  497,  501,  502,  503,  498,
+ /*   350 */   499,  482,  504,  508,  509,  510,  505,  506,
+};
+#define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0]))
+
+/* The next table maps tokens into fallback tokens.  If a construct
+** like the following:
+** 
+**      %fallback ID X Y Z.
+**
+** appears in the grammar, then ID becomes a fallback token for X, Y,
+** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack.  Information stored includes:
+**
+**   +  The state number for the parser at this level of the stack.
+**
+**   +  The value of the token stored at this level of the stack.
+**      (In other words, the "major" token.)
+**
+**   +  The semantic value stored at this level of the stack.  This is
+**      the information used by the action routines in the grammar.
+**      It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+  YYACTIONTYPE stateno;  /* The state-number */
+  YYCODETYPE major;      /* The major token value.  This is the code
+                         ** number for the token at this stack level */
+  YYMINORTYPE minor;     /* The user-supplied minor token value.  This
+                         ** is the value of the token  */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+  int yyidx;                    /* Index of top element in stack */
+#ifdef YYTRACKMAXSTACKDEPTH
+  int yyidxMax;                 /* Maximum value of yyidx */
+#endif
+  int yyerrcnt;                 /* Shifts left before out of the error */
+  ParseARG_SDECL                /* A place to hold %extra_argument */
+#if YYSTACKDEPTH<=0
+  int yystksz;                  /* Current side of the stack */
+  yyStackEntry *yystack;        /* The parser's stack */
+#else
+  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
+#endif
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* 
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message.  Tracing is turned off
+** by making either argument NULL 
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+**      If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+**      line of trace output.  If NULL, then tracing is
+**      turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void ParseTrace(FILE *TraceFILE, char *zTracePrompt){
+  yyTraceFILE = TraceFILE;
+  yyTracePrompt = zTracePrompt;
+  if( yyTraceFILE==0 ) yyTracePrompt = 0;
+  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required.  The following table supplies these names */
+static const char *const yyTokenName[] = { 
+  "$",             "VANUATU_NEWLINE",  "VANUATU_POINT",  "VANUATU_OPEN_BRACKET",
+  "VANUATU_CLOSE_BRACKET",  "VANUATU_POINT_M",  "VANUATU_POINT_Z",  "VANUATU_POINT_ZM",
+  "VANUATU_NUM",   "VANUATU_COMMA",  "VANUATU_LINESTRING",  "VANUATU_LINESTRING_M",
+  "VANUATU_LINESTRING_Z",  "VANUATU_LINESTRING_ZM",  "VANUATU_POLYGON",  "VANUATU_POLYGON_M",
+  "VANUATU_POLYGON_Z",  "VANUATU_POLYGON_ZM",  "VANUATU_MULTIPOINT",  "VANUATU_MULTIPOINT_M",
+  "VANUATU_MULTIPOINT_Z",  "VANUATU_MULTIPOINT_ZM",  "VANUATU_MULTILINESTRING",  "VANUATU_MULTILINESTRING_M",
+  "VANUATU_MULTILINESTRING_Z",  "VANUATU_MULTILINESTRING_ZM",  "VANUATU_MULTIPOLYGON",  "VANUATU_MULTIPOLYGON_M",
+  "VANUATU_MULTIPOLYGON_Z",  "VANUATU_MULTIPOLYGON_ZM",  "VANUATU_GEOMETRYCOLLECTION",  "VANUATU_GEOMETRYCOLLECTION_M",
+  "VANUATU_GEOMETRYCOLLECTION_Z",  "VANUATU_GEOMETRYCOLLECTION_ZM",  "error",         "main",        
+  "in",            "state",         "program",       "geo_text",    
+  "geo_textz",     "geo_textm",     "geo_textzm",    "point",       
+  "linestring",    "polygon",       "multipoint",    "multilinestring",
+  "multipolygon",  "geocoll",       "pointz",        "linestringz", 
+  "polygonz",      "multipointz",   "multilinestringz",  "multipolygonz",
+  "geocollz",      "pointm",        "linestringm",   "polygonm",    
+  "multipointm",   "multilinestringm",  "multipolygonm",  "geocollm",    
+  "pointzm",       "linestringzm",  "polygonzm",     "multipointzm",
+  "multilinestringzm",  "multipolygonzm",  "geocollzm",     "point_coordxy",
+  "point_coordxym",  "point_coordxyz",  "point_coordxyzm",  "coord",       
+  "extra_pointsxy",  "extra_pointsxym",  "extra_pointsxyz",  "extra_pointsxyzm",
+  "linestring_text",  "linestring_textm",  "linestring_textz",  "linestring_textzm",
+  "polygon_text",  "polygon_textm",  "polygon_textz",  "polygon_textzm",
+  "ring",          "extra_rings",   "ringm",         "extra_ringsm",
+  "ringz",         "extra_ringsz",  "ringzm",        "extra_ringszm",
+  "multipoint_text",  "multipoint_textm",  "multipoint_textz",  "multipoint_textzm",
+  "multilinestring_text",  "multilinestring_textm",  "multilinestring_textz",  "multilinestring_textzm",
+  "multilinestring_text2",  "multilinestring_textm2",  "multilinestring_textz2",  "multilinestring_textzm2",
+  "multipolygon_text",  "multipolygon_textm",  "multipolygon_textz",  "multipolygon_textzm",
+  "multipolygon_text2",  "multipolygon_textm2",  "multipolygon_textz2",  "multipolygon_textzm2",
+  "geocoll_text",  "geocoll_textm",  "geocoll_textz",  "geocoll_textzm",
+  "geocoll_text2",  "geocoll_textm2",  "geocoll_textz2",  "geocoll_textzm2",
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *const yyRuleName[] = {
+ /*   0 */ "main ::= in",
+ /*   1 */ "in ::=",
+ /*   2 */ "in ::= in state VANUATU_NEWLINE",
+ /*   3 */ "state ::= program",
+ /*   4 */ "program ::= geo_text",
+ /*   5 */ "program ::= geo_textz",
+ /*   6 */ "program ::= geo_textm",
+ /*   7 */ "program ::= geo_textzm",
+ /*   8 */ "geo_text ::= point",
+ /*   9 */ "geo_text ::= linestring",
+ /*  10 */ "geo_text ::= polygon",
+ /*  11 */ "geo_text ::= multipoint",
+ /*  12 */ "geo_text ::= multilinestring",
+ /*  13 */ "geo_text ::= multipolygon",
+ /*  14 */ "geo_text ::= geocoll",
+ /*  15 */ "geo_textz ::= pointz",
+ /*  16 */ "geo_textz ::= linestringz",
+ /*  17 */ "geo_textz ::= polygonz",
+ /*  18 */ "geo_textz ::= multipointz",
+ /*  19 */ "geo_textz ::= multilinestringz",
+ /*  20 */ "geo_textz ::= multipolygonz",
+ /*  21 */ "geo_textz ::= geocollz",
+ /*  22 */ "geo_textm ::= pointm",
+ /*  23 */ "geo_textm ::= linestringm",
+ /*  24 */ "geo_textm ::= polygonm",
+ /*  25 */ "geo_textm ::= multipointm",
+ /*  26 */ "geo_textm ::= multilinestringm",
+ /*  27 */ "geo_textm ::= multipolygonm",
+ /*  28 */ "geo_textm ::= geocollm",
+ /*  29 */ "geo_textzm ::= pointzm",
+ /*  30 */ "geo_textzm ::= linestringzm",
+ /*  31 */ "geo_textzm ::= polygonzm",
+ /*  32 */ "geo_textzm ::= multipointzm",
+ /*  33 */ "geo_textzm ::= multilinestringzm",
+ /*  34 */ "geo_textzm ::= multipolygonzm",
+ /*  35 */ "geo_textzm ::= geocollzm",
+ /*  36 */ "point ::= VANUATU_POINT VANUATU_OPEN_BRACKET point_coordxy VANUATU_CLOSE_BRACKET",
+ /*  37 */ "pointm ::= VANUATU_POINT_M VANUATU_OPEN_BRACKET point_coordxym VANUATU_CLOSE_BRACKET",
+ /*  38 */ "pointz ::= VANUATU_POINT_Z VANUATU_OPEN_BRACKET point_coordxyz VANUATU_CLOSE_BRACKET",
+ /*  39 */ "pointzm ::= VANUATU_POINT_ZM VANUATU_OPEN_BRACKET point_coordxyzm VANUATU_CLOSE_BRACKET",
+ /*  40 */ "point_coordxy ::= coord coord",
+ /*  41 */ "point_coordxym ::= coord coord coord",
+ /*  42 */ "point_coordxyz ::= coord coord coord",
+ /*  43 */ "point_coordxyzm ::= coord coord coord coord",
+ /*  44 */ "coord ::= VANUATU_NUM",
+ /*  45 */ "extra_pointsxy ::=",
+ /*  46 */ "extra_pointsxy ::= VANUATU_COMMA point_coordxy extra_pointsxy",
+ /*  47 */ "extra_pointsxym ::=",
+ /*  48 */ "extra_pointsxym ::= VANUATU_COMMA point_coordxym extra_pointsxym",
+ /*  49 */ "extra_pointsxyz ::=",
+ /*  50 */ "extra_pointsxyz ::= VANUATU_COMMA point_coordxyz extra_pointsxyz",
+ /*  51 */ "extra_pointsxyzm ::=",
+ /*  52 */ "extra_pointsxyzm ::= VANUATU_COMMA point_coordxyzm extra_pointsxyzm",
+ /*  53 */ "linestring ::= VANUATU_LINESTRING linestring_text",
+ /*  54 */ "linestringm ::= VANUATU_LINESTRING_M linestring_textm",
+ /*  55 */ "linestringz ::= VANUATU_LINESTRING_Z linestring_textz",
+ /*  56 */ "linestringzm ::= VANUATU_LINESTRING_ZM linestring_textzm",
+ /*  57 */ "linestring_text ::= VANUATU_OPEN_BRACKET point_coordxy VANUATU_COMMA point_coordxy extra_pointsxy VANUATU_CLOSE_BRACKET",
+ /*  58 */ "linestring_textm ::= VANUATU_OPEN_BRACKET point_coordxym VANUATU_COMMA point_coordxym extra_pointsxym VANUATU_CLOSE_BRACKET",
+ /*  59 */ "linestring_textz ::= VANUATU_OPEN_BRACKET point_coordxyz VANUATU_COMMA point_coordxyz extra_pointsxyz VANUATU_CLOSE_BRACKET",
+ /*  60 */ "linestring_textzm ::= VANUATU_OPEN_BRACKET point_coordxyzm VANUATU_COMMA point_coordxyzm extra_pointsxyzm VANUATU_CLOSE_BRACKET",
+ /*  61 */ "polygon ::= VANUATU_POLYGON polygon_text",
+ /*  62 */ "polygonm ::= VANUATU_POLYGON_M polygon_textm",
+ /*  63 */ "polygonz ::= VANUATU_POLYGON_Z polygon_textz",
+ /*  64 */ "polygonzm ::= VANUATU_POLYGON_ZM polygon_textzm",
+ /*  65 */ "polygon_text ::= VANUATU_OPEN_BRACKET ring extra_rings VANUATU_CLOSE_BRACKET",
+ /*  66 */ "polygon_textm ::= VANUATU_OPEN_BRACKET ringm extra_ringsm VANUATU_CLOSE_BRACKET",
+ /*  67 */ "polygon_textz ::= VANUATU_OPEN_BRACKET ringz extra_ringsz VANUATU_CLOSE_BRACKET",
+ /*  68 */ "polygon_textzm ::= VANUATU_OPEN_BRACKET ringzm extra_ringszm VANUATU_CLOSE_BRACKET",
+ /*  69 */ "ring ::= VANUATU_OPEN_BRACKET point_coordxy VANUATU_COMMA point_coordxy VANUATU_COMMA point_coordxy VANUATU_COMMA point_coordxy extra_pointsxy VANUATU_CLOSE_BRACKET",
+ /*  70 */ "extra_rings ::=",
+ /*  71 */ "extra_rings ::= VANUATU_COMMA ring extra_rings",
+ /*  72 */ "ringm ::= VANUATU_OPEN_BRACKET point_coordxym VANUATU_COMMA point_coordxym VANUATU_COMMA point_coordxym VANUATU_COMMA point_coordxym extra_pointsxym VANUATU_CLOSE_BRACKET",
+ /*  73 */ "extra_ringsm ::=",
+ /*  74 */ "extra_ringsm ::= VANUATU_COMMA ringm extra_ringsm",
+ /*  75 */ "ringz ::= VANUATU_OPEN_BRACKET point_coordxyz VANUATU_COMMA point_coordxyz VANUATU_COMMA point_coordxyz VANUATU_COMMA point_coordxyz extra_pointsxyz VANUATU_CLOSE_BRACKET",
+ /*  76 */ "extra_ringsz ::=",
+ /*  77 */ "extra_ringsz ::= VANUATU_COMMA ringz extra_ringsz",
+ /*  78 */ "ringzm ::= VANUATU_OPEN_BRACKET point_coordxyzm VANUATU_COMMA point_coordxyzm VANUATU_COMMA point_coordxyzm VANUATU_COMMA point_coordxyzm extra_pointsxyzm VANUATU_CLOSE_BRACKET",
+ /*  79 */ "extra_ringszm ::=",
+ /*  80 */ "extra_ringszm ::= VANUATU_COMMA ringzm extra_ringszm",
+ /*  81 */ "multipoint ::= VANUATU_MULTIPOINT multipoint_text",
+ /*  82 */ "multipointm ::= VANUATU_MULTIPOINT_M multipoint_textm",
+ /*  83 */ "multipointz ::= VANUATU_MULTIPOINT_Z multipoint_textz",
+ /*  84 */ "multipointzm ::= VANUATU_MULTIPOINT_ZM multipoint_textzm",
+ /*  85 */ "multipoint_text ::= VANUATU_OPEN_BRACKET point_coordxy extra_pointsxy VANUATU_CLOSE_BRACKET",
+ /*  86 */ "multipoint_textm ::= VANUATU_OPEN_BRACKET point_coordxym extra_pointsxym VANUATU_CLOSE_BRACKET",
+ /*  87 */ "multipoint_textz ::= VANUATU_OPEN_BRACKET point_coordxyz extra_pointsxyz VANUATU_CLOSE_BRACKET",
+ /*  88 */ "multipoint_textzm ::= VANUATU_OPEN_BRACKET point_coordxyzm extra_pointsxyzm VANUATU_CLOSE_BRACKET",
+ /*  89 */ "multilinestring ::= VANUATU_MULTILINESTRING multilinestring_text",
+ /*  90 */ "multilinestringm ::= VANUATU_MULTILINESTRING_M multilinestring_textm",
+ /*  91 */ "multilinestringz ::= VANUATU_MULTILINESTRING_Z multilinestring_textz",
+ /*  92 */ "multilinestringzm ::= VANUATU_MULTILINESTRING_ZM multilinestring_textzm",
+ /*  93 */ "multilinestring_text ::= VANUATU_OPEN_BRACKET linestring_text multilinestring_text2 VANUATU_CLOSE_BRACKET",
+ /*  94 */ "multilinestring_text2 ::=",
+ /*  95 */ "multilinestring_text2 ::= VANUATU_COMMA linestring_text multilinestring_text2",
+ /*  96 */ "multilinestring_textm ::= VANUATU_OPEN_BRACKET linestring_textm multilinestring_textm2 VANUATU_CLOSE_BRACKET",
+ /*  97 */ "multilinestring_textm2 ::=",
+ /*  98 */ "multilinestring_textm2 ::= VANUATU_COMMA linestring_textm multilinestring_textm2",
+ /*  99 */ "multilinestring_textz ::= VANUATU_OPEN_BRACKET linestring_textz multilinestring_textz2 VANUATU_CLOSE_BRACKET",
+ /* 100 */ "multilinestring_textz2 ::=",
+ /* 101 */ "multilinestring_textz2 ::= VANUATU_COMMA linestring_textz multilinestring_textz2",
+ /* 102 */ "multilinestring_textzm ::= VANUATU_OPEN_BRACKET linestring_textzm multilinestring_textzm2 VANUATU_CLOSE_BRACKET",
+ /* 103 */ "multilinestring_textzm2 ::=",
+ /* 104 */ "multilinestring_textzm2 ::= VANUATU_COMMA linestring_textzm multilinestring_textzm2",
+ /* 105 */ "multipolygon ::= VANUATU_MULTIPOLYGON multipolygon_text",
+ /* 106 */ "multipolygonm ::= VANUATU_MULTIPOLYGON_M multipolygon_textm",
+ /* 107 */ "multipolygonz ::= VANUATU_MULTIPOLYGON_Z multipolygon_textz",
+ /* 108 */ "multipolygonzm ::= VANUATU_MULTIPOLYGON_ZM multipolygon_textzm",
+ /* 109 */ "multipolygon_text ::= VANUATU_OPEN_BRACKET polygon_text multipolygon_text2 VANUATU_CLOSE_BRACKET",
+ /* 110 */ "multipolygon_text2 ::=",
+ /* 111 */ "multipolygon_text2 ::= VANUATU_COMMA polygon_text multipolygon_text2",
+ /* 112 */ "multipolygon_textm ::= VANUATU_OPEN_BRACKET polygon_textm multipolygon_textm2 VANUATU_CLOSE_BRACKET",
+ /* 113 */ "multipolygon_textm2 ::=",
+ /* 114 */ "multipolygon_textm2 ::= VANUATU_COMMA polygon_textm multipolygon_textm2",
+ /* 115 */ "multipolygon_textz ::= VANUATU_OPEN_BRACKET polygon_textz multipolygon_textz2 VANUATU_CLOSE_BRACKET",
+ /* 116 */ "multipolygon_textz2 ::=",
+ /* 117 */ "multipolygon_textz2 ::= VANUATU_COMMA polygon_textz multipolygon_textz2",
+ /* 118 */ "multipolygon_textzm ::= VANUATU_OPEN_BRACKET polygon_textzm multipolygon_textzm2 VANUATU_CLOSE_BRACKET",
+ /* 119 */ "multipolygon_textzm2 ::=",
+ /* 120 */ "multipolygon_textzm2 ::= VANUATU_COMMA polygon_textzm multipolygon_textzm2",
+ /* 121 */ "geocoll ::= VANUATU_GEOMETRYCOLLECTION geocoll_text",
+ /* 122 */ "geocollm ::= VANUATU_GEOMETRYCOLLECTION_M geocoll_textm",
+ /* 123 */ "geocollz ::= VANUATU_GEOMETRYCOLLECTION_Z geocoll_textz",
+ /* 124 */ "geocollzm ::= VANUATU_GEOMETRYCOLLECTION_ZM geocoll_textzm",
+ /* 125 */ "geocoll_text ::= VANUATU_OPEN_BRACKET point geocoll_text2 VANUATU_CLOSE_BRACKET",
+ /* 126 */ "geocoll_text ::= VANUATU_OPEN_BRACKET linestring geocoll_text2 VANUATU_CLOSE_BRACKET",
+ /* 127 */ "geocoll_text ::= VANUATU_OPEN_BRACKET polygon geocoll_text2 VANUATU_CLOSE_BRACKET",
+ /* 128 */ "geocoll_text2 ::=",
+ /* 129 */ "geocoll_text2 ::= VANUATU_COMMA point geocoll_text2",
+ /* 130 */ "geocoll_text2 ::= VANUATU_COMMA linestring geocoll_text2",
+ /* 131 */ "geocoll_text2 ::= VANUATU_COMMA polygon geocoll_text2",
+ /* 132 */ "geocoll_textm ::= VANUATU_OPEN_BRACKET pointm geocoll_textm2 VANUATU_CLOSE_BRACKET",
+ /* 133 */ "geocoll_textm ::= VANUATU_OPEN_BRACKET linestringm geocoll_textm2 VANUATU_CLOSE_BRACKET",
+ /* 134 */ "geocoll_textm ::= VANUATU_OPEN_BRACKET polygonm geocoll_textm2 VANUATU_CLOSE_BRACKET",
+ /* 135 */ "geocoll_textm2 ::=",
+ /* 136 */ "geocoll_textm2 ::= VANUATU_COMMA pointm geocoll_textm2",
+ /* 137 */ "geocoll_textm2 ::= VANUATU_COMMA linestringm geocoll_textm2",
+ /* 138 */ "geocoll_textm2 ::= VANUATU_COMMA polygonm geocoll_textm2",
+ /* 139 */ "geocoll_textz ::= VANUATU_OPEN_BRACKET pointz geocoll_textz2 VANUATU_CLOSE_BRACKET",
+ /* 140 */ "geocoll_textz ::= VANUATU_OPEN_BRACKET linestringz geocoll_textz2 VANUATU_CLOSE_BRACKET",
+ /* 141 */ "geocoll_textz ::= VANUATU_OPEN_BRACKET polygonz geocoll_textz2 VANUATU_CLOSE_BRACKET",
+ /* 142 */ "geocoll_textz2 ::=",
+ /* 143 */ "geocoll_textz2 ::= VANUATU_COMMA pointz geocoll_textz2",
+ /* 144 */ "geocoll_textz2 ::= VANUATU_COMMA linestringz geocoll_textz2",
+ /* 145 */ "geocoll_textz2 ::= VANUATU_COMMA polygonz geocoll_textz2",
+ /* 146 */ "geocoll_textzm ::= VANUATU_OPEN_BRACKET pointzm geocoll_textzm2 VANUATU_CLOSE_BRACKET",
+ /* 147 */ "geocoll_textzm ::= VANUATU_OPEN_BRACKET linestringzm geocoll_textzm2 VANUATU_CLOSE_BRACKET",
+ /* 148 */ "geocoll_textzm ::= VANUATU_OPEN_BRACKET polygonzm geocoll_textzm2 VANUATU_CLOSE_BRACKET",
+ /* 149 */ "geocoll_textzm2 ::=",
+ /* 150 */ "geocoll_textzm2 ::= VANUATU_COMMA pointzm geocoll_textzm2",
+ /* 151 */ "geocoll_textzm2 ::= VANUATU_COMMA linestringzm geocoll_textzm2",
+ /* 152 */ "geocoll_textzm2 ::= VANUATU_COMMA polygonzm geocoll_textzm2",
+};
+#endif /* NDEBUG */
+
+
+#if YYSTACKDEPTH<=0
+/*
+** Try to increase the size of the parser stack.
+*/
+static void yyGrowStack(yyParser *p){
+  int newSize;
+  yyStackEntry *pNew;
+
+  newSize = p->yystksz*2 + 100;
+  pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+  if( pNew ){
+    p->yystack = pNew;
+    p->yystksz = newSize;
+#ifndef NDEBUG
+    if( yyTraceFILE ){
+      fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
+              yyTracePrompt, p->yystksz);
+    }
+#endif
+  }
+}
+#endif
+
+/* 
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser.  This pointer is used in subsequent calls
+** to Parse and ParseFree.
+*/
+void *ParseAlloc(void *(*mallocProc)(size_t)){
+  yyParser *pParser;
+  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+  if( pParser ){
+    pParser->yyidx = -1;
+#ifdef YYTRACKMAXSTACKDEPTH
+    pParser->yyidxMax = 0;
+#endif
+#if YYSTACKDEPTH<=0
+    pParser->yystack = NULL;
+    pParser->yystksz = 0;
+    yyGrowStack(pParser);
+#endif
+  }
+  return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol.  The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(
+  yyParser *yypParser,    /* The parser */
+  YYCODETYPE yymajor,     /* Type code for object to destroy */
+  YYMINORTYPE *yypminor   /* The object to be destroyed */
+){
+  ParseARG_FETCH;
+  switch( yymajor ){
+    /* Here is inserted the actions which take place when a
+    ** terminal or non-terminal is destroyed.  This can happen
+    ** when the symbol is popped from the stack during a
+    ** reduce or during error processing or when a parser is 
+    ** being destroyed before it is finished parsing.
+    **
+    ** Note: during a reduce, the only symbols destroyed are those
+    ** which appear on the RHS of the rule, but which are not used
+    ** inside the C code.
+    */
+    default:  break;   /* If no destructor action specified: do nothing */
+  }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+  YYCODETYPE yymajor;
+  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+  if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+  if( yyTraceFILE && pParser->yyidx>=0 ){
+    fprintf(yyTraceFILE,"%sPopping %s\n",
+      yyTracePrompt,
+      yyTokenName[yytos->major]);
+  }
+#endif
+  yymajor = yytos->major;
+  yy_destructor(pParser, yymajor, &yytos->minor);
+  pParser->yyidx--;
+  return yymajor;
+}
+
+/* 
+** Deallocate and destroy a parser.  Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li>  A pointer to the parser.  This should be a pointer
+**       obtained from ParseAlloc.
+** <li>  A pointer to a function used to reclaim memory obtained
+**       from malloc.
+** </ul>
+*/
+void ParseFree(
+  void *p,                    /* The parser to be deleted */
+  void (*freeProc)(void*)     /* Function used to reclaim memory */
+){
+  yyParser *pParser = (yyParser*)p;
+  if( pParser==0 ) return;
+  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+#if YYSTACKDEPTH<=0
+  free(pParser->yystack);
+#endif
+  (*freeProc)((void*)pParser);
+}
+
+/*
+** Return the peak depth of the stack for a parser.
+*/
+#ifdef YYTRACKMAXSTACKDEPTH
+int ParseStackPeak(void *p){
+  yyParser *pParser = (yyParser*)p;
+  return pParser->yyidxMax;
+}
+#endif
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+  yyParser *pParser,        /* The parser */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+ 
+  if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    if( iLookAhead>0 ){
+#ifdef YYFALLBACK
+      YYCODETYPE iFallback;            /* Fallback token */
+      if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+             && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+             yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+        }
+#endif
+        return yy_find_shift_action(pParser, iFallback);
+      }
+#endif
+#ifdef YYWILDCARD
+      {
+        int j = i - iLookAhead + YYWILDCARD;
+        if( j>=0 && j<YY_SZ_ACTTAB && yy_lookahead[j]==YYWILDCARD ){
+#ifndef NDEBUG
+          if( yyTraceFILE ){
+            fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
+               yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
+          }
+#endif /* NDEBUG */
+          return yy_action[j];
+        }
+      }
+#endif /* YYWILDCARD */
+    }
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+  int stateno,              /* Current state number */
+  YYCODETYPE iLookAhead     /* The look-ahead token */
+){
+  int i;
+#ifdef YYERRORSYMBOL
+  if( stateno>YY_REDUCE_MAX ){
+    return yy_default[stateno];
+  }
+#else
+  assert( stateno<=YY_REDUCE_MAX );
+#endif
+  i = yy_reduce_ofst[stateno];
+  assert( i!=YY_REDUCE_USE_DFLT );
+  assert( iLookAhead!=YYNOCODE );
+  i += iLookAhead;
+#ifdef YYERRORSYMBOL
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    return yy_default[stateno];
+  }
+#else
+  assert( i>=0 && i<YY_SZ_ACTTAB );
+  assert( yy_lookahead[i]==iLookAhead );
+#endif
+  return yy_action[i];
+}
+
+/*
+** The following routine is called if the stack overflows.
+*/
+static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
+   ParseARG_FETCH;
+   yypParser->yyidx--;
+#ifndef NDEBUG
+   if( yyTraceFILE ){
+     fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+   }
+#endif
+   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+   /* Here code is inserted which will execute if the parser
+   ** stack every overflows */
+#line 69 "vanuatuWkt.y"
+
+     fprintf(stderr,"Giving up.  Parser stack overflow\n");
+#line 851 "vanuatuWkt.c"
+   ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+  yyParser *yypParser,          /* The parser to be shifted */
+  int yyNewState,               /* The new state to shift in */
+  int yyMajor,                  /* The major token to shift in */
+  YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
+){
+  yyStackEntry *yytos;
+  yypParser->yyidx++;
+#ifdef YYTRACKMAXSTACKDEPTH
+  if( yypParser->yyidx>yypParser->yyidxMax ){
+    yypParser->yyidxMax = yypParser->yyidx;
+  }
+#endif
+#if YYSTACKDEPTH>0 
+  if( yypParser->yyidx>=YYSTACKDEPTH ){
+    yyStackOverflow(yypParser, yypMinor);
+    return;
+  }
+#else
+  if( yypParser->yyidx>=yypParser->yystksz ){
+    yyGrowStack(yypParser);
+    if( yypParser->yyidx>=yypParser->yystksz ){
+      yyStackOverflow(yypParser, yypMinor);
+      return;
+    }
+  }
+#endif
+  yytos = &yypParser->yystack[yypParser->yyidx];
+  yytos->stateno = (YYACTIONTYPE)yyNewState;
+  yytos->major = (YYCODETYPE)yyMajor;
+  yytos->minor = *yypMinor;
+#ifndef NDEBUG
+  if( yyTraceFILE && yypParser->yyidx>0 ){
+    int i;
+    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+    for(i=1; i<=yypParser->yyidx; i++)
+      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+    fprintf(yyTraceFILE,"\n");
+  }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static const struct {
+  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
+  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+  { 35, 1 },
+  { 36, 0 },
+  { 36, 3 },
+  { 37, 1 },
+  { 38, 1 },
+  { 38, 1 },
+  { 38, 1 },
+  { 38, 1 },
+  { 39, 1 },
+  { 39, 1 },
+  { 39, 1 },
+  { 39, 1 },
+  { 39, 1 },
+  { 39, 1 },
+  { 39, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 41, 1 },
+  { 41, 1 },
+  { 41, 1 },
+  { 41, 1 },
+  { 41, 1 },
+  { 41, 1 },
+  { 41, 1 },
+  { 42, 1 },
+  { 42, 1 },
+  { 42, 1 },
+  { 42, 1 },
+  { 42, 1 },
+  { 42, 1 },
+  { 42, 1 },
+  { 43, 4 },
+  { 57, 4 },
+  { 50, 4 },
+  { 64, 4 },
+  { 71, 2 },
+  { 72, 3 },
+  { 73, 3 },
+  { 74, 4 },
+  { 75, 1 },
+  { 76, 0 },
+  { 76, 3 },
+  { 77, 0 },
+  { 77, 3 },
+  { 78, 0 },
+  { 78, 3 },
+  { 79, 0 },
+  { 79, 3 },
+  { 44, 2 },
+  { 58, 2 },
+  { 51, 2 },
+  { 65, 2 },
+  { 80, 6 },
+  { 81, 6 },
+  { 82, 6 },
+  { 83, 6 },
+  { 45, 2 },
+  { 59, 2 },
+  { 52, 2 },
+  { 66, 2 },
+  { 84, 4 },
+  { 85, 4 },
+  { 86, 4 },
+  { 87, 4 },
+  { 88, 10 },
+  { 89, 0 },
+  { 89, 3 },
+  { 90, 10 },
+  { 91, 0 },
+  { 91, 3 },
+  { 92, 10 },
+  { 93, 0 },
+  { 93, 3 },
+  { 94, 10 },
+  { 95, 0 },
+  { 95, 3 },
+  { 46, 2 },
+  { 60, 2 },
+  { 53, 2 },
+  { 67, 2 },
+  { 96, 4 },
+  { 97, 4 },
+  { 98, 4 },
+  { 99, 4 },
+  { 47, 2 },
+  { 61, 2 },
+  { 54, 2 },
+  { 68, 2 },
+  { 100, 4 },
+  { 104, 0 },
+  { 104, 3 },
+  { 101, 4 },
+  { 105, 0 },
+  { 105, 3 },
+  { 102, 4 },
+  { 106, 0 },
+  { 106, 3 },
+  { 103, 4 },
+  { 107, 0 },
+  { 107, 3 },
+  { 48, 2 },
+  { 62, 2 },
+  { 55, 2 },
+  { 69, 2 },
+  { 108, 4 },
+  { 112, 0 },
+  { 112, 3 },
+  { 109, 4 },
+  { 113, 0 },
+  { 113, 3 },
+  { 110, 4 },
+  { 114, 0 },
+  { 114, 3 },
+  { 111, 4 },
+  { 115, 0 },
+  { 115, 3 },
+  { 49, 2 },
+  { 63, 2 },
+  { 56, 2 },
+  { 70, 2 },
+  { 116, 4 },
+  { 116, 4 },
+  { 116, 4 },
+  { 120, 0 },
+  { 120, 3 },
+  { 120, 3 },
+  { 120, 3 },
+  { 117, 4 },
+  { 117, 4 },
+  { 117, 4 },
+  { 121, 0 },
+  { 121, 3 },
+  { 121, 3 },
+  { 121, 3 },
+  { 118, 4 },
+  { 118, 4 },
+  { 118, 4 },
+  { 122, 0 },
+  { 122, 3 },
+  { 122, 3 },
+  { 122, 3 },
+  { 119, 4 },
+  { 119, 4 },
+  { 119, 4 },
+  { 123, 0 },
+  { 123, 3 },
+  { 123, 3 },
+  { 123, 3 },
+};
+
+static void yy_accept(yyParser*);  /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+  yyParser *yypParser,         /* The parser */
+  int yyruleno                 /* Number of the rule by which to reduce */
+){
+  int yygoto;                     /* The next state */
+  int yyact;                      /* The next action */
+  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
+  yyStackEntry *yymsp;            /* The top of the parser's stack */
+  int yysize;                     /* Amount to pop the stack */
+  ParseARG_FETCH;
+  yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+  if( yyTraceFILE && yyruleno>=0 
+        && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
+    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+      yyRuleName[yyruleno]);
+  }
+#endif /* NDEBUG */
+
+  /* Silence complaints from purify about yygotominor being uninitialized
+  ** in some cases when it is copied into the stack after the following
+  ** switch.  yygotominor is uninitialized when a rule reduces that does
+  ** not set the value of its left-hand side nonterminal.  Leaving the
+  ** value of the nonterminal uninitialized is utterly harmless as long
+  ** as the value is never used.  So really the only thing this code
+  ** accomplishes is to quieten purify.  
+  **
+  ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
+  ** without this code, their parser segfaults.  I'm not sure what there
+  ** parser is doing to make this happen.  This is the second bug report
+  ** from wireshark this week.  Clearly they are stressing Lemon in ways
+  ** that it has not been previously stressed...  (SQLite ticket #2172)
+  */
+  /*memset(&yygotominor, 0, sizeof(yygotominor));*/
+  yygotominor = yyzerominor;
+
+
+  switch( yyruleno ){
+  /* Beginning here are the reduction cases.  A typical example
+  ** follows:
+  **   case 0:
+  **  #line <lineno> <grammarfile>
+  **     { ... }           // User supplied code
+  **  #line <lineno> <thisfile>
+  **     break;
+  */
+      case 8: /* geo_text ::= point */
+      case 9: /* geo_text ::= linestring */ yytestcase(yyruleno==9);
+      case 10: /* geo_text ::= polygon */ yytestcase(yyruleno==10);
+      case 11: /* geo_text ::= multipoint */ yytestcase(yyruleno==11);
+      case 12: /* geo_text ::= multilinestring */ yytestcase(yyruleno==12);
+      case 13: /* geo_text ::= multipolygon */ yytestcase(yyruleno==13);
+      case 14: /* geo_text ::= geocoll */ yytestcase(yyruleno==14);
+      case 15: /* geo_textz ::= pointz */ yytestcase(yyruleno==15);
+      case 16: /* geo_textz ::= linestringz */ yytestcase(yyruleno==16);
+      case 17: /* geo_textz ::= polygonz */ yytestcase(yyruleno==17);
+      case 18: /* geo_textz ::= multipointz */ yytestcase(yyruleno==18);
+      case 19: /* geo_textz ::= multilinestringz */ yytestcase(yyruleno==19);
+      case 20: /* geo_textz ::= multipolygonz */ yytestcase(yyruleno==20);
+      case 21: /* geo_textz ::= geocollz */ yytestcase(yyruleno==21);
+      case 22: /* geo_textm ::= pointm */ yytestcase(yyruleno==22);
+      case 23: /* geo_textm ::= linestringm */ yytestcase(yyruleno==23);
+      case 24: /* geo_textm ::= polygonm */ yytestcase(yyruleno==24);
+      case 25: /* geo_textm ::= multipointm */ yytestcase(yyruleno==25);
+      case 26: /* geo_textm ::= multilinestringm */ yytestcase(yyruleno==26);
+      case 27: /* geo_textm ::= multipolygonm */ yytestcase(yyruleno==27);
+      case 28: /* geo_textm ::= geocollm */ yytestcase(yyruleno==28);
+      case 29: /* geo_textzm ::= pointzm */ yytestcase(yyruleno==29);
+      case 30: /* geo_textzm ::= linestringzm */ yytestcase(yyruleno==30);
+      case 31: /* geo_textzm ::= polygonzm */ yytestcase(yyruleno==31);
+      case 32: /* geo_textzm ::= multipointzm */ yytestcase(yyruleno==32);
+      case 33: /* geo_textzm ::= multilinestringzm */ yytestcase(yyruleno==33);
+      case 34: /* geo_textzm ::= multipolygonzm */ yytestcase(yyruleno==34);
+      case 35: /* geo_textzm ::= geocollzm */ yytestcase(yyruleno==35);
+#line 115 "vanuatuWkt.y"
+{ *result = yymsp[0].minor.yy0; }
+#line 1145 "vanuatuWkt.c"
+        break;
+      case 36: /* point ::= VANUATU_POINT VANUATU_OPEN_BRACKET point_coordxy VANUATU_CLOSE_BRACKET */
+#line 154 "vanuatuWkt.y"
+{ yygotominor.yy0 = vanuatu_buildGeomFromPoint((gaiaPointPtr)yymsp[-1].minor.yy0); }
+#line 1150 "vanuatuWkt.c"
+        break;
+      case 37: /* pointm ::= VANUATU_POINT_M VANUATU_OPEN_BRACKET point_coordxym VANUATU_CLOSE_BRACKET */
+      case 38: /* pointz ::= VANUATU_POINT_Z VANUATU_OPEN_BRACKET point_coordxyz VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==38);
+      case 39: /* pointzm ::= VANUATU_POINT_ZM VANUATU_OPEN_BRACKET point_coordxyzm VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==39);
+#line 156 "vanuatuWkt.y"
+{ yygotominor.yy0 = vanuatu_buildGeomFromPoint((gaiaPointPtr)yymsp[-1].minor.yy0);  }
+#line 1157 "vanuatuWkt.c"
+        break;
+      case 40: /* point_coordxy ::= coord coord */
+#line 165 "vanuatuWkt.y"
+{ yygotominor.yy0 = (void *) vanuatu_point_xy((double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+#line 1162 "vanuatuWkt.c"
+        break;
+      case 41: /* point_coordxym ::= coord coord coord */
+#line 167 "vanuatuWkt.y"
+{ yygotominor.yy0 = (void *) vanuatu_point_xym((double *)yymsp[-2].minor.yy0, (double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+#line 1167 "vanuatuWkt.c"
+        break;
+      case 42: /* point_coordxyz ::= coord coord coord */
+#line 169 "vanuatuWkt.y"
+{ yygotominor.yy0 = (void *) vanuatu_point_xyz((double *)yymsp[-2].minor.yy0, (double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+#line 1172 "vanuatuWkt.c"
+        break;
+      case 43: /* point_coordxyzm ::= coord coord coord coord */
+#line 171 "vanuatuWkt.y"
+{ yygotominor.yy0 = (void *) vanuatu_point_xyzm((double *)yymsp[-3].minor.yy0, (double *)yymsp[-2].minor.yy0, (double *)yymsp[-1].minor.yy0, (double *)yymsp[0].minor.yy0); }
+#line 1177 "vanuatuWkt.c"
+        break;
+      case 44: /* coord ::= VANUATU_NUM */
+      case 81: /* multipoint ::= VANUATU_MULTIPOINT multipoint_text */ yytestcase(yyruleno==81);
+      case 82: /* multipointm ::= VANUATU_MULTIPOINT_M multipoint_textm */ yytestcase(yyruleno==82);
+      case 83: /* multipointz ::= VANUATU_MULTIPOINT_Z multipoint_textz */ yytestcase(yyruleno==83);
+      case 84: /* multipointzm ::= VANUATU_MULTIPOINT_ZM multipoint_textzm */ yytestcase(yyruleno==84);
+      case 89: /* multilinestring ::= VANUATU_MULTILINESTRING multilinestring_text */ yytestcase(yyruleno==89);
+      case 90: /* multilinestringm ::= VANUATU_MULTILINESTRING_M multilinestring_textm */ yytestcase(yyruleno==90);
+      case 91: /* multilinestringz ::= VANUATU_MULTILINESTRING_Z multilinestring_textz */ yytestcase(yyruleno==91);
+      case 92: /* multilinestringzm ::= VANUATU_MULTILINESTRING_ZM multilinestring_textzm */ yytestcase(yyruleno==92);
+      case 105: /* multipolygon ::= VANUATU_MULTIPOLYGON multipolygon_text */ yytestcase(yyruleno==105);
+      case 106: /* multipolygonm ::= VANUATU_MULTIPOLYGON_M multipolygon_textm */ yytestcase(yyruleno==106);
+      case 107: /* multipolygonz ::= VANUATU_MULTIPOLYGON_Z multipolygon_textz */ yytestcase(yyruleno==107);
+      case 108: /* multipolygonzm ::= VANUATU_MULTIPOLYGON_ZM multipolygon_textzm */ yytestcase(yyruleno==108);
+      case 121: /* geocoll ::= VANUATU_GEOMETRYCOLLECTION geocoll_text */ yytestcase(yyruleno==121);
+      case 122: /* geocollm ::= VANUATU_GEOMETRYCOLLECTION_M geocoll_textm */ yytestcase(yyruleno==122);
+      case 123: /* geocollz ::= VANUATU_GEOMETRYCOLLECTION_Z geocoll_textz */ yytestcase(yyruleno==123);
+      case 124: /* geocollzm ::= VANUATU_GEOMETRYCOLLECTION_ZM geocoll_textzm */ yytestcase(yyruleno==124);
+#line 174 "vanuatuWkt.y"
+{ yygotominor.yy0 = yymsp[0].minor.yy0; }
+#line 1198 "vanuatuWkt.c"
+        break;
+      case 45: /* extra_pointsxy ::= */
+      case 47: /* extra_pointsxym ::= */ yytestcase(yyruleno==47);
+      case 49: /* extra_pointsxyz ::= */ yytestcase(yyruleno==49);
+      case 51: /* extra_pointsxyzm ::= */ yytestcase(yyruleno==51);
+      case 70: /* extra_rings ::= */ yytestcase(yyruleno==70);
+      case 73: /* extra_ringsm ::= */ yytestcase(yyruleno==73);
+      case 76: /* extra_ringsz ::= */ yytestcase(yyruleno==76);
+      case 79: /* extra_ringszm ::= */ yytestcase(yyruleno==79);
+      case 94: /* multilinestring_text2 ::= */ yytestcase(yyruleno==94);
+      case 97: /* multilinestring_textm2 ::= */ yytestcase(yyruleno==97);
+      case 100: /* multilinestring_textz2 ::= */ yytestcase(yyruleno==100);
+      case 103: /* multilinestring_textzm2 ::= */ yytestcase(yyruleno==103);
+      case 110: /* multipolygon_text2 ::= */ yytestcase(yyruleno==110);
+      case 113: /* multipolygon_textm2 ::= */ yytestcase(yyruleno==113);
+      case 116: /* multipolygon_textz2 ::= */ yytestcase(yyruleno==116);
+      case 119: /* multipolygon_textzm2 ::= */ yytestcase(yyruleno==119);
+      case 128: /* geocoll_text2 ::= */ yytestcase(yyruleno==128);
+      case 135: /* geocoll_textm2 ::= */ yytestcase(yyruleno==135);
+      case 142: /* geocoll_textz2 ::= */ yytestcase(yyruleno==142);
+      case 149: /* geocoll_textzm2 ::= */ yytestcase(yyruleno==149);
+#line 179 "vanuatuWkt.y"
+{ yygotominor.yy0 = NULL; }
+#line 1222 "vanuatuWkt.c"
+        break;
+      case 46: /* extra_pointsxy ::= VANUATU_COMMA point_coordxy extra_pointsxy */
+      case 48: /* extra_pointsxym ::= VANUATU_COMMA point_coordxym extra_pointsxym */ yytestcase(yyruleno==48);
+      case 50: /* extra_pointsxyz ::= VANUATU_COMMA point_coordxyz extra_pointsxyz */ yytestcase(yyruleno==50);
+      case 52: /* extra_pointsxyzm ::= VANUATU_COMMA point_coordxyzm extra_pointsxyzm */ yytestcase(yyruleno==52);
+#line 181 "vanuatuWkt.y"
+{ ((gaiaPointPtr)yymsp[-1].minor.yy0)->Next = (gaiaPointPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+#line 1230 "vanuatuWkt.c"
+        break;
+      case 53: /* linestring ::= VANUATU_LINESTRING linestring_text */
+      case 54: /* linestringm ::= VANUATU_LINESTRING_M linestring_textm */ yytestcase(yyruleno==54);
+      case 55: /* linestringz ::= VANUATU_LINESTRING_Z linestring_textz */ yytestcase(yyruleno==55);
+      case 56: /* linestringzm ::= VANUATU_LINESTRING_ZM linestring_textzm */ yytestcase(yyruleno==56);
+#line 199 "vanuatuWkt.y"
+{ yygotominor.yy0 = vanuatu_buildGeomFromLinestring((gaiaLinestringPtr)yymsp[0].minor.yy0); }
+#line 1238 "vanuatuWkt.c"
+        break;
+      case 57: /* linestring_text ::= VANUATU_OPEN_BRACKET point_coordxy VANUATU_COMMA point_coordxy extra_pointsxy VANUATU_CLOSE_BRACKET */
+#line 210 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) vanuatu_linestring_xy((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+#line 1247 "vanuatuWkt.c"
+        break;
+      case 58: /* linestring_textm ::= VANUATU_OPEN_BRACKET point_coordxym VANUATU_COMMA point_coordxym extra_pointsxym VANUATU_CLOSE_BRACKET */
+#line 217 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) vanuatu_linestring_xym((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+#line 1256 "vanuatuWkt.c"
+        break;
+      case 59: /* linestring_textz ::= VANUATU_OPEN_BRACKET point_coordxyz VANUATU_COMMA point_coordxyz extra_pointsxyz VANUATU_CLOSE_BRACKET */
+#line 224 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) vanuatu_linestring_xyz((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+#line 1265 "vanuatuWkt.c"
+        break;
+      case 60: /* linestring_textzm ::= VANUATU_OPEN_BRACKET point_coordxyzm VANUATU_COMMA point_coordxyzm extra_pointsxyzm VANUATU_CLOSE_BRACKET */
+#line 231 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   ((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0;
+	   yygotominor.yy0 = (void *) vanuatu_linestring_xyzm((gaiaPointPtr)yymsp[-4].minor.yy0);
+	}
+#line 1274 "vanuatuWkt.c"
+        break;
+      case 61: /* polygon ::= VANUATU_POLYGON polygon_text */
+      case 62: /* polygonm ::= VANUATU_POLYGON_M polygon_textm */ yytestcase(yyruleno==62);
+      case 63: /* polygonz ::= VANUATU_POLYGON_Z polygon_textz */ yytestcase(yyruleno==63);
+      case 64: /* polygonzm ::= VANUATU_POLYGON_ZM polygon_textzm */ yytestcase(yyruleno==64);
+#line 241 "vanuatuWkt.y"
+{ yygotominor.yy0 = vanuatu_buildGeomFromPolygon((gaiaPolygonPtr)yymsp[0].minor.yy0); }
+#line 1282 "vanuatuWkt.c"
+        break;
+      case 65: /* polygon_text ::= VANUATU_OPEN_BRACKET ring extra_rings VANUATU_CLOSE_BRACKET */
+#line 252 "vanuatuWkt.y"
+{ 
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_polygon_xy((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+#line 1290 "vanuatuWkt.c"
+        break;
+      case 66: /* polygon_textm ::= VANUATU_OPEN_BRACKET ringm extra_ringsm VANUATU_CLOSE_BRACKET */
+#line 258 "vanuatuWkt.y"
+{ 
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_polygon_xym((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+#line 1298 "vanuatuWkt.c"
+        break;
+      case 67: /* polygon_textz ::= VANUATU_OPEN_BRACKET ringz extra_ringsz VANUATU_CLOSE_BRACKET */
+#line 264 "vanuatuWkt.y"
+{  
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_polygon_xyz((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+#line 1306 "vanuatuWkt.c"
+        break;
+      case 68: /* polygon_textzm ::= VANUATU_OPEN_BRACKET ringzm extra_ringszm VANUATU_CLOSE_BRACKET */
+#line 270 "vanuatuWkt.y"
+{ 
+		((gaiaRingPtr)yymsp[-2].minor.yy0)->Next = (gaiaRingPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_polygon_xyzm((gaiaRingPtr)yymsp[-2].minor.yy0);
+	}
+#line 1314 "vanuatuWkt.c"
+        break;
+      case 69: /* ring ::= VANUATU_OPEN_BRACKET point_coordxy VANUATU_COMMA point_coordxy VANUATU_COMMA point_coordxy VANUATU_COMMA point_coordxy extra_pointsxy VANUATU_CLOSE_BRACKET */
+#line 278 "vanuatuWkt.y"
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_ring_xy((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+#line 1325 "vanuatuWkt.c"
+        break;
+      case 71: /* extra_rings ::= VANUATU_COMMA ring extra_rings */
+      case 74: /* extra_ringsm ::= VANUATU_COMMA ringm extra_ringsm */ yytestcase(yyruleno==74);
+      case 77: /* extra_ringsz ::= VANUATU_COMMA ringz extra_ringsz */ yytestcase(yyruleno==77);
+      case 80: /* extra_ringszm ::= VANUATU_COMMA ringzm extra_ringszm */ yytestcase(yyruleno==80);
+#line 289 "vanuatuWkt.y"
+{
+		((gaiaRingPtr)yymsp[-1].minor.yy0)->Next = (gaiaRingPtr)yymsp[0].minor.yy0;
+		yygotominor.yy0 = yymsp[-1].minor.yy0;
+	}
+#line 1336 "vanuatuWkt.c"
+        break;
+      case 72: /* ringm ::= VANUATU_OPEN_BRACKET point_coordxym VANUATU_COMMA point_coordxym VANUATU_COMMA point_coordxym VANUATU_COMMA point_coordxym extra_pointsxym VANUATU_CLOSE_BRACKET */
+#line 295 "vanuatuWkt.y"
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_ring_xym((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+#line 1347 "vanuatuWkt.c"
+        break;
+      case 75: /* ringz ::= VANUATU_OPEN_BRACKET point_coordxyz VANUATU_COMMA point_coordxyz VANUATU_COMMA point_coordxyz VANUATU_COMMA point_coordxyz extra_pointsxyz VANUATU_CLOSE_BRACKET */
+#line 312 "vanuatuWkt.y"
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_ring_xyz((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+#line 1358 "vanuatuWkt.c"
+        break;
+      case 78: /* ringzm ::= VANUATU_OPEN_BRACKET point_coordxyzm VANUATU_COMMA point_coordxyzm VANUATU_COMMA point_coordxyzm VANUATU_COMMA point_coordxyzm extra_pointsxyzm VANUATU_CLOSE_BRACKET */
+#line 329 "vanuatuWkt.y"
+{
+		((gaiaPointPtr)yymsp[-8].minor.yy0)->Next = (gaiaPointPtr)yymsp[-6].minor.yy0; 
+		((gaiaPointPtr)yymsp[-6].minor.yy0)->Next = (gaiaPointPtr)yymsp[-4].minor.yy0;
+		((gaiaPointPtr)yymsp[-4].minor.yy0)->Next = (gaiaPointPtr)yymsp[-2].minor.yy0; 
+		((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_ring_xyzm((gaiaPointPtr)yymsp[-8].minor.yy0);
+	}
+#line 1369 "vanuatuWkt.c"
+        break;
+      case 85: /* multipoint_text ::= VANUATU_OPEN_BRACKET point_coordxy extra_pointsxy VANUATU_CLOSE_BRACKET */
+#line 355 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipoint_xy((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+#line 1377 "vanuatuWkt.c"
+        break;
+      case 86: /* multipoint_textm ::= VANUATU_OPEN_BRACKET point_coordxym extra_pointsxym VANUATU_CLOSE_BRACKET */
+#line 360 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipoint_xym((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+#line 1385 "vanuatuWkt.c"
+        break;
+      case 87: /* multipoint_textz ::= VANUATU_OPEN_BRACKET point_coordxyz extra_pointsxyz VANUATU_CLOSE_BRACKET */
+#line 365 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipoint_xyz((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+#line 1393 "vanuatuWkt.c"
+        break;
+      case 88: /* multipoint_textzm ::= VANUATU_OPEN_BRACKET point_coordxyzm extra_pointsxyzm VANUATU_CLOSE_BRACKET */
+#line 370 "vanuatuWkt.y"
+{ 
+	   ((gaiaPointPtr)yymsp[-2].minor.yy0)->Next = (gaiaPointPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipoint_xyzm((gaiaPointPtr)yymsp[-2].minor.yy0);
+	}
+#line 1401 "vanuatuWkt.c"
+        break;
+      case 93: /* multilinestring_text ::= VANUATU_OPEN_BRACKET linestring_text multilinestring_text2 VANUATU_CLOSE_BRACKET */
+#line 386 "vanuatuWkt.y"
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multilinestring_xy((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+#line 1409 "vanuatuWkt.c"
+        break;
+      case 95: /* multilinestring_text2 ::= VANUATU_COMMA linestring_text multilinestring_text2 */
+      case 98: /* multilinestring_textm2 ::= VANUATU_COMMA linestring_textm multilinestring_textm2 */ yytestcase(yyruleno==98);
+      case 101: /* multilinestring_textz2 ::= VANUATU_COMMA linestring_textz multilinestring_textz2 */ yytestcase(yyruleno==101);
+      case 104: /* multilinestring_textzm2 ::= VANUATU_COMMA linestring_textzm multilinestring_textzm2 */ yytestcase(yyruleno==104);
+#line 394 "vanuatuWkt.y"
+{ ((gaiaLinestringPtr)yymsp[-1].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+#line 1417 "vanuatuWkt.c"
+        break;
+      case 96: /* multilinestring_textm ::= VANUATU_OPEN_BRACKET linestring_textm multilinestring_textm2 VANUATU_CLOSE_BRACKET */
+#line 397 "vanuatuWkt.y"
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multilinestring_xym((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+#line 1425 "vanuatuWkt.c"
+        break;
+      case 99: /* multilinestring_textz ::= VANUATU_OPEN_BRACKET linestring_textz multilinestring_textz2 VANUATU_CLOSE_BRACKET */
+#line 407 "vanuatuWkt.y"
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multilinestring_xyz((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+#line 1433 "vanuatuWkt.c"
+        break;
+      case 102: /* multilinestring_textzm ::= VANUATU_OPEN_BRACKET linestring_textzm multilinestring_textzm2 VANUATU_CLOSE_BRACKET */
+#line 417 "vanuatuWkt.y"
+{ 
+	   ((gaiaLinestringPtr)yymsp[-2].minor.yy0)->Next = (gaiaLinestringPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multilinestring_xyzm((gaiaLinestringPtr)yymsp[-2].minor.yy0);
+	}
+#line 1441 "vanuatuWkt.c"
+        break;
+      case 109: /* multipolygon_text ::= VANUATU_OPEN_BRACKET polygon_text multipolygon_text2 VANUATU_CLOSE_BRACKET */
+#line 437 "vanuatuWkt.y"
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipolygon_xy((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+#line 1449 "vanuatuWkt.c"
+        break;
+      case 111: /* multipolygon_text2 ::= VANUATU_COMMA polygon_text multipolygon_text2 */
+      case 114: /* multipolygon_textm2 ::= VANUATU_COMMA polygon_textm multipolygon_textm2 */ yytestcase(yyruleno==114);
+      case 117: /* multipolygon_textz2 ::= VANUATU_COMMA polygon_textz multipolygon_textz2 */ yytestcase(yyruleno==117);
+      case 120: /* multipolygon_textzm2 ::= VANUATU_COMMA polygon_textzm multipolygon_textzm2 */ yytestcase(yyruleno==120);
+#line 445 "vanuatuWkt.y"
+{ ((gaiaPolygonPtr)yymsp[-1].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[0].minor.yy0;  yygotominor.yy0 = yymsp[-1].minor.yy0; }
+#line 1457 "vanuatuWkt.c"
+        break;
+      case 112: /* multipolygon_textm ::= VANUATU_OPEN_BRACKET polygon_textm multipolygon_textm2 VANUATU_CLOSE_BRACKET */
+#line 448 "vanuatuWkt.y"
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipolygon_xym((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+#line 1465 "vanuatuWkt.c"
+        break;
+      case 115: /* multipolygon_textz ::= VANUATU_OPEN_BRACKET polygon_textz multipolygon_textz2 VANUATU_CLOSE_BRACKET */
+#line 458 "vanuatuWkt.y"
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipolygon_xyz((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+#line 1473 "vanuatuWkt.c"
+        break;
+      case 118: /* multipolygon_textzm ::= VANUATU_OPEN_BRACKET polygon_textzm multipolygon_textzm2 VANUATU_CLOSE_BRACKET */
+#line 468 "vanuatuWkt.y"
+{ 
+	   ((gaiaPolygonPtr)yymsp[-2].minor.yy0)->Next = (gaiaPolygonPtr)yymsp[-1].minor.yy0; 
+	   yygotominor.yy0 = (void *) vanuatu_multipolygon_xyzm((gaiaPolygonPtr)yymsp[-2].minor.yy0);
+	}
+#line 1481 "vanuatuWkt.c"
+        break;
+      case 125: /* geocoll_text ::= VANUATU_OPEN_BRACKET point geocoll_text2 VANUATU_CLOSE_BRACKET */
+      case 126: /* geocoll_text ::= VANUATU_OPEN_BRACKET linestring geocoll_text2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==126);
+      case 127: /* geocoll_text ::= VANUATU_OPEN_BRACKET polygon geocoll_text2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==127);
+#line 487 "vanuatuWkt.y"
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_geomColl_xy((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+#line 1491 "vanuatuWkt.c"
+        break;
+      case 129: /* geocoll_text2 ::= VANUATU_COMMA point geocoll_text2 */
+      case 130: /* geocoll_text2 ::= VANUATU_COMMA linestring geocoll_text2 */ yytestcase(yyruleno==130);
+      case 131: /* geocoll_text2 ::= VANUATU_COMMA polygon geocoll_text2 */ yytestcase(yyruleno==131);
+      case 136: /* geocoll_textm2 ::= VANUATU_COMMA pointm geocoll_textm2 */ yytestcase(yyruleno==136);
+      case 137: /* geocoll_textm2 ::= VANUATU_COMMA linestringm geocoll_textm2 */ yytestcase(yyruleno==137);
+      case 138: /* geocoll_textm2 ::= VANUATU_COMMA polygonm geocoll_textm2 */ yytestcase(yyruleno==138);
+      case 143: /* geocoll_textz2 ::= VANUATU_COMMA pointz geocoll_textz2 */ yytestcase(yyruleno==143);
+      case 144: /* geocoll_textz2 ::= VANUATU_COMMA linestringz geocoll_textz2 */ yytestcase(yyruleno==144);
+      case 145: /* geocoll_textz2 ::= VANUATU_COMMA polygonz geocoll_textz2 */ yytestcase(yyruleno==145);
+      case 150: /* geocoll_textzm2 ::= VANUATU_COMMA pointzm geocoll_textzm2 */ yytestcase(yyruleno==150);
+      case 151: /* geocoll_textzm2 ::= VANUATU_COMMA linestringzm geocoll_textzm2 */ yytestcase(yyruleno==151);
+      case 152: /* geocoll_textzm2 ::= VANUATU_COMMA polygonzm geocoll_textzm2 */ yytestcase(yyruleno==152);
+#line 507 "vanuatuWkt.y"
+{
+		((gaiaGeomCollPtr)yymsp[-1].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[0].minor.yy0;
+		yygotominor.yy0 = yymsp[-1].minor.yy0;
+	}
+#line 1510 "vanuatuWkt.c"
+        break;
+      case 132: /* geocoll_textm ::= VANUATU_OPEN_BRACKET pointm geocoll_textm2 VANUATU_CLOSE_BRACKET */
+      case 133: /* geocoll_textm ::= VANUATU_OPEN_BRACKET linestringm geocoll_textm2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==133);
+      case 134: /* geocoll_textm ::= VANUATU_OPEN_BRACKET polygonm geocoll_textm2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==134);
+#line 526 "vanuatuWkt.y"
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_geomColl_xym((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+#line 1520 "vanuatuWkt.c"
+        break;
+      case 139: /* geocoll_textz ::= VANUATU_OPEN_BRACKET pointz geocoll_textz2 VANUATU_CLOSE_BRACKET */
+      case 140: /* geocoll_textz ::= VANUATU_OPEN_BRACKET linestringz geocoll_textz2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==140);
+      case 141: /* geocoll_textz ::= VANUATU_OPEN_BRACKET polygonz geocoll_textz2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==141);
+#line 564 "vanuatuWkt.y"
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_geomColl_xyz((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+#line 1530 "vanuatuWkt.c"
+        break;
+      case 146: /* geocoll_textzm ::= VANUATU_OPEN_BRACKET pointzm geocoll_textzm2 VANUATU_CLOSE_BRACKET */
+      case 147: /* geocoll_textzm ::= VANUATU_OPEN_BRACKET linestringzm geocoll_textzm2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==147);
+      case 148: /* geocoll_textzm ::= VANUATU_OPEN_BRACKET polygonzm geocoll_textzm2 VANUATU_CLOSE_BRACKET */ yytestcase(yyruleno==148);
+#line 602 "vanuatuWkt.y"
+{ 
+		((gaiaGeomCollPtr)yymsp[-2].minor.yy0)->Next = (gaiaGeomCollPtr)yymsp[-1].minor.yy0;
+		yygotominor.yy0 = (void *) vanuatu_geomColl_xyzm((gaiaGeomCollPtr)yymsp[-2].minor.yy0);
+	}
+#line 1540 "vanuatuWkt.c"
+        break;
+      default:
+      /* (0) main ::= in */ yytestcase(yyruleno==0);
+      /* (1) in ::= */ yytestcase(yyruleno==1);
+      /* (2) in ::= in state VANUATU_NEWLINE */ yytestcase(yyruleno==2);
+      /* (3) state ::= program */ yytestcase(yyruleno==3);
+      /* (4) program ::= geo_text */ yytestcase(yyruleno==4);
+      /* (5) program ::= geo_textz */ yytestcase(yyruleno==5);
+      /* (6) program ::= geo_textm */ yytestcase(yyruleno==6);
+      /* (7) program ::= geo_textzm */ yytestcase(yyruleno==7);
+        break;
+  };
+  yygoto = yyRuleInfo[yyruleno].lhs;
+  yysize = yyRuleInfo[yyruleno].nrhs;
+  yypParser->yyidx -= yysize;
+  yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
+  if( yyact < YYNSTATE ){
+#ifdef NDEBUG
+    /* If we are not debugging and the reduce action popped at least
+    ** one element off the stack, then we can push the new element back
+    ** onto the stack here, and skip the stack overflow test in yy_shift().
+    ** That gives a significant speed improvement. */
+    if( yysize ){
+      yypParser->yyidx++;
+      yymsp -= yysize-1;
+      yymsp->stateno = (YYACTIONTYPE)yyact;
+      yymsp->major = (YYCODETYPE)yygoto;
+      yymsp->minor = yygotominor;
+    }else
+#endif
+    {
+      yy_shift(yypParser,yyact,yygoto,&yygotominor);
+    }
+  }else{
+    assert( yyact == YYNSTATE + YYNRULE + 1 );
+    yy_accept(yypParser);
+  }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+#ifndef YYNOERRORRECOVERY
+static void yy_parse_failed(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser fails */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+#endif /* YYNOERRORRECOVERY */
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+  yyParser *yypParser,           /* The parser */
+  int yymajor,                   /* The major type of the error token */
+  YYMINORTYPE yyminor            /* The minor type of the error token */
+){
+  ParseARG_FETCH;
+#define TOKEN (yyminor.yy0)
+#line 84 "vanuatuWkt.y"
+
+/* 
+** Sandro Furieri 2010 Apr 4
+** when the LEMON parser encounters an error
+** then this global variable is set 
+*/
+	vanuatu_parse_error = 1;
+	*result = NULL;
+#line 1619 "vanuatuWkt.c"
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser accepts */
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "ParseAlloc" which describes the current state of the parser.
+** The second argument is the major token number.  The third is
+** the minor token.  The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void Parse(
+  void *yyp,                   /* The parser */
+  int yymajor,                 /* The major token code number */
+  ParseTOKENTYPE yyminor       /* The value for the token */
+  ParseARG_PDECL               /* Optional %extra_argument parameter */
+){
+  YYMINORTYPE yyminorunion;
+  int yyact;            /* The parser action. */
+  int yyendofinput;     /* True if we are at the end of input */
+#ifdef YYERRORSYMBOL
+  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+#endif
+  yyParser *yypParser;  /* The parser */
+
+  /* (re)initialize the parser, if necessary */
+  yypParser = (yyParser*)yyp;
+  if( yypParser->yyidx<0 ){
+#if YYSTACKDEPTH<=0
+    if( yypParser->yystksz <=0 ){
+      /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
+      yyminorunion = yyzerominor;
+      yyStackOverflow(yypParser, &yyminorunion);
+      return;
+    }
+#endif
+    yypParser->yyidx = 0;
+    yypParser->yyerrcnt = -1;
+    yypParser->yystack[0].stateno = 0;
+    yypParser->yystack[0].major = 0;
+  }
+  yyminorunion.yy0 = yyminor;
+  yyendofinput = (yymajor==0);
+  ParseARG_STORE;
+
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+  }
+#endif
+
+  do{
+    yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
+    if( yyact<YYNSTATE ){
+      assert( !yyendofinput );  /* Impossible to shift the $ token */
+      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+      yypParser->yyerrcnt--;
+      yymajor = YYNOCODE;
+    }else if( yyact < YYNSTATE + YYNRULE ){
+      yy_reduce(yypParser,yyact-YYNSTATE);
+    }else{
+      assert( yyact == YY_ERROR_ACTION );
+#ifdef YYERRORSYMBOL
+      int yymx;
+#endif
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+      }
+#endif
+#ifdef YYERRORSYMBOL
+      /* A syntax error has occurred.
+      ** The response to an error depends upon whether or not the
+      ** grammar defines an error token "ERROR".  
+      **
+      ** This is what we do if the grammar does define ERROR:
+      **
+      **  * Call the %syntax_error function.
+      **
+      **  * Begin popping the stack until we enter a state where
+      **    it is legal to shift the error symbol, then shift
+      **    the error symbol.
+      **
+      **  * Set the error count to three.
+      **
+      **  * Begin accepting and shifting new tokens.  No new error
+      **    processing will occur until three tokens have been
+      **    shifted successfully.
+      **
+      */
+      if( yypParser->yyerrcnt<0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yymx = yypParser->yystack[yypParser->yyidx].major;
+      if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+             yyTracePrompt,yyTokenName[yymajor]);
+        }
+#endif
+        yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
+        yymajor = YYNOCODE;
+      }else{
+         while(
+          yypParser->yyidx >= 0 &&
+          yymx != YYERRORSYMBOL &&
+          (yyact = yy_find_reduce_action(
+                        yypParser->yystack[yypParser->yyidx].stateno,
+                        YYERRORSYMBOL)) >= YYNSTATE
+        ){
+          yy_pop_parser_stack(yypParser);
+        }
+        if( yypParser->yyidx < 0 || yymajor==0 ){
+          yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+          yy_parse_failed(yypParser);
+          yymajor = YYNOCODE;
+        }else if( yymx!=YYERRORSYMBOL ){
+          YYMINORTYPE u2;
+          u2.YYERRSYMDT = 0;
+          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+        }
+      }
+      yypParser->yyerrcnt = 3;
+      yyerrorhit = 1;
+#elif defined(YYNOERRORRECOVERY)
+      /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
+      ** do any kind of error recovery.  Instead, simply invoke the syntax
+      ** error routine and continue going as if nothing had happened.
+      **
+      ** Applications can set this macro (for example inside %include) if
+      ** they intend to abandon the parse upon the first syntax error seen.
+      */
+      yy_syntax_error(yypParser,yymajor,yyminorunion);
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      yymajor = YYNOCODE;
+      
+#else  /* YYERRORSYMBOL is not defined */
+      /* This is what we do if the grammar does not define ERROR:
+      **
+      **  * Report an error message, and throw away the input token.
+      **
+      **  * If the input token is $, then fail the parse.
+      **
+      ** As before, subsequent error messages are suppressed until
+      ** three input tokens have been successfully shifted.
+      */
+      if( yypParser->yyerrcnt<=0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yypParser->yyerrcnt = 3;
+      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+      if( yyendofinput ){
+        yy_parse_failed(yypParser);
+      }
+      yymajor = YYNOCODE;
+#endif
+    }
+  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  return;
+}
+
+
+/*
+ VANUATU_LEMON_END - LEMON generated code ends here 
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+** CAVEAT: there is an incompatibility between LEMON and FLEX
+** this macro resolves the issue
+*/
+#undef yy_accept
+#define yy_accept	yy_vanuatu_flex_accept
+
+
+
+/*
+ VANUATU_FLEX_START - FLEX generated code starts here 
+*/
+
+#line 3 "lex.VanuatuWkt.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define yy_create_buffer VanuatuWkt_create_buffer
+#define yy_delete_buffer VanuatuWkt_delete_buffer
+#define yy_flex_debug VanuatuWkt_flex_debug
+#define yy_init_buffer VanuatuWkt_init_buffer
+#define yy_flush_buffer VanuatuWkt_flush_buffer
+#define yy_load_buffer_state VanuatuWkt_load_buffer_state
+#define yy_switch_to_buffer VanuatuWkt_switch_to_buffer
+#define yyin VanuatuWktin
+#define yyleng VanuatuWktleng
+#define yylex VanuatuWktlex
+#define yylineno VanuatuWktlineno
+#define yyout VanuatuWktout
+#define yyrestart VanuatuWktrestart
+#define yytext VanuatuWkttext
+#define yywrap VanuatuWktwrap
+#define yyalloc VanuatuWktalloc
+#define yyrealloc VanuatuWktrealloc
+#define yyfree VanuatuWktfree
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE VanuatuWktrestart(VanuatuWktin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
+#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int VanuatuWktleng;
+
+extern FILE *VanuatuWktin, *VanuatuWktout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up VanuatuWkttext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up VanuatuWkttext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via VanuatuWktrestart()), so that the user can continue scanning by
+	 * just pointing VanuatuWktin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when VanuatuWkttext is formed. */
+static char yy_hold_char;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int VanuatuWktleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow VanuatuWktwrap()'s to do buffer switches
+ * instead of setting up a fresh VanuatuWktin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void VanuatuWktrestart (FILE *input_file  );
+void VanuatuWkt_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE VanuatuWkt_create_buffer (FILE *file,int size  );
+void VanuatuWkt_delete_buffer (YY_BUFFER_STATE b  );
+void VanuatuWkt_flush_buffer (YY_BUFFER_STATE b  );
+void VanuatuWktpush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void VanuatuWktpop_buffer_state (void );
+
+static void VanuatuWktensure_buffer_stack (void );
+static void VanuatuWkt_load_buffer_state (void );
+static void VanuatuWkt_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER VanuatuWkt_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE VanuatuWkt_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE VanuatuWkt_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE VanuatuWkt_scan_bytes (yyconst char *bytes,int len  );
+
+void *VanuatuWktalloc (yy_size_t  );
+void *VanuatuWktrealloc (void *,yy_size_t  );
+void VanuatuWktfree (void *  );
+
+#define yy_new_buffer VanuatuWkt_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        VanuatuWktensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            VanuatuWkt_create_buffer(VanuatuWktin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        VanuatuWktensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            VanuatuWkt_create_buffer(VanuatuWktin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *VanuatuWktin = (FILE *) 0, *VanuatuWktout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int VanuatuWktlineno;
+
+int VanuatuWktlineno = 1;
+
+extern char *VanuatuWkttext;
+#define yytext_ptr VanuatuWkttext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up VanuatuWkttext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+	VanuatuWktleng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	(yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 36
+#define YY_END_OF_BUFFER 37
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[114] =
+    {   0,
+        0,    0,   37,   35,   33,   34,    3,    4,   35,    2,
+       35,    1,   35,   35,   35,   35,    1,    1,    1,    1,
+        0,    0,    0,    0,    1,    1,    1,    0,    0,    0,
+        0,    0,    1,    1,    0,    0,    0,    0,    0,    0,
+        0,    0,    5,    0,    0,    0,    0,    0,    0,    7,
+        6,    0,    0,    0,    0,    0,    8,   13,    0,    0,
+        0,    0,    0,    0,   15,   14,    0,    0,    0,    0,
+        0,   16,    0,    9,    0,   17,    0,    0,    0,   11,
+       10,    0,    0,   19,   18,    0,    0,   12,    0,   20,
+       25,    0,    0,    0,   27,   26,    0,    0,   28,    0,
+
+       21,    0,    0,   23,   22,    0,   24,   29,    0,   31,
+       30,   32,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    1,    1,    1,    1,    1,    1,    4,
+        5,    1,    6,    7,    8,    9,    1,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,   11,    1,   12,    1,
+       13,    1,   14,    1,    1,   15,   16,   17,   18,   19,
+        1,   20,   21,   22,   23,    1,    1,    1,   24,   25,
+        1,    1,    1,    1,    1,    1,    1,    1,   26,    1,
+
+       27,    1,   28,    1,   29,    1,    1,   30,   31,   32,
+       33,   34,    1,   35,   36,   37,   38,    1,    1,    1,
+       39,   40,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[41] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int16_t yy_base[115] =
+    {   0,
+        0,   33,  211,  255,  255,  255,  255,  255,  192,  255,
+      191,    2,    2,    3,    4,    0,   11,   13,  185,   15,
+       26,   28,   32,   36,  162,  161,  154,   37,   42,   33,
+       39,   33,   71,   16,   46,   53,   61,   54,   64,   56,
+       57,   65,   80,   67,   66,   67,   74,   79,    0,  255,
+       82,   87,   82,   93,   91,   95,  255,  112,  105,  100,
+      106,  109,  103,    0,  255,  113,  112,  121,  114,  114,
+      125,  255,  124,  144,  118,  154,  130,  143,    0,  255,
+      143,  141,    0,  255,  146,  148,  154,  255,  153,  255,
+      184,  157,  161,    0,  255,  172,  167,  177,  255,  177,
+
+      194,  174,    0,  255,  182,  182,  255,  214,    0,  255,
+      192,  255,  255,    0
+    } ;
+
+static yyconst flex_int16_t yy_def[115] =
+    {   0,
+      114,  114,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,   43,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,   58,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,   74,  113,
+      113,  113,   76,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,   91,  113,  113,  113,  113,  113,  113,
+
+      113,  113,  101,  113,  113,  113,  113,  113,  108,  113,
+      113,  113,    0,  113
+    } ;
+
+static yyconst flex_int16_t yy_nxt[296] =
+    {   0,
+        4,    5,    6,    7,    8,    9,   10,   11,  113,   12,
+       19,   20,   13,   21,   14,   15,   22,   24,   16,   25,
+       17,   26,   18,   19,   20,   34,   23,   13,   21,   14,
+       15,   22,   24,   16,    5,    6,    7,    8,    9,   10,
+       11,   23,   12,   28,   29,   13,   30,   14,   15,   31,
+       32,   16,   35,   36,   37,   38,   39,   40,   28,   29,
+       13,   30,   14,   15,   31,   32,   16,   35,   36,   37,
+       38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+       33,   49,   49,   48,   52,   53,   54,   55,   41,   42,
+       43,   44,   45,   46,   47,   50,   56,   57,   48,   52,
+
+       53,   54,   55,   58,   51,   59,   60,   61,   62,   63,
+       50,   56,   57,   64,   64,   67,   68,   69,   58,   51,
+       59,   60,   61,   62,   63,   70,   71,   65,   72,   73,
+       67,   68,   69,   74,   75,   76,   66,   77,   78,   82,
+       70,   71,   65,   72,   73,   79,   79,   86,   74,   75,
+       76,   66,   77,   78,   82,   83,   83,   87,   88,   80,
+       89,   90,   86,   27,   91,   92,   93,   97,   81,   84,
+       34,   33,   87,   88,   80,   89,   90,   98,   85,   91,
+       92,   93,   97,   81,   84,   94,   94,   99,  100,  101,
+      102,  106,   98,   85,   27,  103,  103,  107,  108,   95,
+
+       18,   17,   99,  100,  101,  102,  106,  112,   96,  104,
+      113,  113,  107,  108,   95,  109,  109,  113,  105,  113,
+      113,  113,  112,   96,  104,  113,  113,  113,  113,  110,
+      113,  113,  113,  105,  113,  113,  113,  113,  111,  113,
+      113,  113,  113,  113,  110,  113,  113,  113,  113,  113,
+      113,  113,  113,  111,    3,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113
+
+    } ;
+
+static yyconst flex_int16_t yy_chk[296] =
+    {   0,
+      114,    1,    1,    1,    1,    1,    1,    1,    0,    1,
+       12,   12,    1,   13,    1,    1,   14,   16,    1,   17,
+       17,   18,   18,   20,   20,   34,   15,    1,   13,    1,
+        1,   14,   16,    1,    2,    2,    2,    2,    2,    2,
+        2,   15,    2,   21,   22,    2,   23,    2,    2,   24,
+       24,    2,   28,   29,   30,   31,   32,   35,   21,   22,
+        2,   23,    2,    2,   24,   24,    2,   28,   29,   30,
+       31,   32,   35,   36,   37,   38,   39,   40,   41,   42,
+       33,   43,   43,   42,   44,   45,   46,   47,   36,   37,
+       38,   39,   40,   41,   42,   43,   48,   51,   42,   44,
+
+       45,   46,   47,   52,   43,   53,   54,   55,   56,   56,
+       43,   48,   51,   58,   58,   59,   60,   61,   52,   43,
+       53,   54,   55,   56,   56,   62,   63,   58,   66,   67,
+       59,   60,   61,   68,   69,   70,   58,   71,   73,   75,
+       62,   63,   58,   66,   67,   74,   74,   77,   68,   69,
+       70,   58,   71,   73,   75,   76,   76,   78,   81,   74,
+       82,   85,   77,   27,   86,   87,   89,   92,   74,   76,
+       26,   25,   78,   81,   74,   82,   85,   93,   76,   86,
+       87,   89,   92,   74,   76,   91,   91,   96,   97,   98,
+      100,  102,   93,   76,   19,  101,  101,  105,  106,   91,
+
+       11,    9,   96,   97,   98,  100,  102,  111,   91,  101,
+        3,    0,  105,  106,   91,  108,  108,    0,  101,    0,
+        0,    0,  111,   91,  101,    0,    0,    0,    0,  108,
+        0,    0,    0,  101,    0,    0,    0,    0,  108,    0,
+        0,    0,    0,    0,  108,    0,    0,    0,    0,    0,
+        0,    0,    0,  108,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113
+
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int VanuatuWkt_flex_debug;
+int VanuatuWkt_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *VanuatuWkttext;
+/* 
+ vanuatuLexer.l -- Vanuatu WKT parser - FLEX config
+  
+ version 2.4, 2010 April 2
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+The Vanuatu Team - University of Toronto
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+/******************************************************************************
+** The following code was created by Team Vanuatu of The University of Toronto.
+
+Authors:
+Ruppi Rana			ruppi.rana at gmail.com
+Dev Tanna			dev.tanna at gmail.com
+Elias Adum			elias.adum at gmail.com
+Benton Hui			benton.hui at gmail.com
+Abhayan Sundararajan		abhayan at gmail.com
+Chee-Lun Michael Stephen Cho	cheelun.cho at gmail.com
+Nikola Banovic			nikola.banovic at gmail.com
+Yong Jian			yong.jian at utoronto.ca
+
+Supervisor:
+Greg Wilson			gvwilson at cs.toronto.ca
+
+-------------------------------------------------------------------------------
+*/
+
+/* For debugging purposes */
+int vanuatu_line = 1, vanuatu_col = 1;
+
+/**
+*  The main string-token matcher.
+*  The lower case part is probably not needed.  We should really be converting 
+*  The string to all uppercase/lowercase to make it case iNsEnSiTiVe.
+*  What Flex will do is, For the input string, beginning from the front, Flex
+*  will try to match with any of the defined tokens from below.  Flex will 
+*  then match the string of longest length.  Suppose the string is: POINT ZM,
+*  Flex would match both POINT Z and POINT ZM, but since POINT ZM is the longer
+*  of the two tokens, FLEX will match POINT ZM.
+*/
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int VanuatuWktlex_destroy (void );
+
+int VanuatuWktget_debug (void );
+
+void VanuatuWktset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE VanuatuWktget_extra (void );
+
+void VanuatuWktset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *VanuatuWktget_in (void );
+
+void VanuatuWktset_in  (FILE * in_str  );
+
+FILE *VanuatuWktget_out (void );
+
+void VanuatuWktset_out  (FILE * out_str  );
+
+int VanuatuWktget_leng (void );
+
+char *VanuatuWktget_text (void );
+
+int VanuatuWktget_lineno (void );
+
+void VanuatuWktset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int VanuatuWktwrap (void );
+#else
+extern int VanuatuWktwrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
+#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( VanuatuWkttext, VanuatuWktleng, 1, VanuatuWktout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( VanuatuWktin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( VanuatuWktin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, VanuatuWktin))==0 && ferror(VanuatuWktin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(VanuatuWktin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int VanuatuWktlex (void);
+
+#define YY_DECL int VanuatuWktlex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after VanuatuWkttext and VanuatuWktleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! VanuatuWktin )
+			VanuatuWktin = stdin;
+
+		if ( ! VanuatuWktout )
+			VanuatuWktout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			VanuatuWktensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				VanuatuWkt_create_buffer(VanuatuWktin,YY_BUF_SIZE );
+		}
+
+		VanuatuWkt_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of VanuatuWkttext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = (yy_start);
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 114 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 255 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+{ vanuatu_col += (int) strlen(VanuatuWkttext);  VanuatuWktlval.dval = atof(VanuatuWkttext); return VANUATU_NUM; }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_COMMA; }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_OPEN_BRACKET; }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_CLOSE_BRACKET; }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POINT; }
+	YY_BREAK
+case 6:
+/* rule 6 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POINT_Z; }
+	YY_BREAK
+case 7:
+/* rule 7 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POINT_M; }
+	YY_BREAK
+case 8:
+/* rule 8 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POINT_ZM; }
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_LINESTRING; }
+	YY_BREAK
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_LINESTRING_Z; }
+	YY_BREAK
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_LINESTRING_M; }
+	YY_BREAK
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_LINESTRING_ZM; }
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POLYGON; }
+	YY_BREAK
+case 14:
+/* rule 14 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POLYGON_Z; }
+	YY_BREAK
+case 15:
+/* rule 15 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POLYGON_M; }
+	YY_BREAK
+case 16:
+/* rule 16 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_POLYGON_ZM; }
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOINT; }
+	YY_BREAK
+case 18:
+/* rule 18 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOINT_Z; }
+	YY_BREAK
+case 19:
+/* rule 19 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOINT_M; }
+	YY_BREAK
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOINT_ZM; }
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTILINESTRING; }
+	YY_BREAK
+case 22:
+/* rule 22 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTILINESTRING_Z; }
+	YY_BREAK
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTILINESTRING_M; }
+	YY_BREAK
+case 24:
+/* rule 24 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTILINESTRING_ZM; }	
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOLYGON; }
+	YY_BREAK
+case 26:
+/* rule 26 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOLYGON_Z; }
+	YY_BREAK
+case 27:
+/* rule 27 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOLYGON_M; }
+	YY_BREAK
+case 28:
+/* rule 28 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_MULTIPOLYGON_ZM; }
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_GEOMETRYCOLLECTION; }
+	YY_BREAK
+case 30:
+/* rule 30 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_GEOMETRYCOLLECTION_Z; }
+	YY_BREAK
+case 31:
+/* rule 31 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_GEOMETRYCOLLECTION_M; }
+	YY_BREAK
+case 32:
+/* rule 32 can match eol */
+YY_RULE_SETUP
+{ VanuatuWktlval.dval = 0; return VANUATU_GEOMETRYCOLLECTION_ZM; }
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+{ vanuatu_col += (int) strlen(VanuatuWkttext); }               /* ignore but count white space */
+	YY_BREAK
+case 34:
+/* rule 34 can match eol */
+YY_RULE_SETUP
+{ vanuatu_col = 0; ++vanuatu_line; }
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+{ vanuatu_col += (int) strlen(VanuatuWkttext); return -1; }
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+case YY_STATE_EOF(INITIAL):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed VanuatuWktin at a new source and called
+			 * VanuatuWktlex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = VanuatuWktin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( VanuatuWktwrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * VanuatuWkttext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of VanuatuWktlex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					VanuatuWktrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			VanuatuWktrestart(VanuatuWktin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) VanuatuWktrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 114 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+	register int yy_is_jam;
+    	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 114 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 113);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+	register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up VanuatuWkttext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			int offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					VanuatuWktrestart(VanuatuWktin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( VanuatuWktwrap( ) )
+						return EOF;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve VanuatuWkttext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void VanuatuWktrestart  (FILE * input_file )
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        VanuatuWktensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            VanuatuWkt_create_buffer(VanuatuWktin,YY_BUF_SIZE );
+	}
+
+	VanuatuWkt_init_buffer(YY_CURRENT_BUFFER,input_file );
+	VanuatuWkt_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void VanuatuWkt_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		VanuatuWktpop_buffer_state();
+	 *		VanuatuWktpush_buffer_state(new_buffer);
+     */
+	VanuatuWktensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	VanuatuWkt_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (VanuatuWktwrap()) processing, but the only time this flag
+	 * is looked at is after VanuatuWktwrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void VanuatuWkt_load_buffer_state  (void)
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	VanuatuWktin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE VanuatuWkt_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) VanuatuWktalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in VanuatuWkt_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) VanuatuWktalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in VanuatuWkt_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	VanuatuWkt_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with VanuatuWkt_create_buffer()
+ * 
+ */
+    void VanuatuWkt_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		VanuatuWktfree((void *) b->yy_ch_buf  );
+
+	VanuatuWktfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a VanuatuWktrestart() or at EOF.
+ */
+    static void VanuatuWkt_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+    
+	VanuatuWkt_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then VanuatuWkt_init_buffer was _probably_
+     * called from VanuatuWktrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void VanuatuWkt_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		VanuatuWkt_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void VanuatuWktpush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	VanuatuWktensure_buffer_stack();
+
+	/* This block is copied from VanuatuWkt_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from VanuatuWkt_switch_to_buffer. */
+	VanuatuWkt_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void VanuatuWktpop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	VanuatuWkt_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		VanuatuWkt_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void VanuatuWktensure_buffer_stack (void)
+{
+	int num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)VanuatuWktalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in VanuatuWktensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)VanuatuWktrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in VanuatuWktensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE VanuatuWkt_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) VanuatuWktalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in VanuatuWkt_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	VanuatuWkt_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to VanuatuWktlex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       VanuatuWkt_scan_bytes() instead.
+ */
+YY_BUFFER_STATE VanuatuWkt_scan_string (yyconst char * yystr )
+{
+    
+	return VanuatuWkt_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to VanuatuWktlex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE VanuatuWkt_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) VanuatuWktalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in VanuatuWkt_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = VanuatuWkt_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in VanuatuWkt_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up VanuatuWkttext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		VanuatuWkttext[VanuatuWktleng] = (yy_hold_char); \
+		(yy_c_buf_p) = VanuatuWkttext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		VanuatuWktleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int VanuatuWktget_lineno  (void)
+{
+        
+    return VanuatuWktlineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *VanuatuWktget_in  (void)
+{
+        return VanuatuWktin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *VanuatuWktget_out  (void)
+{
+        return VanuatuWktout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+int VanuatuWktget_leng  (void)
+{
+        return VanuatuWktleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *VanuatuWktget_text  (void)
+{
+        return VanuatuWkttext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void VanuatuWktset_lineno (int  line_number )
+{
+    
+    VanuatuWktlineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see VanuatuWkt_switch_to_buffer
+ */
+void VanuatuWktset_in (FILE *  in_str )
+{
+        VanuatuWktin = in_str ;
+}
+
+void VanuatuWktset_out (FILE *  out_str )
+{
+        VanuatuWktout = out_str ;
+}
+
+int VanuatuWktget_debug  (void)
+{
+        return VanuatuWkt_flex_debug;
+}
+
+void VanuatuWktset_debug (int  bdebug )
+{
+        VanuatuWkt_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from VanuatuWktlex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    VanuatuWktin = stdin;
+    VanuatuWktout = stdout;
+#else
+    VanuatuWktin = (FILE *) 0;
+    VanuatuWktout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * VanuatuWktlex_init()
+     */
+    return 0;
+}
+
+/* VanuatuWktlex_destroy is for both reentrant and non-reentrant scanners. */
+int VanuatuWktlex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		VanuatuWkt_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		VanuatuWktpop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	VanuatuWktfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * VanuatuWktlex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *VanuatuWktalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *VanuatuWktrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void VanuatuWktfree (void * ptr )
+{
+	free( (char *) ptr );	/* see VanuatuWktrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+/**
+ * reset the line and column count
+ *
+ *
+ */
+void vanuatu_reset_lexer(void)
+{
+
+  vanuatu_line = 1;
+  vanuatu_col  = 1;
+
+}
+
+/**
+ * VanuatuWkterror() is invoked when the lexer or the parser encounter
+ * an error. The error message is passed via *s
+ *
+ *
+ */
+void VanuatuWkterror(char *s)
+{
+  printf("error: %s at line: %d col: %d\n",s,vanuatu_line,vanuatu_col);
+
+}
+
+int VanuatuWktwrap(void)
+{
+  return 1;
+}
+
+/******************************************************************************
+** This is the end of the code that was created by Team Vanuatu
+** of The University of Toronto.
+
+Authors:
+Ruppi Rana			ruppi.rana at gmail.com
+Dev Tanna			dev.tanna at gmail.com
+Elias Adum			elias.adum at gmail.com
+Benton Hui			benton.hui at gmail.com
+Abhayan Sundararajan		abhayan at gmail.com
+Chee-Lun Michael Stephen Cho	cheelun.cho at gmail.com
+Nikola Banovic			nikola.banovic at gmail.com
+Yong Jian			yong.jian at utoronto.ca
+
+Supervisor:
+Greg Wilson			gvwilson at cs.toronto.ca
+
+-------------------------------------------------------------------------------
+*/
+
+
+/* 
+ VANUATU_FLEX_END - FLEX generated code ends here 
+*/
+
+
+
+/*
+** This is a linked-list struct to store all the values for each token.
+** All tokens will have a value of 0, except tokens denoted as NUM.
+** NUM tokens are geometry coordinates and will contain the floating
+** point number.
+*/
+typedef struct vanuatuFlexTokenStruct
+{
+    double value;
+    struct vanuatuFlexTokenStruct *Next;
+} vanuatuFlexToken;
+
+/*
+** Function to clean up the linked-list of token values.
+*/
+static int
+vanuatu_cleanup (vanuatuFlexToken * token)
+{
+    vanuatuFlexToken *ptok;
+    vanuatuFlexToken *ptok_n;
+    if (token == NULL)
+	return 0;
+    ptok = token;
+    while (ptok)
+      {
+	  ptok_n = ptok->Next;
+	  free (ptok);
+	  ptok = ptok_n;
+      }
+    return 0;
+}
+
+gaiaGeomCollPtr
+gaiaParseWkt (const unsigned char *dirty_buffer, short type)
+{
+    void *pParser = ParseAlloc (malloc);
+    /* Linked-list of token values */
+    vanuatuFlexToken *tokens = malloc (sizeof (vanuatuFlexToken));
+    /* Pointer to the head of the list */
+    vanuatuFlexToken *head = tokens;
+    int yv;
+    gaiaGeomCollPtr result = NULL;
+
+    tokens->Next = NULL;
+    /*
+     ** Sandro Furieri 2010 Apr 4
+     ** unsetting the parser error flag
+     */
+    vanuatu_parse_error = 0;
+
+    VanuatuWkt_scan_string ((char *) dirty_buffer);
+
+    /*
+       / Keep tokenizing until we reach the end
+       / yylex() will return the next matching Token for us.
+     */
+    while ((yv = yylex ()) != 0)
+      {
+	  if (yv == -1)
+	    {
+		vanuatu_parse_error = 1;
+		break;
+	    }
+	  tokens->Next = malloc (sizeof (vanuatuFlexToken));
+	  tokens->Next->Next = NULL;
+	  /*
+	     /VanuatuWktlval is a global variable from FLEX.
+	     /VanuatuWktlval is defined in vanuatuLexglobal.h
+	   */
+	  tokens->Next->value = VanuatuWktlval.dval;
+	  /* Pass the token to the wkt parser created from lemon */
+	  Parse (pParser, yv, &(tokens->Next->value), &result);
+	  tokens = tokens->Next;
+      }
+    /* This denotes the end of a line as well as the end of the parser */
+    Parse (pParser, VANUATU_NEWLINE, 0, &result);
+    ParseFree (pParser, free);
+    VanuatuWktlex_destroy ();
+
+    /* Assigning the token as the end to avoid seg faults while cleaning */
+    tokens->Next = NULL;
+    vanuatu_cleanup (head);
+
+    /*
+     ** Sandro Furieri 2010 Apr 4
+     ** checking if any parsing error was encountered 
+     */
+    if (vanuatu_parse_error)
+      {
+	  if (result)
+	      gaiaFreeGeomColl (result);
+	  return NULL;
+      }
+
+    /*
+     ** Sandro Furieri 2010 Apr 4
+     ** final checkup for validity
+     */
+    if (!result)
+	return NULL;
+    if (!vanuatuCheckValidity (result))
+      {
+	  gaiaFreeGeomColl (result);
+	  return NULL;
+      }
+    if (type < 0)
+	;			/* no restrinction about GEOMETRY CLASS TYPE */
+    else
+      {
+	  if (result->DeclaredType != type)
+	    {
+		/* invalid CLASS TYPE for request */
+		gaiaFreeGeomColl (result);
+		return NULL;
+	    }
+      }
+
+    gaiaMbrGeometry (result);
+
+    return result;
+}
+
+/******************************************************************************
+** This is the end of the code that was created by Team Vanuatu 
+** of The University of Toronto.
+
+Authors:
+Ruppi Rana			ruppi.rana at gmail.com
+Dev Tanna			dev.tanna at gmail.com
+Elias Adum			elias.adum at gmail.com
+Benton Hui			benton.hui at gmail.com
+Abhayan Sundararajan		abhayan at gmail.com
+Chee-Lun Michael Stephen Cho	cheelun.cho at gmail.com
+Nikola Banovic			nikola.banovic at gmail.com
+Yong Jian			yong.jian at utoronto.ca
+
+Supervisor:
+Greg Wilson			gvwilson at cs.toronto.ca
+
+-------------------------------------------------------------------------------
+
+*/
+
+/*
+** CAVEAT: we must now undefine any Lemon/Flex own macro
+*/
+#undef YYNOCODE
+#undef YYNSTATE
+#undef YYNRULE
+#undef YY_SHIFT_MAX
+#undef YY_SHIFT_USE_DFLT
+#undef YY_REDUCE_USE_DFLT
+#undef YY_REDUCE_MAX
+#undef YY_FLUSH_BUFFER
+#undef YY_DO_BEFORE_ACTION
+#undef YY_NUM_RULES
+#undef YY_END_OF_BUFFER
+#undef YY_END_FILE
+#undef YYACTIONTYPE
+#undef YY_SZ_ACTTAB
+#undef YY_NEW_FILE
+#undef BEGIN
+#undef YY_START
+#undef YY_CURRENT_BUFFER
+#undef YY_CURRENT_BUFFER_LVALUE
+#undef YY_STATE_BUF_SIZE
+#undef YY_DECL
+#undef YY_FATAL_ERROR
+#undef YYMINORTYPE
+#undef YY_CHAR
+#undef YYSTYPE
+#undef input
+#undef ParseAlloc
+#undef ParseFree
+#undef ParseStackPeak
+#undef Parse
+#undef yyalloc
+#undef yyfree
+#undef yyin
+#undef yyleng
+#undef yyless
+#undef yylex
+#undef yylineno
+#undef yyout
+#undef yyrealloc
+#undef yyrestart
+#undef yyStackEntry
+#undef yytext
+#undef yywrap
+#undef yyzerominor
+#undef yy_accept
+#undef yy_action
+#undef yy_base
+#undef yy_buffer_stack
+#undef yy_buffer_stack_max
+#undef yy_buffer_stack_top
+#undef yy_c_buf_p
+#undef yy_chk
+#undef yy_create_buffer
+#undef yy_def
+#undef yy_default
+#undef yy_delete_buffer
+#undef yy_destructor
+#undef yy_ec
+#undef yy_fatal_error
+#undef yy_find_reduce_action
+#undef yy_find_shift_action
+#undef yy_flex_debug
+#undef yy_flush_buffer
+#undef yy_get_next_buffer
+#undef yy_get_previous_state
+#undef yy_init
+#undef yy_init_buffer
+#undef yy_init_globals
+#undef yy_load_buffer
+#undef yy_load_buffer_state
+#undef yy_lookahead
+#undef yy_meta
+#undef yy_new_buffer
+#undef yy_nxt
+#undef yy_parse_failed
+#undef yy_pop_parser_stack
+#undef yy_reduce
+#undef yy_reduce_ofst
+#undef yy_set_bol
+#undef yy_set_interactive
+#undef yy_shift
+#undef yy_shift_ofst
+#undef yy_start
+#undef yy_state_type
+#undef yy_switch_to_buffer
+#undef yy_syntax_error
+#undef yy_trans_info
+#undef yy_try_NUL_trans
+#undef yyParser
+#undef yyStackEntry
+#undef yyStackOverflow
+#undef yyRuleInfo
+#undef yytext_ptr
+#undef yyunput
+#undef yyzerominor
+#undef ParseARG_SDECL
+#undef ParseARG_PDECL
+#undef ParseARG_FETCH
+#undef ParseARG_STORE
+#undef REJECT
+#undef yymore
+#undef YY_MORE_ADJ
+#undef YY_RESTORE_YY_MORE_OFFSET
+#undef YY_LESS_LINENO
+#undef yyTracePrompt
+#undef yyTraceFILE
+#undef yyTokenName
+#undef yyRuleName
+#undef ParseTrace
diff --git a/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_wkb.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_wkb.c
new file mode 100644
index 0000000..8c00ffa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_wkb.c
@@ -0,0 +1,6325 @@
+/*
+
+ gg_wkb.c -- Gaia common support for WKB encoded geometries
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <float.h>
+#include <string.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+
+static void
+ParseWkbPoint (gaiaGeomCollPtr geo)
+{
+/* decodes a POINT from WKB */
+    double x;
+    double y;
+    if (geo->size < geo->offset + 16)
+	return;
+    x = gaiaImport64 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+		      geo->endian_arch);
+    geo->offset += 16;
+    gaiaAddPointToGeomColl (geo, x, y);
+}
+
+static void
+ParseWkbPointZ (gaiaGeomCollPtr geo)
+{
+/* decodes a POINTZ from WKB */
+    double x;
+    double y;
+    double z;
+    if (geo->size < geo->offset + 24)
+	return;
+    x = gaiaImport64 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+		      geo->endian_arch);
+    z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+		      geo->endian_arch);
+    geo->offset += 24;
+    gaiaAddPointToGeomCollXYZ (geo, x, y, z);
+}
+
+static void
+ParseWkbPointM (gaiaGeomCollPtr geo)
+{
+/* decodes a POINTM from WKB */
+    double x;
+    double y;
+    double m;
+    if (geo->size < geo->offset + 24)
+	return;
+    x = gaiaImport64 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+		      geo->endian_arch);
+    m = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+		      geo->endian_arch);
+    geo->offset += 24;
+    gaiaAddPointToGeomCollXYM (geo, x, y, m);
+}
+
+static void
+ParseWkbPointZM (gaiaGeomCollPtr geo)
+{
+/* decodes a POINTZM from WKB */
+    double x;
+    double y;
+    double z;
+    double m;
+    if (geo->size < geo->offset + 32)
+	return;
+    x = gaiaImport64 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+		      geo->endian_arch);
+    z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+		      geo->endian_arch);
+    m = gaiaImport64 (geo->blob + (geo->offset + 24), geo->endian,
+		      geo->endian_arch);
+    geo->offset += 32;
+    gaiaAddPointToGeomCollXYZM (geo, x, y, z, m);
+}
+
+static void
+ParseWkbLine (gaiaGeomCollPtr geo)
+{
+/* decodes a LINESTRING from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (16 * points))
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+			    geo->endian_arch);
+	  gaiaSetPoint (line->Coords, iv, x, y);
+	  geo->offset += 16;
+      }
+}
+
+static void
+ParseWkbLineZ (gaiaGeomCollPtr geo)
+{
+/* decodes a LINESTRINGZ from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    double z;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (24 * points))
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+			    geo->endian_arch);
+	  z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+			    geo->endian_arch);
+	  gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+	  geo->offset += 24;
+      }
+}
+
+static void
+ParseWkbLineM (gaiaGeomCollPtr geo)
+{
+/* decodes a LINESTRINGM from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    double m;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (24 * points))
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+			    geo->endian_arch);
+	  m = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+			    geo->endian_arch);
+	  gaiaSetPointXYM (line->Coords, iv, x, y, m);
+	  geo->offset += 24;
+      }
+}
+
+static void
+ParseWkbLineZM (gaiaGeomCollPtr geo)
+{
+/* decodes a LINESTRINGZM from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (32 * points))
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+			    geo->endian_arch);
+	  z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+			    geo->endian_arch);
+	  m = gaiaImport64 (geo->blob + (geo->offset + 24), geo->endian,
+			    geo->endian_arch);
+	  gaiaSetPointXYZM (line->Coords, iv, x, y, z, m);
+	  geo->offset += 32;
+      }
+}
+
+static void
+ParseWkbPolygon (gaiaGeomCollPtr geo)
+{
+/* decodes a POLYGON from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (16 * nverts))
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 16;
+		gaiaSetPoint (ring->Coords, iv, x, y);
+	    }
+      }
+}
+
+static void
+ParseWkbPolygonZ (gaiaGeomCollPtr geo)
+{
+/* decodes a POLYGONZ from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (24 * nverts))
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 24;
+		gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+	    }
+      }
+}
+
+static void
+ParseWkbPolygonM (gaiaGeomCollPtr geo)
+{
+/* decodes a POLYGONM from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double m;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (24 * nverts))
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		m = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 24;
+		gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+	    }
+      }
+}
+
+static void
+ParseWkbPolygonZM (gaiaGeomCollPtr geo)
+{
+/* decodes a POLYGONZM from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (32 * nverts))
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+				  geo->endian_arch);
+		m = gaiaImport64 (geo->blob + (geo->offset + 24), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 32;
+		gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+	    }
+      }
+}
+
+static void
+ParseCompressedWkbLine (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED LINESTRING from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    float fx;
+    float fy;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (8 * points) + 16)
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  if (iv == 0 || iv == (points - 1))
+	    {
+		/* first and last vertices are uncompressed */
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 16;
+	    }
+	  else
+	    {
+		/* any other intermediate vertex is compressed */
+		fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+				    geo->endian_arch);
+		fy = gaiaImportF32 (geo->blob + (geo->offset + 4), geo->endian,
+				    geo->endian_arch);
+		x = last_x + fx;
+		y = last_y + fy;
+		geo->offset += 8;
+	    }
+	  gaiaSetPoint (line->Coords, iv, x, y);
+	  last_x = x;
+	  last_y = y;
+      }
+}
+
+static void
+ParseCompressedWkbLineZ (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED LINESTRINGZ from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    double last_z = 0.0;
+    float fx;
+    float fy;
+    float fz;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (12 * points) + 24)
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  if (iv == 0 || iv == (points - 1))
+	    {
+		/* first and last vertices are uncompressed */
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 24;
+	    }
+	  else
+	    {
+		/* any other intermediate vertex is compressed */
+		fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+				    geo->endian_arch);
+		fy = gaiaImportF32 (geo->blob + (geo->offset + 4), geo->endian,
+				    geo->endian_arch);
+		fz = gaiaImportF32 (geo->blob + (geo->offset + 8), geo->endian,
+				    geo->endian_arch);
+		x = last_x + fx;
+		y = last_y + fy;
+		z = last_z + fz;
+		geo->offset += 12;
+	    }
+	  gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+	  last_x = x;
+	  last_y = y;
+	  last_z = z;
+      }
+}
+
+static void
+ParseCompressedWkbLineM (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED LINESTRINGM from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    double m;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    float fx;
+    float fy;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (16 * points) + 16)
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  if (iv == 0 || iv == (points - 1))
+	    {
+		/* first and last vertices are uncompressed */
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		m = gaiaImport64 (geo->blob + (geo->offset + 24), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 24;
+	    }
+	  else
+	    {
+		/* any other intermediate vertex is compressed */
+		fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+				    geo->endian_arch);
+		fy = gaiaImportF32 (geo->blob + (geo->offset + 4), geo->endian,
+				    geo->endian_arch);
+		m = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		x = last_x + fx;
+		y = last_y + fy;
+		geo->offset += 16;
+	    }
+	  gaiaSetPointXYM (line->Coords, iv, x, y, m);
+	  last_x = x;
+	  last_y = y;
+      }
+}
+
+static void
+ParseCompressedWkbLineZM (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED LINESTRINGZM from WKB */
+    int points;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    double last_z = 0.0;
+    float fx;
+    float fy;
+    float fz;
+    gaiaLinestringPtr line;
+    if (geo->size < geo->offset + 4)
+	return;
+    points =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    if (geo->size < geo->offset + (20 * points) + 24)
+	return;
+    line = gaiaAddLinestringToGeomColl (geo, points);
+    for (iv = 0; iv < points; iv++)
+      {
+	  if (iv == 0 || iv == (points - 1))
+	    {
+		/* first and last vertices are uncompressed */
+		x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+				  geo->endian_arch);
+		y = gaiaImport64 (geo->blob + (geo->offset + 8), geo->endian,
+				  geo->endian_arch);
+		z = gaiaImport64 (geo->blob + (geo->offset + 16), geo->endian,
+				  geo->endian_arch);
+		m = gaiaImport64 (geo->blob + (geo->offset + 24), geo->endian,
+				  geo->endian_arch);
+		geo->offset += 32;
+	    }
+	  else
+	    {
+		/* any other intermediate vertex is compressed */
+		fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+				    geo->endian_arch);
+		fy = gaiaImportF32 (geo->blob + (geo->offset + 4), geo->endian,
+				    geo->endian_arch);
+		fz = gaiaImportF32 (geo->blob + (geo->offset + 8), geo->endian,
+				    geo->endian_arch);
+		m = gaiaImport64 (geo->blob + (geo->offset + 12), geo->endian,
+				  geo->endian_arch);
+		x = last_x + fx;
+		y = last_y + fy;
+		z = last_z + fz;
+		geo->offset += 20;
+	    }
+	  gaiaSetPointXYZM (line->Coords, iv, x, y, z, m);
+	  last_x = x;
+	  last_y = y;
+	  last_z = z;
+      }
+}
+
+static void
+ParseCompressedWkbPolygon (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED POLYGON from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    float fx;
+    float fy;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (8 * nverts) + 16)
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		if (iv == 0 || iv == (nverts - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+					geo->endian_arch);
+		      y = gaiaImport64 (geo->blob + (geo->offset + 8),
+					geo->endian, geo->endian_arch);
+		      geo->offset += 16;
+		  }
+		else
+		  {
+		      /* any other intermediate vertex is compressed */
+		      fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+					  geo->endian_arch);
+		      fy = gaiaImportF32 (geo->blob + (geo->offset + 4),
+					  geo->endian, geo->endian_arch);
+		      x = last_x + fx;
+		      y = last_y + fy;
+		      geo->offset += 8;
+		  }
+		gaiaSetPoint (ring->Coords, iv, x, y);
+		last_x = x;
+		last_y = y;
+	    }
+      }
+}
+
+static void
+ParseCompressedWkbPolygonZ (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED POLYGONZ from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    double last_z = 0.0;
+    float fx;
+    float fy;
+    float fz;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (12 * nverts) + 24)
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		if (iv == 0 || iv == (nverts - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+					geo->endian_arch);
+		      y = gaiaImport64 (geo->blob + (geo->offset + 8),
+					geo->endian, geo->endian_arch);
+		      z = gaiaImport64 (geo->blob + (geo->offset + 16),
+					geo->endian, geo->endian_arch);
+		      geo->offset += 24;
+		  }
+		else
+		  {
+		      /* any other intermediate vertex is compressed */
+		      fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+					  geo->endian_arch);
+		      fy = gaiaImportF32 (geo->blob + (geo->offset + 4),
+					  geo->endian, geo->endian_arch);
+		      fz = gaiaImportF32 (geo->blob + (geo->offset + 8),
+					  geo->endian, geo->endian_arch);
+		      x = last_x + fx;
+		      y = last_y + fy;
+		      z = last_z + fz;
+		      geo->offset += 12;
+		  }
+		gaiaSetPointXYZ (ring->Coords, iv, x, y, z);
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+      }
+}
+
+static void
+ParseCompressedWkbPolygonM (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED POLYGONM from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double m;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    float fx;
+    float fy;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (16 * nverts) + 16)
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		if (iv == 0 || iv == (nverts - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+					geo->endian_arch);
+		      y = gaiaImport64 (geo->blob + (geo->offset + 8),
+					geo->endian, geo->endian_arch);
+		      m = gaiaImport64 (geo->blob + (geo->offset + 24),
+					geo->endian, geo->endian_arch);
+		      geo->offset += 24;
+		  }
+		else
+		  {
+		      /* any other intermediate vertex is compressed */
+		      fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+					  geo->endian_arch);
+		      fy = gaiaImportF32 (geo->blob + (geo->offset + 4),
+					  geo->endian, geo->endian_arch);
+		      m = gaiaImport64 (geo->blob + (geo->offset + 8),
+					geo->endian, geo->endian_arch);
+		      x = last_x + fx;
+		      y = last_y + fy;
+		      geo->offset += 16;
+		  }
+		gaiaSetPointXYM (ring->Coords, iv, x, y, m);
+		last_x = x;
+		last_y = y;
+	    }
+      }
+}
+
+static void
+ParseCompressedWkbPolygonZM (gaiaGeomCollPtr geo)
+{
+/* decodes a COMPRESSED POLYGONZM from WKB */
+    int rings;
+    int nverts;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    double last_z = 0.0;
+    float fx;
+    float fy;
+    float fz;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr ring;
+    if (geo->size < geo->offset + 4)
+	return;
+    rings =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (geo->size < geo->offset + 4)
+	      return;
+	  nverts =
+	      gaiaImport32 (geo->blob + geo->offset, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 4;
+	  if (geo->size < geo->offset + (20 * nverts) + 24)
+	      return;
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geo, nverts, rings - 1);
+		ring = polyg->Exterior;
+	    }
+	  else
+	      ring = gaiaAddInteriorRing (polyg, ib - 1, nverts);
+	  for (iv = 0; iv < nverts; iv++)
+	    {
+		if (iv == 0 || iv == (nverts - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      x = gaiaImport64 (geo->blob + geo->offset, geo->endian,
+					geo->endian_arch);
+		      y = gaiaImport64 (geo->blob + (geo->offset + 8),
+					geo->endian, geo->endian_arch);
+		      z = gaiaImport64 (geo->blob + (geo->offset + 16),
+					geo->endian, geo->endian_arch);
+		      m = gaiaImport64 (geo->blob + (geo->offset + 24),
+					geo->endian, geo->endian_arch);
+		      geo->offset += 32;
+		  }
+		else
+		  {
+		      /* any other intermediate vertex is compressed */
+		      fx = gaiaImportF32 (geo->blob + geo->offset, geo->endian,
+					  geo->endian_arch);
+		      fy = gaiaImportF32 (geo->blob + (geo->offset + 4),
+					  geo->endian, geo->endian_arch);
+		      fz = gaiaImportF32 (geo->blob + (geo->offset + 8),
+					  geo->endian, geo->endian_arch);
+		      m = gaiaImport64 (geo->blob + (geo->offset + 12),
+					geo->endian, geo->endian_arch);
+		      x = last_x + fx;
+		      y = last_y + fy;
+		      z = last_z + fz;
+		      geo->offset += 20;
+		  }
+		gaiaSetPointXYZM (ring->Coords, iv, x, y, z, m);
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+      }
+}
+
+static void
+ParseWkbGeometry (gaiaGeomCollPtr geo)
+{
+/* decodes a MULTIxx or GEOMETRYCOLLECTION from SpatiaLite BLOB */
+    int entities;
+    int type;
+    int ie;
+    if (geo->size < geo->offset + 4)
+	return;
+    entities =
+	gaiaImport32 (geo->blob + geo->offset, geo->endian, geo->endian_arch);
+    geo->offset += 4;
+    for (ie = 0; ie < entities; ie++)
+      {
+	  if (geo->size < geo->offset + 5)
+	      return;
+	  type =
+	      gaiaImport32 (geo->blob + geo->offset + 1, geo->endian,
+			    geo->endian_arch);
+	  geo->offset += 5;
+	  switch (type)
+	    {
+	    case GAIA_POINT:
+		ParseWkbPoint (geo);
+		break;
+	    case GAIA_POINTZ:
+	    case GAIA_GEOSWKB_POINTZ:
+		ParseWkbPointZ (geo);
+		break;
+	    case GAIA_POINTM:
+		ParseWkbPointM (geo);
+		break;
+	    case GAIA_POINTZM:
+		ParseWkbPointZM (geo);
+		break;
+	    case GAIA_LINESTRING:
+		ParseWkbLine (geo);
+		break;
+	    case GAIA_LINESTRINGZ:
+	    case GAIA_GEOSWKB_LINESTRINGZ:
+		ParseWkbLineZ (geo);
+		break;
+	    case GAIA_LINESTRINGM:
+		ParseWkbLineM (geo);
+		break;
+	    case GAIA_LINESTRINGZM:
+		ParseWkbLineZM (geo);
+		break;
+	    case GAIA_POLYGON:
+		ParseWkbPolygon (geo);
+		break;
+	    case GAIA_POLYGONZ:
+	    case GAIA_GEOSWKB_POLYGONZ:
+		ParseWkbPolygonZ (geo);
+		break;
+	    case GAIA_POLYGONM:
+		ParseWkbPolygonM (geo);
+		break;
+	    case GAIA_POLYGONZM:
+		ParseWkbPolygonZM (geo);
+		break;
+	    case GAIA_COMPRESSED_LINESTRING:
+		ParseCompressedWkbLine (geo);
+		break;
+	    case GAIA_COMPRESSED_LINESTRINGZ:
+		ParseCompressedWkbLineZ (geo);
+		break;
+	    case GAIA_COMPRESSED_LINESTRINGM:
+		ParseCompressedWkbLineM (geo);
+		break;
+	    case GAIA_COMPRESSED_LINESTRINGZM:
+		ParseCompressedWkbLineZM (geo);
+		break;
+	    case GAIA_COMPRESSED_POLYGON:
+		ParseCompressedWkbPolygon (geo);
+		break;
+	    case GAIA_COMPRESSED_POLYGONZ:
+		ParseCompressedWkbPolygonZ (geo);
+		break;
+	    case GAIA_COMPRESSED_POLYGONM:
+		ParseCompressedWkbPolygonM (geo);
+		break;
+	    case GAIA_COMPRESSED_POLYGONZM:
+		ParseCompressedWkbPolygonZM (geo);
+		break;
+	    default:
+		break;
+	    };
+      }
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaFromSpatiaLiteBlobWkb (const unsigned char *blob, unsigned int size)
+{
+/* decoding from SpatiaLite BLOB to GEOMETRY */
+    int type;
+    int little_endian;
+    int endian_arch = gaiaEndianArch ();
+    gaiaGeomCollPtr geo = NULL;
+    if (size < 45)
+	return NULL;		/* cannot be an internal BLOB WKB geometry */
+    if (*(blob + 0) != GAIA_MARK_START)
+	return NULL;		/* failed to recognize START signature */
+    if (*(blob + (size - 1)) != GAIA_MARK_END)
+	return NULL;		/* failed to recognize END signature */
+    if (*(blob + 38) != GAIA_MARK_MBR)
+	return NULL;		/* failed to recognize MBR signature */
+    if (*(blob + 1) == GAIA_LITTLE_ENDIAN)
+	little_endian = 1;
+    else if (*(blob + 1) == GAIA_BIG_ENDIAN)
+	little_endian = 0;
+    else
+	return NULL;		/* unknown encoding; nor litte-endian neither big-endian */
+    type = gaiaImport32 (blob + 39, little_endian, endian_arch);
+    geo = gaiaAllocGeomColl ();
+    geo->Srid = gaiaImport32 (blob + 2, little_endian, endian_arch);
+    geo->endian_arch = (char) endian_arch;
+    geo->endian = (char) little_endian;
+    geo->blob = blob;
+    geo->size = size;
+    geo->offset = 43;
+    switch (type)
+      {
+	  /* setting up DimensionModel */
+      case GAIA_POINTZ:
+      case GAIA_LINESTRINGZ:
+      case GAIA_POLYGONZ:
+      case GAIA_MULTIPOINTZ:
+      case GAIA_MULTILINESTRINGZ:
+      case GAIA_MULTIPOLYGONZ:
+      case GAIA_GEOMETRYCOLLECTIONZ:
+      case GAIA_COMPRESSED_LINESTRINGZ:
+      case GAIA_COMPRESSED_POLYGONZ:
+	  geo->DimensionModel = GAIA_XY_Z;
+	  break;
+      case GAIA_POINTM:
+      case GAIA_LINESTRINGM:
+      case GAIA_POLYGONM:
+      case GAIA_MULTIPOINTM:
+      case GAIA_MULTILINESTRINGM:
+      case GAIA_MULTIPOLYGONM:
+      case GAIA_GEOMETRYCOLLECTIONM:
+      case GAIA_COMPRESSED_LINESTRINGM:
+      case GAIA_COMPRESSED_POLYGONM:
+	  geo->DimensionModel = GAIA_XY_M;
+	  break;
+      case GAIA_POINTZM:
+      case GAIA_LINESTRINGZM:
+      case GAIA_POLYGONZM:
+      case GAIA_MULTIPOINTZM:
+      case GAIA_MULTILINESTRINGZM:
+      case GAIA_MULTIPOLYGONZM:
+      case GAIA_GEOMETRYCOLLECTIONZM:
+      case GAIA_COMPRESSED_LINESTRINGZM:
+      case GAIA_COMPRESSED_POLYGONZM:
+	  geo->DimensionModel = GAIA_XY_Z_M;
+	  break;
+      default:
+	  geo->DimensionModel = GAIA_XY;
+	  break;
+      };
+    switch (type)
+      {
+	  /* parsing elementary geometries */
+      case GAIA_POINT:
+	  ParseWkbPoint (geo);
+	  break;
+      case GAIA_POINTZ:
+	  ParseWkbPointZ (geo);
+	  break;
+      case GAIA_POINTM:
+	  ParseWkbPointM (geo);
+	  break;
+      case GAIA_POINTZM:
+	  ParseWkbPointZM (geo);
+	  break;
+      case GAIA_LINESTRING:
+	  ParseWkbLine (geo);
+	  break;
+      case GAIA_LINESTRINGZ:
+	  ParseWkbLineZ (geo);
+	  break;
+      case GAIA_LINESTRINGM:
+	  ParseWkbLineM (geo);
+	  break;
+      case GAIA_LINESTRINGZM:
+	  ParseWkbLineZM (geo);
+	  break;
+      case GAIA_POLYGON:
+	  ParseWkbPolygon (geo);
+	  break;
+      case GAIA_POLYGONZ:
+	  ParseWkbPolygonZ (geo);
+	  break;
+      case GAIA_POLYGONM:
+	  ParseWkbPolygonM (geo);
+	  break;
+      case GAIA_POLYGONZM:
+	  ParseWkbPolygonZM (geo);
+	  break;
+      case GAIA_COMPRESSED_LINESTRING:
+	  ParseCompressedWkbLine (geo);
+	  break;
+      case GAIA_COMPRESSED_LINESTRINGZ:
+	  ParseCompressedWkbLineZ (geo);
+	  break;
+      case GAIA_COMPRESSED_LINESTRINGM:
+	  ParseCompressedWkbLineM (geo);
+	  break;
+      case GAIA_COMPRESSED_LINESTRINGZM:
+	  ParseCompressedWkbLineZM (geo);
+	  break;
+      case GAIA_COMPRESSED_POLYGON:
+	  ParseCompressedWkbPolygon (geo);
+	  break;
+      case GAIA_COMPRESSED_POLYGONZ:
+	  ParseCompressedWkbPolygonZ (geo);
+	  break;
+      case GAIA_COMPRESSED_POLYGONM:
+	  ParseCompressedWkbPolygonM (geo);
+	  break;
+      case GAIA_COMPRESSED_POLYGONZM:
+	  ParseCompressedWkbPolygonZM (geo);
+	  break;
+      case GAIA_MULTIPOINT:
+      case GAIA_MULTIPOINTZ:
+      case GAIA_MULTIPOINTM:
+      case GAIA_MULTIPOINTZM:
+      case GAIA_MULTILINESTRING:
+      case GAIA_MULTILINESTRINGZ:
+      case GAIA_MULTILINESTRINGM:
+      case GAIA_MULTILINESTRINGZM:
+      case GAIA_MULTIPOLYGON:
+      case GAIA_MULTIPOLYGONZ:
+      case GAIA_MULTIPOLYGONM:
+      case GAIA_MULTIPOLYGONZM:
+      case GAIA_GEOMETRYCOLLECTION:
+      case GAIA_GEOMETRYCOLLECTIONZ:
+      case GAIA_GEOMETRYCOLLECTIONM:
+      case GAIA_GEOMETRYCOLLECTIONZM:
+	  ParseWkbGeometry (geo);
+	  break;
+      default:
+	  break;
+      };
+    geo->MinX = gaiaImport64 (blob + 6, little_endian, endian_arch);
+    geo->MinY = gaiaImport64 (blob + 14, little_endian, endian_arch);
+    geo->MaxX = gaiaImport64 (blob + 22, little_endian, endian_arch);
+    geo->MaxY = gaiaImport64 (blob + 30, little_endian, endian_arch);
+    switch (type)
+      {
+	  /* setting up DeclaredType */
+      case GAIA_POINT:
+      case GAIA_POINTZ:
+      case GAIA_POINTM:
+      case GAIA_POINTZM:
+	  geo->DeclaredType = GAIA_POINT;
+	  break;
+      case GAIA_LINESTRING:
+      case GAIA_LINESTRINGZ:
+      case GAIA_LINESTRINGM:
+      case GAIA_LINESTRINGZM:
+      case GAIA_COMPRESSED_LINESTRING:
+      case GAIA_COMPRESSED_LINESTRINGZ:
+      case GAIA_COMPRESSED_LINESTRINGM:
+      case GAIA_COMPRESSED_LINESTRINGZM:
+	  geo->DeclaredType = GAIA_LINESTRING;
+	  break;
+      case GAIA_POLYGON:
+      case GAIA_POLYGONZ:
+      case GAIA_POLYGONM:
+      case GAIA_POLYGONZM:
+      case GAIA_COMPRESSED_POLYGON:
+      case GAIA_COMPRESSED_POLYGONZ:
+      case GAIA_COMPRESSED_POLYGONM:
+      case GAIA_COMPRESSED_POLYGONZM:
+	  geo->DeclaredType = GAIA_POLYGON;
+	  break;
+      case GAIA_MULTIPOINT:
+      case GAIA_MULTIPOINTZ:
+      case GAIA_MULTIPOINTM:
+      case GAIA_MULTIPOINTZM:
+	  geo->DeclaredType = GAIA_MULTIPOINT;
+	  break;
+      case GAIA_MULTILINESTRING:
+      case GAIA_MULTILINESTRINGZ:
+      case GAIA_MULTILINESTRINGM:
+      case GAIA_MULTILINESTRINGZM:
+	  geo->DeclaredType = GAIA_MULTILINESTRING;
+	  break;
+      case GAIA_MULTIPOLYGON:
+      case GAIA_MULTIPOLYGONZ:
+      case GAIA_MULTIPOLYGONM:
+      case GAIA_MULTIPOLYGONZM:
+	  geo->DeclaredType = GAIA_MULTIPOLYGON;
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+      case GAIA_GEOMETRYCOLLECTIONZ:
+      case GAIA_GEOMETRYCOLLECTIONM:
+      case GAIA_GEOMETRYCOLLECTIONZM:
+	  geo->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+	  break;
+      default:
+	  geo->DeclaredType = GAIA_UNKNOWN;
+	  break;
+      };
+    return geo;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaFromSpatiaLiteBlobMbr (const unsigned char *blob, unsigned int size)
+{
+/* decoding from SpatiaLite BLOB to GEOMETRY [MBR only] */
+    int little_endian;
+    int endian_arch = gaiaEndianArch ();
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    if (size < 45)
+	return NULL;		/* cannot be an internal BLOB WKB geometry */
+    if (*(blob + 0) != GAIA_MARK_START)
+	return NULL;		/* failed to recognize START signature */
+    if (*(blob + (size - 1)) != GAIA_MARK_END)
+	return NULL;		/* failed to recognize END signature */
+    if (*(blob + 38) != GAIA_MARK_MBR)
+	return NULL;		/* failed to recognize MBR signature */
+    if (*(blob + 1) == GAIA_LITTLE_ENDIAN)
+	little_endian = 1;
+    else if (*(blob + 1) == GAIA_BIG_ENDIAN)
+	little_endian = 0;
+    else
+	return NULL;		/* unknown encoding; nor litte-endian neither big-endian */
+    geo = gaiaAllocGeomColl ();
+    polyg = gaiaAddPolygonToGeomColl (geo, 5, 0);
+    ring = polyg->Exterior;
+    minx = gaiaImport64 (blob + 6, little_endian, endian_arch);
+    miny = gaiaImport64 (blob + 14, little_endian, endian_arch);
+    maxx = gaiaImport64 (blob + 22, little_endian, endian_arch);
+    maxy = gaiaImport64 (blob + 30, little_endian, endian_arch);
+    gaiaSetPoint (ring->Coords, 0, minx, miny);	/* vertex # 1 */
+    gaiaSetPoint (ring->Coords, 1, maxx, miny);	/* vertex # 2 */
+    gaiaSetPoint (ring->Coords, 2, maxx, maxy);	/* vertex # 3 */
+    gaiaSetPoint (ring->Coords, 3, minx, maxy);	/* vertex # 4 */
+    gaiaSetPoint (ring->Coords, 4, minx, miny);	/* vertex # 5 [same as vertex # 1 to close the polygon] */
+    return geo;
+}
+
+GAIAGEO_DECLARE void
+gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
+			 int *size)
+{
+/* builds the SpatiaLite BLOB representation for this GEOMETRY */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z = 0.0;
+    double m = 0.0;
+    int entities = 0;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    int type;
+    unsigned char *ptr;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    int endian_arch = gaiaEndianArch ();
+    gaiaMbrGeometry (geom);
+/* how many entities, and of what kind, do we have ? */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  point = pt;
+	  entities++;
+	  n_points++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  line = ln;
+	  entities++;
+	  n_linestrings++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  polyg = pg;
+	  entities++;
+	  n_polygons++;
+	  pg = pg->Next;
+      }
+    *size = 0;
+    *result = NULL;
+    if (n_points == 0 && n_polygons == 0 && n_linestrings == 0)
+	return;
+/* ok, we can determine the geometry class */
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOINTZM;
+		else
+		    type = GAIA_MULTIPOINT;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_POINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_POINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_POINTZM;
+		else
+		    type = GAIA_POINT;
+	    }
+      }
+    else if (n_points > 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOINTZM;
+		else
+		    type = GAIA_MULTIPOINT;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTILINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTILINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTILINESTRINGZM;
+		else
+		    type = GAIA_MULTILINESTRING;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_LINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_LINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_LINESTRINGZM;
+		else
+		    type = GAIA_LINESTRING;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings > 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTILINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTILINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTILINESTRINGZM;
+		else
+		    type = GAIA_MULTILINESTRING;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOLYGONZM;
+		else
+		    type = GAIA_MULTIPOLYGON;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_POLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_POLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_POLYGONZM;
+		else
+		    type = GAIA_POLYGON;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons > 1)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOLYGONZM;
+		else
+		    type = GAIA_MULTIPOLYGON;
+	    }
+      }
+    else
+      {
+	  if (geom->DimensionModel == GAIA_XY_Z)
+	      type = GAIA_GEOMETRYCOLLECTIONZ;
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      type = GAIA_GEOMETRYCOLLECTIONM;
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      type = GAIA_GEOMETRYCOLLECTIONZM;
+	  else
+	      type = GAIA_GEOMETRYCOLLECTION;
+      }
+/* and now we compute the size of BLOB */
+    *size = 44;			/* header size */
+    switch (type)
+      {
+      case GAIA_POINT:
+	  *size += (sizeof (double) * 2);	/* [x,y] coords */
+	  break;
+      case GAIA_POINTZ:
+	  *size += (sizeof (double) * 3);	/* [x,y,z] coords */
+	  break;
+      case GAIA_POINTM:
+	  *size += (sizeof (double) * 3);	/* [x,y,m] coords */
+	  break;
+      case GAIA_POINTZM:
+	  *size += (sizeof (double) * 4);	/* [x,y,z,m] coords */
+	  break;
+      case GAIA_LINESTRING:
+	  *size += (4 + ((sizeof (double) * 2) * line->Points));	/* # points + [x,y] for each vertex */
+	  break;
+      case GAIA_LINESTRINGZ:
+	  *size += (4 + ((sizeof (double) * 3) * line->Points));	/* # points + [x,y,z] for each vertex */
+	  break;
+      case GAIA_LINESTRINGM:
+	  *size += (4 + ((sizeof (double) * 3) * line->Points));	/* # points + [x,y,m] for each vertex */
+	  break;
+      case GAIA_LINESTRINGZM:
+	  *size += (4 + ((sizeof (double) * 4) * line->Points));	/* # points + [x,y,z,m] for each vertex */
+	  break;
+      case GAIA_POLYGON:
+	  rng = polyg->Exterior;
+	  *size += (8 + ((sizeof (double) * 2) * rng->Points));	/* # rings + # points + [x.y] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + ((sizeof (double) * 2) * rng->Points));	/* # points + [x,y] array - interior ring */
+	    }
+	  break;
+      case GAIA_POLYGONZ:
+	  rng = polyg->Exterior;
+	  *size += (8 + ((sizeof (double) * 3) * rng->Points));	/* # rings + # points + [x,y,z] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + ((sizeof (double) * 3) * rng->Points));	/* # points + [x,y,z] array - interior ring */
+	    }
+	  break;
+      case GAIA_POLYGONM:
+	  rng = polyg->Exterior;
+	  *size += (8 + ((sizeof (double) * 3) * rng->Points));	/* # rings + # points + [x,y,m] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + ((sizeof (double) * 3) * rng->Points));	/* # points + [x,y,m] array - interior ring */
+	    }
+	  break;
+      case GAIA_POLYGONZM:
+	  rng = polyg->Exterior;
+	  *size += (8 + ((sizeof (double) * 4) * rng->Points));	/* # rings + # points + [x,y,z,m] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + ((sizeof (double) * 4) * rng->Points));	/* # points + [x,y,z,m] array - interior ring */
+	    }
+	  break;
+      default:
+	  /* this one is not a simple geometry; should be a MULTIxxxx or a GEOMETRYCOLLECTION */
+	  *size += 4;		/* # entities */
+	  point = geom->FirstPoint;
+	  while (point)
+	    {
+		*size += 5;	/* entity header */
+		if (geom->DimensionModel == GAIA_XY_Z
+		    || geom->DimensionModel == GAIA_XY_M)
+		    *size += (sizeof (double) * 3);	/* three doubles for each POINT */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *size += (sizeof (double) * 4);	/* four doubles for each POINT */
+		else
+		    *size += (sizeof (double) * 2);	/* two doubles for each POINT */
+		point = point->Next;
+	    }
+	  line = geom->FirstLinestring;
+	  while (line)
+	    {
+		*size += 5;	/* entity header */
+		if (geom->DimensionModel == GAIA_XY_Z
+		    || geom->DimensionModel == GAIA_XY_M)
+		    *size += (4 + ((sizeof (double) * 3) * line->Points));	/* # points + [x,y,z] for each vertex */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *size += (4 + ((sizeof (double) * 4) * line->Points));	/* # points + [x,y,z,m] for each vertex */
+		else
+		    *size += (4 + ((sizeof (double) * 2) * line->Points));	/* # points + [x,y] for each vertex */
+		line = line->Next;
+	    }
+	  polyg = geom->FirstPolygon;
+	  while (polyg)
+	    {
+		*size += 5;	/* entity header */
+		rng = polyg->Exterior;
+		if (geom->DimensionModel == GAIA_XY_Z
+		    || geom->DimensionModel == GAIA_XY_M)
+		    *size += (8 + ((sizeof (double) * 3) * rng->Points));	/* # rings + # points + [x,y,z] array - exterior ring */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *size += (8 + ((sizeof (double) * 4) * rng->Points));	/* # rings + # points + [x,y,z,m] array - exterior ring */
+		else
+		    *size += (8 + ((sizeof (double) * 2) * rng->Points));	/* # rings + # points + [x,y] array - exterior ring */
+		for (ib = 0; ib < polyg->NumInteriors; ib++)
+		  {
+		      rng = polyg->Interiors + ib;
+		      if (geom->DimensionModel == GAIA_XY_Z
+			  || geom->DimensionModel == GAIA_XY_M)
+			  *size += (4 + ((sizeof (double) * 3) * rng->Points));	/* # points + [x,y,z] array - interior ring */
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			  *size += (4 + ((sizeof (double) * 4) * rng->Points));	/* # points + [x,y,z,m] array - interior ring */
+		      else
+			  *size += (4 + ((sizeof (double) * 2) * rng->Points));	/* # points + [x,y] array - interior ring */
+		  }
+		polyg = polyg->Next;
+	    }
+      };
+    *result = malloc (*size);
+    ptr = *result;
+/* and finally we build the BLOB */
+    switch (type)
+      {
+      case GAIA_POINT:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINT, 1, endian_arch);	/* class POINT */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  *(ptr + 59) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POINTZ:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINTZ, 1, endian_arch);	/* class POINT XYZ */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  gaiaExport64 (ptr + 59, point->Z, 1, endian_arch);	/* Z */
+	  *(ptr + 67) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POINTM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINTM, 1, endian_arch);	/* class POINT XYM */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  gaiaExport64 (ptr + 59, point->M, 1, endian_arch);	/* M */
+	  *(ptr + 67) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POINTZM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINTZM, 1, endian_arch);	/* class POINT XYZM */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  gaiaExport64 (ptr + 59, point->Z, 1, endian_arch);	/* M */
+	  gaiaExport64 (ptr + 67, point->M, 1, endian_arch);	/* Z */
+	  *(ptr + 75) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRING:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_LINESTRING, 1, endian_arch);	/* class LINESTRING */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPoint (line->Coords, iv, &x, &y);
+		gaiaExport64 (ptr, x, 1, endian_arch);
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		ptr += 16;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRINGZ:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_LINESTRINGZ, 1, endian_arch);	/* class LINESTRING XYZ */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		gaiaExport64 (ptr, x, 1, endian_arch);
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		gaiaExport64 (ptr + 16, z, 1, endian_arch);
+		ptr += 24;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRINGM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_LINESTRINGM, 1, endian_arch);	/* class LINESTRING XYM */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		gaiaExport64 (ptr, x, 1, endian_arch);
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		gaiaExport64 (ptr + 16, m, 1, endian_arch);
+		ptr += 24;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRINGZM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_LINESTRINGZM, 1, endian_arch);	/* class LINESTRING XYZM */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		gaiaExport64 (ptr, x, 1, endian_arch);
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		gaiaExport64 (ptr + 16, z, 1, endian_arch);
+		gaiaExport64 (ptr + 24, m, 1, endian_arch);
+		ptr += 32;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGON:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POLYGON, 1, endian_arch);	/* class POLYGON */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPoint (rng->Coords, iv, &x, &y);
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+		ptr += 16;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+		      ptr += 16;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGONZ:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POLYGONZ, 1, endian_arch);	/* class POLYGON XYZ */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+		gaiaExport64 (ptr + 16, z, 1, endian_arch);	/* Z - exterior ring */
+		ptr += 24;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+		      gaiaExport64 (ptr + 16, z, 1, endian_arch);	/* Z - interior ring */
+		      ptr += 24;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGONM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POLYGONM, 1, endian_arch);	/* class POLYGON XYM */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+		gaiaExport64 (ptr + 16, m, 1, endian_arch);	/* M - exterior ring */
+		ptr += 24;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+		      gaiaExport64 (ptr + 16, m, 1, endian_arch);	/* M - interior ring */
+		      ptr += 24;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGONZM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POLYGONZM, 1, endian_arch);	/* class POLYGON */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+		gaiaExport64 (ptr + 16, z, 1, endian_arch);	/* Z - exterior ring */
+		gaiaExport64 (ptr + 24, m, 1, endian_arch);	/* M - exterior ring */
+		ptr += 32;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+		      gaiaExport64 (ptr + 16, z, 1, endian_arch);	/* Z - exterior ring */
+		      gaiaExport64 (ptr + 24, m, 1, endian_arch);	/* M - exterior ring */
+		      ptr += 32;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      default:
+	  /* this one is a MULTIxxxx or a GEOMETRYCOLLECTION - building the main header */
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, type, 1, endian_arch);	/* geometric class */
+	  gaiaExport32 (ptr + 43, entities, 1, endian_arch);	/* # entities */
+	  ptr += 47;
+	  point = geom->FirstPoint;
+	  while (point)
+	    {
+		*ptr = GAIA_MARK_ENTITY;	/* ENTITY signature */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINTZ, 1, endian_arch);	/* class POINT XYZ */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      gaiaExport64 (ptr + 21, point->Z, 1, endian_arch);	/* Z */
+		      ptr += 29;
+		  }
+		else if (geom->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINTM, 1, endian_arch);	/* class POINT XYM */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      gaiaExport64 (ptr + 21, point->M, 1, endian_arch);	/* M */
+		      ptr += 29;
+		  }
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINTZM, 1, endian_arch);	/* class POINT XYZM */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      gaiaExport64 (ptr + 21, point->Z, 1, endian_arch);	/* Z */
+		      gaiaExport64 (ptr + 29, point->M, 1, endian_arch);	/* M */
+		      ptr += 37;
+		  }
+		else
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINT, 1, endian_arch);	/* class POINT */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      ptr += 21;
+		  }
+		point = point->Next;
+	    }
+	  line = geom->FirstLinestring;
+	  while (line)
+	    {
+		*ptr = GAIA_MARK_ENTITY;	/* ENTITY signature */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRINGZ, 1, endian_arch);	/* class LINESTRING XYZ */
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRINGM, 1, endian_arch);	/* class LINESTRING XYM */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRINGZM, 1, endian_arch);	/* class LINESTRING XYZM */
+		else
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRING, 1, endian_arch);	/* class LINESTRING */
+		gaiaExport32 (ptr + 5, line->Points, 1, endian_arch);	/* # points */
+		ptr += 9;
+		for (iv = 0; iv < line->Points; iv++)
+		  {
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (line->Coords, iv, &x, &y);
+			}
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y */
+		      ptr += 16;
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+			    gaiaExport64 (ptr + 8, m, 1, endian_arch);	/* M */
+			    ptr += 16;
+			}
+		  }
+		line = line->Next;
+	    }
+	  polyg = geom->FirstPolygon;
+	  while (polyg)
+	    {
+		*ptr = GAIA_MARK_ENTITY;	/* ENTITY signature */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    gaiaExport32 (ptr + 1, GAIA_POLYGONZ, 1, endian_arch);	/* class POLYGON XYZ */
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    gaiaExport32 (ptr + 1, GAIA_POLYGONM, 1, endian_arch);	/* class POLYGON XYM */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    gaiaExport32 (ptr + 1, GAIA_POLYGONZM, 1, endian_arch);	/* class POLYGON XYZM */
+		else
+		    gaiaExport32 (ptr + 1, GAIA_POLYGON, 1, endian_arch);	/* class POLYGON */
+		gaiaExport32 (ptr + 5, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+		rng = polyg->Exterior;
+		gaiaExport32 (ptr + 9, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+		ptr += 13;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+		      ptr += 16;
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+			    gaiaExport64 (ptr + 8, m, 1, endian_arch);	/* M */
+			    ptr += 16;
+			}
+		  }
+		for (ib = 0; ib < polyg->NumInteriors; ib++)
+		  {
+		      rng = polyg->Interiors + ib;
+		      gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		      ptr += 4;
+		      for (iv = 0; iv < rng->Points; iv++)
+			{
+			    if (geom->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			      }
+			    else if (geom->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			      }
+			    else if (geom->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (rng->Coords, iv, &x, &y,
+						    &z, &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (rng->Coords, iv, &x, &y);
+			      }
+			    gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+			    gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+			    ptr += 16;
+			    if (geom->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+				  ptr += 8;
+			      }
+			    if (geom->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+				  ptr += 8;
+			      }
+			    if (geom->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+				  gaiaExport64 (ptr + 8, m, 1, endian_arch);	/* M */
+				  ptr += 16;
+			      }
+			}
+		  }
+		polyg = polyg->Next;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+      };
+}
+
+GAIAGEO_DECLARE void
+gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
+			 int *size)
+{
+/* 
+/ builds the SpatiaLite BLOB representation for this GEOMETRY 
+/ geometry-compression will be applied to LINESTRINGs and RINGs
+*/
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    double last_x = 0.0;
+    double last_y = 0.0;
+    double last_z = 0.0;
+    float fx;
+    float fy;
+    float fz;
+    int entities = 0;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    int type;
+    unsigned char *ptr;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    int endian_arch = gaiaEndianArch ();
+    gaiaMbrGeometry (geom);
+/* how many entities, and of what kind, do we have ? */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  point = pt;
+	  entities++;
+	  n_points++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  line = ln;
+	  entities++;
+	  n_linestrings++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  polyg = pg;
+	  entities++;
+	  n_polygons++;
+	  pg = pg->Next;
+      }
+    *size = 0;
+    *result = NULL;
+    if (n_points == 0 && n_polygons == 0 && n_linestrings == 0)
+	return;
+/* ok, we can determine the geometry class */
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOINTZM;
+		else
+		    type = GAIA_MULTIPOINT;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_POINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_POINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_POINTZM;
+		else
+		    type = GAIA_POINT;
+	    }
+      }
+    else if (n_points > 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOINTZM;
+		else
+		    type = GAIA_MULTIPOINT;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTILINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTILINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTILINESTRINGZM;
+		else
+		    type = GAIA_MULTILINESTRING;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_LINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_LINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_LINESTRINGZM;
+		else
+		    type = GAIA_LINESTRING;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings > 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTILINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTILINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTILINESTRINGZM;
+		else
+		    type = GAIA_MULTILINESTRING;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOLYGONZM;
+		else
+		    type = GAIA_MULTIPOLYGON;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_POLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_POLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_POLYGONZM;
+		else
+		    type = GAIA_POLYGON;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons > 1)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOLYGONZM;
+		else
+		    type = GAIA_MULTIPOLYGON;
+	    }
+      }
+    else
+      {
+	  if (geom->DimensionModel == GAIA_XY_Z)
+	      type = GAIA_GEOMETRYCOLLECTIONZ;
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      type = GAIA_GEOMETRYCOLLECTIONM;
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      type = GAIA_GEOMETRYCOLLECTIONZM;
+	  else
+	      type = GAIA_GEOMETRYCOLLECTION;
+      }
+/* and now we compute the size of BLOB */
+    *size = 44;			/* header size */
+    switch (type)
+      {
+      case GAIA_POINT:
+	  *size += (sizeof (double) * 2);	/* [x,y] coords */
+	  break;
+      case GAIA_POINTZ:
+	  *size += (sizeof (double) * 3);	/* [x,y,z] coords */
+	  break;
+      case GAIA_POINTM:
+	  *size += (sizeof (double) * 3);	/* [x,y,m] coords */
+	  break;
+      case GAIA_POINTZM:
+	  *size += (sizeof (double) * 4);	/* [x,y,z,m] coords */
+	  break;
+      case GAIA_LINESTRING:
+	  *size += (4 + (8 * line->Points) + 16);	/* # points + [x,y] for each vertex */
+	  break;
+      case GAIA_LINESTRINGZ:
+	  *size += (4 + (12 * line->Points) + 24);	/* # points + [x,y,z] for each vertex */
+	  break;
+      case GAIA_LINESTRINGM:
+	  *size += (4 + (16 * line->Points) + 16);	/* # points + [x,y,m] for each vertex */
+	  break;
+      case GAIA_LINESTRINGZM:
+	  *size += (4 + (20 * line->Points) + 24);	/* # points + [x,y,z,m] for each vertex */
+	  break;
+      case GAIA_POLYGON:
+	  rng = polyg->Exterior;
+	  *size += (8 + (8 * rng->Points) + 16);	/* # rings + # points + [x.y] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + (8 * rng->Points) + 16);	/* # points + [x,y] array - interior ring */
+	    }
+	  break;
+      case GAIA_POLYGONZ:
+	  rng = polyg->Exterior;
+	  *size += (8 + (12 * rng->Points) + 24);	/* # rings + # points + [x,y,z] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + (12 * rng->Points) + 24);	/* # points + [x,y,z] array - interior ring */
+	    }
+	  break;
+      case GAIA_POLYGONM:
+	  rng = polyg->Exterior;
+	  *size += (8 + (16 * rng->Points) + 16);	/* # rings + # points + [x,y,m] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + (16 * rng->Points) + 16);	/* # points + [x,y,m] array - interior ring */
+	    }
+	  break;
+      case GAIA_POLYGONZM:
+	  rng = polyg->Exterior;
+	  *size += (8 + (20 * rng->Points) + 24);	/* # rings + # points + [x,y,z,m] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + (20 * rng->Points) + 24);	/* # points + [x,y,z,m] array - interior ring */
+	    }
+	  break;
+      default:
+	  /* this one is not a simple geometry; should be a MULTIxxxx or a GEOMETRYCOLLECTION */
+	  *size += 4;		/* # entities */
+	  point = geom->FirstPoint;
+	  while (point)
+	    {
+		*size += 5;	/* entity header */
+		if (geom->DimensionModel == GAIA_XY_Z
+		    || geom->DimensionModel == GAIA_XY_M)
+		    *size += (sizeof (double) * 3);	/* three doubles for each POINT */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *size += (sizeof (double) * 4);	/* four doubles for each POINT */
+		else
+		    *size += (sizeof (double) * 2);	/* two doubles for each POINT */
+		point = point->Next;
+	    }
+	  line = geom->FirstLinestring;
+	  while (line)
+	    {
+		*size += 5;	/* entity header */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    *size += (4 + (12 * line->Points) + 24);	/* # points + [x,y,z] for each vertex */
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    *size += (4 + (16 * line->Points) + 16);	/* # points + [x,y,m] for each vertex */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *size += (4 + (20 * line->Points) + 24);	/* # points + [x,y,z,m] for each vertex */
+		else
+		    *size += (4 + (8 * line->Points) + 16);	/* # points + [x,y] for each vertex */
+		line = line->Next;
+	    }
+	  polyg = geom->FirstPolygon;
+	  while (polyg)
+	    {
+		*size += 5;	/* entity header */
+		rng = polyg->Exterior;
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    *size += (8 + (12 * rng->Points) + 24);	/* # rings + # points + [x,y,z] array - exterior ring */
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    *size += (8 + (16 * rng->Points) + 16);	/* # rings + # points + [x,y,m] array - exterior ring */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *size += (8 + (20 * rng->Points) + 24);	/* # rings + # points + [x,y,z,m] array - exterior ring */
+		else
+		    *size += (8 + (8 * rng->Points) + 16);	/* # rings + # points + [x,y] array - exterior ring */
+		for (ib = 0; ib < polyg->NumInteriors; ib++)
+		  {
+		      rng = polyg->Interiors + ib;
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			  *size += (4 + (12 * rng->Points) + 24);	/* # points + [x,y,z] array - interior ring */
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			  *size += (4 + (16 * rng->Points) + 16);	/* # points + [x,y,m] array - interior ring */
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			  *size += (4 + (20 * rng->Points) + 24);	/* # points + [x,y,z,m] array - interior ring */
+		      else
+			  *size += (4 + (8 * rng->Points) + 16);	/* # points + [x,y] array - interior ring */
+		  }
+		polyg = polyg->Next;
+	    }
+      };
+    *result = malloc (*size);
+    ptr = *result;
+/* and finally we build the BLOB */
+    switch (type)
+      {
+      case GAIA_POINT:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINT, 1, endian_arch);	/* class POINT */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  *(ptr + 59) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POINTZ:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINTZ, 1, endian_arch);	/* class POINT XYZ */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  gaiaExport64 (ptr + 59, point->Z, 1, endian_arch);	/* Z */
+	  *(ptr + 67) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POINTM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINTM, 1, endian_arch);	/* class POINT XYM */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  gaiaExport64 (ptr + 59, point->M, 1, endian_arch);	/* M */
+	  *(ptr + 67) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POINTZM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_POINTZM, 1, endian_arch);	/* class POINT XYZM */
+	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 51, point->Y, 1, endian_arch);	/* Y */
+	  gaiaExport64 (ptr + 59, point->Z, 1, endian_arch);	/* M */
+	  gaiaExport64 (ptr + 67, point->M, 1, endian_arch);	/* Z */
+	  *(ptr + 75) = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRING:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRING, 1, endian_arch);	/* class LINESTRING */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPoint (line->Coords, iv, &x, &y);
+		if (iv == 0 || iv == (line->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      ptr += 16;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      ptr += 8;
+		  }
+		last_x = x;
+		last_y = y;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRINGZ:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRINGZ, 1, endian_arch);	/* class LINESTRING XYZ */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		if (iv == 0 || iv == (line->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      gaiaExport64 (ptr + 16, z, 1, endian_arch);
+		      ptr += 24;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      fz = (float) (z - last_z);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      gaiaExportF32 (ptr + 8, fz, 1, endian_arch);
+		      ptr += 12;
+		  }
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRINGM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRINGM, 1, endian_arch);	/* class LINESTRING XYM */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		if (iv == 0 || iv == (line->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      gaiaExport64 (ptr + 16, m, 1, endian_arch);
+		      ptr += 24;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, m, 1, endian_arch);
+		      ptr += 16;
+		  }
+		last_x = x;
+		last_y = y;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_LINESTRINGZM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRINGZM, 1, endian_arch);	/* class LINESTRING XYZM */
+	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 47;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		if (iv == 0 || iv == (line->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      gaiaExport64 (ptr + 16, z, 1, endian_arch);
+		      gaiaExport64 (ptr + 24, m, 1, endian_arch);
+		      ptr += 32;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      fz = (float) (z - last_z);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      gaiaExportF32 (ptr + 8, fz, 1, endian_arch);
+		      gaiaExport64 (ptr + 12, m, 1, endian_arch);
+		      ptr += 20;
+		  }
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGON:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGON, 1, endian_arch);	/* class POLYGON */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPoint (rng->Coords, iv, &x, &y);
+		if (iv == 0 || iv == (rng->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      ptr += 16;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      ptr += 8;
+		  }
+		last_x = x;
+		last_y = y;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      if (iv == 0 || iv == (rng->Points - 1))
+			{
+			    /* first and last vertices are uncompressed */
+			    gaiaExport64 (ptr, x, 1, endian_arch);
+			    gaiaExport64 (ptr + 8, y, 1, endian_arch);
+			    ptr += 16;
+			}
+		      else
+			{
+			    /* compressing any other intermediate vertex */
+			    fx = (float) (x - last_x);
+			    fy = (float) (y - last_y);
+			    gaiaExportF32 (ptr, fx, 1, endian_arch);
+			    gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+			    ptr += 8;
+			}
+		      last_x = x;
+		      last_y = y;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGONZ:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGONZ, 1, endian_arch);	/* class POLYGON XYZ */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		if (iv == 0 || iv == (rng->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      gaiaExport64 (ptr + 16, z, 1, endian_arch);
+		      ptr += 24;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      fz = (float) (z - last_z);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      gaiaExportF32 (ptr + 8, fz, 1, endian_arch);
+		      ptr += 12;
+		  }
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      if (iv == 0 || iv == (rng->Points - 1))
+			{
+			    /* first and last vertices are uncompressed */
+			    gaiaExport64 (ptr, x, 1, endian_arch);
+			    gaiaExport64 (ptr + 8, y, 1, endian_arch);
+			    gaiaExport64 (ptr + 16, z, 1, endian_arch);
+			    ptr += 24;
+			}
+		      else
+			{
+			    /* compressing any other intermediate vertex */
+			    fx = (float) (x - last_x);
+			    fy = (float) (y - last_y);
+			    fz = (float) (z - last_z);
+			    gaiaExportF32 (ptr, fx, 1, endian_arch);
+			    gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+			    gaiaExportF32 (ptr + 8, fz, 1, endian_arch);
+			    ptr += 12;
+			}
+		      last_x = x;
+		      last_y = y;
+		      last_z = z;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGONM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGONM, 1, endian_arch);	/* class POLYGON XYM */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		if (iv == 0 || iv == (rng->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      gaiaExport64 (ptr + 16, m, 1, endian_arch);
+		      ptr += 24;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, m, 1, endian_arch);
+		      ptr += 16;
+		  }
+		last_x = x;
+		last_y = y;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      if (iv == 0 || iv == (rng->Points - 1))
+			{
+			    /* first and last vertices are uncompressed */
+			    gaiaExport64 (ptr, x, 1, endian_arch);
+			    gaiaExport64 (ptr + 8, y, 1, endian_arch);
+			    gaiaExport64 (ptr + 16, m, 1, endian_arch);
+			    ptr += 24;
+			}
+		      else
+			{
+			    /* compressing any other intermediate vertex */
+			    fx = (float) (x - last_x);
+			    fy = (float) (y - last_y);
+			    gaiaExportF32 (ptr, fx, 1, endian_arch);
+			    gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+			    gaiaExport64 (ptr + 8, m, 1, endian_arch);
+			    ptr += 16;
+			}
+		      last_x = x;
+		      last_y = y;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      case GAIA_POLYGONZM:
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGONZM, 1, endian_arch);	/* class POLYGON */
+	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 47, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 51;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		if (iv == 0 || iv == (rng->Points - 1))
+		  {
+		      /* first and last vertices are uncompressed */
+		      gaiaExport64 (ptr, x, 1, endian_arch);
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);
+		      gaiaExport64 (ptr + 16, z, 1, endian_arch);
+		      gaiaExport64 (ptr + 24, m, 1, endian_arch);
+		      ptr += 32;
+		  }
+		else
+		  {
+		      /* compressing any other intermediate vertex */
+		      fx = (float) (x - last_x);
+		      fy = (float) (y - last_y);
+		      fz = (float) (z - last_z);
+		      gaiaExportF32 (ptr, fx, 1, endian_arch);
+		      gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+		      gaiaExportF32 (ptr + 8, fz, 1, endian_arch);
+		      gaiaExport64 (ptr + 12, m, 1, endian_arch);
+		      ptr += 20;
+		  }
+		last_x = x;
+		last_y = y;
+		last_z = z;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      if (iv == 0 || iv == (rng->Points - 1))
+			{
+			    /* first and last vertices are uncompressed */
+			    gaiaExport64 (ptr, x, 1, endian_arch);
+			    gaiaExport64 (ptr + 8, y, 1, endian_arch);
+			    gaiaExport64 (ptr + 16, z, 1, endian_arch);
+			    gaiaExport64 (ptr + 24, m, 1, endian_arch);
+			    ptr += 32;
+			}
+		      else
+			{
+			    /* compressing any other intermediate vertex */
+			    fx = (float) (x - last_x);
+			    fy = (float) (y - last_y);
+			    fz = (float) (z - last_z);
+			    gaiaExportF32 (ptr, fx, 1, endian_arch);
+			    gaiaExportF32 (ptr + 4, fy, 1, endian_arch);
+			    gaiaExportF32 (ptr + 8, fz, 1, endian_arch);
+			    gaiaExport64 (ptr + 12, m, 1, endian_arch);
+			    ptr += 20;
+			}
+		      last_x = x;
+		      last_y = y;
+		      last_z = z;
+		  }
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+	  break;
+      default:
+	  /* this one is a MULTIxxxx or a GEOMETRYCOLLECTION - building the main header */
+	  *ptr = GAIA_MARK_START;	/* START signature */
+	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
+	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
+	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
+	  gaiaExport32 (ptr + 39, type, 1, endian_arch);	/* geometric class */
+	  gaiaExport32 (ptr + 43, entities, 1, endian_arch);	/* # entities */
+	  ptr += 47;
+	  point = geom->FirstPoint;
+	  while (point)
+	    {
+		*ptr = GAIA_MARK_ENTITY;	/* ENTITY signature */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINTZ, 1, endian_arch);	/* class POINT XYZ */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      gaiaExport64 (ptr + 21, point->Z, 1, endian_arch);	/* Z */
+		      ptr += 29;
+		  }
+		else if (geom->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINTM, 1, endian_arch);	/* class POINT XYM */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      gaiaExport64 (ptr + 21, point->M, 1, endian_arch);	/* M */
+		      ptr += 29;
+		  }
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINTZM, 1, endian_arch);	/* class POINT XYZM */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      gaiaExport64 (ptr + 21, point->Z, 1, endian_arch);	/* Z */
+		      gaiaExport64 (ptr + 29, point->M, 1, endian_arch);	/* M */
+		      ptr += 37;
+		  }
+		else
+		  {
+		      gaiaExport32 (ptr + 1, GAIA_POINT, 1, endian_arch);	/* class POINT */
+		      gaiaExport64 (ptr + 5, point->X, 1, endian_arch);	/* X */
+		      gaiaExport64 (ptr + 13, point->Y, 1, endian_arch);	/* Y */
+		      ptr += 21;
+		  }
+		point = point->Next;
+	    }
+	  line = geom->FirstLinestring;
+	  while (line)
+	    {
+		*ptr = GAIA_MARK_ENTITY;	/* ENTITY signature */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_LINESTRINGZ, 1, endian_arch);	/* class LINESTRING XYZ */
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_LINESTRINGM, 1, endian_arch);	/* class LINESTRING XYM */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_LINESTRINGZM, 1, endian_arch);	/* class LINESTRING XYZM */
+		else
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_LINESTRING, 1, endian_arch);	/* class LINESTRING */
+		gaiaExport32 (ptr + 5, line->Points, 1, endian_arch);	/* # points */
+		ptr += 9;
+		for (iv = 0; iv < line->Points; iv++)
+		  {
+		      z = 0.0;
+		      m = 0.0;
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (line->Coords, iv, &x, &y);
+			}
+		      if (iv == 0 || iv == (line->Points - 1))
+			{
+			    /* first and last vertices are uncompressed */
+			    gaiaExport64 (ptr, x, 1, endian_arch);	/* X */
+			    gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y */
+			    ptr += 16;
+			}
+		      else
+			{
+			    /* compressing any other intermediate vertex */
+			    fx = (float) (x - last_x);
+			    fy = (float) (y - last_y);
+			    gaiaExportF32 (ptr, fx, 1, endian_arch);	/* X */
+			    gaiaExportF32 (ptr + 4, fy, 1, endian_arch);	/* Y */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    if (iv == 0 || iv == (line->Points - 1))
+			      {
+				  /* first and last vertices are uncompressed */
+				  gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+				  ptr += 8;
+			      }
+			    else
+			      {
+				  /* compressing any other intermediate vertex */
+				  fz = (float) (z - last_z);
+				  gaiaExportF32 (ptr, fz, 1, endian_arch);	/* Z */
+				  ptr += 4;
+			      }
+			}
+		      if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    if (iv == 0 || iv == (line->Points - 1))
+			      {
+				  /* first and last vertices are uncompressed */
+				  gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+				  ptr += 8;
+			      }
+			    else
+			      {
+				  /* compressing any other intermediate vertex */
+				  fz = (float) (z - last_z);
+				  gaiaExportF32 (ptr, fz, 1, endian_arch);	/* Z */
+				  ptr += 4;
+			      }
+			    gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+			    ptr += 8;
+			}
+		      last_x = x;
+		      last_y = y;
+		      last_z = z;
+		  }
+		line = line->Next;
+	    }
+	  polyg = geom->FirstPolygon;
+	  while (polyg)
+	    {
+		*ptr = GAIA_MARK_ENTITY;	/* ENTITY signature */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_POLYGONZ, 1, endian_arch);	/* class POLYGON XYZ */
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_POLYGONM, 1, endian_arch);	/* class POLYGON XYM */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_POLYGONZM, 1, endian_arch);	/* class POLYGON XYZM */
+		else
+		    gaiaExport32 (ptr + 1, GAIA_COMPRESSED_POLYGON, 1, endian_arch);	/* class POLYGON */
+		gaiaExport32 (ptr + 5, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+		rng = polyg->Exterior;
+		gaiaExport32 (ptr + 9, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+		ptr += 13;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      z = 0.0;
+		      m = 0.0;
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      if (iv == 0 || iv == (rng->Points - 1))
+			{
+			    /* first and last vertices are uncompressed */
+			    gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+			    gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+			    ptr += 16;
+			}
+		      else
+			{
+			    /* compressing any other intermediate vertex */
+			    fx = (float) (x - last_x);
+			    fy = (float) (y - last_y);
+			    gaiaExportF32 (ptr, fx, 1, endian_arch);	/* X */
+			    gaiaExportF32 (ptr + 4, fy, 1, endian_arch);	/* Y */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    if (iv == 0 || iv == (rng->Points - 1))
+			      {
+				  /* first and last vertices are uncompressed */
+				  gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+				  ptr += 8;
+			      }
+			    else
+			      {
+				  /* compressing any other intermediate vertex */
+				  fz = (float) (z - last_z);
+				  gaiaExportF32 (ptr, fz, 1, endian_arch);	/* Z */
+				  ptr += 4;
+			      }
+			}
+		      if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+			    ptr += 8;
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    if (iv == 0 || iv == (rng->Points - 1))
+			      {
+				  /* first and last vertices are uncompressed */
+				  gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+				  ptr += 8;
+			      }
+			    else
+			      {
+				  /* compressing any other intermediate vertex */
+				  fz = (float) (z - last_z);
+				  gaiaExportF32 (ptr, fz, 1, endian_arch);	/* Z */
+				  ptr += 4;
+			      }
+			    gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+			    ptr += 8;
+			}
+		      last_x = x;
+		      last_y = y;
+		      last_z = z;
+		  }
+		for (ib = 0; ib < polyg->NumInteriors; ib++)
+		  {
+		      rng = polyg->Interiors + ib;
+		      gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		      ptr += 4;
+		      for (iv = 0; iv < rng->Points; iv++)
+			{
+			    z = 0.0;
+			    m = 0.0;
+			    if (geom->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			      }
+			    else if (geom->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			      }
+			    else if (geom->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z,
+						    &m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (rng->Coords, iv, &x, &y);
+			      }
+			    if (iv == 0 || iv == (rng->Points - 1))
+			      {
+				  /* first and last vertices are uncompressed */
+				  gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+				  gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+				  ptr += 16;
+			      }
+			    else
+			      {
+				  /* compressing any other intermediate vertex */
+				  fx = (float) (x - last_x);
+				  fy = (float) (y - last_y);
+				  gaiaExportF32 (ptr, fx, 1, endian_arch);	/* X */
+				  gaiaExportF32 (ptr + 4, fy, 1, endian_arch);	/* Y */
+				  ptr += 8;
+			      }
+			    if (geom->DimensionModel == GAIA_XY_Z)
+			      {
+				  if (iv == 0 || iv == (rng->Points - 1))
+				    {
+					/* first and last vertices are uncompressed */
+					gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+					ptr += 8;
+				    }
+				  else
+				    {
+					/* compressing any other intermediate vertex */
+					fz = (float) (z - last_z);
+					gaiaExportF32 (ptr, fz, 1, endian_arch);	/* Z */
+					ptr += 4;
+				    }
+			      }
+			    if (geom->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+				  ptr += 8;
+			      }
+			    if (geom->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  if (iv == 0 || iv == (rng->Points - 1))
+				    {
+					/* first and last vertices are uncompressed */
+					gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+					ptr += 8;
+				    }
+				  else
+				    {
+					/* compressing any other intermediate vertex */
+					fz = (float) (z - last_z);
+					gaiaExportF32 (ptr, fz, 1, endian_arch);	/* Z */
+					ptr += 4;
+				    }
+				  gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+				  ptr += 8;
+			      }
+			    last_x = x;
+			    last_y = y;
+			    last_z = z;
+			}
+		  }
+		polyg = polyg->Next;
+	    }
+	  *ptr = GAIA_MARK_END;	/* END signature */
+      };
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaFromWkb (const unsigned char *blob, unsigned int size)
+{
+/* decoding from WKB to GEOMETRY  */
+    int type;
+    int little_endian;
+    gaiaGeomCollPtr geo = NULL;
+    int endian_arch = gaiaEndianArch ();
+    if (size < 5)
+	return NULL;
+    if (*(blob + 0) == 0x01)
+	little_endian = GAIA_LITTLE_ENDIAN;
+    else
+	little_endian = GAIA_BIG_ENDIAN;
+    type = gaiaImport32 (blob + 1, little_endian, endian_arch);
+    if (type == GAIA_POINTZ || type == GAIA_LINESTRINGZ || type == GAIA_POLYGONZ
+	|| type == GAIA_MULTIPOINTZ || type == GAIA_MULTILINESTRINGZ
+	|| type == GAIA_MULTIPOLYGONZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	|| type == GAIA_GEOSWKB_POINTZ || type == GAIA_GEOSWKB_LINESTRINGZ
+	|| type == GAIA_GEOSWKB_POLYGONZ || type == GAIA_GEOSWKB_MULTIPOINTZ
+	|| type == GAIA_GEOSWKB_MULTILINESTRINGZ
+	|| type == GAIA_GEOSWKB_MULTIPOLYGONZ
+	|| type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+	geo = gaiaAllocGeomCollXYZ ();
+    else if (type == GAIA_POINTM || type == GAIA_LINESTRINGM
+	     || type == GAIA_POLYGONM || type == GAIA_MULTIPOINTM
+	     || type == GAIA_MULTILINESTRINGM || type == GAIA_MULTIPOLYGONM
+	     || type == GAIA_GEOMETRYCOLLECTIONM)
+	geo = gaiaAllocGeomCollXYM ();
+    else if (type == GAIA_POINTZM || type == GAIA_LINESTRINGZM
+	     || type == GAIA_POLYGONZM || type == GAIA_MULTIPOINTZM
+	     || type == GAIA_MULTILINESTRINGZM || type == GAIA_MULTIPOLYGONZM
+	     || type == GAIA_GEOMETRYCOLLECTIONZM)
+	geo = gaiaAllocGeomCollXYZM ();
+    else
+	geo = gaiaAllocGeomColl ();
+    geo->Srid = -1;
+    geo->endian_arch = (char) endian_arch;
+    geo->endian = (char) little_endian;
+    geo->blob = blob;
+    geo->size = size;
+    geo->offset = 5;
+    switch (type)
+      {
+      case GAIA_POINT:
+	  ParseWkbPoint (geo);
+	  break;
+      case GAIA_POINTZ:
+      case GAIA_GEOSWKB_POINTZ:
+	  ParseWkbPointZ (geo);
+	  break;
+      case GAIA_POINTM:
+	  ParseWkbPointM (geo);
+	  break;
+      case GAIA_POINTZM:
+	  ParseWkbPointZM (geo);
+	  break;
+      case GAIA_LINESTRING:
+	  ParseWkbLine (geo);
+	  break;
+      case GAIA_LINESTRINGZ:
+      case GAIA_GEOSWKB_LINESTRINGZ:
+	  ParseWkbLineZ (geo);
+	  break;
+      case GAIA_LINESTRINGM:
+	  ParseWkbLineM (geo);
+	  break;
+      case GAIA_LINESTRINGZM:
+	  ParseWkbLineZM (geo);
+	  break;
+      case GAIA_POLYGON:
+	  ParseWkbPolygon (geo);
+	  break;
+      case GAIA_POLYGONZ:
+      case GAIA_GEOSWKB_POLYGONZ:
+	  ParseWkbPolygonZ (geo);
+	  break;
+      case GAIA_POLYGONM:
+	  ParseWkbPolygonM (geo);
+	  break;
+      case GAIA_POLYGONZM:
+	  ParseWkbPolygonZM (geo);
+	  break;
+      case GAIA_MULTIPOINT:
+      case GAIA_MULTILINESTRING:
+      case GAIA_MULTIPOLYGON:
+      case GAIA_GEOMETRYCOLLECTION:
+      case GAIA_MULTIPOINTZ:
+      case GAIA_MULTILINESTRINGZ:
+      case GAIA_MULTIPOLYGONZ:
+      case GAIA_GEOMETRYCOLLECTIONZ:
+      case GAIA_GEOSWKB_MULTIPOINTZ:
+      case GAIA_GEOSWKB_MULTILINESTRINGZ:
+      case GAIA_GEOSWKB_MULTIPOLYGONZ:
+      case GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ:
+      case GAIA_MULTIPOINTM:
+      case GAIA_MULTILINESTRINGM:
+      case GAIA_MULTIPOLYGONM:
+      case GAIA_GEOMETRYCOLLECTIONM:
+      case GAIA_MULTIPOINTZM:
+      case GAIA_MULTILINESTRINGZM:
+      case GAIA_MULTIPOLYGONZM:
+      case GAIA_GEOMETRYCOLLECTIONZM:
+	  ParseWkbGeometry (geo);
+	  break;
+      default:
+	  break;
+      };
+    gaiaMbrGeometry (geo);
+    switch (type)
+      {
+      case GAIA_POINT:
+      case GAIA_POINTZ:
+      case GAIA_GEOSWKB_POINTZ:
+      case GAIA_POINTM:
+      case GAIA_POINTZM:
+	  geo->DeclaredType = GAIA_POINT;
+	  break;
+      case GAIA_LINESTRING:
+      case GAIA_LINESTRINGZ:
+      case GAIA_GEOSWKB_LINESTRINGZ:
+      case GAIA_LINESTRINGM:
+      case GAIA_LINESTRINGZM:
+	  geo->DeclaredType = GAIA_LINESTRING;
+	  break;
+      case GAIA_POLYGON:
+      case GAIA_POLYGONZ:
+      case GAIA_GEOSWKB_POLYGONZ:
+      case GAIA_POLYGONM:
+      case GAIA_POLYGONZM:
+	  geo->DeclaredType = GAIA_POLYGON;
+	  break;
+      case GAIA_MULTIPOINT:
+      case GAIA_MULTIPOINTZ:
+      case GAIA_GEOSWKB_MULTIPOINTZ:
+      case GAIA_MULTIPOINTM:
+      case GAIA_MULTIPOINTZM:
+	  geo->DeclaredType = GAIA_MULTIPOINT;
+	  break;
+      case GAIA_MULTILINESTRING:
+      case GAIA_MULTILINESTRINGZ:
+      case GAIA_GEOSWKB_MULTILINESTRINGZ:
+      case GAIA_MULTILINESTRINGM:
+      case GAIA_MULTILINESTRINGZM:
+	  geo->DeclaredType = GAIA_MULTILINESTRING;
+	  break;
+      case GAIA_MULTIPOLYGON:
+      case GAIA_MULTIPOLYGONZ:
+      case GAIA_GEOSWKB_MULTIPOLYGONZ:
+      case GAIA_MULTIPOLYGONM:
+      case GAIA_MULTIPOLYGONZM:
+	  geo->DeclaredType = GAIA_MULTIPOLYGON;
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+      case GAIA_GEOMETRYCOLLECTIONZ:
+      case GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ:
+      case GAIA_GEOMETRYCOLLECTIONM:
+      case GAIA_GEOMETRYCOLLECTIONZM:
+	  geo->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+	  break;
+      }
+    return geo;
+}
+
+GAIAGEO_DECLARE char *
+gaiaToHexWkb (gaiaGeomCollPtr geom)
+{
+/* builds the hexadecimal WKB representation for this GEOMETRY */
+    unsigned char *wkb = NULL;
+    int size = 0;
+    char *hexbuf = NULL;
+    int i;
+    char hex[16];
+    char *p;
+    gaiaToWkb (geom, &wkb, &size);
+    if (!wkb)
+	return NULL;
+    hexbuf = malloc ((size * 2) + 1);
+    p = hexbuf;
+    for (i = 0; i < size; i++)
+      {
+	  sprintf (hex, "%02X", *(wkb + i));
+	  *p++ = hex[0];
+	  *p++ = hex[1];
+      }
+    *p = '\0';
+    return hexbuf;
+}
+
+GAIAGEO_DECLARE void
+gaiaToWkb (gaiaGeomCollPtr geom, unsigned char **result, int *size)
+{
+/* builds the WKB representation for this GEOMETRY */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z = 0.0;
+    double m = 0.0;
+    int entities = 0;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    int type;
+    unsigned char *ptr;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    int endian_arch = gaiaEndianArch ();
+    gaiaMbrGeometry (geom);
+/* how many entities, and of what kind, do we have ? */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  point = pt;
+	  entities++;
+	  n_points++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  line = ln;
+	  entities++;
+	  n_linestrings++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  polyg = pg;
+	  entities++;
+	  n_polygons++;
+	  pg = pg->Next;
+      }
+    *size = 0;
+    *result = NULL;
+    if (n_points == 0 && n_polygons == 0 && n_linestrings == 0)
+	return;
+/* ok, we can determine the geometry class */
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOINTZM;
+		else
+		    type = GAIA_MULTIPOINT;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_POINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_POINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_POINTZM;
+		else
+		    type = GAIA_POINT;
+	    }
+      }
+    else if (n_points > 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOINTZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOINTM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOINTZM;
+		else
+		    type = GAIA_MULTIPOINT;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTILINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTILINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTILINESTRINGZM;
+		else
+		    type = GAIA_MULTILINESTRING;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_LINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_LINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_LINESTRINGZM;
+		else
+		    type = GAIA_LINESTRING;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings > 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTILINESTRINGZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTILINESTRINGM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTILINESTRINGZM;
+		else
+		    type = GAIA_MULTILINESTRING;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOLYGONZM;
+		else
+		    type = GAIA_MULTIPOLYGON;
+	    }
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_POLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_POLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_POLYGONZM;
+		else
+		    type = GAIA_POLYGON;
+	    }
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons > 1)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_GEOMETRYCOLLECTIONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_GEOMETRYCOLLECTIONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_GEOMETRYCOLLECTIONZM;
+		else
+		    type = GAIA_GEOMETRYCOLLECTION;
+	    }
+	  else
+	    {
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    type = GAIA_MULTIPOLYGONZ;
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    type = GAIA_MULTIPOLYGONM;
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    type = GAIA_MULTIPOLYGONZM;
+		else
+		    type = GAIA_MULTIPOLYGON;
+	    }
+      }
+    else
+      {
+	  if (geom->DimensionModel == GAIA_XY_Z)
+	      type = GAIA_GEOMETRYCOLLECTIONZ;
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	      type = GAIA_GEOMETRYCOLLECTIONM;
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      type = GAIA_GEOMETRYCOLLECTIONZM;
+	  else
+	      type = GAIA_GEOMETRYCOLLECTION;
+      }
+/* and now we compute the size of WKB */
+    *size = 5;			/* header size */
+    if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION
+	|| type == GAIA_MULTIPOINTZ || type == GAIA_MULTILINESTRINGZ
+	|| type == GAIA_MULTIPOLYGONZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	|| type == GAIA_MULTIPOINTM || type == GAIA_MULTILINESTRINGM
+	|| type == GAIA_MULTIPOLYGONM || type == GAIA_GEOMETRYCOLLECTIONM
+	|| type == GAIA_MULTIPOINTZM || type == GAIA_MULTILINESTRINGZM
+	|| type == GAIA_MULTIPOLYGONZM || type == GAIA_GEOMETRYCOLLECTIONZM)
+	*size += 4;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	      || type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION
+	      || type == GAIA_MULTIPOINTZ || type == GAIA_MULTILINESTRINGZ
+	      || type == GAIA_MULTIPOLYGONZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	      || type == GAIA_MULTIPOINTM || type == GAIA_MULTILINESTRINGM
+	      || type == GAIA_MULTIPOLYGONM || type == GAIA_GEOMETRYCOLLECTIONM
+	      || type == GAIA_MULTIPOINTZM || type == GAIA_MULTILINESTRINGZM
+	      || type == GAIA_MULTIPOLYGONZM
+	      || type == GAIA_GEOMETRYCOLLECTIONZM)
+	      *size += 5;
+	  if (geom->DimensionModel == GAIA_XY_Z
+	      || geom->DimensionModel == GAIA_XY_M)
+	      *size += (sizeof (double) * 3);	/* three doubles for each POINT */
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      *size += (sizeof (double) * 4);	/* four doubles for each POINT */
+	  else
+	      *size += (sizeof (double) * 2);	/* two doubles for each POINT */
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	      || type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION
+	      || type == GAIA_MULTIPOINTZ || type == GAIA_MULTILINESTRINGZ
+	      || type == GAIA_MULTIPOLYGONZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	      || type == GAIA_MULTIPOINTM || type == GAIA_MULTILINESTRINGM
+	      || type == GAIA_MULTIPOLYGONM || type == GAIA_GEOMETRYCOLLECTIONM
+	      || type == GAIA_MULTIPOINTZM || type == GAIA_MULTILINESTRINGZM
+	      || type == GAIA_MULTIPOLYGONZM
+	      || type == GAIA_GEOMETRYCOLLECTIONZM)
+	      *size += 5;
+	  if (geom->DimensionModel == GAIA_XY_Z
+	      || geom->DimensionModel == GAIA_XY_M)
+	      *size += (4 + ((sizeof (double) * 3) * line->Points));	/* # points + [x,y,z] for each vertex */
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      *size += (4 + ((sizeof (double) * 4) * line->Points));	/* # points + [x,y,z,m] for each vertex */
+	  else
+	      *size += (4 + ((sizeof (double) * 2) * line->Points));	/* # points + [x,y] for each vertex */
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	      || type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION
+	      || type == GAIA_MULTIPOINTZ || type == GAIA_MULTILINESTRINGZ
+	      || type == GAIA_MULTIPOLYGONZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	      || type == GAIA_MULTIPOINTM || type == GAIA_MULTILINESTRINGM
+	      || type == GAIA_MULTIPOLYGONM || type == GAIA_GEOMETRYCOLLECTIONM
+	      || type == GAIA_MULTIPOINTZM || type == GAIA_MULTILINESTRINGZM
+	      || type == GAIA_MULTIPOLYGONZM
+	      || type == GAIA_GEOMETRYCOLLECTIONZM)
+	      *size += 5;
+	  rng = polyg->Exterior;
+	  if (geom->DimensionModel == GAIA_XY_Z
+	      || geom->DimensionModel == GAIA_XY_M)
+	      *size += (8 + ((sizeof (double) * 3) * rng->Points));	/* # rings + # points + [x,y,z] array - exterior ring */
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      *size += (8 + ((sizeof (double) * 4) * rng->Points));	/* # rings + # points + [x,y,z,m] array - exterior ring */
+	  else
+	      *size += (8 + ((sizeof (double) * 2) * rng->Points));	/* # rings + # points + [x,y] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		if (geom->DimensionModel == GAIA_XY_Z
+		    || geom->DimensionModel == GAIA_XY_M)
+		    *size += (4 + ((sizeof (double) * 3) * rng->Points));	/* # points + [x,y,z] array - interior ring */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *size += (4 + ((sizeof (double) * 4) * rng->Points));	/* # points + [x,y,z,m] array - interior ring */
+		else
+		    *size += (4 + ((sizeof (double) * 2) * rng->Points));	/* # points + [x,y] array - interior ring */
+	    }
+	  polyg = polyg->Next;
+      }
+    *result = malloc (*size);
+    ptr = *result;
+/* and finally we build the WKB */
+    *ptr = 0x01;		/* little endian byte order */
+    gaiaExport32 (ptr + 1, type, 1, endian_arch);	/* the main CLASS TYPE */
+    ptr += 5;
+    if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION
+	|| type == GAIA_MULTIPOINTZ || type == GAIA_MULTILINESTRINGZ
+	|| type == GAIA_MULTIPOLYGONZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	|| type == GAIA_MULTIPOINTM || type == GAIA_MULTILINESTRINGM
+	|| type == GAIA_MULTIPOLYGONM || type == GAIA_GEOMETRYCOLLECTIONM
+	|| type == GAIA_MULTIPOINTZM || type == GAIA_MULTILINESTRINGZM
+	|| type == GAIA_MULTIPOLYGONZM || type == GAIA_GEOMETRYCOLLECTIONZM)
+      {
+	  gaiaExport32 (ptr, entities, 1, endian_arch);	/* it's a collection; # entities */
+	  ptr += 4;
+      }
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  if (type == GAIA_MULTIPOINT || type == GAIA_GEOMETRYCOLLECTION
+	      || type == GAIA_MULTIPOINTZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	      || type == GAIA_MULTIPOINTM || type == GAIA_GEOMETRYCOLLECTIONM
+	      || type == GAIA_MULTIPOINTZM || type == GAIA_GEOMETRYCOLLECTIONZM)
+	    {
+		*ptr = 0x01;
+		/* it's a collection: the CLASS TYPE for this element */
+		if (type == GAIA_MULTIPOINTZ
+		    || type == GAIA_GEOMETRYCOLLECTIONZ)
+		    gaiaExport32 (ptr + 1, GAIA_POINTZ, 1, endian_arch);
+		else if (type == GAIA_MULTIPOINTM
+			 || type == GAIA_GEOMETRYCOLLECTIONM)
+		    gaiaExport32 (ptr + 1, GAIA_POINTM, 1, endian_arch);
+		else if (type == GAIA_MULTIPOINTZM
+			 || type == GAIA_GEOMETRYCOLLECTIONZM)
+		    gaiaExport32 (ptr + 1, GAIA_POINTZM, 1, endian_arch);
+		else
+		    gaiaExport32 (ptr + 1, GAIA_POINT, 1, endian_arch);
+		ptr += 5;
+	    }
+	  gaiaExport64 (ptr, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 8, point->Y, 1, endian_arch);	/* Y */
+	  ptr += 16;
+	  if (type == GAIA_POINTZ || type == GAIA_MULTIPOINTZ
+	      || type == GAIA_GEOMETRYCOLLECTIONZ)
+	    {
+		gaiaExport64 (ptr, point->Z, 1, endian_arch);	/* Z */
+		ptr += 8;
+	    }
+	  if (type == GAIA_POINTM || type == GAIA_MULTIPOINTM
+	      || type == GAIA_GEOMETRYCOLLECTIONM)
+	    {
+		gaiaExport64 (ptr, point->M, 1, endian_arch);	/* M */
+		ptr += 8;
+	    }
+	  if (type == GAIA_POINTZM || type == GAIA_MULTIPOINTZM
+	      || type == GAIA_GEOMETRYCOLLECTIONZM)
+	    {
+		gaiaExport64 (ptr, point->Z, 1, endian_arch);	/* Z */
+		gaiaExport64 (ptr + 8, point->M, 1, endian_arch);	/* M */
+		ptr += 16;
+	    }
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  if (type == GAIA_MULTILINESTRING || type == GAIA_GEOMETRYCOLLECTION
+	      || type == GAIA_MULTILINESTRINGZ
+	      || type == GAIA_GEOMETRYCOLLECTIONZ
+	      || type == GAIA_MULTILINESTRINGM
+	      || type == GAIA_GEOMETRYCOLLECTIONM
+	      || type == GAIA_MULTILINESTRINGZM
+	      || type == GAIA_GEOMETRYCOLLECTIONZM)
+	    {
+		*ptr = 0x01;
+		/* it's a collection: the CLASS TYPE for this element */
+		if (type == GAIA_MULTILINESTRINGZ
+		    || type == GAIA_GEOMETRYCOLLECTIONZ)
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRINGZ, 1, endian_arch);
+		else if (type == GAIA_MULTILINESTRINGM
+			 || type == GAIA_GEOMETRYCOLLECTIONM)
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRINGM, 1, endian_arch);
+		else if (type == GAIA_MULTILINESTRINGZM
+			 || type == GAIA_GEOMETRYCOLLECTIONZM)
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRINGZM, 1, endian_arch);
+		else
+		    gaiaExport32 (ptr + 1, GAIA_LINESTRING, 1, endian_arch);
+		ptr += 5;
+	    }
+	  gaiaExport32 (ptr, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 4;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		if (type == GAIA_LINESTRINGZ || type == GAIA_MULTILINESTRINGZ
+		    || type == GAIA_GEOMETRYCOLLECTIONZ)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (type == GAIA_LINESTRINGM
+			 || type == GAIA_MULTILINESTRINGM
+			 || type == GAIA_GEOMETRYCOLLECTIONM)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (type == GAIA_LINESTRINGZM
+			 || type == GAIA_MULTILINESTRINGZM
+			 || type == GAIA_GEOMETRYCOLLECTIONZM)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y */
+		ptr += 16;
+		if (type == GAIA_LINESTRINGZ || type == GAIA_MULTILINESTRINGZ
+		    || type == GAIA_GEOMETRYCOLLECTIONZ)
+		  {
+		      gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+		      ptr += 8;
+		  }
+		if (type == GAIA_LINESTRINGM || type == GAIA_MULTILINESTRINGM
+		    || type == GAIA_GEOMETRYCOLLECTIONM)
+		  {
+		      gaiaExport64 (ptr, m, 1, endian_arch);	/* M */
+		      ptr += 8;
+		  }
+		if (type == GAIA_LINESTRINGZM || type == GAIA_MULTILINESTRINGZM
+		    || type == GAIA_GEOMETRYCOLLECTIONZM)
+		  {
+		      gaiaExport64 (ptr, z, 1, endian_arch);	/* Z */
+		      gaiaExport64 (ptr + 8, m, 1, endian_arch);	/* M */
+		      ptr += 16;
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  if (type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION
+	      || type == GAIA_MULTIPOLYGONZ || type == GAIA_GEOMETRYCOLLECTIONZ
+	      || type == GAIA_MULTIPOLYGONM || type == GAIA_GEOMETRYCOLLECTIONM
+	      || type == GAIA_MULTIPOLYGONZM
+	      || type == GAIA_GEOMETRYCOLLECTIONZM)
+	    {
+		*ptr = 0x01;
+		/* it's a collection: the CLASS TYPE for this element */
+		if (type == GAIA_MULTIPOLYGONZ
+		    || type == GAIA_GEOMETRYCOLLECTIONZ)
+		    gaiaExport32 (ptr + 1, GAIA_POLYGONZ, 1, endian_arch);
+		else if (type == GAIA_MULTIPOLYGONM
+			 || type == GAIA_GEOMETRYCOLLECTIONM)
+		    gaiaExport32 (ptr + 1, GAIA_POLYGONM, 1, endian_arch);
+		else if (type == GAIA_MULTIPOLYGONZM
+			 || type == GAIA_GEOMETRYCOLLECTIONZM)
+		    gaiaExport32 (ptr + 1, GAIA_POLYGONZM, 1, endian_arch);
+		else
+		    gaiaExport32 (ptr + 1, GAIA_POLYGON, 1, endian_arch);
+		ptr += 5;
+	    }
+	  gaiaExport32 (ptr, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 4, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 8;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		if (type == GAIA_POLYGONZ || type == GAIA_MULTIPOLYGONZ
+		    || type == GAIA_GEOMETRYCOLLECTIONZ)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		  }
+		else if (type == GAIA_POLYGONM || type == GAIA_MULTIPOLYGONM
+			 || type == GAIA_GEOMETRYCOLLECTIONM)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		  }
+		else if (type == GAIA_POLYGONZM || type == GAIA_MULTIPOLYGONZM
+			 || type == GAIA_GEOMETRYCOLLECTIONZM)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		  }
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+		ptr += 16;
+		if (type == GAIA_POLYGONZ || type == GAIA_MULTIPOLYGONZ
+		    || type == GAIA_GEOMETRYCOLLECTIONZ)
+		  {
+		      gaiaExport64 (ptr, z, 1, endian_arch);	/* Z - exterior ring */
+		      ptr += 8;
+		  }
+		if (type == GAIA_POLYGONM || type == GAIA_MULTIPOLYGONM
+		    || type == GAIA_GEOMETRYCOLLECTIONM)
+		  {
+		      gaiaExport64 (ptr, m, 1, endian_arch);	/* M - exterior ring */
+		      ptr += 8;
+		  }
+		if (type == GAIA_POLYGONZM || type == GAIA_MULTIPOLYGONZM
+		    || type == GAIA_GEOMETRYCOLLECTIONZM)
+		  {
+		      gaiaExport64 (ptr, z, 1, endian_arch);	/* Z - exterior ring */
+		      gaiaExport64 (ptr + 8, m, 1, endian_arch);	/* M - exterior ring */
+		      ptr += 16;
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      if (type == GAIA_POLYGONZ || type == GAIA_MULTIPOLYGONZ
+			  || type == GAIA_GEOMETRYCOLLECTIONZ)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (type == GAIA_POLYGONM
+			       || type == GAIA_MULTIPOLYGONM
+			       || type == GAIA_GEOMETRYCOLLECTIONM)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else if (type == GAIA_POLYGONZM
+			       || type == GAIA_MULTIPOLYGONZM
+			       || type == GAIA_GEOMETRYCOLLECTIONZM)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+		      ptr += 16;
+		      if (type == GAIA_POLYGONZ || type == GAIA_MULTIPOLYGONZ
+			  || type == GAIA_GEOMETRYCOLLECTIONZ)
+			{
+			    gaiaExport64 (ptr, z, 1, endian_arch);	/* Z - exterior ring */
+			    ptr += 8;
+			}
+		      if (type == GAIA_POLYGONM || type == GAIA_MULTIPOLYGONM
+			  || type == GAIA_GEOMETRYCOLLECTIONM)
+			{
+			    gaiaExport64 (ptr, m, 1, endian_arch);	/* M - exterior ring */
+			    ptr += 8;
+			}
+		      if (type == GAIA_POLYGONZM || type == GAIA_MULTIPOLYGONZM
+			  || type == GAIA_GEOMETRYCOLLECTIONZM)
+			{
+			    gaiaExport64 (ptr, z, 1, endian_arch);	/* Z - exterior ring */
+			    gaiaExport64 (ptr + 8, m, 1, endian_arch);	/* M - exterior ring */
+			    ptr += 16;
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+}
+
+static int
+ewkbGetPoint (gaiaGeomCollPtr geom, unsigned char *blob,
+	      int offset, int blob_size, int endian, int endian_arch, int dims)
+{
+/* decodes a POINT from PostGIS EWKB binary GEOMETRY */
+    double x;
+    double y;
+    double z;
+    double m;
+    switch (dims)
+      {
+      case GAIA_XY_Z_M:
+	  if (blob_size < offset + 32)
+	      return -1;
+	  break;
+      case GAIA_XY_Z:
+      case GAIA_XY_M:
+	  if (blob_size < offset + 24)
+	      return -1;
+	  break;
+      default:
+	  if (blob_size < offset + 16)
+	      return -1;
+	  break;
+      }
+    x = gaiaImport64 (blob + offset, endian, endian_arch);
+    offset += 8;
+    y = gaiaImport64 (blob + offset, endian, endian_arch);
+    offset += 8;
+    if (dims == GAIA_XY_Z_M)
+      {
+	  z = gaiaImport64 (blob + offset, endian, endian_arch);
+	  offset += 8;
+	  m = gaiaImport64 (blob + offset, endian, endian_arch);
+	  offset += 8;
+	  gaiaAddPointToGeomCollXYZM (geom, x, y, z, m);
+      }
+    else if (dims == GAIA_XY_Z)
+      {
+	  z = gaiaImport64 (blob + offset, endian, endian_arch);
+	  offset += 8;
+	  gaiaAddPointToGeomCollXYZ (geom, x, y, z);
+      }
+    else if (dims == GAIA_XY_M)
+      {
+	  m = gaiaImport64 (blob + offset, endian, endian_arch);
+	  offset += 8;
+	  gaiaAddPointToGeomCollXYM (geom, x, y, m);
+      }
+    else
+	gaiaAddPointToGeomColl (geom, x, y);
+    return offset;
+}
+
+static int
+ewkbGetLinestring (gaiaGeomCollPtr geom, unsigned char *blob,
+		   int offset, int blob_size, int endian,
+		   int endian_arch, int dims)
+{
+/* decodes a LINESTRING from PostGIS binary GEOMETRY */
+    int npoints;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaLinestringPtr ln;
+    if (blob_size < offset + 4)
+	return -1;
+    npoints = gaiaImport32 (blob + offset, endian, endian_arch);
+    offset += 4;
+    switch (dims)
+      {
+      case GAIA_XY_Z_M:
+	  if (blob_size < offset + (32 * npoints))
+	      return -1;
+	  break;
+      case GAIA_XY_Z:
+      case GAIA_XY_M:
+	  if (blob_size < offset + (24 * npoints))
+	      return -1;
+	  break;
+      default:
+	  if (blob_size < offset + (16 * npoints))
+	      return -1;
+	  break;
+      }
+    ln = gaiaAddLinestringToGeomColl (geom, npoints);
+    for (iv = 0; iv < npoints; iv++)
+      {
+	  x = gaiaImport64 (blob + offset, endian, endian_arch);
+	  offset += 8;
+	  y = gaiaImport64 (blob + offset, endian, endian_arch);
+	  offset += 8;
+	  if (dims == GAIA_XY_Z_M)
+	    {
+		z = gaiaImport64 (blob + offset, endian, endian_arch);
+		offset += 8;
+		m = gaiaImport64 (blob + offset, endian, endian_arch);
+		offset += 8;
+		gaiaSetPointXYZM (ln->Coords, iv, x, y, z, m);
+	    }
+	  else if (dims == GAIA_XY_Z)
+	    {
+		z = gaiaImport64 (blob + offset, endian, endian_arch);
+		offset += 8;
+		gaiaSetPointXYZ (ln->Coords, iv, x, y, z);
+	    }
+	  else if (dims == GAIA_XY_M)
+	    {
+		m = gaiaImport64 (blob + offset, endian, endian_arch);
+		offset += 8;
+		gaiaSetPointXYM (ln->Coords, iv, x, y, m);
+	    }
+	  else
+	      gaiaSetPoint (ln->Coords, iv, x, y);
+      }
+    return offset;
+}
+
+static int
+ewkbGetPolygon (gaiaGeomCollPtr geom, unsigned char *blob,
+		int offset, int blob_size, int endian,
+		int endian_arch, int dims)
+{
+/* decodes a POLYGON from PostGIS binary GEOMETRY */
+    int rings;
+    int npoints;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaPolygonPtr polyg = NULL;
+    gaiaRingPtr rng;
+    if (blob_size < offset + 4)
+	return -1;
+    rings = gaiaImport32 (blob + offset, endian, endian_arch);
+    offset += 4;
+    for (ib = 0; ib < rings; ib++)
+      {
+	  if (blob_size < offset + 4)
+	      return -1;
+	  npoints = gaiaImport32 (blob + offset, endian, endian_arch);
+	  offset += 4;
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z_M:
+		if (blob_size < offset + (32 * npoints))
+		    return -1;
+		break;
+	    case GAIA_XY_Z:
+	    case GAIA_XY_M:
+		if (blob_size < offset + (24 * npoints))
+		    return -1;
+		break;
+	    default:
+		if (blob_size < offset + (16 * npoints))
+		    return -1;
+		break;
+	    }
+	  if (ib == 0)
+	    {
+		polyg = gaiaAddPolygonToGeomColl (geom, npoints, rings - 1);
+		rng = polyg->Exterior;
+	    }
+	  else
+	      rng = gaiaAddInteriorRing (polyg, ib - 1, npoints);
+	  for (iv = 0; iv < npoints; iv++)
+	    {
+		x = gaiaImport64 (blob + offset, endian, endian_arch);
+		offset += 8;
+		y = gaiaImport64 (blob + offset, endian, endian_arch);
+		offset += 8;
+		if (dims == GAIA_XY_Z_M)
+		  {
+		      z = gaiaImport64 (blob + offset, endian, endian_arch);
+		      offset += 8;
+		      m = gaiaImport64 (blob + offset, endian, endian_arch);
+		      offset += 8;
+		      gaiaSetPointXYZM (rng->Coords, iv, x, y, z, m);
+		  }
+		else if (dims == GAIA_XY_Z)
+		  {
+		      z = gaiaImport64 (blob + offset, endian, endian_arch);
+		      offset += 8;
+		      gaiaSetPointXYZ (rng->Coords, iv, x, y, z);
+		  }
+		else if (dims == GAIA_XY_M)
+		  {
+		      m = gaiaImport64 (blob + offset, endian, endian_arch);
+		      offset += 8;
+		      gaiaSetPointXYM (rng->Coords, iv, x, y, m);
+		  }
+		else
+		    gaiaSetPoint (rng->Coords, iv, x, y);
+	    }
+      }
+    return offset;
+}
+
+static int
+ewkbGetMultiGeometry (gaiaGeomCollPtr geom, unsigned char *blob,
+		      int offset, int blob_size, int endian,
+		      int endian_arch, int dims)
+{
+/* decodes a MultiGeometry from PostGIS EWKB binary GEOMETRY */
+    int entities;
+    int type;
+    unsigned char xtype[4];
+    int ie;
+    int off;
+    if (blob_size < offset + 4)
+	return -1;
+    entities = gaiaImport32 (blob + offset, endian, endian_arch);
+    offset += 4;
+    for (ie = 0; ie < entities; ie++)
+      {
+	  if (blob_size < offset + 5)
+	      return -1;
+	  memcpy (xtype, blob + offset + 1, 4);
+	  if (endian)
+	      xtype[3] = 0x00;
+	  else
+	      xtype[0] = 0x00;
+	  type = gaiaImport32 (xtype, endian, endian_arch);
+	  offset += 5;
+	  switch (type)
+	    {
+	    case GAIA_POINT:
+		off =
+		    ewkbGetPoint (geom, blob, offset, blob_size, endian,
+				  endian_arch, dims);
+		if (off < 0)
+		    return -1;
+		offset += off;
+		break;
+	    case GAIA_LINESTRING:
+		off =
+		    ewkbGetLinestring (geom, blob, offset, blob_size, endian,
+				       endian_arch, dims);
+		if (off < 0)
+		    return -1;
+		offset += off;
+		break;
+	    case GAIA_POLYGON:
+		off =
+		    ewkbGetPolygon (geom, blob, offset, blob_size, endian,
+				    endian_arch, dims);
+		if (off < 0)
+		    return -1;
+		offset += off;
+	    };
+      }
+    return offset;
+}
+
+static int
+parseHexEwkbByte (const unsigned char high, const unsigned char low,
+		  unsigned char *byte)
+{
+/* parsing an Hexadecimal byte */
+    unsigned char hex;
+    switch (high)
+      {
+      case '0':
+	  hex = 16 * 0;
+	  break;
+      case '1':
+	  hex = 16 * 1;
+	  break;
+      case '2':
+	  hex = 16 * 2;
+	  break;
+      case '3':
+	  hex = 16 * 3;
+	  break;
+      case '4':
+	  hex = 16 * 4;
+	  break;
+      case '5':
+	  hex = 16 * 5;
+	  break;
+      case '6':
+	  hex = 16 * 6;
+	  break;
+      case '7':
+	  hex = 16 * 7;
+	  break;
+      case '8':
+	  hex = 16 * 8;
+	  break;
+      case '9':
+	  hex = 16 * 9;
+	  break;
+      case 'A':
+      case 'a':
+	  hex = 16 * 10;
+	  break;
+      case 'B':
+      case 'b':
+	  hex = 16 * 11;
+	  break;
+      case 'C':
+      case 'c':
+	  hex = 16 * 12;
+	  break;
+      case 'D':
+      case 'd':
+	  hex = 16 * 13;
+	  break;
+      case 'E':
+      case 'e':
+	  hex = 16 * 14;
+	  break;
+      case 'F':
+      case 'f':
+	  hex = 16 * 15;
+	  break;
+      default:
+	  return 0;
+      };
+    switch (low)
+      {
+      case '0':
+	  hex += 0;
+	  break;
+      case '1':
+	  hex += 1;
+	  break;
+      case '2':
+	  hex += 2;
+	  break;
+      case '3':
+	  hex += 3;
+	  break;
+      case '4':
+	  hex += 4;
+	  break;
+      case '5':
+	  hex += 5;
+	  break;
+      case '6':
+	  hex += 6;
+	  break;
+      case '7':
+	  hex += 7;
+	  break;
+      case '8':
+	  hex += 8;
+	  break;
+      case '9':
+	  hex += 9;
+	  break;
+      case 'A':
+      case 'a':
+	  hex += 10;
+	  break;
+      case 'B':
+      case 'b':
+	  hex += 11;
+	  break;
+      case 'C':
+      case 'c':
+	  hex += 12;
+	  break;
+      case 'D':
+      case 'd':
+	  hex += 13;
+	  break;
+      case 'E':
+      case 'e':
+	  hex += 14;
+	  break;
+      case 'F':
+      case 'f':
+	  hex += 15;
+	  break;
+      default:
+	  return 0;
+      };
+    *byte = hex;
+    return 1;
+}
+
+static unsigned char *
+parseHexEWKB (const unsigned char *blob_hex, int *blob_size)
+{
+/* parsing an Hexadecimal EWKB Geometry */
+    unsigned char *blob;
+    unsigned char *p_out;
+    const unsigned char *p_in;
+    char high;
+    char low;
+    unsigned char hex;
+    int size;
+    int len = strlen ((const char *) blob_hex);
+    size = len / 2;
+    if (size * 2 != len)
+	return NULL;
+    blob = malloc (size);
+    if (!blob)
+	return NULL;
+    *blob_size = size;
+    p_in = blob_hex;
+    p_out = blob;
+    while (*p_in != '\0')
+      {
+	  high = *p_in++;
+	  low = *p_in++;
+	  if (!parseHexEwkbByte (high, low, &hex))
+	    {
+		free (blob);
+		return NULL;
+	    }
+	  *p_out++ = hex;
+      }
+    *blob_size = size;
+    return blob;
+}
+
+gaiaGeomCollPtr
+gaiaFromEWKB (const unsigned char *in_buffer)
+{
+/* creates a Gaia own Geometry from GEOS/PostGIS EWKB */
+    unsigned char *blob;
+    int blob_size;
+    unsigned char xtype[4];
+    unsigned char xdims;
+    int type;
+    int has_z = 0;
+    int has_m = 0;
+    int dims = GAIA_XY;
+    int srid;
+    int endian;
+    int endian_arch = gaiaEndianArch ();
+    gaiaGeomCollPtr geom = NULL;
+    blob = parseHexEWKB (in_buffer, &blob_size);
+    if (!blob)
+	return NULL;
+    if (blob_size < 9)
+	return NULL;
+    if (*(blob + 0) == 0x01)
+	endian = 1;
+    else
+	endian = 0;
+    memcpy (xtype, blob + 1, 4);
+    if (endian)
+      {
+	  xdims = xtype[3];
+	  xtype[3] = 0x00;
+      }
+    else
+      {
+	  xdims = xtype[0];
+	  xtype[0] = 0x00;
+      }
+    type = gaiaImport32 (xtype, endian, endian_arch);
+    if (xdims & 0x40)
+	has_m = 1;
+    if (xdims & 0x80)
+	has_z = 1;
+    if (has_m && has_z)
+      {
+	  dims = GAIA_XY_Z_M;
+	  geom = gaiaAllocGeomCollXYZM ();
+      }
+    else if (has_m)
+      {
+	  dims = GAIA_XY_M;
+	  geom = gaiaAllocGeomCollXYM ();
+      }
+    else if (has_z)
+      {
+	  dims = GAIA_XY_Z;
+	  geom = gaiaAllocGeomCollXYZ ();
+      }
+    else
+      {
+	  dims = GAIA_XY;
+	  geom = gaiaAllocGeomColl ();
+      }
+    srid = gaiaImport32 (blob + 5, endian, endian_arch);
+    geom->Srid = srid;
+    if (geom->Srid <= 0)
+	geom->Srid = -1;
+    switch (type)
+      {
+      case GAIA_POINT:
+	  ewkbGetPoint (geom, blob, 9, blob_size, endian, endian_arch, dims);
+	  break;
+      case GAIA_LINESTRING:
+	  ewkbGetLinestring (geom, blob, 9, blob_size, endian, endian_arch,
+			     dims);
+	  break;
+      case GAIA_POLYGON:
+	  ewkbGetPolygon (geom, blob, 9, blob_size, endian, endian_arch, dims);
+	  break;
+      default:
+	  ewkbGetMultiGeometry (geom, blob, 9, blob_size, endian, endian_arch,
+				dims);
+	  break;
+      };
+
+    return geom;
+}
+
+GAIAGEO_DECLARE void
+gaiaToEWKB (gaiaOutBufferPtr out_buf, gaiaGeomCollPtr geom)
+{
+/* prints the GEOS/PostGIS EWKB text representation of current geometry */
+    char buf[2048];
+    unsigned char endian_buf[16];
+    char byte[3];
+    char *ptr;
+    int size;
+    int type;
+    int entities = 0;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    int i;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    int endian_arch = gaiaEndianArch ();
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+
+/* precomputing the required size */
+    sprintf (buf, "SRID=%d;", geom->Srid);
+    size = strlen (buf);	/* the header size */
+    size++;			/* terminating '\0' */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  point = pt;
+	  entities++;
+	  n_points++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  line = ln;
+	  entities++;
+	  n_linestrings++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  polyg = pg;
+	  entities++;
+	  n_polygons++;
+	  pg = pg->Next;
+      }
+    if (n_points == 0 && n_polygons == 0 && n_linestrings == 0)
+	return;
+/* ok, we can determine the geometry class */
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	      type = GAIA_MULTIPOINT;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_POINT;
+      }
+    else if (n_points > 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_MULTIPOINT;
+      }
+    else if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	      type = GAIA_MULTILINESTRING;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_LINESTRING;
+      }
+    else if (n_points == 0 && n_linestrings > 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_MULTILINESTRING;
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	      type = GAIA_MULTIPOLYGON;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_POLYGON;
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons > 1)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_MULTIPOLYGON;
+      }
+    else
+	type = GAIA_GEOMETRYCOLLECTION;
+/* and now we compute the size of EWKB */
+    size += 10;			/* header size */
+    if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	size += 8;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	      || type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	      size += 10;
+	  if (geom->DimensionModel == GAIA_XY_Z
+	      || geom->DimensionModel == GAIA_XY_M)
+	      size += 48;	/* three doubles for each POINT */
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      size += 64;	/* four doubles for each POINT */
+	  else
+	      size += 32;	/* two doubles for each POINT */
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	      || type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	      size += 10;
+	  if (geom->DimensionModel == GAIA_XY_Z
+	      || geom->DimensionModel == GAIA_XY_M)
+	      size += 8 + (line->Points * 48);	/* three doubles for each VERTEX */
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      size += 8 + (line->Points * 64);	/* four doubles for each VERTEX */
+	  else
+	      size += 8 + (line->Points * 32);	/* two doubles for each VERTEX */
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	      || type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	      size += 10;
+	  rng = polyg->Exterior;
+	  if (geom->DimensionModel == GAIA_XY_Z
+	      || geom->DimensionModel == GAIA_XY_M)
+	      size += 16 + (rng->Points * 48);	/* three doubles for each VERTEX */
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	      size += 16 + (rng->Points * 64);	/* four doubles for each VERTEX */
+	  else
+	      size += 16 + (rng->Points * 32);	/* two doubles for each VERTEX */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		if (geom->DimensionModel == GAIA_XY_Z
+		    || geom->DimensionModel == GAIA_XY_M)
+		    size += 8 + (rng->Points * 48);	/* three doubles for each VERTEX */
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    size += 8 + (rng->Points * 64);	/* four doubles for each VERTEX */
+		else
+		    size += 8 + (rng->Points * 32);	/* two doubles for each VERTEX */
+	    }
+	  polyg = polyg->Next;
+      }
+/* and finally we build the EWKB expression */
+    sprintf (buf, "SRID=%d;", geom->Srid);
+    gaiaAppendToOutBuffer (out_buf, buf);
+    ptr = buf;
+
+    *ptr++ = '0';		/* little endian byte order */
+    *ptr++ = '1';
+    gaiaExport32 (endian_buf, type, 1, endian_arch);	/* the main CLASS TYPE */
+    for (i = 0; i < 3; i++)
+      {
+	  /* CAVEAT: the 4th byte in PostGIS encodes M/Z presence !!!! */
+	  sprintf (byte, "%02X", endian_buf[i]);
+	  *ptr++ = byte[0];
+	  *ptr++ = byte[1];
+      }
+/* marking M/Z presence */
+    if (geom->DimensionModel == GAIA_XY_Z)
+	*ptr++ = '8';
+    else if (geom->DimensionModel == GAIA_XY_M)
+	*ptr++ = '4';
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	*ptr++ = 'C';
+    else
+	*ptr++ = '0';
+    *ptr++ = '0';
+    *ptr++ = '\0';
+    gaiaAppendToOutBuffer (out_buf, buf);
+    ptr = buf;
+    if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+      {
+	  gaiaExport32 (endian_buf, entities, 1, endian_arch);	/* it's a collection; # entities */
+	  for (i = 0; i < 4; i++)
+	    {
+		sprintf (byte, "%02X", endian_buf[i]);
+		*ptr++ = byte[0];
+		*ptr++ = byte[1];
+	    }
+      }
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  if ((ptr - buf) > 1024)
+	    {
+		/* flushing the internal buffer */
+		*ptr++ = '\0';
+		gaiaAppendToOutBuffer (out_buf, buf);
+		ptr = buf;
+	    }
+	  if (type == GAIA_MULTIPOINT || type == GAIA_GEOMETRYCOLLECTION)
+	    {
+		*ptr++ = '0';
+		*ptr++ = '1';
+		/* it's a collection: the CLASS TYPE for this element */
+		gaiaExport32 (endian_buf, GAIA_POINT, 1, endian_arch);
+		for (i = 0; i < 3; i++)
+		  {
+		      /* CAVEAT: the 4th byte in PostGIS encodes M/Z presence !!!! */
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		/* marking M/Z presence */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    *ptr++ = '8';
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    *ptr++ = '4';
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *ptr++ = 'C';
+		else
+		    *ptr++ = '0';
+		*ptr++ = '0';
+	    }
+	  gaiaExport64 (endian_buf, point->X, 1, endian_arch);	/* X */
+	  for (i = 0; i < 8; i++)
+	    {
+		sprintf (byte, "%02X", endian_buf[i]);
+		*ptr++ = byte[0];
+		*ptr++ = byte[1];
+	    }
+	  gaiaExport64 (endian_buf, point->Y, 1, endian_arch);	/* Y */
+	  for (i = 0; i < 8; i++)
+	    {
+		sprintf (byte, "%02X", endian_buf[i]);
+		*ptr++ = byte[0];
+		*ptr++ = byte[1];
+	    }
+	  if (geom->DimensionModel == GAIA_XY_Z)
+	    {
+		gaiaExport64 (endian_buf, point->Z, 1, endian_arch);	/* Z */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+	    }
+	  else if (geom->DimensionModel == GAIA_XY_M)
+	    {
+		gaiaExport64 (endian_buf, point->M, 1, endian_arch);	/* M */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+	    }
+	  else if (geom->DimensionModel == GAIA_XY_Z_M)
+	    {
+		gaiaExport64 (endian_buf, point->Z, 1, endian_arch);	/* Z */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		gaiaExport64 (endian_buf, point->M, 1, endian_arch);	/* M */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+	    }
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  if ((ptr - buf) > 1024)
+	    {
+		/* flushing the internal buffer */
+		*ptr++ = '\0';
+		gaiaAppendToOutBuffer (out_buf, buf);
+		ptr = buf;
+	    }
+	  if (type == GAIA_MULTILINESTRING || type == GAIA_GEOMETRYCOLLECTION)
+	    {
+		*ptr++ = '0';
+		*ptr++ = '1';
+		/* it's a collection: the CLASS TYPE for this element */
+		gaiaExport32 (endian_buf, GAIA_LINESTRING, 1, endian_arch);
+		for (i = 0; i < 3; i++)
+		  {
+		      /* CAVEAT: the 4th byte in PostGIS encodes M/Z presence !!!! */
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		/* marking M/Z presence */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    *ptr++ = '8';
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    *ptr++ = '4';
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *ptr++ = 'C';
+		else
+		    *ptr++ = '0';
+		*ptr++ = '0';
+	    }
+	  gaiaExport32 (endian_buf, line->Points, 1, endian_arch);	/* # points */
+	  for (i = 0; i < 4; i++)
+	    {
+		sprintf (byte, "%02X", endian_buf[i]);
+		*ptr++ = byte[0];
+		*ptr++ = byte[1];
+	    }
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		if ((ptr - buf) > 1024)
+		  {
+		      /* flushing the internal buffer */
+		      *ptr++ = '\0';
+		      gaiaAppendToOutBuffer (out_buf, buf);
+		      ptr = buf;
+		  }
+		gaiaLineGetPoint (line, iv, &x, &y, &z, &m);
+		gaiaExport64 (endian_buf, x, 1, endian_arch);	/* X */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		gaiaExport64 (endian_buf, y, 1, endian_arch);	/* Y */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		if (geom->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaExport64 (endian_buf, z, 1, endian_arch);	/* Z */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		  }
+		else if (geom->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaExport64 (endian_buf, m, 1, endian_arch);	/* M */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		  }
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaExport64 (endian_buf, z, 1, endian_arch);	/* Z */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		      gaiaExport64 (endian_buf, m, 1, endian_arch);	/* M */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  if ((ptr - buf) > 1024)
+	    {
+		/* flushing the internal buffer */
+		*ptr++ = '\0';
+		gaiaAppendToOutBuffer (out_buf, buf);
+		ptr = buf;
+	    }
+	  if (type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	    {
+		*ptr++ = '0';
+		*ptr++ = '1';
+		/* it's a collection: the CLASS TYPE for this element */
+		gaiaExport32 (endian_buf, GAIA_POLYGON, 1, endian_arch);
+		for (i = 0; i < 3; i++)
+		  {
+		      /* CAVEAT: the 4th byte in PostGIS encodes M/Z presence !!!! */
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		/* marking M/Z presence */
+		if (geom->DimensionModel == GAIA_XY_Z)
+		    *ptr++ = '8';
+		else if (geom->DimensionModel == GAIA_XY_M)
+		    *ptr++ = '4';
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		    *ptr++ = 'C';
+		else
+		    *ptr++ = '0';
+		*ptr++ = '0';
+	    }
+	  gaiaExport32 (endian_buf, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  for (i = 0; i < 4; i++)
+	    {
+		sprintf (byte, "%02X", endian_buf[i]);
+		*ptr++ = byte[0];
+		*ptr++ = byte[1];
+	    }
+	  rng = polyg->Exterior;
+	  gaiaExport32 (endian_buf, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  for (i = 0; i < 4; i++)
+	    {
+		sprintf (byte, "%02X", endian_buf[i]);
+		*ptr++ = byte[0];
+		*ptr++ = byte[1];
+	    }
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		if ((ptr - buf) > 1024)
+		  {
+		      /* flushing the internal buffer */
+		      *ptr++ = '\0';
+		      gaiaAppendToOutBuffer (out_buf, buf);
+		      ptr = buf;
+		  }
+		gaiaRingGetPoint (rng, iv, &x, &y, &z, &m);
+		gaiaExport64 (endian_buf, x, 1, endian_arch);	/* X - exterior ring */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		gaiaExport64 (endian_buf, y, 1, endian_arch);	/* Y - exterior ring */
+		for (i = 0; i < 8; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		if (geom->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaExport64 (endian_buf, z, 1, endian_arch);	/* Z */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		  }
+		else if (geom->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaExport64 (endian_buf, m, 1, endian_arch);	/* M */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		  }
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaExport64 (endian_buf, z, 1, endian_arch);	/* Z */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		      gaiaExport64 (endian_buf, m, 1, endian_arch);	/* M */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (endian_buf, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		for (i = 0; i < 4; i++)
+		  {
+		      sprintf (byte, "%02X", endian_buf[i]);
+		      *ptr++ = byte[0];
+		      *ptr++ = byte[1];
+		  }
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      if ((ptr - buf) > 1024)
+			{
+			    /* flushing the internal buffer */
+			    *ptr++ = '\0';
+			    gaiaAppendToOutBuffer (out_buf, buf);
+			    ptr = buf;
+			}
+		      gaiaRingGetPoint (rng, iv, &x, &y, &z, &m);
+		      gaiaExport64 (endian_buf, x, 1, endian_arch);	/* X - interior ring */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		      gaiaExport64 (endian_buf, y, 1, endian_arch);	/* Y - interior ring */
+		      for (i = 0; i < 8; i++)
+			{
+			    sprintf (byte, "%02X", endian_buf[i]);
+			    *ptr++ = byte[0];
+			    *ptr++ = byte[1];
+			}
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaExport64 (endian_buf, z, 1, endian_arch);	/* Z */
+			    for (i = 0; i < 8; i++)
+			      {
+				  sprintf (byte, "%02X", endian_buf[i]);
+				  *ptr++ = byte[0];
+				  *ptr++ = byte[1];
+			      }
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaExport64 (endian_buf, m, 1, endian_arch);	/* M */
+			    for (i = 0; i < 8; i++)
+			      {
+				  sprintf (byte, "%02X", endian_buf[i]);
+				  *ptr++ = byte[0];
+				  *ptr++ = byte[1];
+			      }
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaExport64 (endian_buf, z, 1, endian_arch);	/* Z */
+			    for (i = 0; i < 8; i++)
+			      {
+				  sprintf (byte, "%02X", endian_buf[i]);
+				  *ptr++ = byte[0];
+				  *ptr++ = byte[1];
+			      }
+			    gaiaExport64 (endian_buf, m, 1, endian_arch);	/* M */
+			    for (i = 0; i < 8; i++)
+			      {
+				  sprintf (byte, "%02X", endian_buf[i]);
+				  *ptr++ = byte[0];
+				  *ptr++ = byte[1];
+			      }
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+
+/* terminating the EWKB string */
+    *ptr = '\0';
+    gaiaAppendToOutBuffer (out_buf, buf);
+}
+
+static int
+coordDimsFromFgf (int endian_arch, const unsigned char *blob, unsigned int size,
+		  int *type)
+{
+/* decoding the coordinate Dimensions for an FGF Geometry */
+    int coord_dims;
+    if (size < 4)
+	return 0;
+    coord_dims = gaiaImport32 (blob, GAIA_LITTLE_ENDIAN, endian_arch);
+    *type = coord_dims;
+    switch (coord_dims)
+      {
+      case GAIA_XY:
+	  return 2;
+      case GAIA_XY_M:
+      case GAIA_XY_Z:
+	  return 3;
+      case GAIA_XY_Z_M:
+	  return 4;
+      default:
+	  return 0;
+      }
+}
+
+static int
+pointFromFgf (gaiaGeomCollPtr geom, int endian_arch, const unsigned char *blob,
+	      unsigned int size, unsigned int *consumed)
+{
+/* decoding a POINT Geometry from FGF  */
+    double x;
+    double y;
+    double z;
+    double m;
+    unsigned int sz = size;
+    const unsigned char *ptr = blob;
+    int coord_dims;
+    int type;
+/* checking Geometry Type */
+    if (sz < 4)
+	return 0;
+    if (gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch) != GAIA_POINT)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+/* checking size */
+    if (sz < 4)
+	return 0;
+    coord_dims = coordDimsFromFgf (endian_arch, ptr, size, &type);
+    if (!coord_dims)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+    if (sz < (coord_dims * sizeof (double)))
+	return 0;
+    if (consumed)
+	*consumed = coord_dims * sizeof (double);
+    if (type == GAIA_XY_Z)
+      {
+	  /* building the POINTZ */
+	  x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+	  y = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  z = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  gaiaAddPointToGeomCollXYZ (geom, x, y, z);
+      }
+    else if (type == GAIA_XY_M)
+      {
+	  /* building the POINTM */
+	  x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+	  y = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  m = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  gaiaAddPointToGeomCollXYM (geom, x, y, m);
+      }
+    else if (type == GAIA_XY_Z_M)
+      {
+	  /* building the POINTZM */
+	  x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+	  y = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  z = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  m = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  gaiaAddPointToGeomCollXYZM (geom, x, y, z, m);
+      }
+    else
+      {
+	  /* building the POINT */
+	  x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+	  y = gaiaImport64 (ptr + 8, GAIA_LITTLE_ENDIAN, endian_arch);
+	  gaiaAddPointToGeomColl (geom, x, y);
+      }
+    return 1;
+}
+
+static int
+linestringFromFgf (gaiaGeomCollPtr geom, int endian_arch,
+		   const unsigned char *blob, unsigned int size,
+		   unsigned int *consumed)
+{
+/* decoding a LINESTRING Geometry from FGF  */
+    gaiaLinestringPtr ln;
+    int pts;
+    int iv;
+    double x;
+    double y;
+    unsigned int ln_sz;
+    unsigned int sz = size;
+    const unsigned char *ptr = blob;
+    int coord_dims;
+    int type;
+/* checking Geometry Type */
+    if (sz < 4)
+	return 0;
+    if (gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch) != GAIA_LINESTRING)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+/* checking size */
+    coord_dims = coordDimsFromFgf (endian_arch, ptr, size, &type);
+    if (!coord_dims)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+/* how many points are there ? */
+    if (sz < 4)
+	return 0;
+    pts = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+    ptr += 4;
+    sz -= 4;
+    if (pts < 2)
+	return 0;
+    ln_sz = pts * coord_dims * sizeof (double);
+    if (sz < ln_sz)
+	return 0;
+    if (consumed)
+	*consumed = (12 + ln_sz);
+    if (type == GAIA_XY_Z)
+      {
+	  /* building the LINESTRINGZ */
+	  geom->DimensionModel = GAIA_XY_Z;
+	  ln = gaiaAddLinestringToGeomColl (geom, pts);
+	  for (iv = 0; iv < pts; iv++)
+	    {
+		/* inserting vertices into the linestring */
+		x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+		y = gaiaImport64 (ptr + sizeof (double), GAIA_LITTLE_ENDIAN,
+				  endian_arch);
+		ptr += (coord_dims * sizeof (double));
+		gaiaSetPoint (ln->Coords, iv, x, y);
+	    }
+      }
+    else if (type == GAIA_XY_M)
+      {
+	  /* building the LINESTRINGM */
+	  geom->DimensionModel = GAIA_XY_M;
+	  ln = gaiaAddLinestringToGeomColl (geom, pts);
+	  for (iv = 0; iv < pts; iv++)
+	    {
+		/* inserting vertices into the linestring */
+		x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+		y = gaiaImport64 (ptr + sizeof (double), GAIA_LITTLE_ENDIAN,
+				  endian_arch);
+		ptr += (coord_dims * sizeof (double));
+		gaiaSetPoint (ln->Coords, iv, x, y);
+	    }
+      }
+    else if (type == GAIA_XY_Z_M)
+      {
+	  /* building the LINESTRINGZM */
+	  geom->DimensionModel = GAIA_XY_Z_M;
+	  ln = gaiaAddLinestringToGeomColl (geom, pts);
+	  for (iv = 0; iv < pts; iv++)
+	    {
+		/* inserting vertices into the linestring */
+		x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+		y = gaiaImport64 (ptr + sizeof (double), GAIA_LITTLE_ENDIAN,
+				  endian_arch);
+		ptr += (coord_dims * sizeof (double));
+		gaiaSetPoint (ln->Coords, iv, x, y);
+	    }
+      }
+    else
+      {
+	  /* building the LINESTRING */
+	  geom->DimensionModel = GAIA_XY;
+	  ln = gaiaAddLinestringToGeomColl (geom, pts);
+	  for (iv = 0; iv < pts; iv++)
+	    {
+		/* inserting vertices into the linestring */
+		x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+		y = gaiaImport64 (ptr + sizeof (double), GAIA_LITTLE_ENDIAN,
+				  endian_arch);
+		ptr += (coord_dims * sizeof (double));
+		gaiaSetPoint (ln->Coords, iv, x, y);
+	    }
+      }
+    return 1;
+}
+
+static int
+polygonFromFgf (gaiaGeomCollPtr geom, int endian_arch,
+		const unsigned char *blob, unsigned int size,
+		unsigned int *consumed)
+{
+/* decoding a POLYGON Geometry from FGF  */
+    gaiaPolygonPtr pg = NULL;
+    gaiaRingPtr rng;
+    int rings;
+    int ir;
+    int pts;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    unsigned int rng_sz;
+    unsigned int sz = size;
+    const unsigned char *ptr = blob;
+    int coord_dims;
+    int type;
+    unsigned int bytes = 0;
+/* checking Geometry Type */
+    if (sz < 4)
+	return 0;
+    if (gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch) != GAIA_POLYGON)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+    bytes += 4;
+/* checking size */
+    coord_dims = coordDimsFromFgf (endian_arch, ptr, size, &type);
+    if (!coord_dims)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+    bytes += 4;
+/* how many rings are there ? */
+    if (sz < 4)
+	return 0;
+    rings = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+    ptr += 4;
+    sz -= 4;
+    bytes += 4;
+    if (rings < 1)
+	return 0;
+    for (ir = 0; ir < rings; ir++)
+      {
+	  /* fetching Polygon's rings */
+	  if (sz < 4)
+	      return 0;
+	  pts = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+	  ptr += 4;
+	  sz -= 4;
+	  bytes += 4;
+	  if (pts < 4)
+	      return 0;
+	  rng_sz = pts * coord_dims * sizeof (double);
+	  if (sz < rng_sz)
+	      return 0;
+	  bytes += rng_sz;
+	  if (type == GAIA_XY_Z)
+	    {
+		/* POLYGONZ */
+		geom->DimensionModel = GAIA_XY_Z;
+		if (ir == 0)
+		  {
+		      /* building the EXTERIOR RING */
+		      pg = gaiaAddPolygonToGeomColl (geom, pts, rings - 1);
+		      rng = pg->Exterior;
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into the EXTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    z = gaiaImport64 (ptr + (sizeof (double) * 2),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPointXYZ (rng->Coords, iv, x, y, z);
+			}
+		  }
+		else
+		  {
+		      /* building an INTERIOR RING */
+		      rng = gaiaAddInteriorRing (pg, ir - 1, pts);
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into some INTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    z = gaiaImport64 (ptr + (sizeof (double) * 2),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPointXYZ (rng->Coords, iv, x, y, z);
+			}
+		  }
+	    }
+	  if (type == GAIA_XY_M)
+	    {
+		/* POLYGONM */
+		geom->DimensionModel = GAIA_XY_M;
+		if (ir == 0)
+		  {
+		      /* building the EXTERIOR RING */
+		      pg = gaiaAddPolygonToGeomColl (geom, pts, rings - 1);
+		      rng = pg->Exterior;
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into the EXTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    m = gaiaImport64 (ptr + (sizeof (double) * 2),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPointXYM (rng->Coords, iv, x, y, m);
+			}
+		  }
+		else
+		  {
+		      /* building an INTERIOR RING */
+		      rng = gaiaAddInteriorRing (pg, ir - 1, pts);
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into some INTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    m = gaiaImport64 (ptr + (sizeof (double) * 2),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPointXYM (rng->Coords, iv, x, y, m);
+			}
+		  }
+	    }
+	  else if (type == GAIA_XY_Z_M)
+	    {
+		/* POLYGONZM */
+		geom->DimensionModel = GAIA_XY_Z_M;
+		if (ir == 0)
+		  {
+		      /* building the EXTERIOR RING */
+		      pg = gaiaAddPolygonToGeomColl (geom, pts, rings - 1);
+		      rng = pg->Exterior;
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into the EXTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    z = gaiaImport64 (ptr + (sizeof (double) * 2),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    m = gaiaImport64 (ptr + (sizeof (double) * 3),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPointXYZM (rng->Coords, iv, x, y, z, m);
+			}
+		  }
+		else
+		  {
+		      /* building an INTERIOR RING */
+		      rng = gaiaAddInteriorRing (pg, ir - 1, pts);
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into some INTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    z = gaiaImport64 (ptr + (sizeof (double) * 2),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    m = gaiaImport64 (ptr + (sizeof (double) * 3),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPointXYZM (rng->Coords, iv, x, y, z, m);
+			}
+		  }
+	    }
+	  else
+	    {
+		/* POLYGON */
+		geom->DimensionModel = GAIA_XY;
+		if (ir == 0)
+		  {
+		      /* building the EXTERIOR RING */
+		      pg = gaiaAddPolygonToGeomColl (geom, pts, rings - 1);
+		      rng = pg->Exterior;
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into the EXTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPoint (rng->Coords, iv, x, y);
+			}
+		  }
+		else
+		  {
+		      /* building an INTERIOR RING */
+		      rng = gaiaAddInteriorRing (pg, ir - 1, pts);
+		      for (iv = 0; iv < pts; iv++)
+			{
+			    /* inserting vertices into some INTERIOR Ring */
+			    x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    y = gaiaImport64 (ptr + sizeof (double),
+					      GAIA_LITTLE_ENDIAN, endian_arch);
+			    ptr += (coord_dims * sizeof (double));
+			    gaiaSetPoint (rng->Coords, iv, x, y);
+			}
+		  }
+	    }
+	  sz -= rng_sz;
+      }
+    if (consumed)
+	*consumed = bytes;
+    return 1;
+}
+
+static int
+multiPointFromFgf (gaiaGeomCollPtr geom, int endian_arch,
+		   const unsigned char *blob, unsigned int size)
+{
+/* decoding a MULTIPOINT Geometry from FGF  */
+    int pts;
+    int ipt;
+    unsigned int sz = size;
+    const unsigned char *ptr = blob;
+    unsigned int consumed;
+/* checking Geometry Type */
+    if (sz < 4)
+	return 0;
+    if (gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch) != GAIA_MULTIPOINT)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+/* how many points are there ? */
+    if (sz < 4)
+	return 0;
+    pts = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+    ptr += 4;
+    sz -= 4;
+    if (pts < 1)
+	return 0;
+    for (ipt = 0; ipt < pts; ipt++)
+      {
+	  /* fetching individual Points from FGF */
+	  if (!pointFromFgf (geom, endian_arch, ptr, sz, &consumed))
+	      return 0;
+	  ptr += consumed;
+	  sz -= consumed;
+      }
+    return 1;
+}
+
+static int
+multiLinestringFromFgf (gaiaGeomCollPtr geom, int endian_arch,
+			const unsigned char *blob, unsigned int size)
+{
+/* decoding a MULTILINESTRING Geometry from FGF  */
+    int lns;
+    int iln;
+    unsigned int sz = size;
+    const unsigned char *ptr = blob;
+    unsigned int consumed;
+/* checking Geometry Type */
+    if (sz < 4)
+	return 0;
+    if (gaiaImport32
+	(ptr, GAIA_LITTLE_ENDIAN, endian_arch) != GAIA_MULTILINESTRING)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+/* how many linestrings are there ? */
+    if (sz < 4)
+	return 0;
+    lns = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+    ptr += 4;
+    sz -= 4;
+    if (lns < 1)
+	return 0;
+    for (iln = 0; iln < lns; iln++)
+      {
+	  /* fetching individual Linestrings from FGF */
+	  if (!linestringFromFgf (geom, endian_arch, ptr, sz, &consumed))
+	      return 0;
+	  ptr += consumed;
+	  sz -= consumed;
+      }
+    return 1;
+}
+
+static int
+multiPolygonFromFgf (gaiaGeomCollPtr geom, int endian_arch,
+		     const unsigned char *blob, unsigned int size)
+{
+/* decoding a MULTIPOLYGON Geometry from FGF  */
+    int pgs;
+    int ipg;
+    unsigned int sz = size;
+    const unsigned char *ptr = blob;
+    unsigned int consumed;
+/* checking Geometry Type */
+    if (sz < 4)
+	return 0;
+    if (gaiaImport32
+	(ptr, GAIA_LITTLE_ENDIAN, endian_arch) != GAIA_MULTIPOLYGON)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+/* how many polygons are there ? */
+    if (sz < 4)
+	return 0;
+    pgs = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+    ptr += 4;
+    sz -= 4;
+    if (pgs < 1)
+	return 0;
+    for (ipg = 0; ipg < pgs; ipg++)
+      {
+	  /* fetching individual Polygons from FGF */
+	  if (!polygonFromFgf (geom, endian_arch, ptr, sz, &consumed))
+	      return 0;
+	  ptr += consumed;
+	  sz -= consumed;
+      }
+    return 1;
+}
+
+static int
+geomCollectionFromFgf (gaiaGeomCollPtr geom, int endian_arch,
+		       const unsigned char *blob, unsigned int size)
+{
+/* decoding a  GEOMETRYCOLLECTION Geometry from FGF  */
+    int geoms;
+    int ig;
+    int geom_type;
+    unsigned int sz = size;
+    const unsigned char *ptr = blob;
+    unsigned int consumed;
+/* checking Geometry Type */
+    if (sz < 4)
+	return 0;
+    if (gaiaImport32
+	(ptr, GAIA_LITTLE_ENDIAN, endian_arch) != GAIA_GEOMETRYCOLLECTION)
+	return 0;
+    ptr += 4;
+    sz -= 4;
+/* how many individual Geometries are there ? */
+    if (sz < 4)
+	return 0;
+    geoms = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+    ptr += 4;
+    sz -= 4;
+    if (geoms < 1)
+	return 0;
+    for (ig = 0; ig < geoms; ig++)
+      {
+	  /* fetching individual Geometries from FGF */
+	  if (sz < 4)
+	      return 0;
+	  geom_type = gaiaImport32 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
+	  switch (geom_type)
+	    {
+	    case GAIA_POINT:
+		if (!pointFromFgf (geom, endian_arch, ptr, sz, &consumed))
+		    return 0;
+		break;
+	    case GAIA_LINESTRING:
+		if (!linestringFromFgf (geom, endian_arch, ptr, sz, &consumed))
+		    return 0;
+		break;
+	    case GAIA_POLYGON:
+		if (!polygonFromFgf (geom, endian_arch, ptr, sz, &consumed))
+		    return 0;
+		break;
+	    default:		/* unsupported geometry type */
+		return 0;
+		break;
+	    };
+	  ptr += consumed;
+	  sz -= consumed;
+      }
+    return 1;
+}
+
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaFromFgf (const unsigned char *blob, unsigned int size)
+{
+/* decoding from FGF to GEOMETRY  */
+    gaiaGeomCollPtr geom = NULL;
+    int geom_type;
+    int endian_arch = gaiaEndianArch ();
+    if (size < 4)
+	return NULL;
+/* checking FGF type */
+    geom_type = gaiaImport32 (blob, GAIA_LITTLE_ENDIAN, endian_arch);
+    geom = gaiaAllocGeomColl ();
+    geom->DeclaredType = geom_type;
+    switch (geom_type)
+      {
+      case GAIA_POINT:
+	  if (pointFromFgf (geom, endian_arch, blob, size, NULL))
+	      return geom;
+	  break;
+      case GAIA_LINESTRING:
+	  if (linestringFromFgf (geom, endian_arch, blob, size, NULL))
+	      return geom;
+	  break;
+      case GAIA_POLYGON:
+	  if (polygonFromFgf (geom, endian_arch, blob, size, NULL))
+	      return geom;
+	  break;
+      case GAIA_MULTIPOINT:
+	  if (multiPointFromFgf (geom, endian_arch, blob, size))
+	      return geom;
+	  break;
+      case GAIA_MULTILINESTRING:
+	  if (multiLinestringFromFgf (geom, endian_arch, blob, size))
+	      return geom;
+	  break;
+      case GAIA_MULTIPOLYGON:
+	  if (multiPolygonFromFgf (geom, endian_arch, blob, size))
+	      return geom;
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+	  if (geomCollectionFromFgf (geom, endian_arch, blob, size))
+	      return geom;
+	  break;
+      default:			/* unsupported geometry type */
+	  break;
+      };
+    gaiaFreeGeomColl (geom);
+    return NULL;
+}
+
+GAIAGEO_DECLARE void
+gaiaToFgf (gaiaGeomCollPtr geom, unsigned char **result, int *size,
+	   int coord_dims)
+{
+/* builds the FGF representation for this GEOMETRY */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    int entities = 0;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    int type;
+    int n_coords;
+    unsigned char *ptr;
+    int sz = 0;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    int endian_arch = gaiaEndianArch ();
+    gaiaMbrGeometry (geom);
+    switch (coord_dims)
+      {
+      case GAIA_XY:
+	  n_coords = 2;
+	  break;
+      case GAIA_XY_M:
+      case GAIA_XY_Z:
+	  n_coords = 3;
+	  break;
+      case GAIA_XY_Z_M:
+	  n_coords = 4;
+	  break;
+      default:
+	  n_coords = 0;
+	  break;
+      }
+/* how many entities, and of what kind, do we have ? */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  point = pt;
+	  entities++;
+	  n_points++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  line = ln;
+	  entities++;
+	  n_linestrings++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  polyg = pg;
+	  entities++;
+	  n_polygons++;
+	  pg = pg->Next;
+      }
+    *size = 0;
+    sz = 0;
+    *result = NULL;
+    if (n_points == 0 && n_polygons == 0 && n_linestrings == 0)
+	return;
+/* ok, we can determine the geometry class */
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	      type = GAIA_MULTIPOINT;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_POINT;
+      }
+    else if (n_points > 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_MULTIPOINT;
+      }
+    else if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	      type = GAIA_MULTILINESTRING;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_LINESTRING;
+      }
+    else if (n_points == 0 && n_linestrings > 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_MULTILINESTRING;
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	      type = GAIA_MULTIPOLYGON;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_POLYGON;
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons > 1)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOMETRYCOLLECTION;
+	  else
+	      type = GAIA_MULTIPOLYGON;
+      }
+    else
+	type = GAIA_GEOMETRYCOLLECTION;
+/* and now we compute the size of FGF */
+    if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	sz += 8;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  sz += (8 + (n_coords * sizeof (double)));	/* the size of each POINT */
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  sz += (12 + ((n_coords * sizeof (double)) * line->Points));	/* # points + [x,y] for each vertex */
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  rng = polyg->Exterior;
+	  sz += (16 + ((n_coords * sizeof (double)) * rng->Points));	/* # rings + # points + [x.y] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		sz += (4 + ((n_coords * sizeof (double)) * rng->Points));	/* # points + [x,y] array - interior ring */
+	    }
+	  polyg = polyg->Next;
+      }
+    *size = sz;
+    ptr = malloc (sz);
+    *result = ptr;
+/* and finally we build the FGF */
+    if (type == GAIA_MULTIPOINT || type == GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+      {
+	  gaiaExport32 (ptr, type, GAIA_LITTLE_ENDIAN, endian_arch);	/* Geometry Type */
+	  ptr += 4;
+	  gaiaExport32 (ptr, entities, GAIA_LITTLE_ENDIAN, endian_arch);	/* it's a collection; # entities */
+	  ptr += 4;
+      }
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  gaiaExport32 (ptr, GAIA_POINT, GAIA_LITTLE_ENDIAN, endian_arch);	/* the CLASS TYPE for this element */
+	  ptr += 4;
+	  gaiaExport32 (ptr, coord_dims, GAIA_LITTLE_ENDIAN, endian_arch);	/* the CoordDimension */
+	  ptr += 4;
+	  gaiaExport64 (ptr, point->X, GAIA_LITTLE_ENDIAN, endian_arch);	/* X */
+	  ptr += 8;
+	  gaiaExport64 (ptr, point->Y, GAIA_LITTLE_ENDIAN, endian_arch);	/* Y */
+	  ptr += 8;
+	  if (n_coords > 2)
+	    {
+		/* the third coordinate [Z or M] */
+		if (coord_dims == GAIA_XY_Z || coord_dims == GAIA_XY_Z_M)
+		    gaiaExport64 (ptr, point->Z, GAIA_LITTLE_ENDIAN,
+				  endian_arch);
+		else
+		    gaiaExport64 (ptr, point->M, GAIA_LITTLE_ENDIAN,
+				  endian_arch);
+		ptr += 8;
+	    }
+	  if (n_coords > 3)
+	    {
+		/* the fourth coordinate [M] */
+		gaiaExport64 (ptr, point->M, GAIA_LITTLE_ENDIAN, endian_arch);
+		ptr += 8;
+	    }
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  gaiaExport32 (ptr, GAIA_LINESTRING, GAIA_LITTLE_ENDIAN, endian_arch);	/* the CLASS TYPE for this element */
+	  ptr += 4;
+	  gaiaExport32 (ptr, coord_dims, GAIA_LITTLE_ENDIAN, endian_arch);	/* the CoordDimension */
+	  ptr += 4;
+	  gaiaExport32 (ptr, line->Points, GAIA_LITTLE_ENDIAN, endian_arch);	/* # points */
+	  ptr += 4;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		if (geom->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (geom->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		gaiaExport64 (ptr, x, GAIA_LITTLE_ENDIAN, endian_arch);	/* X */
+		ptr += 8;
+		gaiaExport64 (ptr, y, GAIA_LITTLE_ENDIAN, endian_arch);	/* Y */
+		ptr += 8;
+		if (n_coords > 2)
+		  {
+		      /* the third coordinate [Z or M] */
+		      if (coord_dims == GAIA_XY_Z || coord_dims == GAIA_XY_Z_M)
+			  gaiaExport64 (ptr, z, GAIA_LITTLE_ENDIAN,
+					endian_arch);
+		      else
+			  gaiaExport64 (ptr, m, GAIA_LITTLE_ENDIAN,
+					endian_arch);
+		      ptr += 8;
+		  }
+		if (n_coords > 3)
+		  {
+		      /* the fourth coordinate [M]; */
+		      gaiaExport64 (ptr, m, GAIA_LITTLE_ENDIAN, endian_arch);
+		      ptr += 8;
+		  }
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  gaiaExport32 (ptr, GAIA_POLYGON, GAIA_LITTLE_ENDIAN, endian_arch);	/* the CLASS TYPE for this element */
+	  ptr += 4;
+	  gaiaExport32 (ptr, coord_dims, GAIA_LITTLE_ENDIAN, endian_arch);	/* the CoordDimension */
+	  ptr += 4;
+	  gaiaExport32 (ptr, polyg->NumInteriors + 1, GAIA_LITTLE_ENDIAN, endian_arch);	/* # rings */
+	  ptr += 4;
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr, rng->Points, GAIA_LITTLE_ENDIAN, endian_arch);	/* # points - exterior ring */
+	  ptr += 4;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		if (geom->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		  }
+		else if (geom->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		  }
+		else if (geom->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		  }
+		gaiaExport64 (ptr, x, GAIA_LITTLE_ENDIAN, endian_arch);	/* X - exterior ring */
+		ptr += 8;
+		gaiaExport64 (ptr, y, GAIA_LITTLE_ENDIAN, endian_arch);	/* Y - exterior ring */
+		ptr += 8;
+		if (n_coords > 2)
+		  {
+		      /* the third coordinate [Z or M] */
+		      if (coord_dims == GAIA_XY_Z || coord_dims == GAIA_XY_Z_M)
+			  gaiaExport64 (ptr, z, GAIA_LITTLE_ENDIAN,
+					endian_arch);
+		      else
+			  gaiaExport64 (ptr, m, GAIA_LITTLE_ENDIAN,
+					endian_arch);
+		      ptr += 8;
+		  }
+		if (n_coords > 3)
+		  {
+		      /* the fourth coordinate [M] */
+		      gaiaExport64 (ptr, m, GAIA_LITTLE_ENDIAN, endian_arch);
+		      ptr += 8;
+		  }
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      z = 0.0;
+		      m = 0.0;
+		      if (geom->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else if (geom->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      gaiaExport64 (ptr, x, GAIA_LITTLE_ENDIAN, endian_arch);	/* X - interior ring */
+		      ptr += 8;
+		      gaiaExport64 (ptr, y, GAIA_LITTLE_ENDIAN, endian_arch);	/* Y - interior ring */
+		      ptr += 8;
+		      if (n_coords > 2)
+			{
+			    /* the third coordinate [Z or M]; defaulting to ZERO */
+			    if (coord_dims == GAIA_XY_Z
+				|| coord_dims == GAIA_XY_Z_M)
+				gaiaExport64 (ptr, z, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    else
+				gaiaExport64 (ptr, m, GAIA_LITTLE_ENDIAN,
+					      endian_arch);
+			    ptr += 8;
+			}
+		      if (n_coords > 3)
+			{
+			    /* the fourth coordinate [M] */
+			    gaiaExport64 (ptr, m, GAIA_LITTLE_ENDIAN,
+					  endian_arch);
+			    ptr += 8;
+			}
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+}
diff --git a/libspatialite/src/gaiageo/gg_wkt.c b/libspatialite/libspatialite-3.0.1/src/gaiageo/gg_wkt.c
similarity index 100%
copy from libspatialite/src/gaiageo/gg_wkt.c
copy to libspatialite/libspatialite-3.0.1/src/gaiageo/gg_wkt.c
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/Makefile.am b/libspatialite/libspatialite-3.0.1/src/headers/Makefile.am
new file mode 100644
index 0000000..5355ae0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/Makefile.am
@@ -0,0 +1,13 @@
+
+nobase_include_HEADERS = spatialite.h \
+	spatialite/gaiaexif.h \
+	spatialite/gaiaaux.h \
+	spatialite/gaiageo.h \
+	spatialite/gg_const.h \
+	spatialite/gg_structs.h \
+	spatialite/gg_core.h \
+	spatialite/gg_mbr.h \
+	spatialite/gg_formats.h \
+	spatialite/gg_dynamic.h \
+	spatialite/gg_advanced.h \
+	spatialite/spatialite.h
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/Makefile.in b/libspatialite/libspatialite-3.0.1/src/headers/Makefile.in
new file mode 100644
index 0000000..e4445bc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/Makefile.in
@@ -0,0 +1,477 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/headers
+DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(nobase_include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+nobase_include_HEADERS = spatialite.h \
+	spatialite/gaiaexif.h \
+	spatialite/gaiaaux.h \
+	spatialite/gaiageo.h \
+	spatialite/gg_const.h \
+	spatialite/gg_structs.h \
+	spatialite/gg_core.h \
+	spatialite/gg_mbr.h \
+	spatialite/gg_formats.h \
+	spatialite/gg_dynamic.h \
+	spatialite/gg_advanced.h \
+	spatialite/spatialite.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/headers/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/headers/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-nobase_includeHEADERS: $(nobase_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
+	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	$(am__nobase_list) | while read dir files; do \
+	  xfiles=; for file in $$files; do \
+	    if test -f "$$file"; then xfiles="$$xfiles $$file"; \
+	    else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
+	  test -z "$$xfiles" || { \
+	    test "x$$dir" = x. || { \
+	      echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \
+	      $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \
+	    echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \
+	    $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \
+	done
+
+uninstall-nobase_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nobase_includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nobase_includeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool ctags distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-nobase_includeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-nobase_includeHEADERS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite.h
new file mode 100644
index 0000000..95aabea
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite.h
@@ -0,0 +1,360 @@
+/* 
+ spatialite.h -- Gaia spatial support for SQLite 
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+/**
+ \file spatialite.h
+
+ Main SpatiaLite header file
+ */
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#ifdef DLL_EXPORT
+#define SPATIALITE_DECLARE __declspec(dllexport)
+#else
+#define SPATIALITE_DECLARE extern
+#endif
+#endif
+
+#ifndef _SPATIALITE_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _SPATIALITE_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ Return the current library version.
+ */
+    SPATIALITE_DECLARE const char *spatialite_version (void);
+
+/**
+ Initializes the library. 
+
+ \param verbose if TRUE a short start-up message is shown on stderr
+
+ \note You absolutely must invoke this function before attempting to perform
+ any other SpatiaLite's call.
+
+ */
+    SPATIALITE_DECLARE void spatialite_init (int verbose);
+
+    /**
+     Cleanup spatialite 
+     
+     This function performs general cleanup, essentially undoing the effect
+     of spatialite_init().
+     
+     \sa spatialite_init
+    */
+    SPATIALITE_DECLARE void spatialite_cleanup ();
+
+/**
+ Dumps a full geometry-table into an external Shapefile
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param column the name of the geometry column
+ \param shp_path pathname of the Shapefile to be exported (no suffix) 
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param geom_type "POINT", "LINESTRING", "POLYGON", "MULTIPOLYGON" or NULL
+ \param verbose if TRUE a short report is shown on stderr
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int dump_shapefile (sqlite3 * sqlite, char *table,
+					   char *column, char *shp_path,
+					   char *charset, char *geom_type,
+					   int verbose, int *rows,
+					   char *err_msg);
+
+/**
+ Loads an external Shapefile into a newly created table
+
+ \param sqlite handle to current DB connection
+ \param shp_path pathname of the Shapefile to be imported (no suffix) 
+ \param table the name of the table to be created
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param srid the SRID to be set for Geometries
+ \param column the name of the geometry column
+ \param coerce2d if TRUE any Geometry will be casted to 2D [XY]
+ \param compressed if TRUE compressed Geometries will be created
+ \param verbose if TRUE a short report is shown on stderr
+ \param spatial_index if TRUE an R*Tree Spatial Index will be created
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int load_shapefile (sqlite3 * sqlite, char *shp_path,
+					   char *table, char *charset, int srid,
+					   char *column, int coerce2d,
+					   int compressed, int verbose,
+					   int spatial_index, int *rows,
+					   char *err_msg);
+
+/**
+ Loads an external DBF file into a newly created table
+
+ \param sqlite handle to current DB connection
+ \param dbf_path pathname of the DBF file to be imported
+ \param table the name of the table to be created
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param verbose if TRUE a short report is shown on stderr
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int load_dbf (sqlite3 * sqlite, char *dbf_path,
+				     char *table, char *charset, int verbose,
+				     int *rows, char *err_msg);
+
+/**
+ Dumps a full table into an external DBF file
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param dbf_path pathname of the DBF to be exported 
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int dump_dbf (sqlite3 * sqlite, char *table,
+				     char *dbf_path, char *charset,
+				     char *err_msg);
+
+/**
+ Loads an external spreadsheet (.xls) file into a newly created table
+
+ \param sqlite handle to current DB connection
+ \param path pathname of the spreadsheet file to be imported
+ \param table the name of the table to be created
+ \param worksheetIndex the index identifying the worksheet to be imported
+ \param first_titles if TRUE the first line is assumed to contain column names
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int load_XL (sqlite3 * sqlite, const char *path,
+				    const char *table,
+				    unsigned int worksheetIndex,
+				    int first_titles, unsigned int *rows,
+				    char *err_msg);
+
+/**
+ A portable replacement for C99 round()
+
+ \param value a double value
+
+ \return the nearest integeral value
+ */
+    SPATIALITE_DECLARE double math_round (double value);
+
+/**
+ A portable replacement for C99 llabs()
+
+ \param value a 64 bit integer value
+
+ \return the corresponding absolute value
+ */
+    SPATIALITE_DECLARE sqlite3_int64 math_llabs (sqlite3_int64 value);
+
+/**
+ Inserts the inlined EPSG dataset into the "spatial_ref_sys" table
+
+ \param sqlite handle to current DB connection
+ \param verbose if TRUE a short report is shown on stderr
+
+ \return 0 on failure, any other value on success
+
+ \note this function is internally invoked by the SQL function 
+  InitSpatialMetadata(), and is not usually intended for direct use.
+ */
+    SPATIALITE_DECLARE int spatial_ref_sys_init (sqlite3 * sqlite, int verbose);
+
+/**
+ Checks if a column is actually defined into the given table
+
+ \param sqlite handle to current DB connection
+ \param table the table to be checked
+ \param column the column to be checked
+
+ \return 0 on success, any other value on success
+
+ \note internally used to detect if some KML attribute defaults to a constant value
+ */
+    SPATIALITE_DECLARE int
+	is_kml_constant (sqlite3 * sqlite, char *table, char *column);
+
+/**
+ Dumps a full geometry-table into an external KML file
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param geom_col the name of the geometry column
+ \param kml_path pathname of the KML file to be exported 
+ \param name_col column to be used for KML "name" (may be null)
+ \param desc_col column to be used for KML "description" (may be null)
+ \param precision number of decimal digits for coordinates
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int dump_kml (sqlite3 * sqlite, char *table,
+				     char *geom_col, char *kml_path,
+				     char *name_col, char *desc_col,
+				     int precision);
+
+/**
+ Checks for duplicated rows into the same table
+
+ \param sqlite handle to current DB connection
+ \param table name of the table to be checked
+ \param dupl_count on completion will contain the number of duplicated rows found
+
+ \sa remove_duplicated_rows
+ \note two (or more) rows are assumed to be duplicated if any column
+
+ value (excluding any Primary Key column) is exacly the same
+ */
+    SPATIALITE_DECLARE void check_duplicated_rows (sqlite3 * sqlite,
+						   char *table,
+						   int *dupl_count);
+
+/**
+ Remove duplicated rows from a table
+
+ \param sqlite handle to current DB connection
+ \param table name of the table to be cleaned
+
+ \sa check_duplicated_rows
+
+ \note when two (or more) duplicated rows exist, only the first occurence
+ will be preserved, then deleting any further occurrence.
+ */
+    SPATIALITE_DECLARE void remove_duplicated_rows (sqlite3 * sqlite,
+						    char *table);
+
+/**
+ Creates a derived table surely containing elementary Geometries
+
+ \param sqlite handle to current DB connection
+ \param inTable name of the input table 
+ \param geometry name of the Geometry column
+ \param outTable name of the output table to be created
+ \param pKey name of the Primary Key column in the output table
+ \param multiId name of the column identifying origins in the output table
+
+ \note if the input table contains some kind of complex Geometry
+ (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON or GEOMETRYCOLLECTION),
+ then many rows are inserted into the output table: each single 
+ row will contain the same attributes and an elementaty Geometry.
+ All the rows created by expanding the same input row will expose
+ the same value in the "multiId" column.
+ */
+    SPATIALITE_DECLARE void elementary_geometries (sqlite3 * sqlite,
+						   char *inTable,
+						   char *geometry,
+						   char *outTable, char *pKey,
+						   char *multiId);
+
+/**
+ Dumps a full geometry-table into an external GeoJSON file
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param geom_col the name of the geometry column
+ \param outfile_path pathname for the GeoJSON file to be written to
+ \param precision number of decimal digits for coordinates
+ \param option the format to use for output
+
+ \note valid values for option are:
+   - 0 no option
+   - 1 GeoJSON MBR
+   - 2 GeoJSON Short CRS (e.g EPSG:4326)
+   - 3 MBR + Short CRS
+   - 4 GeoJSON Long CRS (e.g urn:ogc:def:crs:EPSG::4326)
+   - 5 MBR + Long CRS
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int dump_geojson (sqlite3 * sqlite, char *table,
+					 char *geom_col, char *outfile_path,
+					 int precision, int option);
+
+/**
+ Updates the LAYER_STATICS metadata table
+
+ \param sqlite handle to current DB connection
+ \param table name of the table to be processed
+ \param column name of the geometry to be processed
+
+ \note this function will explore the given table/geometry determining
+ the number of rows and the full layer extent; a corresponding table/geometry
+ entry is expected to be already declared in the GEOMETRY_COLUMNS table.
+ These informations will be permanently stored into the LAYER_STATISTICS
+ table; if such table does not yet exists will be implicitly created.
+   - if table is NULL, any entry found within GEOMETRY_COLUMNS
+     will be processed.
+   - if table is not NULL and column is NULL, any geometry
+     belonging to the given table will be processed.
+   - if both table and column are not NULL, then only the
+     given entry will be processed.
+
+ \return 0 on failure, the total count of processed entries on success
+ */
+    SPATIALITE_DECLARE int update_layer_statistics (sqlite3 * sqlite,
+						    const char *table,
+						    const char *column);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _SPATIALITE_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiaaux.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiaaux.h
new file mode 100644
index 0000000..aff9458
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiaaux.h
@@ -0,0 +1,250 @@
+/* 
+ gaiaaux.h -- Gaia common utility functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+/**
+ \file gaiaaux.h
+
+ Auxiliary/helper functions
+ */
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#ifdef DLL_EXPORT
+#define GAIAAUX_DECLARE __declspec(dllexport)
+#else
+#define GAIAAUX_DECLARE extern
+#endif
+#endif
+
+#ifndef _GAIAAUX_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GAIAAUX_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* constants */
+/** SQL single quoted string (text constant) */
+#define GAIA_SQL_SINGLE_QUOTE	1001
+/** SQL double quoted string (SQL name) */
+#define GAIA_SQL_DOUBLE_QUOTE	1002
+
+/* function prototipes */
+
+/**
+ Retrieves the Locale Charset
+
+ \return the GNU ICONV name identifying the locale charset
+ */
+    GAIAAUX_DECLARE const char *gaiaGetLocaleCharset (void);
+
+/**
+ Converts a text string from one charset to another
+
+ \param buf the text string to be converted
+ \param fromCs the GNU ICONV name identifying the input charset
+ \param toCs the GNU ICONV name identifying the output charset
+
+ \return 0 on failure, any other value on success.
+
+ \note this function uses an internal buffer limited to 64KB;
+ so it's not safe passing extremely huge-sized text string.
+ */
+    GAIAAUX_DECLARE int gaiaConvertCharset (char **buf, const char *fromCs,
+					    const char *toCs);
+
+/**
+ Creates a persistent UTF8 converter object
+
+ \param fromCS the GNU ICONV name identifying the input charset
+
+ \return the handle of the converter object, or NULL on failure
+
+ \sa gaiaFreeUTF8Converter
+
+ \note you must properly destroy the converter object 
+ when it isn't any longer used.
+ */
+    GAIAAUX_DECLARE void *gaiaCreateUTF8Converter (const char *fromCS);
+
+/**
+ Destroys an UTF8 converter object
+
+ \param cvtCS the handle identifying the UTF8 convert object  
+ (returned by a previous call to gaiaCreateUTF8Converter).
+
+ \sa gaiaCreateUTF8Converter
+ */
+    GAIAAUX_DECLARE void gaiaFreeUTF8Converter (void *cvtCS);
+
+/**
+ Converts a text string to UTF8
+
+ \param cvtCS the handle identifying the UTF8 convert object  
+ (returned by a previous call to gaiaCreateUTF8Converter).
+ \param buf the input text string
+ \param len length (in bytes) of input string
+ \param err on completion will contain 0 on success, any other value on failure
+
+ \return the null-terminated UTF8 encoded string: NULL on failure
+
+ \sa gaiaCreateUTF8Converter, gaiaFreeUTF8Converter
+ 
+ \note this function can safely handle strings of arbitrary length,
+ and will return the converted string into a dynamically allocated buffer 
+ created by malloc(). 
+ You are required to explicitly free() any string returned by this function.
+ */
+    GAIAAUX_DECLARE char *gaiaConvertToUTF8 (void *cvtCS, const char *buf,
+					     int len, int *err);
+
+/**
+ Checks if a name is a reserved SQLite name
+
+ \param name the name to be checked
+
+ \return 0 if no: any other value if yes
+
+ \sa gaiaIsReservedSqlName, gaiaIllegalSqlName
+ */
+    GAIAAUX_DECLARE int gaiaIsReservedSqliteName (const char *name);
+
+/**
+ Checks if a name is a reserved SQL name
+
+ \param name the name to be checked
+
+ \return 0 if no: any other value if yes
+
+ \sa gaiaIsReservedSqliteName, gaiaIllegalSqlName
+ */
+    GAIAAUX_DECLARE int gaiaIsReservedSqlName (const char *name);
+
+/**
+ Checks if a name is an illegal SQL name
+
+ \param name the name to be checked
+
+ \return 0 if no: any other value if yes
+
+ \sa gaiaIsReservedSqliteName, gaiaIsReservedSqlName
+ */
+    GAIAAUX_DECLARE int gaiaIllegalSqlName (const char *name);
+
+/**
+ Properly formats an SQL text constant
+
+ \param value the text string to be formatted
+
+ \return the formatted string: NULL on failure
+
+ \sa gaiaQuotedSql
+ 
+ \note this function simply is a convenience method corresponding to: 
+ gaiaQuotedSQL(value, GAIA_SQL_SINGLE_QUOTE);
+ 
+ \remark passing a string like "Sant'Andrea" will return 'Sant''Andrea'
+ */
+    GAIAAUX_DECLARE char *gaiaSingleQuotedSql (const char *value);
+
+/**
+ Properly formats an SQL name
+
+ \param value the SQL name to be formatted
+
+ \return the formatted string: NULL on failure
+
+ \sa gaiaQuotedSql
+ 
+ \note this function simply is a convenience method corresponding to: 
+ gaiaQuotedSQL(value, GAIA_SQL_DOUBLE_QUOTE);
+
+ \remark passing a string like "Sant\"Andrea" will return "Sant""Andrea"
+ */
+    GAIAAUX_DECLARE char *gaiaDoubleQuotedSql (const char *value);
+
+/**
+ Properly formats an SQL generic string
+
+ \param value the string to be formatted
+ \param quote GAIA_SQL_SINGLE_QUOTE or GAIA_SQL_DOUBLE_QUOTE
+
+ \return the formatted string: NULL on failure
+
+ \sa gaiaSingleQuotedSql, gaiaDoubleQuotedSql
+
+ \note this function can safely handle strings of arbitrary length,
+ and will return the formatted string into a dynamically allocated buffer 
+ created by malloc(). 
+ You are required to explicitly free() any string returned by this function.
+ */
+    GAIAAUX_DECLARE char *gaiaQuotedSql (const char *value, int quote);
+
+/*
+/ DEPRECATED FUNCTION: gaiaCleanSqlString()
+/ this function must not be used for any new project
+/ it's still maintained for backward compatibility,
+/ but will be probably removed in future versions
+*/
+
+/**
+ deprecated function
+
+ \param value the string to be formatted
+
+ \sa gaiaQuotedSql
+
+ \note this function is still supported simply for backward compatibility.
+ it's intrinsically unsafe (passing huge strings potentially leads to 
+ buffer overflows) and you are strongly encouraged to use gaiaQuotedSql()
+ as a safest replacement.
+ */
+    GAIAAUX_DECLARE void gaiaCleanSqlString (char *value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GAIAAUX_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiaexif.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiaexif.h
new file mode 100644
index 0000000..d5db951
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiaexif.h
@@ -0,0 +1,646 @@
+/* 
+ gaiaexif.h -- Gaia common EXIF Metadata reading functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+/**
+ \file gaiaexif.h
+
+ EXIF/image: supporting functions and constants
+ */
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#ifdef DLL_EXPORT
+#define GAIAEXIF_DECLARE __declspec(dllexport)
+#else
+#define GAIAEXIF_DECLARE extern
+#endif
+#endif
+
+#ifndef _GAIAEXIF_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GAIAEXIF_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* constants used for BLOB value types */
+/** generic hexadecimal BLOB */
+#define GAIA_HEX_BLOB		0
+/** this BLOB does actually contain a GIF image */
+#define GAIA_GIF_BLOB		1
+/** this BLOB does actually containt a PNG image */
+#define GAIA_PNG_BLOB		2
+/** this BLOB does actually contain a generic JPEG image */
+#define GAIA_JPEG_BLOB		3
+/** this BLOB does actually contain a JPEG-EXIF image */
+#define GAIA_EXIF_BLOB		4
+/** this BLOB does actually contain a JPEG-EXIF image including GPS data */
+#define GAIA_EXIF_GPS_BLOB	5
+/** this BLOB does actually contain a ZIP compressed file */
+#define GAIA_ZIP_BLOB		6
+/** this BLOB does actually contain a PDF document */
+#define GAIA_PDF_BLOB		7
+/** this BLOB does actually contain a SpatiaLite Geometry */
+#define GAIA_GEOMETRY_BLOB	8
+/** this BLOB does actually contain a TIFF image */
+#define GAIA_TIFF_BLOB		9
+
+/* constants used for EXIF value types */
+/** unrecognized EXIF value */
+#define GAIA_EXIF_NONE		0
+/** EXIF value of the BYTE type */
+#define GAIA_EXIF_BYTE		1
+/** EXIF value of the SHORT type */
+#define GAIA_EXIF_SHORT		2
+/** EXIF value of the STRING type */
+#define GAIA_EXIF_STRING	3
+/** EXIF value of the LONG type */
+#define GAIA_EXIF_LONG		4
+/** EXIF value of the RATIONAL type */
+#define GAIA_EXIF_RATIONAL	5
+/** EXIF value of the SLONG type */
+#define GAIA_EXIF_SLONG		9
+/** EXIF value of the SRATIONAL type */
+#define GAIA_EXIF_SRATIONAL	10
+
+/**
+ Container for an EXIF tag
+ */
+    typedef struct gaiaExifTagStruct
+    {
+/* an EXIF TAG */
+	/** GPS data included (0/1) */
+	char Gps;
+	/** EXIF tag ID */
+	unsigned short TagId;
+	/** EXIF value type */
+	unsigned short Type;
+	/** number of values */
+	unsigned short Count;
+	/** tag offset [big- little-endian encoded] */
+	unsigned char TagOffset[4];
+	/** array of BYTE values */
+	unsigned char *ByteValue;
+	/** array of STRING values */
+	char *StringValue;
+	/** array of SHORT values */
+	unsigned short *ShortValues;
+	/** array of LONG values ] */
+	unsigned int *LongValues;
+	/** array of RATIONAL values [numerators] */
+	unsigned int *LongRationals1;
+	/** array of RATIONAL values [denominators] */
+	unsigned int *LongRationals2;
+	/** array of Signed SHORT values */
+	short *SignedShortValues;
+	/** array of Signed LONG values */
+	int *SignedLongValues;
+	/** array of Signed RATIONAL values [numerators] */
+	int *SignedLongRationals1;
+	/** array of Signed RATIONAL values [denominators] */
+	int *SignedLongRationals2;
+	/** array of FLOAT values */
+	float *FloatValues;
+	/** array of DOUBLE values */
+	double *DoubleValues;
+	/** pointer to next item into the linked list */
+	struct gaiaExifTagStruct *Next;
+    } gaiaExifTag;
+/**
+ Typedef for EXIF tag structure.
+
+ \sa gaiaExifTagStruct
+ */
+    typedef gaiaExifTag *gaiaExifTagPtr;
+
+/**
+ Container for a list of EXIF tags
+ */
+    typedef struct gaiaExifTagListStruct
+    {
+/* an EXIF TAG LIST */
+	/** pointer to first item into the linked list */
+	gaiaExifTagPtr First;
+	/** pointer to the last item into the linked list */
+	gaiaExifTagPtr Last;
+	/** number of items */
+	int NumTags;
+	/** an array of pointers to items */
+	gaiaExifTagPtr *TagsArray;
+    } gaiaExifTagList;
+/**
+ Typedef for EXIF tag structure
+
+ \sa gaiaExifTagListStruct
+ */
+    typedef gaiaExifTagList *gaiaExifTagListPtr;
+
+/* function prototipes */
+
+/**
+ Creates a list of EXIF tags by parsing a BLOB of the JPEG-EXIF type
+
+ \param blob the BLOB to be parsed
+ \param size the BLOB size (in bytes)
+
+ \return a list of EXIF tags: or NULL if any error is encountered
+
+ \sa gaiaExifTagsFree
+
+ \note you must explicitly destroy the list when it's any longer used.
+ */
+    GAIAEXIF_DECLARE gaiaExifTagListPtr gaiaGetExifTags (const unsigned char
+							 *blob, int size);
+
+/**
+ Destroy a list of EXIF tags
+
+ \param tag_list the list to be destroied
+
+ \sa gaiaGetExifTags
+
+ \note the pointer passed to this function must be one returned by a
+ previous call to gaiaGetExifTags
+ */
+    GAIAEXIF_DECLARE void gaiaExifTagsFree (gaiaExifTagListPtr tag_list);
+
+/**
+ Return the total number of EXIF tags into the list
+
+ \param tag_list pointer to an EXIF tag list.
+
+ \return the EXIF tag count.
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
+    GAIAEXIF_DECLARE int gaiaGetExifTagsCount (gaiaExifTagListPtr tag_list);
+
+/**
+ Retrieves an EXIF tag by its relative position into the list
+
+ \param tag_list pointer to an EXIF tag list.
+ \param pos relative item position [first item is 0]
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree, gaiaExifTagsCount
+ */
+    GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByPos (gaiaExifTagListPtr
+							 tag_list,
+							 const int pos);
+
+/**
+ Return the total number of EXIF tags into the list
+
+ \param tag_list pointer to an EXIF tag list.
+
+ \return the EXIF tag count.
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
+    GAIAEXIF_DECLARE int gaiaGetExifTagsCount (gaiaExifTagListPtr tag_list);
+
+/**
+ Retrieves an EXIF tag by its Tag ID
+
+ \param tag_list pointer to an EXIF tag list.
+ \param tag_id the Tag ID to be found
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
+    GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagById (const gaiaExifTagListPtr
+							tag_list,
+							const unsigned short
+							tag_id);
+
+/**
+ Retrieves an EXIF-GPS tag by its Tag ID
+
+ \param tag_list pointer to an EXIF tag list.
+ \param tag_id the GPS Tag ID to be found
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
+    GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifGpsTagById (const
+							   gaiaExifTagListPtr
+							   tag_list,
+							   const unsigned short
+							   tag_id);
+
+/**
+ Retrieves an EXIF tag by its name
+
+ \param tag_list pointer to an EXIF tag list.
+ \param tag_name the Tag Name to be found
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
+    GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByName (const
+							  gaiaExifTagListPtr
+							  tag_list,
+							  const char *tag_name);
+
+/**
+ Return the Tag ID from an EXIF tag
+
+ \param tag pointer to an EXIF tag
+ 
+ \return the Tag ID
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
+    GAIAEXIF_DECLARE unsigned short gaiaExifTagGetId (const gaiaExifTagPtr tag);
+
+/**
+ Return the Tag Name from an EXIF tag
+
+ \param tag pointer to an EXIF tag
+ \param tag_name receiving buffer: the Tag Name will be copied here
+ \param len length of the receiving buffer
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
+    GAIAEXIF_DECLARE void gaiaExifTagGetName (const gaiaExifTagPtr tag,
+					      char *tag_name, int len);
+
+/**
+ Checks if an EXIF tag actually is an EXIF-GPS tag
+
+ \param tag pointer to an EXIF tag
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
+    GAIAEXIF_DECLARE int gaiaIsExifGpsTag (const gaiaExifTagPtr tag);
+
+/**
+ Return the value type for an EXIF tag
+
+ \param tag pointer to an EXIF tag
+
+ \return the value type: one of GAIA_EXIF_NONE, GAIA_EXIF_BYTE,
+ GAIA_EXIF_SHORT, GAIA_EXIF_STRING, GAIA_EXIF_LONG, GAIA_EXIF_RATIONAL,
+ GAIA_EXIF_SLONG, GAIA_EXIF_SRATIONAL
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
+    GAIAEXIF_DECLARE unsigned short gaiaExifTagGetValueType (const
+							     gaiaExifTagPtr
+							     tag);
+
+/**
+ Return the total count of values from an EXIF tag
+ 
+ \param tag pointer to an EXIF tag
+
+ \return the number of available values
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
+    GAIAEXIF_DECLARE unsigned short gaiaExifTagGetNumValues (const
+							     gaiaExifTagPtr
+							     tag);
+
+/**
+ Return a BYTE value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the BYTE value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE unsigned char gaiaExifTagGetByteValue (const gaiaExifTagPtr
+							    tag, const int ind,
+							    int *ok);
+
+/**
+ Return a STRING value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param str receiving buffer: the STRING value will be copied here.
+ \param len length of the receiving buffer
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE void gaiaExifTagGetStringValue (const gaiaExifTagPtr tag,
+						     char *str, int len,
+						     int *ok);
+
+/**
+ Return a SHORT value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the SHORT value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE unsigned short gaiaExifTagGetShortValue (const
+							      gaiaExifTagPtr
+							      tag,
+							      const int ind,
+							      int *ok);
+
+/**
+ Return a LONG value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the LONG value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE unsigned int gaiaExifTagGetLongValue (const gaiaExifTagPtr
+							   tag, const int ind,
+							   int *ok);
+
+/**
+ Return a RATIONAL [numerator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the RATIONAL [numerator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational1Value (const
+								gaiaExifTagPtr
+								tag,
+								const int ind,
+								int *ok);
+
+/**
+ Return a RATIONAL [denominator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the RATIONAL [denominator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational2Value (const
+								gaiaExifTagPtr
+								tag,
+								const int ind,
+								int *ok);
+
+/**
+ Return a RATIONAL value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the RATIONAL value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE double gaiaExifTagGetRationalValue (const gaiaExifTagPtr
+							 tag, const int ind,
+							 int *ok);
+
+/**
+ Return a Signed SHORT value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the Signed SHORT value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE short gaiaExifTagGetSignedShortValue (const gaiaExifTagPtr
+							   tag, const int ind,
+							   int *ok);
+
+/**
+ Return a Signed LONG value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the Signed LONG value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE int gaiaExifTagGetSignedLongValue (const gaiaExifTagPtr
+							tag, const int ind,
+							int *ok);
+
+/**
+ Return a SRATIONAL [numerator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the SRATIONAL [numerator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational1Value (const
+							     gaiaExifTagPtr tag,
+							     const int ind,
+							     int *ok);
+
+/**
+ Return a SRATIONAL [denominator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the SRATIONAL [denominator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational2Value (const
+							     gaiaExifTagPtr tag,
+							     const int ind,
+							     int *ok);
+
+/**
+ Return a Signed RATIONAL value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the Signed RATIONAL value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE double gaiaExifTagGetSignedRationalValue (const
+							       gaiaExifTagPtr
+							       tag,
+							       const int ind,
+							       int *ok);
+
+/**
+ Return a FLOAT value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the FLOAT value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE float gaiaExifTagGetFloatValue (const gaiaExifTagPtr tag,
+						     const int ind, int *ok);
+
+/**
+ Return a DOUBLE value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the DOUBLE value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
+    GAIAEXIF_DECLARE double gaiaExifTagGetDoubleValue (const gaiaExifTagPtr tag,
+						       const int ind, int *ok);
+
+/**
+ Return a human readable description from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param str receiving buffer: the STRING value will be copied here.
+ \param len length of the receiving buffer
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
+    GAIAEXIF_DECLARE void gaiaExifTagGetHumanReadable (const gaiaExifTagPtr tag,
+						       char *str, int len,
+						       int *ok);
+
+/**
+ Attempts to guess the actual content-type of some BLOB
+
+ \param blob the BLOB to be parsed 
+ \param size length of the BLOB (in bytes)
+
+ \return the BLOB type: one of GAIA_HEX_BLOB, GAIA_GIF_BLOB, GAIA_PNG_BLOB,
+ GAIA_JPEG_BLOB, GAIA_EXIF_BLOB, GAIA_EXIF_GPS_BLOB, GAIA_ZIP_BLOB,
+ GAIA_PDF_BLOB, GAIA_GEOMETRY_BLOB, GAIA_TIFF_BLOB
+ */
+    GAIAEXIF_DECLARE int gaiaGuessBlobType (const unsigned char *blob,
+					    int size);
+/**
+ Return longitude and latitude from an EXIF-GPS tag
+
+ \param blob the BLOB to be parsed 
+ \param size length of the BLOB (in bytes)
+ \param longitude on success will contain the longitude coordinate
+ \param latitude on success will contain the latitude coordinate
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaIsExifGpsTag
+ */
+    GAIAEXIF_DECLARE int gaiaGetGpsCoords (const unsigned char *blob, int size,
+					   double *longitude, double *latitude);
+/**
+ Return a text string representing DMS coordinates from an EXIF-GPS tag
+
+ \param blob the BLOB to be parsed 
+ \param size length of the BLOB (in bytes)
+ \param latlong receiving buffer: the text string will be copied here.
+ \param ll_size length of the receiving buffer
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaIsExifGpsTag
+ */
+    GAIAEXIF_DECLARE int gaiaGetGpsLatLong (const unsigned char *blob, int size,
+					    char *latlong, int ll_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GAIAEXIF_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiageo.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiageo.h
new file mode 100644
index 0000000..8bb752d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gaiageo.h
@@ -0,0 +1,76 @@
+/*
+ gaiageo.h -- Gaia common support for geometries
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Klaus Foerster klaus.foerster at svg.cc
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gaiageo.h
+
+ Geometry handling functions and constants 
+ */
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+/* stdio.h included for FILE objects. */
+#include <stdio.h>
+#ifdef DLL_EXPORT
+#define GAIAGEO_DECLARE __declspec(dllexport)
+#else
+#define GAIAGEO_DECLARE extern
+#endif
+#endif
+
+#ifndef _GAIAGEO_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GAIAGEO_H
+#endif
+
+#include "gg_const.h"
+#include "gg_structs.h"
+#include "gg_core.h"
+#include "gg_mbr.h"
+#include "gg_formats.h"
+#include "gg_dynamic.h"
+#include "gg_advanced.h"
+
+#endif /* _GAIAGEO_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_advanced.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_advanced.h
new file mode 100644
index 0000000..34b60c5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_advanced.h
@@ -0,0 +1,996 @@
+/*
+ gg_advanced.h -- Gaia common support for geometries: advanced
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_advanced.h
+
+ Geometry handling functions: advanced
+ */
+
+#ifndef _GG_ADVANCED_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_ADVANCED_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef OMIT_PROJ		/* including PROJ.4 */
+
+/**
+ Converts and angle from Radians into Degrees
+ \param rads the angle measured in Radians.
+ 
+ \return the angle measured in Degrees.
+
+ \sa gaiaDegsToRads
+
+ \remark \b PROJ.4 support required
+ */
+    GAIAGEO_DECLARE double gaiaRadsToDegs (double rads);
+
+/**
+ Converts and angle from Degrees into Radians
+ \param degs the angle measured in Degrees.
+
+ \return the angle measured in Radians.
+
+ \sa gaiaRadsToDegs
+
+ \remark \b PROJ.4 support required
+ */
+    GAIAGEO_DECLARE double gaiaDegsToRads (double degs);
+
+/**
+ Tansforms a Geometry object into a different Reference System
+ [aka Reprojection]
+ \param org pointer to input Geometry object.
+ \param proj_from geodetic parameters string [EPSG format] qualifying the
+ input Reference System
+ \param proj_to geodetic parameters string [EPSG format] qualifying the
+ output Reference System
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,  this including any Geometry returned by gaiaGeometryTransform()
+
+ \remark \b PROJ.4 support required
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaTransform (gaiaGeomCollPtr org,
+						   char *proj_from,
+						   char *proj_to);
+
+#endif				/* end including PROJ.4 */
+
+#ifndef OMIT_GEOS		/* including GEOS */
+
+/**
+ Resets the GEOS error and warning messages to an empty state
+
+ \sa gaiaGetGeosErrorMsg, gaiaGetGeosWarningMsg, gaiaSetGeosErrorMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void gaiaResetGeosMsg (void);
+
+/**
+ Return the latest GEOS error message (if any)
+
+ \return the latest GEOS error message: an empty string if no error was
+ previoysly found.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosWarningMsg, gaiaSetGeosErrorMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE const char *gaiaGetGeosErrorMsg (void);
+
+/**
+ Return the latest GEOS warning message (if any)
+
+ \return the latest GEOS warning message: an empty string if no warning was 
+ previoysly found.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosErrorMsg, gaiaSetGeosErrorMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE const char *gaiaGetGeosWarningMsg (void);
+
+/**
+ Set the current GEOS error message
+
+ \param msg the error message to be set.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosErrorMsg, gaiaGetGeosWarningMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void gaiaSetGeosErrorMsg (const char *msg);
+
+/**
+ Set the current GEOS warning message
+
+ \param msg the warning message to be set.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosErrorMsg, gaiaGetGeosWarningMsg,
+ gaiaSetGeosErrorMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void gaiaSetGeosWarningMsg (const char *msg);
+
+/**
+ Converts a Geometry object into a GEOS Geometry
+
+ \param gaia pointer to Geometry object
+
+ \return handle to GEOS Geometry
+ 
+ \sa gaiaFromGeos_XY, gaiaFromGeos_XYZ, gaiaFromGeos_XYM, gaiaFromGeos_XYZM
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void *gaiaToGeos (const gaiaGeomCollPtr gaia);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XY dims]
+
+ \param geos handle to GEOS Geometry
+
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XYZ, gaiaFromGeos_XYM, gaiaFromGeos_XYZM
+
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XY()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XY (const void *geos);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XYZ dims]
+
+ \param geos handle to GEOS Geometry
+    
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XY, gaiaFromGeos_XYM, gaiaFromGeos_XYZM
+ 
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XYZ()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZ (const void *geos);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XYM dims]
+
+ \param geos handle to GEOS Geometry
+    
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XY, gaiaFromGeos_XYZ, gaiaFromGeos_XYZM
+ 
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XYM()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYM (const void *geos);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XYZM dims]
+
+ \param geos handle to GEOS Geometry
+    
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XY, gaiaFromGeos_XYZ, gaiaFromGeos_XYM
+ 
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XYZM()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZM (const void *geos);
+
+/**
+ Checks if a Geometry object represents an OGC Simple Geometry
+
+ \param geom pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsClosed, gaiaIsRing, gaiaIsValid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsSimple (gaiaGeomCollPtr geom);
+
+/**
+ Checks if a Linestring object represents an OGC Closed Geometry
+
+ \param line pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsSimple, gaiaIsRing, gaiaIsValid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsClosed (gaiaLinestringPtr line);
+
+/**
+ Checks if a Linestring object represents an OGC Ring Geometry
+
+ \param line pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsSimple, gaiaIsClosed, gaiaIsValid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsRing (gaiaLinestringPtr line);
+
+/**
+ Checks if a Geometry object represents an OGC Valid Geometry
+
+ \param geom pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsSimple, gaiaIsClosed, gaiaIsRing
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsValid (gaiaGeomCollPtr geom);
+
+/**
+ Measures the total Length for a Geometry object
+
+ \param geom pointer to Geometry object
+ \param length on completion this variable will contain the measured length
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGeomCollArea, gaiaMeasureLength
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollLength (gaiaGeomCollPtr geom,
+					    double *length);
+/**
+ Measures the total Area for a Geometry object
+
+ \param geom pointer to Geometry object
+ \param area on completion this variable will contain the measured area
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGeomCollLength, gaiaMeasureArea
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollArea (gaiaGeomCollPtr geom, double *area);
+
+
+/**
+ Attempts to rearrange a generic Geometry object into a Polygon or MultiPolygon
+
+ \param geom the input Geometry object
+ \param force_multi if not set to 0, then an eventual Polygon will be 
+ returned casted to MultiPolygon
+
+ \return the pointer to newly created Geometry object representing a
+ Polygon or MultiPolygon Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaPolygonize()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaPolygonize (gaiaGeomCollPtr geom,
+						    int force_multi);
+/**
+ Spatial relationship evalution: Equals
+ 
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollDisjoint, gaiaGeomCollIntersects, gaiaGeomCollOverlaps,
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollEquals (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Disjoint
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollIntersects, gaiaGeomCollOverlaps,
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollDisjoint (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Intesects
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollOverlaps,
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollIntersects (gaiaGeomCollPtr geom1,
+						gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Overlaps
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollOverlaps (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Crosses
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCrosses (gaiaGeomCollPtr geom1,
+					     gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Contains
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollContains (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Within
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollContains, 
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollWithin (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Touches
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollContains, 
+ gaiaGeomCollWithin, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollTouches (gaiaGeomCollPtr geom1,
+					     gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Relate
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+ \param pattern intersection matrix pattern [DE-9IM]
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollContains, 
+ gaiaGeomCollWithin, gaiaGeomCollTouches
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollRelate (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2,
+					    const char *pattern);
+
+/**
+ Calculates the minimum distance intercurring between two Geometry objects
+
+ \param geom1 the first Geometry object 
+ \param geom2 the second Geometry object 
+ \param dist on completion this variable will contain the calculated distance
+
+ \return 0 on failuer: any other value on success.
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollDistance (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2,
+					      double *dist);
+
+/**
+ Spatial operator: Intersection
+                                              
+ \param geom1 the first Geometry object 
+ \param geom2 the second Geometry object 
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Intersection of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeometryUnion, gaiaGeometryDifference,
+ gaiaGeometrySymDifference, gaiaBoundary
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometryIntersection()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryIntersection (gaiaGeomCollPtr
+							      geom1,
+							      gaiaGeomCollPtr
+							      geom2);
+
+/**
+ Spatial operator: Union
+
+ \param geom1 the first Geometry object
+ \param geom2 the second Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Union of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaUnaryUnion
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometryUnion()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryUnion (gaiaGeomCollPtr geom1,
+						       gaiaGeomCollPtr geom2);
+
+/**
+ Spatial operator: Difference
+
+ \param geom1 the first Geometry object
+ \param geom2 the second Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Difference of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometryDifference()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryDifference (gaiaGeomCollPtr
+							    geom1,
+							    gaiaGeomCollPtr
+							    geom2);
+
+/**
+ Spatial operator: SymDifference
+
+ \param geom1 the first Geometry object
+ \param geom2 the second Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ geometry SymDifference of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometrySymDifference()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometrySymDifference (gaiaGeomCollPtr
+							       geom1,
+							       gaiaGeomCollPtr
+							       geom2);
+
+/**
+ Spatial operator: Boundary
+
+ \param geom the Geometry object to be evaluated
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Boundary of the input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaBoundary()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaBoundary (gaiaGeomCollPtr geom);
+
+/**
+ Spatial operator: Centroid
+
+ \param geom pointer to Geometry object.
+ \param x on completion this variable will contain the centroid X coordinate 
+ \param y on completion this variable will contain the centroid Y coordinate 
+ 
+ \return 0 on failure: any other value on success
+
+ \sa gaiaRingCentroid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCentroid (gaiaGeomCollPtr geom, double *x,
+					      double *y);
+
+/**
+ Spatial operator: PointOnSurface
+
+ \param geom pointer to Geometry object.
+ \param x on completion this variable will contain the Point X coordinate  
+ \param y on completion this variable will contain the Point Y coordinate
+ 
+ \return 0 on failure: any other value on success
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGetPointOnSurface (gaiaGeomCollPtr geom, double *x,
+					       double *y);
+
+/**
+ Spatial operator: Simplify
+
+ \param geom the input Geometry object
+ \param tolerance approximation threshold
+
+ \return the pointer to newly created Geometry object representing the
+ simplified Geometry [applying the Douglas-Peucker algorithm]: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeomCollSimplifyPreserveTopology
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeomCollSimplify()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollSimplify (gaiaGeomCollPtr geom,
+							  double tolerance);
+
+/**
+ Spatial operator: Simplify [preserving topology]
+
+ \param geom the input Geometry object
+ \param tolerance approximation threshold
+
+ \return the pointer to newly created Geometry object representing the
+ simplified Geometry [applying the Douglas-Peucker algorithm]: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeomCollSimplify
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeomCollSimplify()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaGeomCollSimplifyPreserveTopology (gaiaGeomCollPtr geom,
+					      double tolerance);
+
+/**
+ Spatial operator: ConvexHull
+
+ \param geom the input Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ ConvexHull of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaConvexHull()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaConvexHull (gaiaGeomCollPtr geom);
+
+/** 
+ Spatial operator: Buffer
+
+ \param geom the input Geometry object
+ \param radius the buffer's radius
+ \param points number of points (aka vertices) to be used in order to 
+ approximate a circular arc.
+
+ \return the pointer to newly created Geometry object representing the
+ Buffer of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeomCollBuffer()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollBuffer (gaiaGeomCollPtr geom,
+							double radius,
+							int points);
+
+#ifndef DOXYGEN_SHOULD_IGNORE_THIS
+#ifdef GEOS_ADVANCED
+#endif
+
+/**
+ Calculates the Hausdorff distance intercurring between two Geometry objects
+
+ \param geom1 pointer to first Geometry object
+ \param geom2 pointer to second Geometry object
+ \param dist on completion this variable will contain the calculated Hausdorff
+ distance 
+
+ \return 0 on failure: any other value on success.
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE int gaiaHausdorffDistance (gaiaGeomCollPtr geom1,
+					       gaiaGeomCollPtr geom2,
+					       double *dist);
+
+/**
+ Spatial operator: Offset Curve
+
+ \param geom the input Geometry object
+ \param radius the buffer's radius
+ \param points number of points (aka vertices) to be used in order to 
+ approximate a circular arc.
+ \param left_right if set to 1 the left-sided OffsetCurve will be returned;
+ otherwise the right-sided one.
+
+ \return the pointer to newly created Geometry object representing the
+ OffsetCurve of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaOffsetCurve()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaOffsetCurve (gaiaGeomCollPtr geom,
+						     double radius, int points,
+						     int left_right);
+
+/**
+ Spatial operator: Single Sided Buffer
+
+ \param geom the input Geometry object
+ \param radius the buffer's radius
+ \param points number of points (aka vertices) to be used in order to
+ approximate a circular arc.
+ \param left_right if set to 1 the left-sided Buffer will be returned;
+ otherwise the right-sided one.
+
+ \return the pointer to newly created Geometry object representing the
+ single-sided Buffer of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaSingleSidedBuffer()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSingleSidedBuffer (gaiaGeomCollPtr geom,
+							   double radius,
+							   int points,
+							   int left_right);
+
+/**
+ Spatial operator: Shared Paths
+
+ \param geom1 pointer to first Geometry object
+ \param geom2 pointer to second Geometry object
+
+ \return the pointer to newly created Geometry object representing any
+ Share Path common to both input geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaSharedPaths()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSharedPaths (gaiaGeomCollPtr geom1,
+						     gaiaGeomCollPtr geom2);
+
+/**
+ Spatial operator: Line Interpolate Point
+
+ \param ln_geom the input Geometry object [expected to be of lineal type]
+ \param fraction total length fraction [in the range 0.0 / 1.0]
+
+ \return the pointer to newly created Geometry object representing a Point
+ laying on the input Geometry and positioned at the given length fraction:
+ NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaLineInterpolatePoint()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineInterpolatePoint (gaiaGeomCollPtr
+							      ln_geom,
+							      double fraction);
+
+/**
+ Spatial operator: Line Substring
+
+ \param ln_geom the input Geometry object [expected to be of lineal type]
+ \param start_fraction substring start, expressed as total length fraction
+ [in the range 0.0 / 1.0]
+ \param end_fraction substring end, expressed as total length fraction
+
+ \return the pointer to newly created Geometry object representing a Linestring
+ laying on the input Geometry.
+ \n this Linestring will begin (and stop) at given total length fractions. 
+ NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaLineSubstring()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineSubstring (gaiaGeomCollPtr ln_geom,
+						       double start_fraction,
+						       double end_fraction);
+
+/**
+ Spatial operator: Shortest Line
+
+ \param geom1 pointer to the first Geometry object.
+ \param geom2 pointer to the second Geometry object.
+
+ \return the pointer to newly created Geometry object representing a Linestring;
+ NULL on failure.
+ \n the returned Linestring graphically represents the minimum distance 
+ intercurrinng between both input geometries.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaShortestLine()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaShortestLine (gaiaGeomCollPtr geom1,
+						      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial operator: Shortest Line
+
+ \param geom1 pointer to the first Geometry object.
+ \param geom2 pointer to the second Geometry object.
+ \param tolerance approximation factor
+
+ \return the pointer to newly created Geometry object; NULL on failure.
+ \n the returned Geometry represents the first input Geometry (nicely
+ \e snapped to the second input Geometry, whenever is possible).
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaShortestLine()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSnap (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2,
+					      double tolerance);
+
+/**
+ Spatial operator: Line Merge
+
+ \param geom pointer to input Geometry object.
+
+ \return the pointer to newly created Geometry object; NULL on failure.
+ \n if possible, this representing a reassembled Linestring or MultiLinestring.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaLineMerge()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineMerge (gaiaGeomCollPtr geom);
+
+/**
+ Spatial operator: Unary Union
+
+ \param geom the input Geometry object.
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+ \n this function is the same as gaiaGeometryUnion, except in that this
+ works internally to the input Geometry itself.
+ NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeometryUnion
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaUnaryUnion()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaUnaryUnion (gaiaGeomCollPtr geom);
+
+/**
+ Determines the location of the closest Point on Linestring to the given Point
+
+ \param ln_geom pointer to first input Geometry object [expected to be of
+ the lineal type].
+ \param pt_geom pointer to second input Geometry object [expected to be a
+ Point].
+
+ \return the fraction [in the range 0.0 / 1.0] of ln_geom total length
+ where the closest Point to pt_geom lays.
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE double gaiaLineLocatePoint (gaiaGeomCollPtr ln_geom,
+						gaiaGeomCollPtr pt_geom);
+
+/** 
+ Topology check: test if a Geometry covers another one
+
+ \param geom1 pointer to first input Geometry object.
+ \param geom2 pointer to second input Geometry object.
+
+ \return 0 if false; any other value if geom1 \e spatially \e covers geom2.
+
+ \sa gaiaGeomCollCoveredBy
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCovers (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2);
+
+/**
+ Topology check: test if a Geometry is covered by another one
+                                            
+ \param geom1 pointer to first input Geometry object.
+ \param geom2 pointer to second input Geometry object.
+                                               
+ \return 0 if false; any other value if geom2 is \e spatially \e covered \e by
+ geom1.
+
+ \sa gaiaGeomCollCovers
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCoveredBy (gaiaGeomCollPtr geom1,
+					       gaiaGeomCollPtr geom2);
+
+#endif				/* end GEOS advanced and experimental features */
+
+#endif				/* end including GEOS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_ADVANCED_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_const.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_const.h
new file mode 100644
index 0000000..bc88fb1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_const.h
@@ -0,0 +1,515 @@
+/*
+ gg_const.h -- Gaia common support for geometries: constants
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Klaus Foerster klaus.foerster at svg.cc
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_const.h
+
+ Geometry constants and macros
+ */
+
+#ifndef _GG_CONST_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_CONST_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* constant values for generic geometry classes */
+
+/** WKT parser: unknown Geometry type */
+#define GAIA_TYPE_NONE		0
+/** WKT parser: Point Geometry type */
+#define GAIA_TYPE_POINT		1
+/** WKT parser: Linestring Geometry type */
+#define GAIA_TYPE_LINESTRING	2
+/** WKT parser: Polygon Geometry type */
+#define GAIA_TYPE_POLYGON	3
+
+/* constants that defines byte storage order  */
+/** Big-Endian marker */
+#define GAIA_BIG_ENDIAN		0
+/** Little-Endian marker */
+#define GAIA_LITTLE_ENDIAN	1
+
+/* constants that defines special markers used for encoding of SpatiaLite internal BLOB geometries  */
+/** BLOB-Geometry internal marker: START */
+#define GAIA_MARK_START		0x00
+/** BLOB-Geometry internal marker: END */
+#define GAIA_MARK_END		0xFE
+/** BLOB-Geometry internal marker: MBR */
+#define GAIA_MARK_MBR		0x7C
+/** BLOB-Geometry internal marker: ENTITY */
+#define GAIA_MARK_ENTITY	0x69
+
+/* constants that defines GEOMETRY CLASSes */
+/** BLOB-Geometry CLASS: unknown */
+#define GAIA_UNKNOWN			0
+/** BLOB-Geometry CLASS: POINT */
+#define GAIA_POINT			1
+/** BLOB-Geometry CLASS: LINESTRING */
+#define GAIA_LINESTRING			2
+/** BLOB-Geometry CLASS: POLYGON */
+#define GAIA_POLYGON			3
+/** BLOB-Geometry CLASS: MULTIPOINT */
+#define GAIA_MULTIPOINT			4
+/** BLOB-Geometry CLASS: MULTILINESTRING */
+#define GAIA_MULTILINESTRING		5
+/** BLOB-Geometry CLASS: MULTIPOLYGON */
+#define GAIA_MULTIPOLYGON		6
+#define GAIA_MULTIPOLYGON		6
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION */
+#define GAIA_GEOMETRYCOLLECTION		7
+/** BLOB-Geometry CLASS: POINT Z */
+#define GAIA_POINTZ			1001
+/** BLOB-Geometry CLASS: LINESTRING Z */
+#define GAIA_LINESTRINGZ		1002
+/** BLOB-Geometry CLASS: POLYGON Z */
+#define GAIA_POLYGONZ			1003
+/** BLOB-Geometry CLASS: MULTIPOINT Z */
+#define GAIA_MULTIPOINTZ		1004
+/** BLOB-Geometry CLASS: MULTILINESTRING Z */
+#define GAIA_MULTILINESTRINGZ		1005
+/** BLOB-Geometry CLASS: MULTIPOLYGON Z */
+#define GAIA_MULTIPOLYGONZ		1006
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION Z */
+#define GAIA_GEOMETRYCOLLECTIONZ	1007
+/** BLOB-Geometry CLASS: POINT M */
+#define GAIA_POINTM			2001
+/** BLOB-Geometry CLASS: LINESTRING M */
+#define GAIA_LINESTRINGM		2002
+/** BLOB-Geometry CLASS: POLYGON M */
+#define GAIA_POLYGONM			2003
+/** BLOB-Geometry CLASS: MULTIPOINT M */
+#define GAIA_MULTIPOINTM		2004
+/** BLOB-Geometry CLASS: MULTILINESTRING M */
+#define GAIA_MULTILINESTRINGM		2005
+/** BLOB-Geometry CLASS: MULTIPOLYGON M */
+#define GAIA_MULTIPOLYGONM		2006
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION M */
+#define GAIA_GEOMETRYCOLLECTIONM	2007
+/** BLOB-Geometry CLASS: POINT ZM */
+#define GAIA_POINTZM			3001
+/** BLOB-Geometry CLASS: LINESTRING ZM */
+#define GAIA_LINESTRINGZM		3002
+/** BLOB-Geometry CLASS: POLYGON ZM */
+#define GAIA_POLYGONZM			3003
+/** BLOB-Geometry CLASS: MULTIPOINT ZM */
+#define GAIA_MULTIPOINTZM		3004
+/** BLOB-Geometry CLASS: MULTILINESTRING ZM */
+#define GAIA_MULTILINESTRINGZM		3005
+/** BLOB-Geometry CLASS: MULTIPOLYGON ZM */
+#define GAIA_MULTIPOLYGONZM		3006
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION ZM */
+#define GAIA_GEOMETRYCOLLECTIONZM	3007
+
+/* constants that defines Compressed GEOMETRY CLASSes */
+/** BLOB-Geometry CLASS: compressed LINESTRING */
+#define GAIA_COMPRESSED_LINESTRING		1000002
+/** BLOB-Geometry CLASS: compressed POLYGON */
+#define GAIA_COMPRESSED_POLYGON			1000003
+/** BLOB-Geometry CLASS: compressed LINESTRING Z */
+#define GAIA_COMPRESSED_LINESTRINGZ		1001002
+/** BLOB-Geometry CLASS: compressed POLYGON Z */
+#define GAIA_COMPRESSED_POLYGONZ		1001003
+/** BLOB-Geometry CLASS: compressed LINESTRING M */
+#define GAIA_COMPRESSED_LINESTRINGM		1002002
+/** BLOB-Geometry CLASS: compressed POLYGON M */
+#define GAIA_COMPRESSED_POLYGONM		1002003
+/** BLOB-Geometry CLASS: compressed LINESTRING ZM */
+#define GAIA_COMPRESSED_LINESTRINGZM		1003002
+/** BLOB-Geometry CLASS: compressed POLYGON ZM */
+#define GAIA_COMPRESSED_POLYGONZM		1003003
+
+/* constants that defines GEOS-WKB 3D CLASSes */
+/** GEOS-WKB 3D CLASS: POINT Z */
+#define GAIA_GEOSWKB_POINTZ			-2147483647
+/** GEOS-WKB 3D CLASS: LINESTRING Z */
+#define GAIA_GEOSWKB_LINESTRINGZ		-2147483646
+/** GEOS-WKB 3D CLASS: POLYGON Z */
+#define GAIA_GEOSWKB_POLYGONZ			-2147483645
+/** GEOS-WKB 3D CLASS: MULTIPOINT Z */
+#define GAIA_GEOSWKB_MULTIPOINTZ		-2147483644
+/** GEOS-WKB 3D CLASS: MULTILINESTRING Z */
+#define GAIA_GEOSWKB_MULTILINESTRINGZ		-2147483643
+/** GEOS-WKB 3D CLASS: MULTIPOLYGON Z */
+#define GAIA_GEOSWKB_MULTIPOLYGONZ		-2147483642
+/** GEOS-WKB 3D CLASS: POINT Z */
+#define GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ	-2147483641
+
+/* constants that defines multitype values */
+/** DBF data type: NULL */
+#define GAIA_NULL_VALUE		0
+/** DBF data type: TEXT */
+#define GAIA_TEXT_VALUE		1
+/** DBF data type: INT */
+#define GAIA_INT_VALUE		2
+/** DBF data type: DOUBLE */
+#define GAIA_DOUBLE_VALUE	3
+
+/* constants that defines POINT index for LINESTRING */
+/** Linestring/Ring functions: START POINT */
+#define GAIA_START_POINT	1
+/** Linestring/Ring functions: END POINT */
+#define GAIA_END_POINT		2
+/** Linestring/Ring functions: POINTN */
+#define GAIA_POINTN		3
+
+/* constants that defines MBRs spatial relationships */
+/** MBR relationships: CONTAINS */
+#define GAIA_MBR_CONTAINS	1
+/** MBR relationships: DISJOINT */
+#define GAIA_MBR_DISJOINT	2
+/** MBR relationships: EQUAL */
+#define GAIA_MBR_EQUAL		3
+/** MBR relationships: INTERSECTS */
+#define GAIA_MBR_INTERSECTS	4
+/** MBR relationships: OVERLAP */
+#define GAIA_MBR_OVERLAPS	5
+/** MBR relationships: TOUCHES */
+#define GAIA_MBR_TOUCHES	6
+/** MBR relationships: WITHIN */
+#define GAIA_MBR_WITHIN		7
+
+/* constants used for FilterMBR */
+/** FilerMBR relationships: WITHIN */
+#define GAIA_FILTER_MBR_WITHIN		74
+/** FilerMBR relationships: CONTAINS */
+#define GAIA_FILTER_MBR_CONTAINS	77
+/** FilerMBR relationships: INTERSECTS */
+#define GAIA_FILTER_MBR_INTERSECTS	79
+/** FilerMBR relationships: DECLARE */
+#define GAIA_FILTER_MBR_DECLARE		89
+
+/* constants defining SVG default values */
+/** SVG precision: RELATIVE */
+#define GAIA_SVG_DEFAULT_RELATIVE 	0
+/** SVG precision: DEFAULT */
+#define GAIA_SVG_DEFAULT_PRECISION	6
+/** SVG precision: MAX */
+#define GAIA_SVG_DEFAULT_MAX_PRECISION 15
+
+/* constants used for VirtualNetwork */
+/** VirtualNetwork internal markers: START */
+#define GAIA_NET_START		0x67
+/** VirtualNetwork internal markers: 64 bit START */
+#define GAIA_NET64_START	0x68
+/** VirtualNetwork internal markers: A-Stat START */
+#define GAIA_NET64_A_STAR_START	0x69
+/** VirtualNetwork internal markers: END */
+#define GAIA_NET_END		0x87
+/** VirtualNetwork internal markers: HEADER */
+#define GAIA_NET_HEADER		0xc0
+/** VirtualNetwork internal markers: CODE */
+#define GAIA_NET_CODE		0xa6
+/** VirtualNetwork internal markers: ID */
+#define GAIA_NET_ID		0xb5
+/** VirtualNetwork internal markers: NODE */
+#define GAIA_NET_NODE		0xde
+/** VirtualNetwork internal markers: ARC */
+#define GAIA_NET_ARC		0x54
+/** VirtualNetwork internal markers: TABLE */
+#define GAIA_NET_TABLE		0xa0
+/** VirtualNetwork internal markers: FROM */
+#define GAIA_NET_FROM		0xa1
+/** VirtualNetwork internal markers: TO */
+#define GAIA_NET_TO		0xa2
+/** VirtualNetwork internal markers: GEOM */
+#define GAIA_NET_GEOM		0xa3
+/** VirtualNetwork internal markers: NAME */
+#define GAIA_NET_NAME		0xa4
+/** VirtualNetwork internal markers: COEFF */
+#define GAIA_NET_A_STAR_COEFF	0xa5
+/** VirtualNetwork internal markers: BLOCK */
+#define GAIA_NET_BLOCK		0xed
+
+/* constants used for Coordinate Dimensions */
+/** Coordinate Dimensions: XY */
+#define GAIA_XY		0x00
+/** Coordinate Dimensions: XYZ */
+#define GAIA_XY_Z	0x01
+/** Coordinate Dimensions: XYM */
+#define GAIA_XY_M	0x02
+/** Coordinate Dimensions: XYZM */
+#define GAIA_XY_Z_M	0x03
+
+/* constants used for length unit conversion */
+/** Length unit conversion: Kilometer */
+#define GAIA_KM		0
+/** Length unit conversion: Meter */
+#define GAIA_M		1
+/** Length unit conversion: Decimeter */
+#define GAIA_DM		2
+/** Length unit conversion: Centimeter */
+#define GAIA_CM		3
+/** Length unit conversion: Millimeter */
+#define GAIA_MM		4
+/** Length unit conversion: International Nautical Mile */
+#define GAIA_KMI	5
+/** Length unit conversion: Inch */
+#define GAIA_IN		6
+/** Length unit conversion: Feet */
+#define GAIA_FT		7
+/** Length unit conversion: Yard */
+#define GAIA_YD		8
+/** Length unit conversion: Mile */
+#define GAIA_MI		9
+/** Length unit conversion: Fathom */
+#define GAIA_FATH	10
+/** Length unit conversion: Chain */
+#define GAIA_CH		11
+/** Length unit conversion: Link */
+#define GAIA_LINK	12
+/** Length unit conversion: US Inch */
+#define GAIA_US_IN	13
+/** Length unit conversion: US Feet */
+#define GAIA_US_FT	14
+/** Length unit conversion: US Yard */
+#define GAIA_US_YD	15
+/** Length unit conversion: US Chain */
+#define GAIA_US_CH	16
+/** Length unit conversion: US Mile */
+#define GAIA_US_MI	17
+/** Length unit conversion: Indian Yard */
+#define GAIA_IND_YD	18
+/** Length unit conversion: Indian Feet */
+#define GAIA_IND_FT	19
+/** Length unit conversion: Indian Chain */
+#define GAIA_IND_CH	20
+/** Length unit conversion: MIN */
+#define GAIA_MIN_UNIT	GAIA_KM
+/** Length unit conversion: MAX */
+#define GAIA_MAX_UNIT	GAIA_IND_CH
+
+/* constants used for SHAPES */
+/** SHP shape: unknown */
+#define GAIA_SHP_NULL		0
+/** SHP shape: POINT */
+#define GAIA_SHP_POINT		1
+/** SHP shape: POLYLINE */
+#define GAIA_SHP_POLYLINE	3
+/** SHP shape: POLYGON */
+#define GAIA_SHP_POLYGON	5
+/** SHP shape: MULTIPOINT */
+#define GAIA_SHP_MULTIPOINT	8
+/** SHP shape: POINT Z */
+#define GAIA_SHP_POINTZ		11
+/** SHP shape: POLYLINE Z */
+#define GAIA_SHP_POLYLINEZ	13
+/** SHP shape: POLYGON Z */
+#define GAIA_SHP_POLYGONZ	15
+/** SHP shape: MULTIPOINT Z */
+#define GAIA_SHP_MULTIPOINTZ	18
+/** SHP shape: POINT M */
+#define GAIA_SHP_POINTM		21
+/** SHP shape: POLYLINE M */
+#define GAIA_SHP_POLYLINEM	23
+/** SHP shape: POLYGON M */
+#define GAIA_SHP_POLYGONM	25
+/** SHP shape: MULTIPOINT M */
+#define GAIA_SHP_MULTIPOINTM	28
+
+/* macros */
+/**
+ macro extracting XY coordinates
+
+ \param xy pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XY] dims may cause serious 
+ problems
+ */
+#define gaiaGetPoint(xy,v,x,y)	\
+				{*x = xy[(v) * 2]; \
+				 *y = xy[(v) * 2 + 1];}
+
+/**
+ macro setting XY coordinates
+
+ \param xy pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XY] dims may cause
+ serious problems
+ */
+#define gaiaSetPoint(xy,v,x,y)	\
+				{xy[(v) * 2] = x; \
+				 xy[(v) * 2 + 1] = y;}
+
+/**
+ macro extracting XYZ coordinates
+
+ \param xyz pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+ \param z [double *] Z coordinate 
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XYZ] dims may cause serious 
+ problems
+ */
+#define gaiaGetPointXYZ(xyz,v,x,y,z)	\
+				{*x = xyz[(v) * 3]; \
+				 *y = xyz[(v) * 3 + 1]; \
+				 *z = xyz[(v) * 3 + 2];}
+
+/**
+ macro setting XYZ coordinates
+
+ \param xyz pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+ \param z [double] Z coordinate
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XYZ] dims may cause
+ serious problems
+ */
+#define gaiaSetPointXYZ(xyz,v,x,y,z)	\
+				{xyz[(v) * 3] = x; \
+				 xyz[(v) * 3 + 1] = y; \
+				 xyz[(v) * 3 + 2] = z;}
+
+/**
+ macro extracting XYM coordinates
+
+ \param xym pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+ \param m [double *] M measure
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XYM] dims may cause serious 
+ problems
+ */
+#define gaiaGetPointXYM(xym,v,x,y,m)	\
+				{*x = xym[(v) * 3]; \
+				 *y = xym[(v) * 3 + 1]; \
+				 *m = xym[(v) * 3 + 2];}
+
+/**
+ macro setting XYM coordinates
+
+ \param xym pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+ \param m [double] M measure
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XYM] dims may cause
+ serious problems
+ */
+#define gaiaSetPointXYM(xym,v,x,y,m)	\
+				{xym[(v) * 3] = x; \
+				 xym[(v) * 3 + 1] = y; \
+				 xym[(v) * 3 + 2] = m;}
+
+/**
+ macro extracting XYZM coordinates
+
+ \param xyzm pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+ \param z [double *] Z coordinate 
+ \param m [double *] M measure
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XYZM] dims may cause serious 
+ problems
+ */
+#define gaiaGetPointXYZM(xyzm,v,x,y,z,m)	\
+				{*x = xyzm[(v) * 4]; \
+				 *y = xyzm[(v) * 4 + 1]; \
+				 *z = xyzm[(v) * 4 + 2]; \
+				 *m = xyzm[(v) * 4 + 3];}
+
+/**
+ macro setting XYZM coordinates
+
+ \param xyzm pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+ \param z [double] Z coordinate
+ \param m [double] M measure
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XYZM] dims may cause
+ serious problems
+ */
+#define gaiaSetPointXYZM(xyzm,v,x,y,z,m)	\
+				{xyzm[(v) * 4] = x; \
+				 xyzm[(v) * 4 + 1] = y; \
+				 xyzm[(v) * 4 + 2] = z; \
+				 xyzm[(v) * 4 + 3] = m;}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_CONST_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_core.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_core.h
new file mode 100644
index 0000000..8f9c1ce
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_core.h
@@ -0,0 +1,1572 @@
+/*
+ gg_core.h -- Gaia common support for geometries: core functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_core.h
+
+ Geometry handling functions: core
+ */
+
+#ifndef _GG_CORE_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_CORE_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Safely frees any dynamic memory block allocated by the library itself
+
+ \param ptr pointer to dynamicly allocated memory
+
+ \note on some platforms (most notably, Microsoft Windows) many different
+ runtime libraries may actually support the same process.
+ \n attempting to free() a memory block allocated by a different runtime 
+ module may easily cause fatal memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFree (void *ptr);
+
+/**
+ Allocates a 2D POINT [XY]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPoint (double x, double y);
+
+/**
+ Allocates a 3D POINT [XYZ]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ \param z the Z coordinate.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZ (double x, double y,
+						    double z);
+
+/**
+ Allocates a 2D POINT [XYM]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ \param m the M measure.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYM (double x, double y,
+						    double m);
+
+/**
+ Allocates a 3D POINT [XYZM]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ \param z the Z coordinate.
+ \param m the M measure.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZM (double x, double y,
+						     double z, double m);
+
+/**
+ Destroys a POINT object
+
+ \param ptr pointer to the POINT object to be destroyed
+
+ \sa gaiaAllocPoint, gaiaAllocPointXYZ, gaiaAllocPointXYM, gaiaAllocPointXYZM
+
+ \note attempting to destroy any POINT object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFreePoint (gaiaPointPtr ptr);
+
+/**
+ Allocates a 2D LINESTRING [XY]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPoint,
+ gaiaGetPoint
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING,
+ unless you've passed ownership of the LINESTRING object to some further 
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestring (int vert);
+
+/**
+ Allocates a 3D LINESTRING [XYZ]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPointXYZ,
+ gaiaGetPointXYZ
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING, 
+ unless you've passed ownership of the LINESTRING object to some further  
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZ (int vert);
+
+/**
+ Allocates a 2D LINESTRING [XYM]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPointXYM,
+ gaiaGetPointXYM
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING, 
+ unless you've passed ownership of the LINESTRING object to some further  
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYM (int vert);
+
+/**
+ Allocates a 3D LINESTRING [XYZM]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPointXYZM,
+ gaiaGetPointXYZM
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING, 
+ unless you've passed ownership of the LINESTRING object to some further  
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZM (int vert);
+
+/**
+ Destroys a LINESTRING object
+
+ \param ptr pointer to the LINESTRING object to be destroyed
+
+ \sa gaiaAllocLinestring, gaiaAllocLinestringXYZ, gaiaAllocLinestringXYM,
+  gaiaAllocLinestringXYZM
+
+ \note attempting to destroy any LINESTRING object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFreeLinestring (gaiaLinestringPtr ptr);
+
+/**
+ Copies coordinates between two LINESTRING objects
+
+ \param dst destination LINESTRING [output]
+ \param src origin LINESTRING [input]
+
+ \note both LINESTRING objects must have exactly the same number of points:
+ if dimensions aren't the same for both objects, then the appropriate 
+ conversion will be silently applied.
+ */
+    GAIAGEO_DECLARE void gaiaCopyLinestringCoords (gaiaLinestringPtr dst,
+						   gaiaLinestringPtr src);
+
+/**
+ Allocates a 2D RING [XY]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPoint,
+ gaiaGetPoint
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRing (int vert);
+
+/**
+ Allocates a 3D RING [XYZ]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPointXYZ,
+ gaiaGetPointXYZ
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZ (int vert);
+
+/**
+ Allocates 2D RING [XYM]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPointXYM,
+ gaiaGetPointXYM
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYM (int vert);
+
+/**
+ Allocates a 3D RING [XYZM]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPointXYZM,
+ gaiaSetPointXYZM
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZM (int vert);
+
+/**
+ Destroys a RING object
+
+ \param ptr pointer to the RING object to be destroyed
+
+ \sa gaiaAllocRing, gaiaAllocRingXYZ, gaiaAllocRingXYM,
+  gaiaAllocRingXYZM
+
+ \note attempting to destroy any RING object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFreeRing (gaiaRingPtr ptr);
+
+/**
+ Copies coordinates betwee two RING objects
+
+ \param dst destination RING [output]
+ \param src origin RING [input]
+
+ \note both RING objects must have exactly the same number of points:
+ if dimensions aren't the same for both objects, then the appropriate
+ conversion will be silently applied.
+ */
+    GAIAGEO_DECLARE void gaiaCopyRingCoords (gaiaRingPtr dst, gaiaRingPtr src);
+
+/**
+ Allocates a 2D POLYGON [XY]
+
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [0, if no Interior Ring is required].
+
+ \return the pointer to newly created POLYGON object: NULL on failure
+
+ \sa gaiaFreePolygon
+
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygon (int vert, int holes);
+
+/**
+ Allocates a 3D POLYGON [XYZ]
+    
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [0, if no Interior Ring is required].
+    
+ \return the pointer to newly created POLYGON object: NULL on failure
+    
+ \sa gaiaFreePolygon
+    
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZ (int vert, int holes);
+
+/**
+ Allocates a 2D POLYGON [XYM]
+    
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [0, if no Interior Ring is required].
+    
+ \return the pointer to newly created POLYGON object: NULL on failure
+    
+ \sa gaiaFreePolygon
+    
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYM (int vert, int holes);
+
+/**
+ Allocates a 3D POLYGON [XYZM]
+    
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [may by 0, if no Interior Ring is required].
+    
+ \return the pointer to newly created POLYGON object: NULL on failure
+    
+ \sa gaiaFreePolygon
+    
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZM (int vert, int holes);
+
+/**
+ Allocates a POLYGON
+
+ \param ring pointer to a valid RING object: assumed to be the Polygon's
+  Exterior Ring.
+
+ \return the pointer to newly created POLYGON object: NULL on failure
+
+ \sa gaiaAllocRing, gaiaAllocRingXYZ, gaiaAllocRingXYM, gaiaAllocRingXYZM,
+ gaiaFreePolygon
+
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object. 
+ \n Ownership of passed Ring object will be transferred to the 
+ Polygon object being created. 
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaCreatePolygon (gaiaRingPtr ring);
+
+/**
+ Destroys a POLYGON object
+
+ \param polyg pointer to the POLYGON object to be destroyed
+
+ \sa gaiaAllocPolygon, gaiaAllocPolygonXYZ, gaiaAllocPolygonXYM,
+  gaiaAllocPolygonXYZM, gaiaCreatePolygon
+
+ \note attempting to destroy any POLYGON object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ \n Ownerhip of each RING object referenced by a POLYGON object alway belongs
+ to the POLYGON itself, so destroying the POLYGON will surely destroy
+ any related RING as well.
+ */
+    GAIAGEO_DECLARE void gaiaFreePolygon (gaiaPolygonPtr polyg);
+
+/**
+ Allocates a 2D Geometry [XY]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomColl (void);
+
+/**
+ Allocates a 3D Geometry [XYZ]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZ (void);
+
+/**
+ Allocates a 2D Geometry [XYM]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYM (void);
+
+/**
+ Allocates a 3D Geometry [XYZM]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZM (void);
+
+/**
+ Destroys a Geometry object
+
+ \param geom pointer to the Geometry object to be destroyed
+
+ \sa gaiaAllocGeomColl, gaiaAllocGeomCollXYZ, gaiaAllocGeomCollXYM,
+  gaiaAllocGeomCollXYZM
+
+ \note attempting to destroy any Geometry object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ \n Ownerhip of each POINT, LINESTRING or POLYGON object referenced by a
+ Geometry object alway belongs to the Geometry itself, so destroying the 
+ Geometry will surely destroy any related elementary geometry item as well.
+ */
+    GAIAGEO_DECLARE void gaiaFreeGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Creates a new 2D Point [XY] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomColl (gaiaGeomCollPtr p, double x,
+						 double y);
+
+/**
+ Creates a new 3D Point [XYZ] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+ \param z Z coordinate of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZ (gaiaGeomCollPtr p, double x,
+						    double y, double z);
+
+/**
+ Creates a new 2D Point [XYM] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+ \param m M measure of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYM (gaiaGeomCollPtr p, double x,
+						    double y, double m);
+
+/**
+ Creates a new 3D Point [XYZM] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+ \param z Z coordinate of the Point to be created
+ \param m M measure of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZM (gaiaGeomCollPtr p,
+						     double x, double y,
+						     double z, double m);
+
+/**
+ Creates a new Linestring object into a Geometry object
+
+ \param p pointer to the Geometry object.
+ \param vert number of points [aka vertices] into the Linestring.
+
+ \return the pointer to newly created Linestring: NULL on failure.
+
+ \note ownership of the newly created Linestring object belongs to the Geometry object. 
+ \n the newly created Linestring will have the same dimensions as the Geometry has.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr
+	gaiaAddLinestringToGeomColl (gaiaGeomCollPtr p, int vert);
+
+/**
+ Inserts an already existing Linestring object into a Geometry object
+
+ \param p pointer to the Geometry object.
+ \param line pointer to the Linestring object.
+
+ \note ownership of the Linestring object will be transferred to the
+ Geometry object.
+ */
+    GAIAGEO_DECLARE void gaiaInsertLinestringInGeomColl (gaiaGeomCollPtr p,
+							 gaiaLinestringPtr
+							 line);
+
+/**
+ Creates a new Polygon object into a Geometry object
+
+ \param p pointer to the Geometry object.
+ \param vert number of points [aka vertices] into the Polygon's Exterior Ring.
+ \param interiors number of Interiors Rings [0, if no Interior Ring is required]
+
+ \return the pointer to newly created Polygon: NULL on failure.
+
+ \note ownership of the newly created Polygon object belongs to the Geometry object.
+ \n the newly created Polygon will have the same dimensions as the Geometry has.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAddPolygonToGeomColl (gaiaGeomCollPtr p,
+							     int vert,
+							     int interiors);
+
+/**
+ Creates a new Polygon object into a Geometry object starting from an
+ already existing Ring object
+
+ \param p pointer to the Geometry object.
+ \param ring pointer to the Ring object [assumed to represent to Polygon's
+ Exterior Ring].
+
+ \return the pointer to the newly created Polygon object: NULL on failure.
+
+ \note ownership of the Ring object will be transferred to the
+ Polygon object, and the Polygon object ownerships belongs to the Geometry object.
+ \n the Polygon object will have the same dimensions as the Ring object has.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaInsertPolygonInGeomColl (gaiaGeomCollPtr
+								p,
+								gaiaRingPtr
+								ring);
+
+/**
+ Creates a new Interior Ring object into a Polygon object
+
+ \param p pointer to the Polygon object.
+ \param pos relative position index [first Interior Ring has index 0].
+ \param vert number of points (aka vertices) into the Ring.
+
+ \return the pointer to the newly created Ring object: NULL on failure.
+
+ \sa gaiaAllocPolygon, gaiaAllocPolygonXYZ, gaiaAllocPolygonXYM,
+ gaiaAllocPolygonXYZM
+
+ \note ownership of the Ring object belongs to the Polygon object.
+ \n the newly created Ring will have the same dimensions the Polygon has.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAddInteriorRing (gaiaPolygonPtr p, int pos,
+						     int vert);
+
+/**
+ Inserts an already existing Ring object into a Polygon object
+
+ \param p pointer to the Polygon object
+ \param ring pointer to the Ring object
+
+ \sa gaiaAddRingToPolygon
+
+ \note ownership of the Ring object still remains to the calling procedure
+ (a duplicated copy of the original Ring will be inserted into the Polygon).
+ \n the newly created Polygon will have the same dimensions as the Ring has.
+ \n if required the Polygon's Interior Rings count could be increased.
+ */
+    GAIAGEO_DECLARE void gaiaInsertInteriorRing (gaiaPolygonPtr p,
+						 gaiaRingPtr ring);
+
+/**
+ Inserts an already existing Ring object into a Polygon object
+
+ \param polyg pointer to the Polygon object
+ \param ring pointer to the Ring object
+
+ \sa gaiaInsertInteriorRing
+
+ \note ownership of the Ring object will be tranferred to the Polygon object.
+ \n the newly created Polygon will have the same dimensions as the Ring has.
+ \n if required the Polygon's Interior Rings count could be increased.
+ */
+    GAIAGEO_DECLARE void gaiaAddRingToPolyg (gaiaPolygonPtr polyg,
+					     gaiaRingPtr ring);
+
+/**
+ Duplicates a Linestring object
+
+ \param line pointer to Linestring object [origin].
+
+ \return the pointer to newly created Linestring object: NULL on failure.
+
+ \sa gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaCloneLinestring (gaiaLinestringPtr
+							   line);
+
+/**
+ Duplicates a Ring object
+
+ \param ring pointer to Ring object [origin].
+
+ \return the pointer to newly created Ring object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRing (gaiaRingPtr ring);
+
+/**
+ Duplicates a Polygon object
+
+ \param polyg pointer to Polygon object [origin].
+
+ \return the pointer to newly created Polygon object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygon (gaiaPolygonPtr polyg);
+
+/**
+ Duplicates a Geometry object
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, 
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings,
+ gaiaCloneGeomCollPolygons, gaiaCastGeomCollToXY, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYM, gaiaCastGeomCollToXYZM, gaiaExtractPointsFromGeomColl,
+ gaiaExtractLinestringsFromGeomColl, gaiaExtractPolygonsFromGeomColl,
+ gaiaMergeGeometries
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Duplicates a Geometry object [Points only]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one; except
+ in that only Point objects will be copied.
+ \n Caveat: an empty Geometry could be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPoints (gaiaGeomCollPtr
+							     geom);
+
+/**
+ Duplicates a Geometry object [Linestrings only]
+                                                             
+ \param geom pointer to Geometry object [origin].
+        
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one; except
+ in that only Linestrings objects will be copied.
+ \n Caveat: an empty Geometry could be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaCloneGeomCollLinestrings (gaiaGeomCollPtr geom);
+
+/**
+ Duplicates a Geometry object [Polygons only]
+ 
+ \param geom pointer to Geometry object [origin].
+ 
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings
+
+ \note the newly created object is an exact copy of the original one; except
+ in that only Polygons objects will be copied.
+ \n Caveat: an empty Geometry could be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPolygons (gaiaGeomCollPtr
+							       geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 2D XY]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYM, gaiaCastGeomCollToXYZM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 2D [XY] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXY (gaiaGeomCollPtr geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 3D XYZ]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXY, 
+ gaiaCastGeomCollToXYM, gaiaCastGeomCollToXYZM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 3D [XYZ] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZ (gaiaGeomCollPtr
+							   geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 2D XYM]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXY, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYZM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 2D [XYM] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYM (gaiaGeomCollPtr
+							   geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 3D XYZM]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXY, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 3D [XYZM] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZM (gaiaGeomCollPtr
+							    geom);
+
+/**
+ Gets coodinates from a Linestring's Point
+
+ \param ln pointer to Linestring object.
+ \param v relative position of Point: first Point has index 0
+ \param x on completion this variable will contain the Point X coordinate.
+ \param y on completion this variable will contain the Point Y coordinate.
+ \param z on completion this variable will contain the Point Z coordinate.
+ \param m on completion this variable will contain the Point M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaLineSetPoint, gaiaGetPoint, gaiaGetPointXYZ, gaiaGetPointXYM,
+ gaiaGetPointXYZM
+
+ \note this function perform the same identical task performed by
+ gaiaGetPoint(), gaiaGetPointXYZ(), gaiaGetPointXYM() and gaiaGetPointXYZM()
+ macros.
+ \n using the gaiaLineGetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaLineGetPoint() instead will always ensure that the appropriate
+ dimensions (as declared by the Linestring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaLineGetPoint (gaiaLinestringPtr ln, int v,
+					  double *x, double *y, double *z,
+					  double *m);
+
+/**
+ Sets coodinates for a Linestring's Point
+
+ \param ln pointer to Linestring object.
+ \param v relative position of Point: first Point has index 0
+ \param x the Point's X coordinate.
+ \param y the Point's Y coordinate.
+ \param z the Point's Z coordinate.
+ \param m the Point's M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaLineGetPoint, gaiaSetPoint, gaiaSetPointXYZ, gaiaSetPointXYM,
+ gaiaSetPointXYZM
+
+ \note this function perform the same identical task performed by 
+ gaiaSetPoint(), gaiaSetPointXYZ(), gaiaSetPointXYM() and gaiaSetPointXYZM()
+ macros.
+ \n using the gaiaLineSetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaLineSetPoint() instead will always ensure that the appropriate 
+ dimensions (as declared by the Linestring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaLineSetPoint (gaiaLinestringPtr ln, int v, double x,
+					  double y, double z, double m);
+
+/**
+ Gets coodinates from a Ring's Point
+
+ \param rng pointer to Ring object.
+ \param v relative position of Point: first Point has index 0
+ \param x on completion this variable will contain the Point X coordinate.
+ \param y on completion this variable will contain the Point Y coordinate.
+ \param z on completion this variable will contain the Point Z coordinate.
+ \param m on completion this variable will contain the Point M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaRingSetPoint, gaiaGetPoint, gaiaGetPointXYZ, gaiaGetPointXYM,
+ gaiaGetPointXYZM
+
+ \note this function perform the same identical task performed by
+ gaiaGetPoint(), gaiaGetPointXYZ(), gaiaGetPointXYM() and gaiaGetPointXYZM()
+ macros.
+ \n using the gaiaRingGetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaRingGetPoint() instead will always ensure that the appropriate
+ dimensions (as declared by the Ring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaRingGetPoint (gaiaRingPtr rng, int v, double *x,
+					  double *y, double *z, double *m);
+
+/**
+ Sets coodinates for a Ring's Point
+
+ \param rng pointer to Ring object.
+ \param v relative position of Point: first Point has index 0
+ \param x the Point's X coordinate.
+ \param y the Point's Y coordinate.
+ \param z the Point's Z coordinate.
+ \param m the Point's M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaRingGetPoint, gaiaGetPoint, gaiaGetPointXYZ, gaiaSetPointXYM,
+ gaiaSetPointXYZM
+
+ \note this function perform the same identical task performed by
+ gaiaSetPoint(), gaiaSetPointXYZ(), gaiaSetPointXYM() and gaiaSetPointXYZM()
+ macros.
+ \n using the gaiaRingSetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaRingSetPoint() instead will always ensure that the appropriate
+ dimensions (as declared by the Ring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaRingSetPoint (gaiaRingPtr rng, int v, double x,
+					  double y, double z, double m);
+
+/**
+ Determines OGC dimensions for a Geometry object
+
+ \param geom pointer to Geometry object
+ 
+ \return OGC dimensions
+
+ \note OGC dimensions are defined as follows:
+ \li if the Geometry doesn't contain any elementary item: \b -1
+ \li if the Geometry only contains Point items: \b 0
+ \li if the Geometry only contains Point / Linestring items: \b 1
+ \li if the Geometry contains some Polygon item: \b 2
+ */
+    GAIAGEO_DECLARE int gaiaDimension (gaiaGeomCollPtr geom);
+
+/**
+ Determines the corresponding Type for a Geometry object
+ 
+ \param geom pointer to Geometry object
+
+ \return the corresponding Geometry Type
+
+ \note Type is one of: GAIA_POINT, GAIA_LINESTRING, GAIA_POLYGON,
+ GAIA_MULTIPOINT, GAIA_MULTILINESTRING, GAIA_MULTIPOLYGON,
+ GAIA_GEOMETRYCOLLECTION, GAIA_POINTZ, GAIA_LINESTRINGZ, GAIA_POLYGONZ,
+ GAIA_MULTIPOINTZ, GAIA_MULTILINESTRINGZ, GAIA_MULTIPOLYGONZ,
+ GAIA_GEOMETRYCOLLECTIONZ, GAIA_POINTM, GAIA_LINESTRINGM, GAIA_POLYGONM,
+ GAIA_MULTIPOINTM, GAIA_MULTILINESTRINGM, GAIA_MULTIPOLYGONM,
+ GAIA_GEOMETRYCOLLECTIONM, GAIA_POINTZM, GAIA_LINESTRINGZM, GAIA_POLYGONZM,
+ GAIA_MULTIPOINTZM, GAIA_MULTILINESTRINGZM, GAIA_MULTIPOLYGONZM,
+ GAIA_GEOMETRYCOLLECTIONZM
+ \n on failure GAIA_NONE will be returned.
+ */
+    GAIAGEO_DECLARE int gaiaGeometryType (gaiaGeomCollPtr geom);
+
+/**
+ Determines the corresponding Type for a Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return the corresponding Geometry Type
+
+ \sa gaiaGeometryType
+
+ \note Type is one of: GAIA_POINT, GAIA_LINESTRING, GAIA_POLYGON,
+ GAIA_MULTIPOINT, GAIA_MULTILINESTRING, GAIA_MULTIPOLYGON,
+ GAIA_GEOMETRYCOLLECTION
+ \n on failure GAIA_NONE will be returned.
+
+ \remark deprecated function (used in earlier SpatiaLite versions).
+ */
+    GAIAGEO_DECLARE int gaiaGeometryAliasType (gaiaGeomCollPtr geom);
+
+/**
+ Checks for empty Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return 0 if the Geometry is empty: otherwise any other different value.
+
+ \note an empty Geometry is a Geometry not containing any elementary
+ item: i.e. no Points, no Linestrings and no Polygons at all.
+ */
+    GAIAGEO_DECLARE int gaiaIsEmpty (gaiaGeomCollPtr geom);
+
+/**
+ Checks for toxic Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return 0 if the Geometry is not toxic: otherwise any other different value.
+
+ \sa gaiaSanitize
+
+ \note a \b toxic Geometry is a Geometry containing severely malformed
+ Polygons: i.e. containing less than 4 Points, unclosed Rings and so on.
+ \n Attempting to pass any toxic Geometry to GEOS supported functions
+ will easily cause a crash.
+ */
+    GAIAGEO_DECLARE int gaiaIsToxic (gaiaGeomCollPtr geom);
+
+/**
+ Attempts to sanitize a possibly malformed Geometry object
+
+ \param org pointer to Geometry object.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaIsToxic
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaSanitize()
+ \n the output Geometry will surely have:
+ \li no repeated Points on Linestrings or Rings (i.e. consecutive Points 
+ sharing exactly the same coordinates): any repeated Point will be suppressed,
+ simply leaving only the first occurrence.
+ \li proper Ring closure: for sure any Ring will have exactly coinciding
+ first and last Points.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSanitize (gaiaGeomCollPtr org);
+
+
+/**
+ Attempts to resolve a (Multi)Linestring from a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param force_multi: 0 if the returned Geometry could represent a Linestring:
+ any other value if casting to MultiLinestring is required unconditionally.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaDissolveSegments, gaiaDissolvePoints
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaLinearize()
+ \n the input Geometry is expected to contain Polygons only: then any Ring 
+ will be transformed into the corresponding Linestring.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLinearize (gaiaGeomCollPtr geom,
+						   int force_multi);
+
+/**
+ Attempts to resolve a collection of Segments from a Geometry object
+
+ \param geom pointer to Geometry object.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaLinearize, gaiaDissolvePoints
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaDissolveSegments()
+ \n the input Geometry can be of any arbitrary type:
+ \li any Point will be copied untouched.
+ \li any Linestring will be dissolved into Segments.
+ \li any Ring will be dissolved into Segments.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolveSegments (gaiaGeomCollPtr geom);
+
+/** 
+ Attempts to resolve a collection of Points from a Geometry object
+
+ \param geom pointer to Geometry object.
+ 
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaLinearize, gaiaDissolveSegments
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaDissolvePoints()
+ \n the input Geometry can be of any arbitrary type:
+ \li any Point will be copied untouched.
+ \li any Linestring will be dissolved into sparse Points.
+ \li any Ring will be dissolved into sparse Points.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolvePoints (gaiaGeomCollPtr geom);
+
+/**
+ Extracts any Point from a Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaExtractLinestringsFromGeomColl,
+ gaiaExtractPolygonsFromGeomColl, gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaExtractPointsFromGeomColl()
+ \n the newly created Geometry will contain any Point contained into the
+ input Geometry.
+ \n if the input Geometry doesn't contains any Point, then NULL will be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaExtractPointsFromGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Extracts any Linestring from a Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaExtractPointsFromGeomColl, gaiaExtractPolygonsFromGeomColl, 
+ gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaExtractLinestringsFromGeomColl()
+ \n the newly created Geometry will contain any Linestring contained into the
+ input Geometry.
+ \n if the input Geometry doesn't contains any Linestring, then NULL will be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaExtractLinestringsFromGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Extracts any Polygon from a Geometry object
+        
+ \param geom pointer to Geometry object
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaExtractPointsFromGeomColl, gaiaExtractLinestringsFromGeomColl,
+ gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaExtractPolygonsFromGeomColl()
+ \n the newly created Geometry will contain any Polygon contained into the
+ input Geometry.
+ \n if the input Geometry doesn't contains any Polygon, then NULL will be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaExtractPolygonsFromGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Merges two Geometry objects into a single one
+
+ \param geom1 pointer to first Geometry object.
+ \param geom2 pointer to second Geometry object.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaMergeGeometries()
+ \n the newly created Geometry will contain any Point, Linestring and/or
+ Polygon contained in both input Geometries.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries (gaiaGeomCollPtr geom1,
+							 gaiaGeomCollPtr geom2);
+
+/**
+ Measures the geometric length for a Linestring or Ring
+
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated geometric length
+
+ \sa gaiaGeomCollLength
+
+ \note \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+
+ \remark internal method: doesn't require any GEOS support.
+ */
+    GAIAGEO_DECLARE double gaiaMeasureLength (int dims, double *coords,
+					      int vert);
+
+/**
+ Measures the geometric area for a Ring object
+
+ \param ring pointer to Ring object
+
+ \return the calculated geometric area
+
+ \sa gaiaGeomCollArea
+
+ \remark internal method: doesn't require any GEOS support.
+ */
+    GAIAGEO_DECLARE double gaiaMeasureArea (gaiaRingPtr ring);
+
+/**
+ Determines the Centroid for a Ring object
+
+ \param ring pointer to Ring object.
+ \param rx on completion this variable will contain the centroid X coordinate.
+ \param ry on completion this variable will contain the centroid Y coordinate.
+
+ \sa gaiaGeomCollCentroid
+
+ \remark internal method: doesn't require any GEOS support.
+ */
+    GAIAGEO_DECLARE void gaiaRingCentroid (gaiaRingPtr ring, double *rx,
+					   double *ry);
+
+/**
+ Determines the direction for a Ring object
+
+ \param p pointer to Ring object
+
+ \return 0 if the ring has counter-clockwise direction; any other different
+ value for clockwise direction.
+ */
+    GAIAGEO_DECLARE void gaiaClockwise (gaiaRingPtr p);
+
+/**
+ Check if a Point lays on a Ring surface
+
+ \param ring pointer to Ring object
+ \param pt_x Point X coordinate
+ \param pt_y Point Y coordinate
+
+ \return 0 if false: any other value if true
+ */
+    GAIAGEO_DECLARE int gaiaIsPointOnRingSurface (gaiaRingPtr ring, double pt_x,
+						  double pt_y);
+
+/**
+ Checks if a Point lays on a Polygon surface
+
+ \param polyg pointer to Polygon object
+ \param x Point X coordinate
+ \param y Point Y coordinate
+
+ \return 0 if false: any other value if true
+ */
+    GAIAGEO_DECLARE int gaiaIsPointOnPolygonSurface (gaiaPolygonPtr polyg,
+						     double x, double y);
+
+/**
+ Computes the minimum distance intercurring from a Point and a Linestring or Ring
+
+ \param x0 Point X coordinate
+ \param y0 Point Y coordinate
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated minumum distance.
+
+ \note \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+ */
+    GAIAGEO_DECLARE double gaiaMinDistance (double x0, double y0,
+					    int dims, double *coords, int vert);
+
+/**
+ Determines the intesection Point between two Segments
+
+ \param x0 on completion this variable will contain the Intersection X coord
+ \param y0 on completion this variable will contain the Intersection Y coord
+ \param x1 start Point X of first Segment
+ \param y1 start Point Y of first Segment
+ \param x2 end Point X of first Segment
+ \param y2 end Point Y of first Segment
+ \param x3 start Point X of second Segment
+ \param y3 start Point Y of second Segment
+ \param x4 end Point X of second Segment
+ \param y4 end Point Y of second Segment
+
+ \return 0 if the Segments doesn't intersect at all: any other value on
+ success.
+ */
+    GAIAGEO_DECLARE int gaiaIntersect (double *x0, double *y0, double x1,
+				       double y1, double x2, double y2,
+				       double x3, double y3, double x4,
+				       double y4);
+
+/**
+ Shifts any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param shift_x X axis shift factor.
+ \param shift_y Y axis shift factor.
+
+ \sa gaiaScaleCoords, gaiaRotateCoords, gaiaReflectCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaShiftCoords (gaiaGeomCollPtr geom, double shift_x,
+					  double shift_y);
+
+/**
+ Scales any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param scale_x X axis scale factor.
+ \param scale_y Y axis scale factor.
+
+ \sa gaiaShiftCoords, gaiaRotateCoords, gaiaReflectCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaScaleCoords (gaiaGeomCollPtr geom, double scale_x,
+					  double scale_y);
+
+/**
+ Rotates any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param angle rotation angle [expressed in Degrees].
+
+ \sa gaiaShiftCoords, gaiaScaleCoords, gaiaReflectCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaRotateCoords (gaiaGeomCollPtr geom, double angle);
+
+/**
+ Reflects any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param x_axis if set to 0, no X axis reflection will be applied:
+ otherwise the X axis will be reflected.
+ \param y_axis if set to 0, no Y axis reflection will be applied:
+ otherwise the Y axis will be reflected.
+
+ \sa gaiaShiftCoords, gaiaScaleCoords, gaiaRotateCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaReflectCoords (gaiaGeomCollPtr geom, int x_axis,
+					    int y_axis);
+
+/**
+ Swaps any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+
+ \sa gaiaShiftCoords, gaiaScaleCoords, gaiaRotateCoords, gaiaReflectCoords
+
+ \note the X and Y axes will be swapped.
+ */
+    GAIAGEO_DECLARE void gaiaSwapCoords (gaiaGeomCollPtr geom);
+
+/**
+ Checks if two Linestring objects are equivalent
+
+ \param line1 pointer to first Linestring object.
+ \param line2 pointer to second Linestring object.
+
+ \return 0 if false: any other different value if true
+
+ \sa gaiaPolygonEquals
+
+ \note two Linestrings objects are assumed to be equivalent if exactly
+ \remark deprecated function (used in earlier SpatiaLite versions).
+ the same Points are found in both them.
+ */
+    GAIAGEO_DECLARE int gaiaLinestringEquals (gaiaLinestringPtr line1,
+					      gaiaLinestringPtr line2);
+
+/**
+ Checks if two Polygons objects are equivalent
+
+ \param polyg1 pointer to first Polygon object.
+ \param polyg2 pointer to second Polygon object.
+
+ \return 0 if false: any other different value if true
+
+ \sa gaiaLinestringEquals
+
+ \note two Polygon objects are assumed to be equivalent if exactly 
+ the same Points are found in both them.
+
+ \remark deprecated function (used in earlier SpatiaLite versions).
+ */
+    GAIAGEO_DECLARE int gaiaPolygonEquals (gaiaPolygonPtr polyg1,
+					   gaiaPolygonPtr polyg2);
+
+/**
+ Retrieves Geodesic params for an Ellipsoid definition
+
+ \param name text string identifying an Ellipsoid definition.
+ \param a on completion this variable will contain the first geodesic param.
+ \param b on completion this variable will contain the second geodesic param.
+ \param rf on completion this variable will contain the third geodesic param.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGreatCircleDistance, gaiaGeodesicDistance,
+ gaiaGreatCircleTotalLength, gaiaGeodesicTotalLength
+
+ \note supported Ellipsoid definitions are: \b MERIT, \b SGS85, \b GRS80,
+ \b IAU76, \b airy, \b APL4.9, \b NWL9D, \b mod_airy, \b andrae, \b aust_SA,
+ \b GRS67, \b bessel, \b bess_nam, \b clrk66, \b clrk80, \b CPM, \b delmbr, 
+ \b engelis, \b evrst30, \b evrst48, \b evrst56, \b evrst69, \b evrstSS, 
+ \b fschr60
+ */
+    GAIAGEO_DECLARE int gaiaEllipseParams (const char *name, double *a,
+					   double *b, double *rf);
+
+/**
+ Calculates the Great Circle Distance intercurring between two Points
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param lat1 Latitude of first Point.
+ \param lon1 Longitude of first Point.
+ \param lat2 Latitude of second Point.
+ \param lon2 Longitude of second Point.
+
+ \return the calculated Great Circle Distance.
+ 
+ \sa gaiaEllipseParams, gaiaGeodesicDistance,
+ gaiaGreatCircleTotalLength, gaiaGeodesicTotalLength
+
+ \note the returned distance is expressed in Kilometers.
+ \n the Great Circle method is less accurate but fastest to be calculated.
+ */
+    GAIAGEO_DECLARE double gaiaGreatCircleDistance (double a, double b,
+						    double lat1, double lon1,
+						    double lat2, double lon2);
+
+/**
+ Calculates the Geodesic Distance intercurring between two Points
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param rf third geodesic parameter.
+ \param lat1 Latitude of first Point.
+ \param lon1 Longitude of first Point.
+ \param lat2 Latitude of second Point.
+ \param lon2 Longitude of second Point.
+
+ \return the calculated Geodesic Distance.
+
+ \sa gaiaEllipseParams, gaiaGreatCircleDistance, gaiaGreatCircleTotalLength,
+ gaiaGeodesicTotalLength
+
+ \note the returned distance is expressed in Kilometers.
+ \n the Geodesic method is much more accurate but slowest to be calculated.
+ */
+    GAIAGEO_DECLARE double gaiaGeodesicDistance (double a, double b, double rf,
+						 double lat1, double lon1,
+						 double lat2, double lon2);
+
+/**
+ Calculates the Great Circle Total Length for a Linestring / Ring
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated Great Circle Total Length.
+
+ \sa gaiaEllipseParams, gaiaGreatCircleDistance, gaiaGeodesicDistance,
+ gaiaGeodesicTotalLength
+
+ \note the returned length is expressed in Kilometers.
+ \n the Great Circle method is less accurate but fastest to be calculated.
+ \n \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+ */
+    GAIAGEO_DECLARE double gaiaGreatCircleTotalLength (double a, double b,
+						       int dims, double *coords,
+						       int vert);
+
+/**
+ Calculates the Geodesic Total Length for a Linestring / Ring
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param rf third geodesic parameter.
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated Geodesic Total Length.
+
+ \sa gaiaEllipseParams, gaiaGreatCircleDistance, gaiaGeodesicDistance,
+ gaiaGreatCircleTotalLength
+
+ \note the returned length is expressed in Kilometers.
+ \n the Geodesic method is much more accurate but slowest to be calculated.
+ \n \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+ */
+    GAIAGEO_DECLARE double gaiaGeodesicTotalLength (double a, double b,
+						    double rf, int dims,
+						    double *coords, int vert);
+
+/**
+ Convert a Length from a Measure Unit to another
+
+ \param value the length measure to be converted.
+ \param unit_from original Measure Unit.
+ \param unit_to converted Measure Unit.
+ \param cvt on completion this variable will contain the converted length 
+ measure. 
+
+ \note supported Measu Units are: GAIA_KM, GAIA_M, GAIA_DM, GAIA_CM, GAIA_MM,
+ GAIA_KMI, GAIA_IN, GAIA_FT, GAIA_YD, GAIA_MI, GAIA_FATH, GAIC_CH, GAIA_LINK,
+ GAIA_US_IN, GAIA_US_FT, GAIA_US_YD, GAIA_US_CH, GAIA_US_MI, GAIA_IND_YD,
+ GAIA_IND_FT, GAIA_IND_CH
+ */
+    GAIAGEO_DECLARE int gaiaConvertLength (double value, int unit_from,
+					   int unit_to, double *cvt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_CORE_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_dynamic.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_dynamic.h
new file mode 100644
index 0000000..618e8a0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_dynamic.h
@@ -0,0 +1,420 @@
+/*
+ gg_dynamic.h -- Gaia common support for geometries: DynamicLine functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_dynamic.h
+
+ Geometry handling functions: DynamicLine handling
+ */
+
+#ifndef _GG_DYNAMIC
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_DYNAMIC
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Creates a new dynamicly growing line/ring object
+
+ \return the pointer to newly created object
+
+ \sa gaiaCreateDynamicLine, gaiaFreeDynamicLine
+
+ \note you are responsible to destroy (before or after) any allocated 
+ dynamically growing line/ring object.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaAllocDynamicLine (void);
+
+/**
+ Destroys a dynamically growing line/ring object
+
+ \param p pointer to object to be destroyed
+
+ \sa gaiaAllocDynamicLine
+ */
+    GAIAGEO_DECLARE void gaiaFreeDynamicLine (gaiaDynamicLinePtr p);
+
+/**
+ Appends a new 2D Point [XY] at the end of a dynamically growing line/ring
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointToDynamicLine (gaiaDynamicLinePtr p, double x, double y);
+
+/**
+ Appends a new 3D Point [XYZ] at the end of a dynamically growing line/ring 
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointZToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				       double z);
+
+/**
+ Appends a new 2D Point [XYM] at the end of a dynamically growing line/ring 
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param m M measure of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointMToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				       double m);
+
+/**
+ Appends a new 3D Point [XYZM] at the end of a dynamically growing line/ring 
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+ \param m M measure of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointZMToDynamicLine (gaiaDynamicLinePtr p, double x,
+					double y, double z, double m);
+
+/**
+ Appends a new 2D Point [XY] before the first one of a dynamically growing 
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointToDynamicLine (gaiaDynamicLinePtr p, double x,
+				       double y);
+
+/**
+ Appends a new 3D Point [XYZ] before the first one of a dynamically growing
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointZToDynamicLine (gaiaDynamicLinePtr p, double x,
+					double y, double z);
+
+/**
+ Appends a new 2D Point [XYM] before the first one of a dynamically growing
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param m M measure of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointMToDynamicLine (gaiaDynamicLinePtr p, double x,
+					double y, double m);
+
+/**
+ Appends a new 3D Point [XYZM] before the first one of a dynamically growing
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+ \param m M measure of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointZMToDynamicLine (gaiaDynamicLinePtr p, double x,
+					 double y, double z, double m);
+
+/**
+ Appends a new 2D Point [XY] immediately after the given Point into a
+ dynamically growing line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param pt pointer to the given Point.
+ \param x X coordinate of the Point to be appended
+ \param y Y coordinate of the Point to be appended
+
+ \sa gaiaDynamicLiceInsertBefore
+
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertAfter (gaiaDynamicLinePtr
+							     p, gaiaPointPtr pt,
+							     double x,
+							     double y);
+
+/**
+ Appends a new 2D Point [XY] immediately before the given Point into a
+ dynamically growing line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param pt pointer to the given Point.
+ \param x X coordinate of the Point to be appended
+ \param y Y coordinate of the Point to be appended
+
+ \sa gaiaDynamicLiceInsertBeforeAfter
+
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertBefore (gaiaDynamicLinePtr
+							      p,
+							      gaiaPointPtr pt,
+							      double x,
+							      double y);
+
+/**
+ Removes a given Point from a dynamically growing line/ring object
+
+ \param p pointer to dynamically growing line/ring object.
+ \param pt pointer to given Point.
+
+ \note the given Point (referenced by its address) will be removed from
+ the dynamically growin line/ring object.
+ \n the given Point will be then implicitly destroyed.
+ */
+    GAIAGEO_DECLARE void gaiaDynamicLineDeletePoint (gaiaDynamicLinePtr p,
+						     gaiaPointPtr pt);
+
+/**
+ Duplicates a dynamically growing line/ring object
+
+ \param org pointer to dynamically growing line/ring object [origin].
+
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \note the newly created object is an exact copy of the original one.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCloneDynamicLine (gaiaDynamicLinePtr
+							     org);
+
+/**
+ Duplicates and reverts a dynamically growing line/ring object
+
+ \param org pointer to dynamically growing line/ring object [origin].
+
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \note the newly created object is an exact copy of the origina one, except
+ in that direction is reverted.
+ \n i.e. first inpunt point becomes last output point, and last input point
+ becomes first output point.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaReverseDynamicLine (gaiaDynamicLinePtr org);
+
+/**
+ Cuts a dynamically growing line/ring in two halves, using a given
+ cut point
+
+ \param org pointer to the input object [the line to be split].
+ \param point pointer to given cut point.
+ 
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \sa gaiaDynamicLineSplitAfter
+
+ \note the newly created object will contain a line going from the orginal
+ first point to the cut point [excluded].
+ \n on completion the orginal line will be reduced, going from the cut
+ point [included] to the original last point.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineSplitBefore (gaiaDynamicLinePtr org, gaiaPointPtr point);
+
+/**
+ Cuts a dynamically growing line/ring in two halves, using a given
+ cut point 
+
+ \param org pointer to the input object [the line to be split]. 
+ \param point pointer to given cut point.
+
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \sa gaiaDynamicLineSplitBefore
+
+ \note the newly created object will contain a line going from the orginal
+ first point to the cut point [included].
+ \n on completion the orginal line will be reduced, going from the cut
+ point [excluded] to the original last point.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineSplitAfter (gaiaDynamicLinePtr org, gaiaPointPtr point);
+
+/**
+ Merges two dynamically growing line/ring object into a single one
+
+ \param org pointer to the first input object [first line].
+ \param point pointer to the reference Point object.
+ \param toJoin pointer to the second input object [second line].
+
+ \return the pointer to newly created dynamically growing line/ring object 
+ [merged line]: NULL on failure.
+
+ \sa gaiaDynamicLineJoinBefore
+
+ \note the reference Point must exists into the first line: the second line
+ will then be inserted immediately after the reference Point.
+ \n The newly created object will represent the resulting merged line:
+ \n both input objects remain untouched.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineJoinAfter (gaiaDynamicLinePtr org, gaiaPointPtr point,
+				  gaiaDynamicLinePtr toJoin);
+
+/**
+ Merges two dynamically growing line/ring object into a single one
+
+ \param org pointer to the first input object [first line].
+ \param point pointer to the reference Point object.
+ \param toJoin pointer to the second input object [second line].
+
+ \return the pointer to newly created dynamically growing line/ring object 
+ [merged line]: NULL on failure.
+
+ \sa gaiaDynamicLineJoinAfter
+
+ \note the reference Point must exists into the first line: the second line 
+ will then be inserted immediately before the reference Point.
+ \n The newly created object will represent the resulting merged line: 
+ \n both input objects remain untouched.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineJoinBefore (gaiaDynamicLinePtr org, gaiaPointPtr point,
+				   gaiaDynamicLinePtr toJoin);
+
+/**
+ Finds a Point within a dymically growing line/ring object [by coords]
+
+ \param p pointer to dymamically line/ring object.
+ \param x Point X coordinate.
+ \param y Point Y coordinate.
+
+ \return the pointer to the corresponding Point object: NULL on failure.
+
+ \sa gaiaDynamicLineFindByPos
+
+ \note if the line object contains more Points sharing the same coordinates,
+ a reference to the first one found will be returned.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByCoords (gaiaDynamicLinePtr
+							      p, double x,
+							      double y);
+
+/**
+ Finds a Point within a dymically growing line/ring object [by position]
+
+ \param p pointer to dymamically line/ring object.
+ \param pos relative position [first Point has index 0].
+
+ \return the pointer to the corresponding Point object: NULL on failure.
+
+ \sa gaiaDynamicLineFindByCoords
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByPos (gaiaDynamicLinePtr p,
+							   int pos);
+
+/**
+ Creates a new dynamicly growing line/ring object
+
+ \param coords an array of COORDs, any dimension [XY, XYZ, XYM, XYZM]
+ \param points number of points [aka vertices] into the array
+
+ \return the pointer to newly created object 
+
+ \sa gaiaAllocDynamicLine, gaiaFreeDynamicLine, gaiaLinestringStruct,
+ gaiaRingStruct
+
+ \note you are responsible to destroy (before or after) any allocated 
+ dynamically growing line/ring object. 
+ \n The COORDs array is usually expected to be one found within a
+ gaiaLinestring or gaiaRing object.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCreateDynamicLine (double *coords,
+							      int points);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_DYNAMIC */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_formats.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_formats.h
new file mode 100644
index 0000000..0908111
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_formats.h
@@ -0,0 +1,1364 @@
+/*
+ gg_formats.h -- Gaia common support for geometries: formats
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Klaus Foerster klaus.foerster at svg.cc
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_formats.h
+
+ Geometry handling functions: formats
+ */
+
+#ifndef _GG_FORMATS_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_FORMATS_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Test CPU endianness
+
+ \return 0 if big-endian: any other value if little-endian
+ */
+    GAIAGEO_DECLARE int gaiaEndianArch (void);
+
+/**
+ Import an INT-16 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal SHORT value 
+
+ \sa gaiaEndianArch, gaiaExport16
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 2 bytes.
+ */
+    GAIAGEO_DECLARE short gaiaImport16 (const unsigned char *p,
+					int little_endian,
+					int little_endian_arch);
+
+/**
+ Import an INT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal INT value 
+
+ \sa gaiaEndianArch, gaiaExport32
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE int gaiaImport32 (const unsigned char *p, int little_endian,
+				      int little_endian_arch);
+
+/**
+ Import a FLOAT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal FLOAT value 
+
+ \sa gaiaEndianArch, gaiaExportF32
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE float gaiaImportF32 (const unsigned char *p,
+					 int little_endian,
+					 int little_endian_arch);
+
+/**
+ Import an DOUBLE-64 in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal DOUBLE value 
+
+ \sa gaiaEndianArch, gaiaExport64
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE double gaiaImport64 (const unsigned char *p,
+					 int little_endian,
+					 int little_endian_arch);
+
+/**
+ Import an INT-64 in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal INT-64 value 
+
+ \sa gaiaEndianArch, gaiaExportI64
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE sqlite3_int64 gaiaImportI64 (const unsigned char *p,
+						 int little_endian,
+						 int little_endian_arch);
+
+/**
+ Export an INT-16 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImport16
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 2 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExport16 (unsigned char *p, short value,
+				       int little_endian,
+				       int little_endian_arch);
+
+/**
+ Export an INT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImport32
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExport32 (unsigned char *p, int value,
+				       int little_endian,
+				       int little_endian_arch);
+
+/**
+ Export a FLOAT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImportF32
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExportF32 (unsigned char *p, float value,
+					int little_endian,
+					int little_endian_arch);
+
+/**
+ Export a DOUBLE value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImport64
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExport64 (unsigned char *p, double value,
+				       int little_endian,
+				       int little_endian_arch);
+
+/**
+ Export an INT-64 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImportI64
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExportI64 (unsigned char *p, sqlite3_int64 value,
+					int little_endian,
+					int little_endian_arch);
+
+/**
+ Initializes a dynamically growing Text output buffer
+
+ \param buf pointer to gaiaOutBufferStruct structure
+ 
+ \sa gaiaOutBufferReset, gaiaAppendToOutBuffer
+
+ \note Text notations representing Geometry objects may easily require
+ a huge storage amount: the gaiaOutBufferStruct automatically supports
+ a dynamically growing output buffer.
+ \n You are required to initialize this structure before attempting
+ any further operation;
+ and you are responsible to cleanup any related memory allocation
+ when it's any longer required.
+ */
+    GAIAGEO_DECLARE void gaiaOutBufferInitialize (gaiaOutBufferPtr buf);
+
+/**
+ Resets a dynamically growing Text output buffer to its initial (empty) state
+
+ \param buf pointer to gaiaOutBufferStruct structure
+ 
+ \sa gaiaOutBufferInitialize, gaiaAppendToOutBuffer
+
+ \note You are required to initialize this structure before attempting
+ any further operation:
+ this function will release any related memory allocation.
+ */
+    GAIAGEO_DECLARE void gaiaOutBufferReset (gaiaOutBufferPtr buf);
+
+/**
+ Appends a text string at the end of Text output buffer
+
+ \param buf pointer to gaiaOutBufferStruct structure.
+ \param text the text string to be appended.
+
+ \sa gaiaOutBufferInitialize, gaiaOutBufferReset
+
+ \note You are required to initialize this structure before attempting
+ any further operation:
+ the dynamically growing Text buffer will be automatically allocated
+ and/or extended as required.
+ */
+    GAIAGEO_DECLARE void gaiaAppendToOutBuffer (gaiaOutBufferPtr buf,
+						const char *text);
+
+/**
+ Creates a BLOB-Geometry representing a Point
+
+ \param x Point X coordinate.
+ \param y Point Y coordinate.
+ \param srid the SRID to be set for the Point.
+ \param result on completion will containt a pointer to BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb
+
+ \note the BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaMakePoint (double x, double y, int srid,
+					unsigned char **result, int *size);
+
+/**
+ Creates a BLOB-Geometry representing a Segment (2-Points Linestring)
+
+ \param geom1 pointer to first Geometry object (expected to represent a Point).
+ \param geom2 pointer to second Geometry object (expected to represent a Point).
+ \param result on completion will containt a pointer to BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb
+
+ \note the BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaMakeLine (gaiaGeomCollPtr geom1,
+				       gaiaGeomCollPtr geom2,
+				       unsigned char **result, int *size);
+
+/**
+ Creates a Geometry object from the corresponding BLOB-Geometry 
+
+ \param blob pointer to BLOB-Geometry
+ \param size the BLOB's size
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl, gaiaToSpatiaLiteBlobWkb, gaiaToCompressedBlobWkb
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any 
+ contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobWkb (const unsigned
+							       char *blob,
+							       unsigned int
+							       size);
+
+/**
+ Creates a BLOB-Geometry corresponding to a Geometry object
+
+ \param geom pointer to the Geometry object.
+ \param result on completion will containt a pointer to BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb, gaiaToCompressedBlobWkb
+
+ \note the BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom,
+						  unsigned char **result,
+						  int *size);
+
+/**
+ Creates a Compressed BLOB-Geometry corresponding to a Geometry object
+
+ \param geom pointer to the Geometry object.
+ \param result on completion will containt a pointer to Compressed BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb, gaiaToSpatiaLiteBlobWkb
+
+ \note this function will apply compression to any Linestring / Ring found
+ within the Geometry to be encoded.
+ \n the returned BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom,
+						  unsigned char **result,
+						  int *size);
+
+/**
+ Creates a Geometry object from WKB notation
+
+ \param blob pointer to WKB buffer
+ \param size the BLOB's size (in bytes)
+
+ \return the pointer to the newly created Geometry object: NULL on failure.
+
+ \sa gaiaToWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromWkb (const unsigned char *blob,
+						 unsigned int size);
+
+/**
+ Encodes a Geometry object into WKB notation
+
+ \param geom pointer to Geometry object
+ \param result on completion will containt a pointer to the WKB buffer [BLOB]:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note this function will apply 3D WKB encoding as internally intended by
+ SpatiaLite: not necessarily intended by other OGC-like implementations.
+ \n Anyway, 2D WKB is surely standard and safely interoperable.
+ \n the returned BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToWkb (gaiaGeomCollPtr geom,
+				    unsigned char **result, int *size);
+
+/**
+ Encodes a Geometry object into (hex) WKB notation
+
+ \param geom pointer to Geometry object
+
+ \return the pointer to a text buffer containing WKB translated into plain
+ hexadecimal: NULL on failure.
+
+ \sa gaiaFromWkb, gaiaToWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note the returned buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE char *gaiaToHexWkb (gaiaGeomCollPtr geom);
+
+/**
+ Encodes a Geometry object into EWKB notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+
+ \sa gaiaFromWkb, gaiaToWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note this function will produce strictly conformat EWKB; you can
+ safely use this for PostGIS data exchange.
+ */
+    GAIAGEO_DECLARE void gaiaToEWKB (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom);
+
+/**
+ Creates a Geometry object from EWKB notation
+
+ \param in_buffer pointer to EWKB buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure.
+
+ \sa gaiaToWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromEWKB (const unsigned char
+						  *in_buffer);
+
+/**
+ Creates a Geometry object from FGF notation
+
+ \param blob pointer to FGF buffer
+ \param size the BLOB's size (in bytes)
+
+ \return the pointer to the newly created Geometry object: NULL on failure.
+
+ \sa gaiaToFgf
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromFgf (const unsigned char *blob,
+						 unsigned int size);
+
+/**
+ Encodes a Geometry object into FGF notation
+
+ \param geom pointer to Geometry object
+ \param result on completion will containt a pointer to the FGF buffer [BLOB]:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+ \param coord_dims one of: GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM
+
+ \sa gaiaFromFgf
+
+ \note the returned BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToFgf (gaiaGeomCollPtr geom,
+				    unsigned char **result, int *size,
+				    int coord_dims);
+
+/**
+ Creates a Geometry object from WKT notation
+
+ \param in_buffer pointer to WKT buffer
+ \param type the expected Geometry Class Type
+ \n if actual type defined in WKT doesn't corresponds to this, an error will
+ be raised.
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutWkt, gaiaOutWktStrict, gaiaParseEWKT, gaiaToEWKT
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseWkt (const unsigned char
+						  *in_buffer, short type);
+
+/**
+ Encodes a Geometry object into WKT notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+
+ \sa gaiaParseWkt, gaiaOutWktStrict, gaiaParseEWKT, gaiaToEWKT
+
+ \note this function will apply 3D WKT encoding as internally intended by
+ SpatiaLite: not necessarily intended by other OGC-like implementations.
+ \n Anyway, 2D WKT is surely standard and safely interoperable.
+ */
+    GAIAGEO_DECLARE void gaiaOutWkt (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom);
+
+/**
+ Encodes a Geometry object into strict 2D WKT notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+ \param precision decimal digits to be used for coordinates
+
+ \sa gaiaParseWkt, gaiaOutWkt, gaiaParseEWKT, gaiaToEWKT
+
+ \note this function will apply strict 2D WKT encoding, so to be surely
+ standard and safely interoperable.
+ \n Dimensions will be automatically casted to 2D [XY] when required.
+ */
+    GAIAGEO_DECLARE void gaiaOutWktStrict (gaiaOutBufferPtr out_buf,
+					   gaiaGeomCollPtr geom, int precision);
+
+/**
+ Creates a Geometry object from EWKT notation
+
+ \param in_buffer pointer to EWKT buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaParseWkt, gaiaOutWkt, gaiaOutWktStrict, gaiaToEWKT
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseEWKT (const unsigned char
+						   *in_buffer);
+
+/**
+ Encodes a Geometry object into EWKT notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+
+ \sa gaiaParseWkt, gaiaOutWkt, gaiaOutWktStrict, gaiaParseEWKT
+
+ \note this function will apply PostGIS own EWKT encoding.
+ */
+    GAIAGEO_DECLARE void gaiaToEWKT (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom);
+
+/**
+ Encodes a WKT 3D Point [XYZ]
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param point pointer to Point object
+
+ \sa gaiaOutLinestringZ, gaiaOutPolygonZ
+ 
+ \remark mainly intended for internal usage.
+ */
+    GAIAGEO_DECLARE void gaiaOutPointZ (gaiaOutBufferPtr out_buf,
+					gaiaPointPtr point);
+
+/**
+ Encodes a WKT 3D Linestring [XYZ]
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param linestring pointer to Linestring object
+
+ \sa gaiaOutPointZ, gaiaOutPolygonZ
+ 
+ \remark mainly intended for internal usage.
+ */
+    GAIAGEO_DECLARE void gaiaOutLinestringZ (gaiaOutBufferPtr out_buf,
+					     gaiaLinestringPtr linestring);
+
+/**
+ Encodes a WKT 3D Polygon [XYZ]
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param polygon pointer to Point object
+
+ \sa gaiaOutPointZ, gaiaOutLinestringZ
+ 
+ \remark mainly intended for internal usage.
+ */
+    GAIAGEO_DECLARE void gaiaOutPolygonZ (gaiaOutBufferPtr out_buf,
+					  gaiaPolygonPtr polygon);
+/**
+ Creates a Geometry object from KML notation
+
+ \param in_buffer pointer to KML buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutBareKml, gaiaOutFullKml
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseKml (const unsigned char
+						  *in_buffer);
+
+/**
+ Encodes a Geometry object into KML notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object 
+ \param precision decimal digits to be used for coordinates
+
+ \sa gaiaParseKml, gaiaOutFullKml
+
+ \note this function will export the simplest KML notation (no descriptions).
+ */
+    GAIAGEO_DECLARE void gaiaOutBareKml (gaiaOutBufferPtr out_buf,
+					 gaiaGeomCollPtr geom, int precision);
+
+/**
+ Encodes a Geometry object into KML notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param name text string to be set as KML \e name 
+ \param desc text string to se set as KML \e description 
+ \param geom pointer to Geometry object
+ \param precision decimal digits to be used for coordinates
+
+ \sa gaiaParseKml, gaiaOutBareKml
+
+ \note this function will export the simplest KML notation (no descriptions).
+ */
+    GAIAGEO_DECLARE void gaiaOutFullKml (gaiaOutBufferPtr out_buf,
+					 const char *name, const char *desc,
+					 gaiaGeomCollPtr geom, int precision);
+
+/**
+ Creates a Geometry object from GML notation
+
+ \param in_buffer pointer to GML buffer
+ \param sqlite_handle handle to current DB connection
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutGml
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseGml (const unsigned char
+						  *in_buffer,
+						  sqlite3 * sqlite_handle);
+
+/**
+ Encodes a Geometry object into GML notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param version GML version
+ \param precision decimal digits to be used for coordinates
+ \param geom pointer to Geometry object
+
+ \sa gaiaParseGml
+
+ \note if \e version is set to \b 3, then GMLv3 will be used;
+ in any other case GMLv2 will be assumed by default.
+ */
+    GAIAGEO_DECLARE void gaiaOutGml (gaiaOutBufferPtr out_buf, int version,
+				     int precision, gaiaGeomCollPtr geom);
+
+/**
+ Creates a Geometry object from GeoJSON notation
+
+ \param in_buffer pointer to GeoJSON buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutGeoJSON
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseGeoJSON (const unsigned char
+						      *in_buffer);
+
+/**
+ Encodes a Geometry object into GeoJSON notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+ \param precision decimal digits to be used for coordinates
+ \param options GeoJSON specific options
+
+ \sa gaiaParseGeoJSON
+
+ \note \e options can assume the following values:
+ \li 1 = BBOX, no CRS
+ \li 2 = no BBOX, short form CRS
+ \li 3 = BBOX, short form CRS
+ \li 4 = no BBOX, long form CRS
+ \li 5 = BBOX, long form CRS
+ \li any other value: no BBOX and no CRS
+ */
+    GAIAGEO_DECLARE void gaiaOutGeoJSON (gaiaOutBufferPtr out_buf,
+					 gaiaGeomCollPtr geom, int precision,
+					 int options);
+/**
+ Encodes a Geometry object into SVG notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+ \param relative flag: relative or absolute coordinates
+ \param precision decimal digits to be used for coordinates
+
+ \note if \e relative is set to \b 1, then SVG relative coords will be used:
+ in any other case SVG absolute coords will be assumed by default.
+ */
+    GAIAGEO_DECLARE void gaiaOutSvg (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom, int relative,
+				     int precision);
+
+/**
+ Allocates a new DBF Field Value object [duplicating an existing one]
+ 
+ \param org pointer to input DBF Field Value object.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField, gaiaCloneValue,
+ gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+
+ \note the newly created object is an exact copy of the original one.
+ */
+    GAIAGEO_DECLARE gaiaValuePtr gaiaCloneValue (gaiaValuePtr org);
+
+/**
+ Resets a DBF Field Value object to its initial empty state
+
+ \param p pointer to DBF Field Value object
+
+ \sa gaiaAllocDbfField, gaiaCloneDbfField, gaiaCloneValue,
+ gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue, gaiaResetDbfEntity
+ */
+    GAIAGEO_DECLARE void gaiaFreeValue (gaiaValuePtr p);
+
+/**
+ Allocates a new DBF Field object
+
+ \param name text string: DBF Field name.
+ \param type identifier of the corresponding DBF data type.
+ \param offset corresponding offset into the DBF I/O buffer.
+ \param length max field length (in bytes).
+ \param decimals precision: number of decimal digits.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaFreeDbfField, gaiaCloneDbfField, gaiaFreeValue,
+ gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+
+ \note you are responsible to destroy (before or after) any allocated DBF Field,
+ unless you've passed ownership to some further object: in this case destroying  the higher order object will implicitly destroy any contained child object.  
+ \n supported DBF data types are:
+ \li 'C' text string [default]
+ \li 'N' numeric
+ \li 'D' date
+ \li 'L' boolean
+ */
+    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAllocDbfField (char *name,
+						       unsigned char type,
+						       int offset,
+						       unsigned char length,
+						       unsigned char decimals);
+
+/**
+ Destroys a DBF Field object
+
+ \param p pointer to DBF Field object
+
+ \sa gaiaAllocDbfField, gaiaCloneDbfField, gaiaCloneValue,
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaFreeDbfField (gaiaDbfFieldPtr p);
+
+/**
+ Allocates a new DBF Field object [duplicating an existing one]
+
+ \param org pointer to input DBF Field object.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField, 
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+
+ \note the newly created object is an exact copy of the original one
+ [this including an evantual Field Value].
+ */
+    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaCloneDbfField (gaiaDbfFieldPtr org);
+
+/**
+ Sets a NULL current value for a DBF Field object
+
+ \param field pointer to DBF Field object
+ 
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField,
+ gaiaFreeValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaSetNullValue (gaiaDbfFieldPtr field);
+
+/**
+ Sets an INTEGER current value for a DBF Field object
+
+ \param field pointer to DBF Field object.
+ \param value integer value to be set.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField,
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaSetIntValue (gaiaDbfFieldPtr field,
+					  sqlite3_int64 value);
+
+/**
+ Sets a DOUBLE current value for a DBF Field object
+ 
+ \param field pointer to DBF Field object.
+ \param value double value to be set.
+                                          
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField, 
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaSetDoubleValue (gaiaDbfFieldPtr field,
+					     double value);
+
+/**
+ Sets a TEXT current value for a DBF Field object
+
+ \param field pointer to DBF Field object.
+ \param str text string value to be set.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField,
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue
+ */
+    GAIAGEO_DECLARE void gaiaSetStrValue (gaiaDbfFieldPtr field, char *str);
+
+/**
+ Creates an initially empty DBF List object
+
+ \return the pointer to newly allocated DBF List object: NULL on failure.
+
+ \sa gaiaFreeDbfList, gaiaIsValidDbfList, 
+ gaiaResetDbfEntity, gaiaCloneDbfEntity, gaiaAddDbfField
+ 
+ \note you are responsible to destroy (before or after) any allocated DBF List,
+ unless you've passed ownership to some further object: in this case destroying
+ the higher order object will implicitly destroy any contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaDbfListPtr gaiaAllocDbfList (void);
+
+/**
+ Destroys a DBF List object
+ 
+ \param list pointer to the DBF List object
+
+ \sa gaiaAllocDbfList, gaiaIsValidDbfList,
+ gaiaResetDbfEntity, gaiaCloneDbfEntity, gaiaAddDbfField
+
+ \note attempting to destroy any DBF List object whose ownnership has already 
+ been transferred to some other (higher order) object is a serious error,
+ and will easily cause severe memory corruption. 
+ */
+    GAIAGEO_DECLARE void gaiaFreeDbfList (gaiaDbfListPtr list);
+
+/**
+ Checks a DBF List object for validity
+
+ \param list pointer to the DBF List object.
+ 
+ \return 0 if not valid: any other value if valid.
+
+ \sa gaiaAllocDbfList, gaiaFreeDbfList, gaiaIsValidDbfList,
+ gaiaResetDbfEntity, gaiaCloneDbfEntity, gaiaAddDbfField
+ */
+    GAIAGEO_DECLARE int gaiaIsValidDbfList (gaiaDbfListPtr list);
+
+/**
+ Inserts a further DBF Field object into a DBF List object
+
+ \param list pointer to the DBF List object.
+ \param name text string: DBF Field name.
+ \param type identifier of the corresponding DBF data type.
+ \param offset corresponding offset into the DBF I/O buffer.
+ \param length max field length (in bytes).
+ \param decimals precision: number of decimal digits.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaAllocDbfField
+
+ \note supported DBF data types are:
+ \li 'C' text string [default]
+ \li 'N' numeric
+ \li 'D' date
+ \li 'L' boolean
+ */
+    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAddDbfField (gaiaDbfListPtr list,
+						     char *name,
+						     unsigned char type,
+						     int offset,
+						     unsigned char length,
+						     unsigned char decimals);
+
+/** 
+ Resets a DBF List object to its initial empty state
+
+ \param list pointer to the DBF List object.
+
+ \sa gaiaFreeValue
+
+ \note any DBF Field associated to the List object will be reset to its
+ initial empty state (i.e. \e no \e value at all).
+ */
+    GAIAGEO_DECLARE void gaiaResetDbfEntity (gaiaDbfListPtr list);
+
+/**
+ Allocates a new DBF List object [duplicating an existing one]
+
+ \param org pointer to input DBF List object.
+
+ \return the pointer to newly created DBF List object.
+
+ \sa gaiaCloneDbfField, gaiaCloneValue,
+
+ \note the newly created object is an exact copy of the original one.
+ \n this including any currently set Field Value.
+ */
+    GAIAGEO_DECLARE gaiaDbfListPtr gaiaCloneDbfEntity (gaiaDbfListPtr org);
+
+/**
+ Allocates a new Shapefile object.
+
+ \return the pointer to newly created Shapefile object.
+
+ \sa gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+
+ \note you are responsible to destroy (before or after) any allocated Shapefile.
+ \n you should phisically open the Shapefile in \e read or \e write mode
+ before performing any actual I/O operation.
+ */
+    GAIAGEO_DECLARE gaiaShapefilePtr gaiaAllocShapefile (void);
+
+/**
+ Destroys a Shapefile object 
+
+ \param shp pointer to the Shapefile object.
+
+ \sa gaiaAllocShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+ 
+ \note destroying the Shapefile object will close any related file:
+ anyway you a responsible to explicitly call gaiaFlushShpHeader
+ before destroyng a Shapefile opened in \e write mode.
+ */
+    GAIAGEO_DECLARE void gaiaFreeShapefile (gaiaShapefilePtr shp);
+
+/** 
+ Open a Shapefile in read mode
+
+ \param shp pointer to the Shapefile object.
+ \param path \e abstract pathname to the corresponding file-system files.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+ 
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ \n the \e abstract pathname should not contain any suffix at all.
+ */
+    GAIAGEO_DECLARE void gaiaOpenShpRead (gaiaShapefilePtr shp,
+					  const char *path,
+					  const char *charFrom,
+					  const char *charTo);
+
+/**
+ Open a Shapefile in read mode
+
+ \param shp pointer to the Shapefile object.
+ \param path \e abstract pathname to the corresponding file-system files.
+ \param shape the SHAPE code; expected to be one of GAIA_SHP_POINT,
+ GAIA_SHP_POLYLINE, GAIA_SHP_POLYGON, GAIA_SHP_MULTIPOINT, GAIA_SHP_POINTZ,
+ GAIA_SHP_POLYLINEZ, GAIA_SHP_POLYGONZ, GAIA_SHP_MULTIPOINTZ, 
+ GAIA_SHP_POINTM, GAIA_SHP_POLYLINEM, GAIA_SHP_POLYGONM, GAIA_SHP_MULTIPOINTM
+ \param list pointer to DBF List object representing the corresponding
+ data attributes.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, 
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+ 
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ \n the \e abstract pathname should not contain any suffix at all.
+ */
+    GAIAGEO_DECLARE void gaiaOpenShpWrite (gaiaShapefilePtr shp,
+					   const char *path, int shape,
+					   gaiaDbfListPtr list,
+					   const char *charFrom,
+					   const char *charTo);
+
+/**
+ Reads a feature from a Shapefile object
+
+ \param shp pointer to the Shapefile object.
+ \param current_row the row number identifying the feature to be read.
+ \param srid feature's SRID 
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+
+ \note on completion the Shapefile's \e Dbf member will contain the feature
+ read:
+ \li the \e Dbf->Geometry member will contain the corresponding Geometry
+ \li and the \e Dbf->First member will point to the linked list containing
+ the corresponding data attributes [both data formats and values].
+
+ \remark the Shapefile object should be opened in \e read mode.
+ */
+    GAIAGEO_DECLARE int gaiaReadShpEntity (gaiaShapefilePtr shp,
+					   int current_row, int srid);
+
+/**
+ Prescans a Shapefile object gathering informations
+
+ \param shp pointer to the Shapefile object.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaWriteShpEntity, gaiaFlushShpHeaders
+
+ \note on completion the Shapefile's \e EffectiveType will containt the
+ Geometry type corresponding to features actually found.
+
+ \remark the Shapefile object should be opened in \e read mode.
+ */
+    GAIAGEO_DECLARE void gaiaShpAnalyze (gaiaShapefilePtr shp);
+
+/**
+ Writes a feature into a Shapefile object
+                                            
+ \param shp pointer to the Shapefile object.
+ \param entity pointer to DBF List object containing both Geometry and Field 
+ values.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaFlushShpHeaders
+
+ \remark the Shapefile object should be opened in \e write mode.
+ */
+    GAIAGEO_DECLARE int gaiaWriteShpEntity (gaiaShapefilePtr shp,
+					    gaiaDbfListPtr entity);
+
+/**
+ Writes into an output Shapefile any required header / footer
+
+ \param shp pointer to the Shapefile object.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity
+
+ \note forgetting to call gaiaFlushShpHeader for any Shapefile opened in
+ \e write mode immediately before destroying the object, will surely 
+ cause severe file corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFlushShpHeaders (gaiaShapefilePtr shp);
+
+/**
+ Allocates a new DBF File object.
+
+ \return the pointer to newly created DBF File object.
+
+ \sa gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+
+ \note you are responsible to destroy (before or after) any allocated DBF File.
+ \n you should phisically open the DBF File in \e read or \e write mode
+ before performing any actual I/O operation.
+ */
+    GAIAGEO_DECLARE gaiaDbfPtr gaiaAllocDbf (void);
+
+/**
+ Destroys a DBF File object 
+    
+ \param dbf pointer to the DBF File object.
+                                          
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+ 
+ \note destroying the Shapefile object will close any related file:
+ anyway you a responsible to explicitly call gaiaFlushShpHeader
+ before destroyng a Shapefile opened in \e write mode.
+ */
+    GAIAGEO_DECLARE void gaiaFreeDbf (gaiaDbfPtr dbf);
+
+/**
+ Open a DBF File in read mode
+
+ \param dbf pointer to the DBF File object.
+ \param path pathname to the corresponding file-system file.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ */
+    GAIAGEO_DECLARE void gaiaOpenDbfRead (gaiaDbfPtr dbf,
+					  const char *path,
+					  const char *charFrom,
+					  const char *charTo);
+
+/** 
+ Open a DBF File in write mode
+
+ \param dbf pointer to the DBF File object.
+ \param path pathname to the corresponding file-system file.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, 
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+ 
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ */
+    GAIAGEO_DECLARE void gaiaOpenDbfWrite (gaiaDbfPtr dbf,
+					   const char *path,
+					   const char *charFrom,
+					   const char *charTo);
+
+/**
+ Reads a record from a DBF File object
+
+ \param dbf pointer to the DBF File object.
+ \param current_row the row number identifying the record to be read.
+ \param deleted on completion this variable will contain 0 if the record
+ just read is valid: any other value if the record just read is marked as
+ \e logically \e deleted.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaFlushDbfHeader
+
+ \note on completion the DBF File \e First member will point to the 
+ linked list containing the corresponding data attributes [both data 
+ formats and values].
+
+ \remark the DBF File object should be opened in \e read mode.
+ */
+    GAIAGEO_DECLARE int gaiaReadDbfEntity (gaiaDbfPtr dbf, int current_row,
+					   int *deleted);
+
+/**
+ Writes a record into a DBF File object
+
+ \param dbf pointer to the DBF File object.
+ \param entity pointer to DBF List object containing Fields and corresponding
+ values.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaFlushDbfHeader
+
+ \remark the DBF File object should be opened in \e write mode.
+ */
+    GAIAGEO_DECLARE int gaiaWriteDbfEntity (gaiaDbfPtr dbf,
+					    gaiaDbfListPtr entity);
+
+/**
+ Writes into an output DBF File any required header / footer
+
+ \param dbf pointer to the DBF File object.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity
+
+ \note forgetting to call gaiaFlushDbfHeader for any DBF File opened in
+ \e write mode immediately before destroying the object, will surely 
+ cause severe file corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFlushDbfHeader (gaiaDbfPtr dbf);
+
+
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting text reader */
+
+/** 
+ Creates a Text Reader object
+
+ \param path to the corresponding file-system file.
+ \param field_separator the character acting as a separator between adjacent 
+ fields.
+ \param text_separator the character used to quote text strings.
+ \param decimal_separator the character used as a separator between integer
+ and decimal digits for real numeric values.
+ \param first_line_titles 0 if the first line contains regular values:
+ any other value if the first line contains column names.
+ \param encoding GNU ICONV name identifying the input charset encoding.
+
+ \return the pointer to the newly created Text Reader object: NULL on failure
+
+ \sa gaiaTextReaderDestroy, gaiaTextReaderParse,
+ gaiaTextReaderGetRow, gaiaTextReaderFetchField
+
+ \note you are responsible to destroy (before or after) any allocated Text
+ Reader object.
+ */
+    GAIAGEO_DECLARE gaiaTextReaderPtr gaiaTextReaderAlloc (const char *path,
+							   char field_separator,
+							   char text_separator,
+							   char
+							   decimal_separator,
+							   int
+							   first_line_titles,
+							   const char
+							   *encoding);
+
+/**
+ Destroys a Text Reader object
+
+ \param reader pointer to Text Reader object.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderParse,
+ gaiaTextReaderGetRow, gaiaTextReaderFetchField
+ */
+    GAIAGEO_DECLARE void gaiaTextReaderDestroy (gaiaTextReaderPtr reader);
+
+/**
+ Prescans the external file associated to a Text Reade object
+
+ \param reader pointer to Text Reader object.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderDestroy, 
+ gaiaTextReaderGetRow, gaiaTextReaderFetchField
+
+ \note this preliminary step is required so to ensure:
+ \li file consistency: checking expected formatting rules.
+ \li identifying the number / type / name of fields [aka columns].
+ \li identifying the actual number of lines within the file.
+ */
+    GAIAGEO_DECLARE int gaiaTextReaderParse (gaiaTextReaderPtr reader);
+
+/**
+ Reads a line from a Text Reader object
+ 
+ \param reader pointer to Text Reader object.
+ \param row_num the Line Number identifying the Line to be read.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderDestroy, gaiaTextReaderParse,
+ gaiaTextReaderFetchField
+
+ \note this function will load the requested Line into the current buffer:
+ you can then use gaiaTextReaderFetchField in order to retrieve
+ any individual field [aka column] value.
+ */
+    GAIAGEO_DECLARE int gaiaTextReaderGetRow (gaiaTextReaderPtr reader,
+					      int row_num);
+
+/**
+ Retrieves an individual field value from the current Line
+
+ \param reader pointer to Text Reader object.
+ \param field_num relative field [aka column] index: first field has index 0.
+ \param type on completion this variable will contain the value type.
+ \param value on completion this variable will contain the current field value.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderDestroy, gaiaTextReaderParse,
+ gaiaTextReaderGetRow
+ */
+    GAIAGEO_DECLARE int gaiaTextReaderFetchField (gaiaTextReaderPtr reader,
+						  int field_num, int *type,
+						  const char **value);
+
+#endif				/* end ICONV (text reader) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_FORMATS_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_mbr.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_mbr.h
new file mode 100644
index 0000000..bcfc601
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_mbr.h
@@ -0,0 +1,464 @@
+/*
+ gg_mbr.h -- Gaia common support for geometries: MBR functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_mbr.h
+
+ Geometry handling functions: MBR
+ */
+
+#ifndef _GG_MBR_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_MBR_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Updates the actual MBR for a Linestring object
+
+ \param line pointer to the Linestring object 
+ */
+    GAIAGEO_DECLARE void gaiaMbrLinestring (gaiaLinestringPtr line);
+
+/**
+ Updates the actual MBR for a Ring object
+
+ \param rng pointer to the Ring object
+ */
+    GAIAGEO_DECLARE void gaiaMbrRing (gaiaRingPtr rng);
+
+/**
+ Updates the actual MBR for a Polygon object
+
+ \param polyg pointer to the Polygon object
+ */
+    GAIAGEO_DECLARE void gaiaMbrPolygon (gaiaPolygonPtr polyg);
+
+/**
+ Updates the actual MBR for a Geometry object
+
+ \param geom pointer to the Geometry object
+ */
+    GAIAGEO_DECLARE void gaiaMbrGeometry (gaiaGeomCollPtr geom);
+
+/**
+ Retrieves the MBR (MinX) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param minx on completion this variable will contain the MBR MinX coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMaxX, gaiaGetMbrMinY, gaiaGetMbrMaxY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMinX (const unsigned char *blob,
+					unsigned int size, double *minx);
+
+/**
+ Retrieves the MBR (MaxX) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param maxx on completion this variable will contain the MBR MaxX coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMinX, gaiaGetMbrMinY, gaiaGetMbrMaxY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMaxX (const unsigned char *blob,
+					unsigned int size, double *maxx);
+
+/**
+ Retrieves the MBR (MinY) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param miny on completion this variable will contain the MBR MinY coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMinX, gaiaGetMbrMaxX, gaiaGetMbrMaxY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMinY (const unsigned char *blob,
+					unsigned int size, double *miny);
+
+/**
+ Retrieves the MBR (MaxY) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param maxy on completion this variable will contain the MBR MaxY coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMinX, gaiaGetMbrMaxX, gaiaGetMbrMinY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMaxY (const unsigned char *blob,
+					unsigned int size, double *maxy);
+
+/**
+ Creates a Geometry object corresponding to the Envelope [MBR] for a
+ BLOB-Geometry
+
+ \param blob pointer to BLOB-Geometry
+ \param size the BLOB's size (in bytes)
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any 
+ contained child object. 
+ */
+
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobMbr (const unsigned
+							       char *blob,
+							       unsigned int
+							       size);
+
+/**
+ MBRs comparison: Contains
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 spatially \e contains mbr2
+
+ \sa gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsContains (gaiaGeomCollPtr mbr1,
+					  gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Disjoint
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 are spatially \e disjoint
+
+ \sa gaiaMbrsContains, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsDisjoint (gaiaGeomCollPtr mbr1,
+					  gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Equal
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 are spatially \e equal
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsEqual (gaiaGeomCollPtr mbr1,
+				       gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Intersects
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 spatially \e intersect
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, 
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsIntersects (gaiaGeomCollPtr mbr1,
+					    gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Overlaps
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 spatially \e overlap
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsOverlaps (gaiaGeomCollPtr mbr1,
+					  gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Touches
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 spatially \e touche
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsTouches (gaiaGeomCollPtr mbr1,
+					 gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Within
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 is spatially \e within mbr2
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches
+ */
+    GAIAGEO_DECLARE int gaiaMbrsWithin (gaiaGeomCollPtr mbr1,
+					gaiaGeomCollPtr mbr2);
+
+/**
+ Creates a BLOB-Geometry representing an Envelope [MBR]
+
+ \param x1 first X coordinate.
+ \param y1 first Y coordinate.
+ \param x2 second X coordinate.
+ \param y2 second Y coordinate.
+ \param srid the SRID associated to the Envelope
+ \param result on completion will contain a pointer to newly created
+ BLOB-Geometry
+ \param size on completion this variabile will contain the BLOB's size (in 
+ bytes)
+
+ \sa gaiaBuildCircleMbr
+
+ \note [XY] coords must define two extreme Points identifying a diagonal
+ of the MBR [Envelope]
+ \n no special order is required for coords: MAX / MIN values will be 
+ internally arranged as appropriate.
+ */
+    GAIAGEO_DECLARE void gaiaBuildMbr (double x1, double y1, double x2,
+				       double y2, int srid,
+				       unsigned char **result, int *size);
+
+/**
+ Creates a BLOB-Geometry representing an Envelope [MBR]
+
+ \param x centre X coordinate.
+ \param y centre Y coordinate.
+ \param radius the radius of the circle
+ \param srid the SRID associated to the Envelope
+ \param result on completion will contain a pointer to newly created
+ BLOB-Geometry
+ \param size on completion this variabile will contain the BLOB's size (in
+ bytes)
+
+ \sa gaiaBuildMbr
+
+ \note the \e circle of givern \e radius and \e centre will be used so to
+ determine the corresponding \e square Envelope
+ */
+    GAIAGEO_DECLARE void gaiaBuildCircleMbr (double x, double y, double radius,
+					     int srid, unsigned char **result,
+					     int *size);
+
+/**
+ Creates a BLOB-FilterMBR
+
+ \param x1 first X coordinate.
+ \param y1 first Y coordinate.
+ \param x2 second X coordinate.
+ \param y2 second Y coordinate.
+ \param mode one of: GAIA_FILTER_MBR_WITHIN, GAIA_FILTER_MBR_CONTAINS,
+ GAIA_FILTER_MBR_INTERSECTS, GAIA_FILTER_MBR_DECLARE
+ \param result on completion will contain a pointer to newly created
+ BLOB-FilterMBR
+ \param size on completion this variabile will contain the BLOB's size (in
+ bytes)
+
+ \sa gaiaParseFilterMbr
+
+ \note [XY] coords must define two extreme Points identifying a diagonal
+ of the MBR [Envelope]
+ \n no special order is required for coords: MAX / MIN values will be
+ internally arranged as appropriate.
+
+ \remark internally used to implement Geometry Callback R*Tree filtering.
+ */
+    GAIAGEO_DECLARE void gaiaBuildFilterMbr (double x1, double y1, double x2,
+					     double y2, int mode,
+					     unsigned char **result, int *size);
+
+/**
+ Creates a BLOB-FilterMBR
+
+ \param result pointer to BLOB-FilterMBR [previously created by 
+ gaiaBuildFilterMbr]
+ BLOB-Geometry
+ \param size BLOB's size (in bytes)
+ \param minx on completion this variable will contain the MBR MinX coord.
+ \param miny on completion this variable will contain the MBR MinY coord.
+ \param maxx on completion this variable will contain the MBR MinY coord.
+ \param maxy on completion this variable will contain the MBR MaxY coord.
+ \param mode on completion this variable will contain the FilterMBR mode.
+
+ \sa gaiaBuildFilterMbr
+
+ \remark internally used to implement Geometry Callback R*Tree filtering.
+ */
+    GAIAGEO_DECLARE int gaiaParseFilterMbr (unsigned char *result, int size,
+					    double *minx, double *miny,
+					    double *maxx, double *maxy,
+					    int *mode);
+
+/**
+ Computes the Z-Range for a Linestring object
+
+ \param line pointer to the Linestring object
+ \param min on completion this variable will contain the min Z value found 
+ \param max on completion this variable will contain the max Z value found 
+
+ \note if the Linestring has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangeLinestring (gaiaLinestringPtr line,
+					       double *min, double *max);
+
+/**
+ Computes the Z-Range for a Ring object
+
+ \param rng pointer to the Ring object
+ \param min on completion this variable will contain the min Z value found
+ \param max on completion this variable will contain the max Z value found
+
+ \note if the Ring has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangeRing (gaiaRingPtr rng, double *min,
+					 double *max);
+
+/**
+ Computes the Z-Range for a Polygon object
+
+ \param polyg pointer to the Polygon object
+ \param min on completion this variable will contain the min Z value found
+ \param max on completion this variable will contain the max Z value found
+
+ \note if the Polygon has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangePolygon (gaiaPolygonPtr polyg, double *min,
+					    double *max);
+
+/**
+ Computes the Z-Range for a Geometry object
+
+ \param geom pointer to the Geometry object
+ \param min on completion this variable will contain the min Z value found
+ \param max on completion this variable will contain the max Z value found
+
+ \note if the Geometry has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangeGeometry (gaiaGeomCollPtr geom, double *min,
+					     double *max);
+
+/**
+ Computes the M-Range for a Linestring object
+
+ \param line pointer to the Linestring object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Linestring has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangeLinestring (gaiaLinestringPtr line,
+					       double *min, double *max);
+
+/**
+ Computes the M-Range for a Ring object
+
+ \param rng pointer to the Ring object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Ring has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangeRing (gaiaRingPtr rng, double *min,
+					 double *max);
+
+/**
+ Computes the M-Range for a Polygon object
+
+ \param polyg pointer to the Polygon object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Polygon has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangePolygon (gaiaPolygonPtr polyg, double *min,
+					    double *max);
+
+/**
+ Computes the Z-Range for a Geometry object
+
+ \param geom pointer to the Geometry object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Geometry has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangeGeometry (gaiaGeomCollPtr geom, double *min,
+					     double *max);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_MBR_H */
diff --git a/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_structs.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_structs.h
new file mode 100644
index 0000000..15bfbc0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/gg_structs.h
@@ -0,0 +1,624 @@
+/*
+ gg_structs.h -- Gaia common support for geometries: structures
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_structs.h
+
+ Geometry structures
+ */
+
+#ifndef _GG_STRUCTS_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_STRUCTS_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ Container for OGC POINT Geometry
+ */
+    typedef struct gaiaPointStruct
+    {
+/* an OpenGis POINT */
+/** X coordinate */
+	double X;		/* X,Y coordinates */
+/** Y coordinate */
+	double Y;
+/** Z coordinate: only for XYZ and XYZM dims */
+	double Z;		/* Z coordinate */
+/** M measure: only for XYM and XYZM dims */
+	double M;		/* M measure */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [double linked list] */
+	struct gaiaPointStruct *Next;	/* for double-linked list */
+/** pointer to previous item [double linked list] */
+	struct gaiaPointStruct *Prev;	/* for double-linked list */
+    } gaiaPoint;
+/**
+ Typedef for OGC POINT structure
+
+ \sa gaiaPoint
+ */
+    typedef gaiaPoint *gaiaPointPtr;
+
+/**
+ Container for dynamically growing line/ring
+ */
+    typedef struct gaiaDynamicLineStruct
+    {
+/* a generic DYNAMIC LINE object */
+/** invalid object */
+	int Error;
+/** the SRID */
+	int Srid;
+/** pointer to first POINT [double linked list] */
+	gaiaPointPtr First;	/* Points linked list - first */
+/** pointer to last POINT [double linked list] */
+	gaiaPointPtr Last;	/* Points linked list - last */
+    } gaiaDynamicLine;
+/**
+ Typedef for dynamically growing line/ring structure
+
+ \sa gaiaDynamicLine
+ */
+    typedef gaiaDynamicLine *gaiaDynamicLinePtr;
+
+/**
+ Container for OGC LINESTRING Geometry
+ */
+    typedef struct gaiaLinestringStruct
+    {
+/* an OpenGis LINESTRING */
+/** number of points [aka vertices] */
+	int Points;		/* number of vertices */
+/** COORDs mem-array */
+	double *Coords;		/* X,Y [vertices] array */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [linked list] */
+	struct gaiaLinestringStruct *Next;	/* for linked list */
+    } gaiaLinestring;
+/**
+ Typedef for OGC LINESTRING structure
+
+ \sa gaiaLinestring
+ */
+    typedef gaiaLinestring *gaiaLinestringPtr;
+
+/**
+ Container for OGC RING Geometry
+ */
+    typedef struct gaiaRingStruct
+    {
+/* a GIS ring - OpenGis LINESTRING, closed */
+/** number of points [aka vertices] */
+	int Points;		/* number of vertices */
+/** COORDs mem-array */
+	double *Coords;		/* X,Y [vertices] array */
+/** clockwise / counterclockwise */
+	int Clockwise;		/* clockwise / counterclockwise */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max Y */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [linked list] */
+	struct gaiaRingStruct *Next;	/* for linked list */
+/** pointer to belonging Polygon */
+	struct gaiaPolygonStruct *Link;	/* polygon reference */
+    } gaiaRing;
+/**
+ Typedef for OGC RING structure
+
+ \sa gaiaRing
+ */
+    typedef gaiaRing *gaiaRingPtr;
+
+/**
+ Container for OGC POLYGON Geometry
+ */
+    typedef struct gaiaPolygonStruct
+    {
+/* an OpenGis POLYGON */
+/** the exterior ring (mandatory) */
+	gaiaRingPtr Exterior;	/* exterior ring */
+/** number of interior rings (may be, none) */
+	int NumInteriors;	/* number of interior rings */
+/** array of interior rings */
+	gaiaRingPtr Interiors;	/* interior rings array */
+/** index of first unused interior ring */
+	int NextInterior;	/* first free interior ring */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max Y */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [linked list] */
+	struct gaiaPolygonStruct *Next;	/* for linked list */
+    } gaiaPolygon;
+/**
+ Typedef for OGC POLYGON structure
+ 
+ \sa gaiaPolygon
+ */
+    typedef gaiaPolygon *gaiaPolygonPtr;
+
+/**
+ Container for OGC GEOMETRYCOLLECTION Geometry
+ */
+    typedef struct gaiaGeomCollStruct
+    {
+/* OpenGis GEOMETRYCOLLECTION */
+/** the SRID */
+	int Srid;		/* the SRID value for this GEOMETRY */
+/** CPU endian arch */
+	char endian_arch;	/* littleEndian - bigEndian arch for target CPU */
+/** BLOB Geometry endian arch */
+	char endian;		/* littleEndian - bigEndian */
+/** BLOB-Geometry buffer */
+	const unsigned char *blob;	/* WKB encoded buffer */
+/** BLOB-Geometry buffer size (in bytes) */
+	unsigned long size;	/* buffer size */
+/** current offset [BLOB parsing] */
+	unsigned long offset;	/* current offset [for parsing] */
+/** pointer to first POINT [linked list]; may be NULL */
+	gaiaPointPtr FirstPoint;	/* Points linked list - first */
+/** pointer to last POINT [linked list]; may be NULL */
+	gaiaPointPtr LastPoint;	/* Points linked list - last */
+/** pointer to first LINESTRING [linked list]; may be NULL */
+	gaiaLinestringPtr FirstLinestring;	/* Linestrings linked list - first */
+/** pointer to last LINESTRING [linked list]; may be NULL */
+	gaiaLinestringPtr LastLinestring;	/* Linestrings linked list - last */
+/** pointer to first POLYGON [linked list]; may be NULL */
+	gaiaPolygonPtr FirstPolygon;	/* Polygons linked list - first */
+/** pointer to last POLYGON [linked list]; may be NULL */
+	gaiaPolygonPtr LastPolygon;	/* Polygons linked list - last */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max Y */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** any valid Geometry Class type */
+	int DeclaredType;	/* the declared TYPE for this Geometry */
+/** pointer to next item [linked list] */
+	struct gaiaGeomCollStruct *Next;	/* Vanuatu - used for linked list */
+    } gaiaGeomColl;
+/**
+ Typedef for OGC GEOMETRYCOLLECTION structure
+
+ \sa gaiaGeomCool
+ */
+    typedef gaiaGeomColl *gaiaGeomCollPtr;
+
+/**
+ Container similar to LINESTRING [internally used]
+ */
+    typedef struct gaiaPreRingStruct
+    {
+/* a LINESTRING used to build rings */
+/** pointer to LINESTRING */
+	gaiaLinestringPtr Line;	/* a LINESTRING pointer */
+/** already used/visited item */
+	int AlreadyUsed;	/* a switch to mark an already used line element */
+/** pointer to next item [linked list] */
+	struct gaiaPreRingStruct *Next;	/* for linked list */
+    } gaiaPreRing;
+/**
+ Typedef for gaiaPreRing structure
+
+ \sa gaiaPreRing
+ */
+    typedef gaiaPreRing *gaiaPreRingPtr;
+
+/**
+ Container for variant (multi-type) value
+ */
+    typedef struct gaiaValueStruct
+    {
+/* a DBF field multitype value */
+/** data type: one of GAIA_NULL_VALUE, GAIA_INT_VALUE, GAIA_DOUBLE_VALUE, GAIA_TEXT_VALUE */
+	short Type;		/* the type */
+/** TEXT type value */
+	char *TxtValue;		/* the text value */
+/** INT type value */
+	sqlite3_int64 IntValue;	/* the integer value */
+/** DOUBLE type value */
+	double DblValue;	/* the double value */
+    } gaiaValue;
+/**
+ Typedef for variant (multi-type) value structure 
+ */
+    typedef gaiaValue *gaiaValuePtr;
+
+/**
+ Container for DBF field
+ */
+    typedef struct gaiaDbfFieldStruct
+    {
+/* a DBF field definition - shapefile attribute */
+/** field name [max. 10 char] */
+	char *Name;		/* field name */
+/** DBF data type */
+	unsigned char Type;	/* field type */
+/** DBF buffer offset [where the field value starts] */
+	int Offset;		/* buffer offset [this field begins at *buffer+offset* and extends for *length* bytes */
+/** total DBF buffer field length (in bytes) */
+	unsigned char Length;	/* field total length [in bytes] */
+/** precision (decimal digits) */
+	unsigned char Decimals;	/* decimal positions */
+/** current variant [multi-type] value */
+	gaiaValuePtr Value;	/* the current multitype value for this attribute */
+/** pointer to next item [linked list] */
+	struct gaiaDbfFieldStruct *Next;	/* pointer to next element in linked list */
+    } gaiaDbfField;
+/**
+ Typedef for DBF field structure 
+ */
+    typedef gaiaDbfField *gaiaDbfFieldPtr;
+
+/**
+ Container for a list of DBF fields
+ */
+    typedef struct gaiaDbfListStruct
+    {
+/* a linked list to contain the DBF fields definitions - shapefile attributes */
+/** current RowID */
+	int RowId;		/* the current RowId */
+/** current Geometry */
+	gaiaGeomCollPtr Geometry;	/* geometry for current entity */
+/** pointer to first DBF field [linked list] */
+	gaiaDbfFieldPtr First;	/* pointer to first element in linked list */
+/** pointer to last DBF field [linked list] */
+	gaiaDbfFieldPtr Last;	/* pointer to last element in linker list */
+    } gaiaDbfList;
+/**
+ Typedef for a list of DBF fields
+ 
+ \sa gaiaDbfList
+ */
+    typedef gaiaDbfList *gaiaDbfListPtr;
+
+/**
+ Container for DBF file handling
+ */
+    typedef struct gaiaDbfStruct
+    {
+/* DBF TYPE */
+/** DBF endian arch */
+	int endian_arch;
+/** validity flag: 1 = ready to be processed */
+	int Valid;		/* 1 = ready to process */
+/** DBF file pathname */
+	char *Path;		/* the DBF path */
+/** FILE handle */
+	FILE *flDbf;		/* the DBF file handle */
+/** list of DBF fields */
+	gaiaDbfListPtr Dbf;	/* the DBF attributes list */
+/** I/O buffer */
+	unsigned char *BufDbf;	/* the DBF I/O buffer */
+/** header size (in bytes) */
+	int DbfHdsz;		/* the DBF header length */
+/** record length (in bytes) */
+	int DbfReclen;		/* the DBF record length */
+/** current file size */
+	int DbfSize;		/* current DBF size */
+/** current Record Number */
+	int DbfRecno;		/* current DBF record number */
+/** handle to ICONV converter object */
+	void *IconvObj;		/* opaque reference to ICONV converter */
+/** last error message (may be NULL) */
+	char *LastError;	/* last error message */
+    } gaiaDbf;
+/** 
+ Typedef for DBF file handler structure
+
+ \sa gaiaDbf
+ */
+    typedef gaiaDbf *gaiaDbfPtr;
+
+/**
+ Container for SHP file handling
+ */
+    typedef struct gaiaShapefileStruct
+    {
+/* SHAPEFILE TYPE */
+/** SHP endian arch */
+	int endian_arch;
+/** validity flag: 1 = ready to be processed */
+	int Valid;		/* 1 = ready to process */
+/** read or write mode */
+	int ReadOnly;		/* read or write mode */
+/** SHP 'abstract' path (no suffixes) */
+	char *Path;		/* the shapefile abstract path [no suffixes] */
+/** FILE handle to SHX file */
+	FILE *flShx;		/* the SHX file handle */
+/** FILE handle to SHP file */
+	FILE *flShp;		/* the SHP file handle */
+/** FILE handle to DBF file */
+	FILE *flDbf;		/* the DBF file handle */
+/** the SHP shape code */
+	int Shape;		/* the SHAPE code for the whole shapefile */
+/** list of DBF fields */
+	gaiaDbfListPtr Dbf;	/* the DBF attributes list */
+/** DBF I/O buffer */
+	unsigned char *BufDbf;	/* the DBF I/O buffer */
+/** DBF header size (in bytes) */
+	int DbfHdsz;		/* the DBF header length */
+/** DBF record length (in bytes) */
+	int DbfReclen;		/* the DBF record length */
+/** DBF current file size (in bytes) */
+	int DbfSize;		/* current DBF size */
+/** DBF current Record Number */
+	int DbfRecno;		/* current DBF record number */
+/** SHP I/O buffer */
+	unsigned char *BufShp;	/* the SHP I/O buffer */
+/** SHP current buffer size (in bytes) */
+	int ShpBfsz;		/* the SHP buffer current size */
+/** SHP current file size */
+	int ShpSize;		/* current SHP size */
+/** SHX current file size */
+	int ShxSize;		/* current SHX size */
+/** Total Extent: min X */
+	double MinX;		/* the MBR/BBOX for the whole shapefile */
+/** Total Extent: min Y */
+	double MinY;
+/** Total Extent: max X */
+	double MaxX;
+/** Total Extent: max Y */
+	double MaxY;
+/** handle to ICONV converter object */
+	void *IconvObj;		/* opaque reference to ICONV converter */
+/** last error message (may be NULL) */
+	char *LastError;	/* last error message */
+/** SHP actual OGC Geometry type */
+	int EffectiveType;	/* the effective Geometry-type, as determined by gaiaShpAnalyze() */
+/** SHP actual dims: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int EffectiveDims;	/* the effective Dimensions [XY, XYZ, XYM, XYZM], as determined by gaiaShpAnalyze() */
+    } gaiaShapefile;
+/**
+ Typedef for SHP file handler structure
+
+ \sa gaiaShapefile
+ */
+    typedef gaiaShapefile *gaiaShapefilePtr;
+
+/**
+ Container for dynamically growing output buffer
+ */
+    typedef struct gaiaOutBufferStruct
+    {
+/* a struct handling a dynamically growing output buffer */
+/** current buffer */
+	char *Buffer;
+/** current write offset */
+	int WriteOffset;
+/** current buffer size (in bytes) */
+	int BufferSize;
+/** validity flag */
+	int Error;
+    } gaiaOutBuffer;
+/**
+ Typedef for dynamically growing output buffer structure
+
+ \sa gaiaOutBuffer
+ */
+    typedef gaiaOutBuffer *gaiaOutBufferPtr;
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting text reader */
+
+/** Virtual Text driver: MAX number of fields */
+#define VRTTXT_FIELDS_MAX	65535
+/** Virtual Text driver: MAX block size (in bytes) */
+#define VRTTXT_BLOCK_MAX 65535
+
+/** Virtual Text driver: TEXT value */
+#define VRTTXT_TEXT		1
+/** Virtual Text driver: INTEGER value */
+#define VRTTXT_INTEGER	2
+/** Virtual Text driver: DOUBLE value */
+#define VRTTXT_DOUBLE	3
+/** Virtual Text driver: NULL value */
+#define VRTTXT_NULL	4
+
+/**
+ Container for Virtual Text record (line)
+ */
+    struct vrttxt_line
+    {
+/* a struct representing a full LINE (aka Record) */
+/** current offset (parsing) */
+	off_t offset;
+/** line length (in bytes) */
+	int len;
+/** array of field offsets (where each field starts) */
+	int field_offsets[VRTTXT_FIELDS_MAX];
+/** number of field into the record */
+	int num_fields;
+/** validity flag */
+	int error;
+    };
+
+/**
+ Container for Virtual Text record (line) offsets 
+ */
+    struct vrttxt_row
+    {
+/* a struct storing Row offsets */
+/** Line Number */
+	int line_no;
+/** start offset */
+	off_t offset;
+/** record (line) length (in bytes) */
+	int len;
+/** number of fields into this record */
+	int num_fields;
+    };
+
+/**
+ Container for Virtual Text block of records
+ */
+    struct vrttxt_row_block
+    {
+/*
+/ for efficiency sake, individual Row offsets 
+/ are grouped in reasonably sized blocks
+*/
+/** array of records [lines] */
+	struct vrttxt_row rows[VRTTXT_BLOCK_MAX];
+/** number of records into the array */
+	int num_rows;
+/** min Line Number */
+	int min_line_no;
+/** max Line Number */
+	int max_line_no;
+/** pointer to next item [linked list] */
+	struct vrttxt_row_block *next;
+    };
+
+/** 
+ Container for Virtual Text column (field) header
+ */
+    struct vrttxt_column_header
+    {
+/* a struct representing a Column (aka Field) header */
+/** column name */
+	char *name;
+/** data type: one of GAIA_NULL_VALUE, GAIA_INT_VALUE, GAIA_DOUBLE_VALUE, GAIA_TEXT_VALUE */
+	int type;
+    };
+
+/**
+ Container for Virtual Text file handling
+ */
+    typedef struct vrttxt_reader
+    {
+/* the main TXT-Reader struct */
+/** array of columns (fields) */
+	struct vrttxt_column_header columns[VRTTXT_FIELDS_MAX];
+/** FILE handle */
+	FILE *text_file;
+/** handle to ICONV converter object */
+	void *toUtf8;		/* the UTF-8 ICONV converter */
+/** field separator character */
+	char field_separator;
+/** text separator character (quote) */
+	char text_separator;
+/** decimal separator */
+	char decimal_separator;
+/** TRUE if the first line contains column names */
+	int first_line_titles;
+/** validity flag */
+	int error;
+/** pointer to first block of records [linked list] */
+	struct vrttxt_row_block *first;
+/** pointer to last block of records [linked list] */
+	struct vrttxt_row_block *last;
+/** array of pointers to individual records [lines] */
+	struct vrttxt_row **rows;
+/** number of records */
+	int num_rows;
+/** current Line Number */
+	int line_no;
+/** max number of columns (fields) */
+	int max_fields;
+/** current buffer size */
+	int current_buf_sz;
+/** current buffer offset [parsing] */
+	int current_buf_off;
+/** I/O buffer */
+	char *line_buffer;
+/** current field buffer */
+	char *field_buffer;
+/** array of field offsets [current record] */
+	int field_offsets[VRTTXT_FIELDS_MAX];
+/** array of field lengths [current record] */
+	int field_lens[VRTTXT_FIELDS_MAX];
+/** max field [current record] */
+	int max_current_field;
+/** current record [line] ready for parsing */
+	int current_line_ready;
+    } gaiaTextReader;
+/**
+ Typedef for Virtual Text file handling structure
+
+ \sa gaiaTextReader
+ */
+    typedef gaiaTextReader *gaiaTextReaderPtr;
+
+#endif				/* end ICONV (text reader) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_STRUCTS_H */
diff --git a/libspatialite/src/headers/spatialite/spatialite.h b/libspatialite/libspatialite-3.0.1/src/headers/spatialite/spatialite.h
similarity index 100%
copy from libspatialite/src/headers/spatialite/spatialite.h
copy to libspatialite/libspatialite-3.0.1/src/headers/spatialite/spatialite.h
diff --git a/libspatialite/libspatialite-3.0.1/src/shapefiles/Makefile.am b/libspatialite/libspatialite-3.0.1/src/shapefiles/Makefile.am
new file mode 100644
index 0000000..b77ffb0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/shapefiles/Makefile.am
@@ -0,0 +1,15 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libshapefiles.la
+
+libshapefiles_la_SOURCES = shapefiles.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/shapefiles/Makefile.in b/libspatialite/libspatialite-3.0.1/src/shapefiles/Makefile.in
new file mode 100644
index 0000000..a4b7330
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/shapefiles/Makefile.in
@@ -0,0 +1,488 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/shapefiles
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libshapefiles_la_LIBADD =
+am_libshapefiles_la_OBJECTS = shapefiles.lo
+libshapefiles_la_OBJECTS = $(am_libshapefiles_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libshapefiles_la_SOURCES)
+DIST_SOURCES = $(libshapefiles_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libshapefiles.la
+libshapefiles_la_SOURCES = shapefiles.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/shapefiles/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/shapefiles/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libshapefiles.la: $(libshapefiles_la_OBJECTS) $(libshapefiles_la_DEPENDENCIES) 
+	$(LINK)  $(libshapefiles_la_OBJECTS) $(libshapefiles_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shapefiles.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/shapefiles/shapefiles.c b/libspatialite/libspatialite-3.0.1/src/shapefiles/shapefiles.c
new file mode 100644
index 0000000..385ca70
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/shapefiles/shapefiles.c
@@ -0,0 +1,4096 @@
+/*
+
+ shapefiles.c -- implements shapefile support [import - export]
+
+ version 2.3, 2008 October 13
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s): Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+/* MSVC strictly requires this include [off_t] */
+#include <sys/types.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPATIALITE_AMALGAMATION
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+#include <freexl.h>
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+#define strcasecmp	_stricmp
+#endif
+
+struct dupl_column
+{
+/* a column value in a duplicated row */
+    int pos;
+    char *name;
+    int type;
+    sqlite3_int64 int_value;
+    double dbl_value;
+    const char *txt_value;
+    const void *blob;
+    int size;
+    int query_pos;
+    struct dupl_column *next;
+};
+
+struct dupl_row
+{
+/* a duplicated row with column values */
+    int count;
+    struct dupl_column *first;
+    struct dupl_column *last;
+    const char *table;
+};
+
+static void
+clean_dupl_row (struct dupl_row *str)
+{
+/* destroying a duplicated row struct */
+    struct dupl_column *p;
+    struct dupl_column *pn;
+    p = str->first;
+    while (p)
+      {
+	  pn = p->next;
+	  free (p->name);
+	  free (p);
+	  p = pn;
+      }
+}
+
+static void
+add_to_dupl_row (struct dupl_row *str, const char *name)
+{
+/* adding a column to the duplicated row struct */
+    int len;
+    struct dupl_column *p = malloc (sizeof (struct dupl_column));
+    p->pos = str->count;
+    len = strlen (name);
+    p->name = malloc (len + 1);
+    strcpy (p->name, name);
+    str->count++;
+    p->type = SQLITE_NULL;
+    p->next = NULL;
+    if (str->first == NULL)
+	str->first = p;
+    if (str->last)
+	str->last->next = p;
+    str->last = p;
+}
+
+static void
+set_int_value (struct dupl_row *str, int pos, sqlite3_int64 value)
+{
+/* setting up an integer value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_INTEGER;
+		p->int_value = value;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_double_value (struct dupl_row *str, int pos, double value)
+{
+/* setting up a double value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_FLOAT;
+		p->dbl_value = value;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_text_value (struct dupl_row *str, int pos, const char *value)
+{
+/* setting up a text value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_TEXT;
+		p->txt_value = value;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_blob_value (struct dupl_row *str, int pos, const void *blob, int size)
+{
+/* setting up a blob value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_BLOB;
+		p->blob = blob;
+		p->size = size;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_null_value (struct dupl_row *str, int pos)
+{
+/* setting up a NULL value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_NULL;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+reset_query_pos (struct dupl_row *str)
+{
+/* resetting QueryPos for BLOBs */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  p->query_pos = -1;
+	  p = p->next;
+      }
+}
+
+static int
+check_dupl_blob2 (struct dupl_column *ptr, const void *blob, int size)
+{
+/* checking a BLOB value */
+    if (ptr->type != SQLITE_BLOB)
+	return 0;
+    if (ptr->size != size)
+	return 0;
+    if (memcmp (ptr->blob, blob, size) != 0)
+	return 0;
+    return 1;
+}
+
+static int
+check_dupl_blob (struct dupl_row *str, int pos, const void *blob, int size)
+{
+/* checking a BLOB value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->query_pos == pos)
+	    {
+		return check_dupl_blob2 (p, blob, size);
+	    }
+	  p = p->next;
+      }
+    return 0;
+}
+
+static gaiaDbfFieldPtr
+getDbfField (gaiaDbfListPtr list, char *name)
+{
+/* find a DBF attribute by name */
+    gaiaDbfFieldPtr fld = list->First;
+    while (fld)
+      {
+	  if (strcasecmp (fld->Name, name) == 0)
+	      return fld;
+	  fld = fld->Next;
+      }
+    return NULL;
+}
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting SHP */
+
+SPATIALITE_DECLARE int
+load_shapefile (sqlite3 * sqlite, char *shp_path, char *table, char *charset,
+		int srid, char *column, int coerce2d, int compressed,
+		int verbose, int spatial_index, int *rows, char *err_msg)
+{
+    sqlite3_stmt *stmt = NULL;
+    int ret;
+    char *errMsg = NULL;
+    char sql[65536];
+    char dummyName[4096];
+    int already_exists = 0;
+    int metadata = 0;
+    int sqlError = 0;
+    gaiaShapefilePtr shp = NULL;
+    gaiaDbfFieldPtr dbf_field;
+    int cnt;
+    int col_cnt;
+    int seed;
+    int len;
+    int dup;
+    int idup;
+    int current_row;
+    char **col_name = NULL;
+    unsigned char *blob;
+    int blob_size;
+    char *geom_type;
+    char *txt_dims;
+    char *geo_column = column;
+    if (!geo_column)
+	geo_column = "Geometry";
+/* checking if TABLE already exists */
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     table);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      already_exists = 1;
+	  else
+	    {
+		fprintf (stderr, "load shapefile error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (already_exists)
+      {
+	  if (!err_msg)
+	      fprintf (stderr,
+		       "load shapefile error: table '%s' already exists\n",
+		       table);
+	  else
+	      sprintf (err_msg,
+		       "load shapefile error: table '%s' already exists\n",
+		       table);
+	  return 0;
+      }
+/* checking if MetaData GEOMETRY_COLUMNS exists */
+    strcpy (sql,
+	    "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'geometry_columns'");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      metadata = 1;
+	  else
+	    {
+		fprintf (stderr, "load shapefile error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    shp = gaiaAllocShapefile ();
+    gaiaOpenShpRead (shp, shp_path, charset, "UTF-8");
+    if (!(shp->Valid))
+      {
+	  if (!err_msg)
+	    {
+		fprintf (stderr,
+			 "load shapefile error: cannot open shapefile '%s'\n",
+			 shp_path);
+		if (shp->LastError)
+		    fprintf (stderr, "\tcause: %s\n", shp->LastError);
+	    }
+	  else
+	    {
+		char extra[512];
+		*extra = '\0';
+		if (shp->LastError)
+		    sprintf (extra, "\n\tcause: %s\n", shp->LastError);
+		sprintf (err_msg,
+			 "load shapefile error: cannot open shapefile '%s'%s",
+			 shp_path, extra);
+	    }
+	  gaiaFreeShapefile (shp);
+	  return 0;
+      }
+/* checking for duplicate / illegal column names and antialising them */
+    col_cnt = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* counting DBF fields */
+	  col_cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    col_name = malloc (sizeof (char *) * col_cnt);
+    cnt = 0;
+    seed = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* preparing column names */
+	  strcpy (dummyName, dbf_field->Name);
+	  dup = 0;
+	  for (idup = 0; idup < cnt; idup++)
+	    {
+		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
+		    dup = 1;
+	    }
+	  if (strcasecmp (dummyName, "PK_UID") == 0)
+	      dup = 1;
+	  if (strcasecmp (dummyName, geo_column) == 0)
+	      dup = 1;
+	  if (dup)
+	      sprintf (dummyName, "COL_%d", seed++);
+	  len = strlen (dummyName);
+	  *(col_name + cnt) = malloc (len + 1);
+	  strcpy (*(col_name + cnt), dummyName);
+	  cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    if (verbose)
+	fprintf (stderr,
+		 "========\nLoading shapefile at '%s' into SQLite table '%s'\n",
+		 shp_path, table);
+/* starting a transaction */
+    if (verbose)
+	fprintf (stderr, "\nBEGIN;\n");
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* creating the Table */
+    sprintf (sql, "CREATE TABLE %s", table);
+    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
+    cnt = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  strcat (sql, ",\n\"");
+	  strcat (sql, *(col_name + cnt));
+	  cnt++;
+	  switch (dbf_field->Type)
+	    {
+	    case 'C':
+		strcat (sql, "\" TEXT");
+		break;
+	    case 'N':
+		fflush (stderr);
+		if (dbf_field->Decimals)
+		    strcat (sql, "\" DOUBLE");
+		else
+		  {
+		      if (dbf_field->Length <= 18)
+			  strcat (sql, "\" INTEGER");
+		      else
+			  strcat (sql, "\" DOUBLE");
+		  }
+		break;
+	    case 'D':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'F':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'L':
+		strcat (sql, "\" INTEGER");
+		break;
+	    };
+	  dbf_field = dbf_field->Next;
+      }
+    if (metadata)
+	strcat (sql, ")");
+    else
+      {
+	  strcat (sql, ",\n");
+	  strcat (sql, geo_column);
+	  strcat (sql, " BLOB)");
+      }
+    if (verbose)
+	fprintf (stderr, "%s;\n", sql);
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    if (metadata)
+      {
+	  /* creating Geometry column */
+	  switch (shp->Shape)
+	    {
+	    case GAIA_SHP_POINT:
+	    case GAIA_SHP_POINTM:
+	    case GAIA_SHP_POINTZ:
+		geom_type = "POINT";
+		break;
+	    case GAIA_SHP_MULTIPOINT:
+	    case GAIA_SHP_MULTIPOINTM:
+	    case GAIA_SHP_MULTIPOINTZ:
+		geom_type = "MULTIPOINT";
+		break;
+	    case GAIA_SHP_POLYLINE:
+	    case GAIA_SHP_POLYLINEM:
+	    case GAIA_SHP_POLYLINEZ:
+		gaiaShpAnalyze (shp);
+		if (shp->EffectiveType == GAIA_LINESTRING)
+		    geom_type = "LINESTRING";
+		else
+		    geom_type = "MULTILINESTRING";
+		break;
+	    case GAIA_SHP_POLYGON:
+	    case GAIA_SHP_POLYGONM:
+	    case GAIA_SHP_POLYGONZ:
+		gaiaShpAnalyze (shp);
+		if (shp->EffectiveType == GAIA_POLYGON)
+		    geom_type = "POLYGON";
+		else
+		    geom_type = "MULTIPOLYGON";
+		break;
+	    };
+	  if (coerce2d)
+	      shp->EffectiveDims = GAIA_XY;
+	  switch (shp->EffectiveDims)
+	    {
+	    case GAIA_XY_Z:
+		txt_dims = "XYZ";
+		break;
+	    case GAIA_XY_M:
+		txt_dims = "XYM";
+		break;
+	    case GAIA_XY_Z_M:
+		txt_dims = "XYZM";
+		break;
+	    default:
+		txt_dims = "XY";
+		break;
+	    };
+	  sprintf (sql, "SELECT AddGeometryColumn('%s', '%s', %d, '%s', '%s')",
+		   table, geo_column, srid, geom_type, txt_dims);
+	  if (verbose)
+	      fprintf (stderr, "%s;\n", sql);
+	  ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+		else
+		    sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+		sqlError = 1;
+		goto clean_up;
+	    }
+	  if (spatial_index)
+	    {
+		/* creating the Spatial Index */
+		sprintf (sql, "SELECT CreateSpatialIndex('%s', '%s')",
+			 table, geo_column);
+		ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+		if (ret != SQLITE_OK)
+		  {
+		      if (!err_msg)
+			  fprintf (stderr, "load shapefile error: <%s>\n",
+				   errMsg);
+		      else
+			  sprintf (err_msg, "load shapefile error: <%s>\n",
+				   errMsg);
+		      sqlite3_free (errMsg);
+		      sqlError = 1;
+		      goto clean_up;
+		  }
+	    }
+      }
+    else
+      {
+	  /* no Metadata */
+	  if (shp->Shape == GAIA_SHP_POLYLINE
+	      || shp->Shape == GAIA_SHP_POLYLINEM
+	      || shp->Shape == GAIA_SHP_POLYLINEZ
+	      || shp->Shape == GAIA_SHP_POLYGON
+	      || shp->Shape == GAIA_SHP_POLYGONM
+	      || shp->Shape == GAIA_SHP_POLYGONZ)
+	    {
+		/* 
+		   / fixing anyway the Geometry type for 
+		   / LINESTRING/MULTILINESTRING or 
+		   / POLYGON/MULTIPOLYGON
+		 */
+		gaiaShpAnalyze (shp);
+	    }
+      }
+    /* preparing the INSERT INTO parametrerized statement */
+    sprintf (sql, "INSERT INTO %s (PK_UID,", table);
+    cnt = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* columns corresponding to some DBF attribute */
+	  strcat (sql, "\"");
+	  strcat (sql, *(col_name + cnt++));
+	  strcat (sql, "\" ,");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, geo_column);	/* the GEOMETRY column */
+    strcat (sql, ")\nVALUES (?");
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* column values */
+	  strcat (sql, ", ?");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ", ?)");	/* the GEOMETRY column */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    current_row = 0;
+    while (1)
+      {
+	  /* inserting rows from shapefile */
+	  ret = gaiaReadShpEntity (shp, current_row, srid);
+	  if (!ret)
+	    {
+		if (!(shp->LastError))	/* normal SHP EOF */
+		    break;
+		if (!err_msg)
+		    fprintf (stderr, "%s\n", shp->LastError);
+		else
+		    sprintf (err_msg, "%s\n", shp->LastError);
+		sqlError = 1;
+		sqlite3_finalize (stmt);
+		goto clean_up;
+	    }
+	  current_row++;
+	  /* binding query params */
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  sqlite3_bind_int (stmt, 1, current_row);
+	  cnt = 0;
+	  dbf_field = shp->Dbf->First;
+	  while (dbf_field)
+	    {
+		/* column values */
+		if (!(dbf_field->Value))
+		    sqlite3_bind_null (stmt, cnt + 2);
+		else
+		  {
+		      switch (dbf_field->Value->Type)
+			{
+			case GAIA_INT_VALUE:
+			    sqlite3_bind_int64 (stmt, cnt + 2,
+						dbf_field->Value->IntValue);
+			    break;
+			case GAIA_DOUBLE_VALUE:
+			    sqlite3_bind_double (stmt, cnt + 2,
+						 dbf_field->Value->DblValue);
+			    break;
+			case GAIA_TEXT_VALUE:
+			    sqlite3_bind_text (stmt, cnt + 2,
+					       dbf_field->Value->TxtValue,
+					       strlen (dbf_field->
+						       Value->TxtValue),
+					       SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_bind_null (stmt, cnt + 2);
+			    break;
+			}
+		  }
+		cnt++;
+		dbf_field = dbf_field->Next;
+	    }
+	  if (shp->Dbf->Geometry)
+	    {
+		if (compressed)
+		    gaiaToCompressedBlobWkb (shp->Dbf->Geometry, &blob,
+					     &blob_size);
+		else
+		    gaiaToSpatiaLiteBlobWkb (shp->Dbf->Geometry, &blob,
+					     &blob_size);
+		sqlite3_bind_blob (stmt, cnt + 2, blob, blob_size, free);
+	    }
+	  else
+	    {
+		/* handling a NULL-Geometry */
+		sqlite3_bind_null (stmt, cnt + 2);
+	    }
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	      ;
+	  else
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load shapefile error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		else
+		    sprintf (err_msg, "load shapefile error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		sqlError = 1;
+		goto clean_up;
+	    }
+      }
+    sqlite3_finalize (stmt);
+  clean_up:
+    gaiaFreeShapefile (shp);
+    if (col_name)
+      {
+	  /* releasing memory allocation for column names */
+	  for (cnt = 0; cnt < col_cnt; cnt++)
+	      free (*(col_name + cnt));
+	  free (col_name);
+      }
+    if (sqlError)
+      {
+	  /* some error occurred - ROLLBACK */
+	  if (verbose)
+	      fprintf (stderr, "ROLLBACK;\n");
+	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+	    }
+	  if (rows)
+	      *rows = current_row;
+	  return 0;
+      }
+    else
+      {
+	  /* ok - confirming pending transaction - COMMIT */
+	  if (verbose)
+	      fprintf (stderr, "COMMIT;\n");
+	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+		else
+		    sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  if (rows)
+	      *rows = current_row;
+	  if (verbose)
+	      fprintf (stderr,
+		       "\nInserted %d rows into '%s' from SHAPEFILE\n========\n",
+		       current_row, table);
+	  if (err_msg)
+	      sprintf (err_msg, "Inserted %d rows into '%s' from SHAPEFILE",
+		       current_row, table);
+	  return 1;
+      }
+}
+
+#endif /* end ICONV (SHP) */
+
+static void
+output_prj_file (sqlite3 * sqlite, char *path, char *table, char *column)
+{
+/* exporting [if possible] a .PRJ file */
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+    int srid = -1;
+    char sql[1024];
+    char sql2[1024];
+    int ret;
+    int rs_srid = 0;
+    int rs_srs_wkt = 0;
+    const char *name;
+    char srsWkt[8192];
+    char dummy[8192];
+    FILE *out;
+
+/* step I: retrieving the SRID */
+    sprintf (sql,
+	     "SELECT srid FROM geometry_columns WHERE f_table_name = '%s' AND f_geometry_column = '%s'",
+	     table, column);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    for (i = 1; i <= rows; i++)
+      {
+	  srid = atoi (results[(i * columns) + 0]);
+      }
+    sqlite3_free_table (results);
+    if (srid < 0)
+      {
+	  /* srid still undefined, so we'll read VIEWS_GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT srid FROM views_geometry_columns ");
+	  strcat (sql,
+		  "JOIN geometry_columns USING (f_table_name, f_geometry_column) ");
+	  sprintf (sql2, "WHERE view_name = '%s' AND view_geometry = '%s'",
+		   table, column);
+	  strcat (sql, sql2);
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
+				 &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
+			 errMsg);
+		sqlite3_free (errMsg);
+		return;
+	    }
+	  for (i = 1; i <= rows; i++)
+	    {
+		srid = atoi (results[(i * columns) + 0]);
+	    }
+	  sqlite3_free_table (results);
+      }
+    if (srid < 0)
+	return;
+
+/* step II: checking if the SRS_WKT column actually exists */
+    ret =
+	sqlite3_get_table (sqlite, "PRAGMA table_info(spatial_ref_sys)",
+			   &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "srid") == 0)
+		    rs_srid = 1;
+		if (strcasecmp (name, "auth_name") == 0)
+		    rs_srs_wkt = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rs_srid == 0 || rs_srs_wkt == 0)
+	return;
+
+/* step III: fetching WKT SRS */
+    *srsWkt = '\0';
+    sprintf (sql,
+	     "SELECT srs_wkt FROM spatial_ref_sys WHERE srid = %d AND srs_wkt IS NOT NULL",
+	     srid);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (srsWkt, results[(i * columns) + 0]);
+	    }
+      }
+    sqlite3_free_table (results);
+    if (strlen (srsWkt) == 0)
+	return;
+
+/* step IV: generating the .PRJ file */
+    sprintf (dummy, "%s.prj", path);
+    out = fopen (dummy, "wb");
+    if (!out)
+	goto no_file;
+    fprintf (out, "%s\r\n", srsWkt);
+    fclose (out);
+  no_file:
+    return;
+}
+
+static void
+shp_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting SHAPEFILE and DBF */
+
+SPATIALITE_DECLARE int
+dump_shapefile (sqlite3 * sqlite, char *table, char *column, char *shp_path,
+		char *charset, char *geom_type, int verbose, int *xrows,
+		char *err_msg)
+{
+/* SHAPEFILE dump */
+    char sql[1024];
+    char dummy[1024];
+    int shape = -1;
+    int len;
+    int ret;
+    char *errMsg = NULL;
+    sqlite3_stmt *stmt;
+    int row1 = 0;
+    int n_cols = 0;
+    int offset = 0;
+    int i;
+    int rows = 0;
+    int type;
+    const void *blob_value;
+    gaiaShapefilePtr shp = NULL;
+    gaiaDbfListPtr dbf_export_list = NULL;
+    gaiaDbfListPtr dbf_list = NULL;
+    gaiaDbfListPtr dbf_write;
+    gaiaDbfFieldPtr dbf_field;
+    int *max_length = NULL;
+    int *sql_type = NULL;
+    if (geom_type)
+      {
+	  /* normalizing required geometry type */
+	  if (strcasecmp ((char *) geom_type, "POINT") == 0)
+	      shape = GAIA_POINT;
+	  if (strcasecmp ((char *) geom_type, "LINESTRING") == 0)
+	      shape = GAIA_LINESTRING;
+	  if (strcasecmp ((char *) geom_type, "POLYGON") == 0)
+	      shape = GAIA_POLYGON;
+	  if (strcasecmp ((char *) geom_type, "MULTIPOINT") == 0)
+	      shape = GAIA_POINT;
+      }
+    if (shape < 0)
+      {
+	  /* preparing SQL statement [no type was explicitly required, so we'll read GEOMETRY_COLUMNS */
+	  char **results;
+	  int rows;
+	  int columns;
+	  int i;
+	  char metatype[256];
+	  char metadims[256];
+	  sprintf (sql,
+		   "SELECT type, coord_dimension FROM geometry_columns WHERE f_table_name = '%s' AND f_geometry_column = '%s'",
+		   table, column);
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
+				 &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		else
+		    sprintf (err_msg, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  *metatype = '\0';
+	  *metadims = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (metatype, results[(i * columns) + 0]);
+		strcpy (metadims, results[(i * columns) + 1]);
+	    }
+	  sqlite3_free_table (results);
+	  if (strcasecmp (metatype, "POINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POINTZM;
+		else
+		    shape = GAIA_POINT;
+	    }
+	  if (strcasecmp (metatype, "MULTIPOINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_MULTIPOINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_MULTIPOINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_MULTIPOINTZM;
+		else
+		    shape = GAIA_MULTIPOINT;
+	    }
+	  if (strcasecmp (metatype, "LINESTRING") == 0
+	      || strcasecmp (metatype, "MULTILINESTRING") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_LINESTRINGZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_LINESTRINGM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_LINESTRINGZM;
+		else
+		    shape = GAIA_LINESTRING;
+	    }
+	  if (strcasecmp (metatype, "POLYGON") == 0
+	      || strcasecmp (metatype, "MULTIPOLYGON") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POLYGONZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POLYGONM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POLYGONZM;
+		else
+		    shape = GAIA_POLYGON;
+	    }
+      }
+    if (shape < 0)
+      {
+	  /* preparing SQL statement [type still undefined, so we'll read VIEWS_GEOMETRY_COLUMNS */
+	  char **results;
+	  int rows;
+	  int columns;
+	  int i;
+	  char metatype[256];
+	  char metadims[256];
+	  char sql2[1024];
+	  strcpy (sql,
+		  "SELECT type, coord_dimension FROM views_geometry_columns ");
+	  strcat (sql,
+		  "JOIN geometry_columns USING (f_table_name, f_geometry_column) ");
+	  sprintf (sql2, "WHERE view_name = '%s' AND view_geometry = '%s'",
+		   table, column);
+	  strcat (sql, sql2);
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
+				 &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		else
+		    sprintf (err_msg, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  *metatype = '\0';
+	  *metadims = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (metatype, results[(i * columns) + 0]);
+		strcpy (metadims, results[(i * columns) + 1]);
+	    }
+	  sqlite3_free_table (results);
+	  if (strcasecmp (metatype, "POINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POINTZM;
+		else
+		    shape = GAIA_POINT;
+	    }
+	  if (strcasecmp (metatype, "MULTIPOINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_MULTIPOINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_MULTIPOINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_MULTIPOINTZM;
+		else
+		    shape = GAIA_MULTIPOINT;
+	    }
+	  if (strcasecmp (metatype, "LINESTRING") == 0
+	      || strcasecmp (metatype, "MULTILINESTRING") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_LINESTRINGZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_LINESTRINGM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_LINESTRINGZM;
+		else
+		    shape = GAIA_LINESTRING;
+	    }
+	  if (strcasecmp (metatype, "POLYGON") == 0
+	      || strcasecmp (metatype, "MULTIPOLYGON") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POLYGONZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POLYGONM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POLYGONZM;
+		else
+		    shape = GAIA_POLYGON;
+	    }
+      }
+    if (shape < 0)
+      {
+	  if (!err_msg)
+	      fprintf (stderr,
+		       "Unable to detect GeometryType for \"%s\".\"%s\" ... sorry\n",
+		       table, column);
+	  else
+	      sprintf (err_msg,
+		       "Unable to detect GeometryType for \"%s\".\"%s\" ... sorry\n",
+		       table, column);
+	  return 0;
+      }
+    if (verbose)
+	fprintf (stderr,
+		 "========\nDumping SQLite table '%s' into shapefile at '%s'\n",
+		 table, shp_path);
+    /* preparing SQL statement */
+    sprintf (sql, "SELECT * FROM \"%s\" WHERE GeometryAliasType(\"%s\") = ",
+	     table, column);
+    if (shape == GAIA_LINESTRING || shape == GAIA_LINESTRINGZ
+	|| shape == GAIA_LINESTRINGM || shape == GAIA_LINESTRINGZM)
+      {
+	  strcat (sql, "'LINESTRING' OR GeometryAliasType(\"");
+	  strcat (sql, (char *) column);
+	  strcat (sql, "\") = 'MULTILINESTRING'");
+      }
+    else if (shape == GAIA_POLYGON || shape == GAIA_POLYGONZ
+	     || shape == GAIA_POLYGONM || shape == GAIA_POLYGONZM)
+      {
+	  strcat (sql, "'POLYGON' OR GeometryAliasType(\"");
+	  strcat (sql, (char *) column);
+	  strcat (sql, "\") = 'MULTIPOLYGON'");
+      }
+    else if (shape == GAIA_MULTIPOINT || shape == GAIA_MULTIPOINTZ
+	     || shape == GAIA_MULTIPOINTM || shape == GAIA_MULTIPOINTZM)
+      {
+	  strcat (sql, "'POINT' OR GeometryAliasType(\"");
+	  strcat (sql, (char *) column);
+	  strcat (sql, "\") = 'MULTIPOINT'");
+      }
+    else
+	strcat (sql, "'POINT'");
+/* fetching anyway NULL Geometries */
+    strcat (sql, " OR \"");
+    strcat (sql, (char *) column);
+    strcat (sql, "\" IS NULL");
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+    while (1)
+      {
+	  /* Pass I - scrolling the result set to compute real DBF attributes' sizes and types */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* processing a result set row */
+		row1++;
+		if (n_cols == 0)
+		  {
+		      /* this one is the first row, so we are going to prepare the DBF Fields list */
+		      n_cols = sqlite3_column_count (stmt);
+		      dbf_export_list = gaiaAllocDbfList ();
+		      max_length = malloc (sizeof (int) * n_cols);
+		      sql_type = malloc (sizeof (int) * n_cols);
+		      for (i = 0; i < n_cols; i++)
+			{
+			    /* initializes the DBF export fields */
+			    strcpy (dummy, sqlite3_column_name (stmt, i));
+			    gaiaAddDbfField (dbf_export_list, dummy, '\0', 0, 0,
+					     0);
+			    max_length[i] = 0;
+			    sql_type[i] = SQLITE_NULL;
+			}
+		  }
+		for (i = 0; i < n_cols; i++)
+		  {
+		      /* update the DBF export fields analyzing fetched data */
+		      type = sqlite3_column_type (stmt, i);
+		      if (type == SQLITE_NULL || type == SQLITE_BLOB)
+			  continue;
+		      if (type == SQLITE_TEXT)
+			{
+			    len = sqlite3_column_bytes (stmt, i);
+			    sql_type[i] = SQLITE_TEXT;
+			    if (len > max_length[i])
+				max_length[i] = len;
+			}
+		      else if (type == SQLITE_FLOAT
+			       && sql_type[i] != SQLITE_TEXT)
+			  sql_type[i] = SQLITE_FLOAT;	/* promoting a numeric column to be DOUBLE */
+		      else if (type == SQLITE_INTEGER &&
+			       (sql_type[i] == SQLITE_NULL
+				|| sql_type[i] == SQLITE_INTEGER))
+			  sql_type[i] = SQLITE_INTEGER;	/* promoting a null column to be INTEGER */
+		      if (type == SQLITE_INTEGER && max_length[i] < 18)
+			  max_length[i] = 18;
+		      if (type == SQLITE_FLOAT && max_length[i] < 24)
+			  max_length[i] = 24;
+		  }
+	    }
+	  else
+	      goto sql_error;
+      }
+    if (!row1)
+	goto empty_result_set;
+    i = 0;
+    offset = 0;
+    dbf_list = gaiaAllocDbfList ();
+    dbf_field = dbf_export_list->First;
+    while (dbf_field)
+      {
+	  /* preparing the final DBF attribute list */
+	  if (sql_type[i] == SQLITE_NULL)
+	    {
+		i++;
+		dbf_field = dbf_field->Next;
+		continue;
+	    }
+	  if (sql_type[i] == SQLITE_TEXT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'C', offset,
+				 max_length[i], 0);
+		offset += max_length[i];
+	    }
+	  if (sql_type[i] == SQLITE_FLOAT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 19, 6);
+		offset += 19;
+	    }
+	  if (sql_type[i] == SQLITE_INTEGER)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 18, 0);
+		offset += 18;
+	    }
+	  i++;
+	  dbf_field = dbf_field->Next;
+      }
+    free (max_length);
+    free (sql_type);
+    gaiaFreeDbfList (dbf_export_list);
+/* resetting SQLite query */
+    if (verbose)
+	fprintf (stderr, "\n%s;\n", sql);
+    ret = sqlite3_reset (stmt);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+/* trying to open shapefile files */
+    shp = gaiaAllocShapefile ();
+    gaiaOpenShpWrite (shp, shp_path, shape, dbf_list, "UTF-8", charset);
+    if (!(shp->Valid))
+	goto no_file;
+/* trying to export the .PRJ file */
+    output_prj_file (sqlite, shp_path, table, column);
+    while (1)
+      {
+	  /* Pass II - scrolling the result set to dump data into shapefile */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		rows++;
+		dbf_write = gaiaCloneDbfEntity (dbf_list);
+		for (i = 0; i < n_cols; i++)
+		  {
+		      if (strcasecmp
+			  ((char *) column,
+			   (char *) sqlite3_column_name (stmt, i)) == 0)
+			{
+			    /* this one is the internal BLOB encoded GEOMETRY to be exported */
+			    if (sqlite3_column_type (stmt, i) != SQLITE_BLOB)
+			      {
+				  /* this one is a NULL Geometry */
+				  dbf_write->Geometry = NULL;
+			      }
+			    else
+			      {
+				  blob_value = sqlite3_column_blob (stmt, i);
+				  len = sqlite3_column_bytes (stmt, i);
+				  dbf_write->Geometry =
+				      gaiaFromSpatiaLiteBlobWkb (blob_value,
+								 len);
+			      }
+			}
+		      strcpy (dummy, sqlite3_column_name (stmt, i));
+		      dbf_field = getDbfField (dbf_write, dummy);
+		      if (!dbf_field)
+			  continue;
+		      if (sqlite3_column_type (stmt, i) == SQLITE_NULL)
+			{
+			    /* handling NULL values */
+			    gaiaSetNullValue (dbf_field);
+			}
+		      else
+			{
+			    switch (dbf_field->Type)
+			      {
+			      case 'N':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_INTEGER)
+				      gaiaSetIntValue (dbf_field,
+						       sqlite3_column_int64
+						       (stmt, i));
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				      gaiaSetDoubleValue (dbf_field,
+							  sqlite3_column_double
+							  (stmt, i));
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      case 'C':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_TEXT)
+				    {
+					strcpy (dummy,
+						(char *)
+						sqlite3_column_text (stmt, i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_INTEGER)
+				    {
+#if defined(_WIN32) || defined(__MINGW32__)
+					/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+					sprintf (dummy, "%I64d",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#else
+					sprintf (dummy, "%lld",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#endif
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				    {
+					sprintf (dummy, "%1.6f",
+						 sqlite3_column_double (stmt,
+									i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      };
+			}
+		  }
+		if (!gaiaWriteShpEntity (shp, dbf_write))
+		    fprintf (stderr, "shapefile write error\n");
+		gaiaFreeDbfList (dbf_write);
+	    }
+	  else
+	      goto sql_error;
+      }
+    sqlite3_finalize (stmt);
+    gaiaFlushShpHeaders (shp);
+    gaiaFreeShapefile (shp);
+    if (verbose)
+	fprintf (stderr, "\nExported %d rows into SHAPEFILE\n========\n", rows);
+    if (xrows)
+	*xrows = rows;
+    if (err_msg)
+	sprintf (err_msg, "Exported %d rows into SHAPEFILE", rows);
+    return 1;
+  sql_error:
+/* some SQL error occurred */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (shp)
+	gaiaFreeShapefile (shp);
+    if (!err_msg)
+	fprintf (stderr, "SELECT failed: %s", sqlite3_errmsg (sqlite));
+    else
+	sprintf (err_msg, "SELECT failed: %s", sqlite3_errmsg (sqlite));
+    return 0;
+  no_file:
+/* shapefile can't be created/opened */
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (shp)
+	gaiaFreeShapefile (shp);
+    if (!err_msg)
+	fprintf (stderr, "ERROR: unable to open '%s' for writing", shp_path);
+    else
+	sprintf (err_msg, "ERROR: unable to open '%s' for writing", shp_path);
+    return 0;
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (shp)
+	gaiaFreeShapefile (shp);
+    if (!err_msg)
+	fprintf (stderr,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...");
+    else
+	sprintf (err_msg,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...");
+    return 0;
+}
+
+SPATIALITE_DECLARE int
+load_dbf (sqlite3 * sqlite, char *dbf_path, char *table, char *charset,
+	  int verbose, int *rows, char *err_msg)
+{
+    sqlite3_stmt *stmt;
+    int ret;
+    char *errMsg = NULL;
+    char sql[65536];
+    char dummyName[4096];
+    int already_exists = 0;
+    int sqlError = 0;
+    gaiaDbfPtr dbf = NULL;
+    gaiaDbfFieldPtr dbf_field;
+    int cnt;
+    int col_cnt;
+    int seed;
+    int len;
+    int dup;
+    int idup;
+    int current_row;
+    char **col_name = NULL;
+    int deleted;
+/* checking if TABLE already exists */
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     table);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      already_exists = 1;
+	  else
+	    {
+		fprintf (stderr, "load DBF error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (already_exists)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: table '%s' already exists\n",
+		       table);
+	  else
+	      sprintf (err_msg, "load DBF error: table '%s' already exists\n",
+		       table);
+	  return 0;
+      }
+    dbf = gaiaAllocDbf ();
+    gaiaOpenDbfRead (dbf, dbf_path, charset, "UTF-8");
+    if (!(dbf->Valid))
+      {
+	  if (!err_msg)
+	    {
+		fprintf (stderr, "load DBF error: cannot open '%s'\n",
+			 dbf_path);
+		if (dbf->LastError)
+		    fprintf (stderr, "\tcause: %s\n", dbf->LastError);
+	    }
+	  else
+	    {
+		char extra[512];
+		*extra = '\0';
+		if (dbf->LastError)
+		    sprintf (extra, "\n\tcause: %s", dbf->LastError);
+		sprintf (err_msg, "load DBF error: cannot open '%s'%s",
+			 dbf_path, extra);
+	    }
+	  gaiaFreeDbf (dbf);
+	  return 0;
+      }
+/* checking for duplicate / illegal column names and antialising them */
+    col_cnt = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* counting DBF fields */
+	  col_cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    col_name = malloc (sizeof (char *) * col_cnt);
+    cnt = 0;
+    seed = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* preparing column names */
+	  strcpy (dummyName, dbf_field->Name);
+	  dup = 0;
+	  for (idup = 0; idup < cnt; idup++)
+	    {
+		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
+		    dup = 1;
+	    }
+	  if (strcasecmp (dummyName, "PK_UID") == 0)
+	      dup = 1;
+	  if (dup)
+	      sprintf (dummyName, "COL_%d", seed++);
+	  len = strlen (dummyName);
+	  *(col_name + cnt) = malloc (len + 1);
+	  strcpy (*(col_name + cnt), dummyName);
+	  cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    if (verbose)
+	fprintf (stderr,
+		 "========\nLoading DBF at '%s' into SQLite table '%s'\n",
+		 dbf_path, table);
+/* starting a transaction */
+    if (verbose)
+	fprintf (stderr, "\nBEGIN;\n");
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* creating the Table */
+    sprintf (sql, "CREATE TABLE %s", table);
+    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
+    cnt = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  strcat (sql, ",\n\"");
+	  strcat (sql, *(col_name + cnt));
+	  cnt++;
+	  switch (dbf_field->Type)
+	    {
+	    case 'C':
+		strcat (sql, "\" TEXT");
+		break;
+	    case 'N':
+		fflush (stderr);
+		if (dbf_field->Decimals)
+		    strcat (sql, "\" DOUBLE");
+		else
+		  {
+		      if (dbf_field->Length <= 18)
+			  strcat (sql, "\" INTEGER");
+		      else
+			  strcat (sql, "\" DOUBLE");
+		  }
+		break;
+	    case 'D':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'F':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'L':
+		strcat (sql, "\" INTEGER");
+		break;
+	    };
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ")");
+    if (verbose)
+	fprintf (stderr, "%s;\n", sql);
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    /* preparing the INSERT INTO parametrerized statement */
+    sprintf (sql, "INSERT INTO %s (PK_UID", table);
+    cnt = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* columns corresponding to some DBF attribute */
+	  strcat (sql, ",\"");
+	  strcat (sql, *(col_name + cnt++));
+	  strcat (sql, "\"");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ")\nVALUES (?");
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* column values */
+	  strcat (sql, ", ?");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ")");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    current_row = 0;
+    while (1)
+      {
+	  /* inserting rows from DBF */
+	  ret = gaiaReadDbfEntity (dbf, current_row, &deleted);
+	  if (!ret)
+	    {
+		if (!(dbf->LastError))	/* normal DBF EOF */
+		    break;
+		if (!err_msg)
+		    fprintf (stderr, "%s\n", dbf->LastError);
+		else
+		    sprintf (err_msg, "%s\n", dbf->LastError);
+		sqlError = 1;
+		goto clean_up;
+	    }
+	  current_row++;
+	  if (deleted)
+	    {
+		/* skipping DBF deleted row */
+		continue;
+	    }
+	  /* binding query params */
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  sqlite3_bind_int (stmt, 1, current_row);
+	  cnt = 0;
+	  dbf_field = dbf->Dbf->First;
+	  while (dbf_field)
+	    {
+		/* column values */
+		if (!(dbf_field->Value))
+		    sqlite3_bind_null (stmt, cnt + 2);
+		else
+		  {
+		      switch (dbf_field->Value->Type)
+			{
+			case GAIA_INT_VALUE:
+			    sqlite3_bind_int64 (stmt, cnt + 2,
+						dbf_field->Value->IntValue);
+			    break;
+			case GAIA_DOUBLE_VALUE:
+			    sqlite3_bind_double (stmt, cnt + 2,
+						 dbf_field->Value->DblValue);
+			    break;
+			case GAIA_TEXT_VALUE:
+			    sqlite3_bind_text (stmt, cnt + 2,
+					       dbf_field->Value->TxtValue,
+					       strlen (dbf_field->
+						       Value->TxtValue),
+					       SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_bind_null (stmt, cnt + 2);
+			    break;
+			}
+		  }
+		cnt++;
+		dbf_field = dbf_field->Next;
+	    }
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	      ;
+	  else
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load DBF error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		else
+		    sprintf (err_msg, "load DBF error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		sqlError = 1;
+		goto clean_up;
+	    }
+      }
+    sqlite3_finalize (stmt);
+  clean_up:
+    gaiaFreeDbf (dbf);
+    if (col_name)
+      {
+	  /* releasing memory allocation for column names */
+	  for (cnt = 0; cnt < col_cnt; cnt++)
+	      free (*(col_name + cnt));
+	  free (col_name);
+      }
+    if (sqlError)
+      {
+	  /* some error occurred - ROLLBACK */
+	  if (verbose)
+	      fprintf (stderr, "ROLLBACK;\n");
+	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+	    };
+	  if (rows)
+	      *rows = current_row;
+	  return 0;
+      }
+    else
+      {
+	  /* ok - confirming pending transaction - COMMIT */
+	  if (verbose)
+	      fprintf (stderr, "COMMIT;\n");
+	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  if (rows)
+	      *rows = current_row;
+	  if (verbose)
+	      fprintf (stderr,
+		       "\nInserted %d rows into '%s' from DBF\n========\n",
+		       current_row, table);
+	  if (err_msg)
+	      sprintf (err_msg, "Inserted %d rows into '%s' from DBF",
+		       current_row, table);
+	  return 1;
+      }
+}
+
+SPATIALITE_DECLARE int
+dump_dbf (sqlite3 * sqlite, char *table, char *dbf_path, char *charset,
+	  char *err_msg)
+{
+/* DBF dump */
+    int rows;
+    int i;
+    char sql[4096];
+    char xtable[4096];
+    sqlite3_stmt *stmt;
+    int row1 = 0;
+    int n_cols = 0;
+    int offset = 0;
+    int type;
+    gaiaDbfPtr dbf = NULL;
+    gaiaDbfListPtr dbf_export_list = NULL;
+    gaiaDbfListPtr dbf_list = NULL;
+    gaiaDbfListPtr dbf_write;
+    gaiaDbfFieldPtr dbf_field;
+    int *max_length = NULL;
+    int *sql_type = NULL;
+    char dummy[1024];
+    int len;
+    int ret;
+/*
+/ preparing SQL statement 
+*/
+    strcpy (xtable, table);
+    shp_double_quoted_sql (xtable);
+    sprintf (sql, "SELECT * FROM %s", xtable);
+/*
+/ compiling SQL prepared statement 
+*/
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+    rows = 0;
+    while (1)
+      {
+	  /*
+	     / Pass I - scrolling the result set to compute real DBF attributes' sizes and types 
+	   */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* processing a result set row */
+		row1++;
+		if (n_cols == 0)
+		  {
+		      /* this one is the first row, so we are going to prepare the DBF Fields list */
+		      n_cols = sqlite3_column_count (stmt);
+		      dbf_export_list = gaiaAllocDbfList ();
+		      max_length = (int *) malloc (sizeof (int) * n_cols);
+		      sql_type = (int *) malloc (sizeof (int) * n_cols);
+		      for (i = 0; i < n_cols; i++)
+			{
+			    /* initializes the DBF export fields */
+			    strcpy (dummy, sqlite3_column_name (stmt, i));
+			    gaiaAddDbfField (dbf_export_list, dummy, '\0', 0, 0,
+					     0);
+			    max_length[i] = 0;
+			    sql_type[i] = SQLITE_NULL;
+			}
+		  }
+		for (i = 0; i < n_cols; i++)
+		  {
+		      /* update the DBF export fields analyzing fetched data */
+		      type = sqlite3_column_type (stmt, i);
+		      if (type == SQLITE_NULL || type == SQLITE_BLOB)
+			  continue;
+		      if (type == SQLITE_TEXT)
+			{
+			    len = sqlite3_column_bytes (stmt, i);
+			    sql_type[i] = SQLITE_TEXT;
+			    if (len > max_length[i])
+				max_length[i] = len;
+			}
+		      else if (type == SQLITE_FLOAT
+			       && sql_type[i] != SQLITE_TEXT)
+			  sql_type[i] = SQLITE_FLOAT;	/* promoting a numeric column to be DOUBLE */
+		      else if (type == SQLITE_INTEGER
+			       && (sql_type[i] == SQLITE_NULL
+				   || sql_type[i] == SQLITE_INTEGER))
+			  sql_type[i] = SQLITE_INTEGER;	/* promoting a null column to be INTEGER */
+		      if (type == SQLITE_INTEGER && max_length[i] < 18)
+			  max_length[i] = 18;
+		      if (type == SQLITE_FLOAT && max_length[i] < 24)
+			  max_length[i] = 24;
+		  }
+	    }
+	  else
+	      goto sql_error;
+      }
+    if (!row1)
+	goto empty_result_set;
+    i = 0;
+    offset = 0;
+    dbf_list = gaiaAllocDbfList ();
+    dbf_field = dbf_export_list->First;
+    while (dbf_field)
+      {
+	  /* preparing the final DBF attribute list */
+	  if (sql_type[i] == SQLITE_NULL || sql_type[i] == SQLITE_BLOB)
+	    {
+		i++;
+		dbf_field = dbf_field->Next;
+		continue;
+	    }
+	  if (sql_type[i] == SQLITE_TEXT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'C', offset,
+				 max_length[i], 0);
+		offset += max_length[i];
+	    }
+	  if (sql_type[i] == SQLITE_FLOAT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 19, 6);
+		offset += 19;
+	    }
+	  if (sql_type[i] == SQLITE_INTEGER)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 18, 0);
+		offset += 18;
+	    }
+	  i++;
+	  dbf_field = dbf_field->Next;
+      }
+    free (max_length);
+    free (sql_type);
+    gaiaFreeDbfList (dbf_export_list);
+    dbf_export_list = NULL;
+/* resetting SQLite query */
+    ret = sqlite3_reset (stmt);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+/* trying to open the DBF file */
+    dbf = gaiaAllocDbf ();
+/* xfering export-list ownership */
+    dbf->Dbf = dbf_list;
+    dbf_list = NULL;
+    gaiaOpenDbfWrite (dbf, dbf_path, "UTF-8", charset);
+    if (!(dbf->Valid))
+	goto no_file;
+    while (1)
+      {
+	  /* Pass II - scrolling the result set to dump data into DBF */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		rows++;
+		dbf_write = gaiaCloneDbfEntity (dbf->Dbf);
+		for (i = 0; i < n_cols; i++)
+		  {
+		      strcpy (dummy, sqlite3_column_name (stmt, i));
+		      dbf_field = getDbfField (dbf_write, dummy);
+		      if (!dbf_field)
+			  continue;
+		      if (sqlite3_column_type (stmt, i) == SQLITE_NULL
+			  || sqlite3_column_type (stmt, i) == SQLITE_BLOB)
+			{
+			    /* handling NULL values */
+			    gaiaSetNullValue (dbf_field);
+			}
+		      else
+			{
+			    switch (dbf_field->Type)
+			      {
+			      case 'N':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_INTEGER)
+				      gaiaSetIntValue (dbf_field,
+						       sqlite3_column_int64
+						       (stmt, i));
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				      gaiaSetDoubleValue (dbf_field,
+							  sqlite3_column_double
+							  (stmt, i));
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      case 'C':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_TEXT)
+				    {
+					strcpy (dummy,
+						(char *)
+						sqlite3_column_text (stmt, i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_INTEGER)
+				    {
+#if defined(_WIN32) || defined(__MINGW32__)
+					/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+					sprintf (dummy, "%I64d",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#else
+					sprintf (dummy, "%lld",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#endif
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				    {
+					sprintf (dummy, "%1.6f",
+						 sqlite3_column_double (stmt,
+									i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      };
+			}
+		  }
+		if (!gaiaWriteDbfEntity (dbf, dbf_write))
+		    fprintf (stderr, "DBF write error\n");
+		gaiaFreeDbfList (dbf_write);
+	    }
+	  else
+	      goto sql_error;
+      }
+    sqlite3_finalize (stmt);
+    gaiaFlushDbfHeader (dbf);
+    gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr, "Exported %d rows into the DBF file\n", rows);
+    else
+	sprintf (err_msg, "Exported %d rows into the DBF file\n", rows);
+    return 1;
+  sql_error:
+/* some SQL error occurred */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (dbf)
+	gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr, "dump DBF file error: %s\n", sqlite3_errmsg (sqlite));
+    else
+	sprintf (err_msg, "dump DBF file error: %s\n", sqlite3_errmsg (sqlite));
+    return 0;
+  no_file:
+/* DBF can't be created/opened */
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (dbf)
+	gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr, "ERROR: unable to open '%s' for writing\n", dbf_path);
+    else
+	sprintf (err_msg, "ERROR: unable to open '%s' for writing\n", dbf_path);
+    return 0;
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (dbf)
+	gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...\n");
+    else
+	sprintf (err_msg,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...\n");
+    return 0;
+}
+
+#endif /* end ICONV (SHP and DBF) */
+
+SPATIALITE_DECLARE int
+is_kml_constant (sqlite3 * sqlite, char *table, char *column)
+{
+/* checking a possible column name for KML dump */
+    char sql[1024];
+    int ret;
+    int k = 1;
+    const char *name;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+
+    sprintf (sql, "PRAGMA table_info(%s)", table);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+	return 1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, column) == 0)
+		    k = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+    return k;
+}
+
+SPATIALITE_DECLARE int
+dump_kml (sqlite3 * sqlite, char *table, char *geom_col, char *kml_path,
+	  char *name_col, char *desc_col, int precision)
+{
+/* dumping a  geometry table as KML */
+    char sql[4096];
+    char xname[1024];
+    char xdesc[1024];
+    sqlite3_stmt *stmt = NULL;
+    FILE *out = NULL;
+    int ret;
+    int rows = 0;
+    int is_const = 1;
+
+/* opening/creating the KML file */
+    out = fopen (kml_path, "wb");
+    if (!out)
+	goto no_file;
+
+/* preparing SQL statement */
+    if (name_col == NULL)
+	strcpy (xname, "'name'");
+    else
+      {
+	  is_const = is_kml_constant (sqlite, table, name_col);
+	  if (is_const)
+	      sprintf (xname, "'%s'", name_col);
+	  else
+	      strcpy (xname, name_col);
+      }
+    if (desc_col == NULL)
+	strcpy (xdesc, "'description'");
+    else
+      {
+	  is_const = is_kml_constant (sqlite, table, desc_col);
+	  if (is_const)
+	      sprintf (xdesc, "'%s'", desc_col);
+	  else
+	      strcpy (xdesc, desc_col);
+      }
+    sprintf (sql, "SELECT AsKML(%s, %s, %s, %d) FROM %s ", xname, xdesc,
+	     geom_col, precision, table);
+/* excluding NULL Geometries */
+    strcat (sql, "WHERE ");
+    strcat (sql, geom_col);
+    strcat (sql, " IS NOT NULL");
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* processing a result set row */
+		if (rows == 0)
+		  {
+		      fprintf (out,
+			       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
+		      fprintf (out,
+			       "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\r\n");
+		      fprintf (out, "<Document>\r\n");
+		  }
+		rows++;
+		fprintf (out, "\t%s\r\n", sqlite3_column_text (stmt, 0));
+	    }
+	  else
+	      goto sql_error;
+      }
+    if (!rows)
+	goto empty_result_set;
+
+
+    fprintf (out, "</Document>\r\n");
+    fprintf (out, "</kml>\r\n");
+    sqlite3_finalize (stmt);
+    fclose (out);
+    return 1;
+
+  sql_error:
+/* some SQL error occurred */
+    if (stmt)
+	sqlite3_finalize (stmt);
+    if (out)
+	fclose (out);
+    fprintf (stderr, "Dump KML error: %s\n", sqlite3_errmsg (sqlite));
+    return 0;
+  no_file:
+/* KML file can't be created/opened */
+    if (stmt)
+	sqlite3_finalize (stmt);
+    if (out)
+	fclose (out);
+    fprintf (stderr, "ERROR: unable to open '%s' for writing\n", kml_path);
+    return 0;
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    if (stmt)
+	sqlite3_finalize (stmt);
+    if (out)
+	fclose (out);
+    fprintf (stderr,
+	     "The SQL SELECT returned an empty result set\n... there is nothing to export ...\n");
+    return 0;
+}
+
+static int
+is_table (sqlite3 * sqlite, const char *table)
+{
+/* check if this one really is a TABLE */
+    char sql[8192];
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    char *errMsg = NULL;
+    int ok = 0;
+
+    strcpy (sql, "SELECT tbl_name FROM sqlite_master ");
+    strcat (sql, "WHERE type = 'table' AND tbl_name LIKE '");
+    strcat (sql, table);
+    strcat (sql, "'");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return ok;
+      }
+    if (rows < 1)
+	;
+    else
+	ok = 1;
+    sqlite3_free_table (results);
+    return ok;
+}
+
+SPATIALITE_DECLARE void
+check_duplicated_rows (sqlite3 * sqlite, char *table, int *dupl_count)
+{
+/* Checking a Table for Duplicate rows */
+    char sql[8192];
+    char col_list[4196];
+    int first = 1;
+    char xname[1024];
+    int pk;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+    sqlite3_stmt *stmt = NULL;
+
+    *dupl_count = 0;
+
+    if (is_table (sqlite, table) == 0)
+      {
+	  fprintf (stderr, ".chkdupl %s: no such table\n", table);
+	  return;
+      }
+/* extracting the column names (excluding any Primary Key) */
+    sprintf (sql, "PRAGMA table_info(%s)", table);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  *col_list = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (xname, results[(i * columns) + 1]);
+		pk = atoi (results[(i * columns) + 5]);
+		if (!pk)
+		  {
+		      if (first)
+			  first = 0;
+		      else
+			  strcat (col_list, ", ");
+		      shp_double_quoted_sql (xname);
+		      strcat (col_list, xname);
+		  }
+	    }
+      }
+    sqlite3_free_table (results);
+    /* preparing the SQL statement */
+    strcpy (sql, "SELECT Count(*) AS \"[dupl-count]\", ");
+    strcat (sql, col_list);
+    strcat (sql, "\nFROM ");
+    strcat (sql, table);
+    strcat (sql, "\nGROUP BY ");
+    strcat (sql, col_list);
+    strcat (sql, "\nHAVING \"[dupl-count]\" > 1");
+    strcat (sql, "\nORDER BY \"[dupl-count]\" DESC");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  return;
+      }
+    while (1)
+      {
+	  /* fetching the result set rows */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* fetching a row */
+		*dupl_count += sqlite3_column_int (stmt, 0) - 1;
+	    }
+	  else
+	    {
+		fprintf (stderr, "SQL error: %s", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (*dupl_count)
+	fprintf (stderr, "%d duplicated rows found !!!\n", *dupl_count);
+    else
+	fprintf (stderr, "No duplicated rows have been identified\n");
+}
+
+static int
+do_delete_duplicates2 (sqlite3 * sqlite, sqlite3_stmt * stmt1,
+		       struct dupl_row *value_list, int *count)
+{
+/* deleting duplicate rows [actual delete] */
+    int cnt = 0;
+    int row_no = 0;
+    char sql[8192];
+    char where[4196];
+    char condition[1024];
+    int ret;
+    sqlite3_stmt *stmt2 = NULL;
+    struct dupl_column *col;
+    int first = 1;
+    int qcnt = 0;
+    int param = 1;
+    int match;
+    int n_cols;
+    int col_no;
+
+    *count = 0;
+    reset_query_pos (value_list);
+
+/* preparing the query statement */
+    strcpy (sql, "SELECT ROWID");
+    strcpy (where, "\nWHERE ");
+    col = value_list->first;
+    while (col)
+      {
+	  if (col->type == SQLITE_BLOB)
+	    {
+		strcat (sql, ", ");
+		strcat (sql, col->name);
+		col->query_pos = qcnt++;
+	    }
+	  else if (col->type == SQLITE_NULL)
+	    {
+		if (first)
+		  {
+		      first = 0;
+		      strcpy (condition, col->name);
+		  }
+		else
+		  {
+		      strcpy (condition, " AND ");
+		      strcat (condition, col->name);
+		  }
+		strcat (condition, " IS NULL");
+		strcat (where, condition);
+	    }
+	  else
+	    {
+		if (first)
+		  {
+		      first = 0;
+		      strcpy (condition, col->name);
+		  }
+		else
+		  {
+		      strcpy (condition, " AND ");
+		      strcat (condition, col->name);
+		  }
+		strcat (condition, " = ?");
+		strcat (where, condition);
+		col->query_pos = param++;
+	    }
+	  col = col->next;
+      }
+    strcat (sql, "\nFROM ");
+    strcat (sql, value_list->table);
+    strcat (sql, where);
+
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt2, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto error;
+      }
+
+    sqlite3_reset (stmt2);
+    sqlite3_clear_bindings (stmt2);
+    col = value_list->first;
+    while (col)
+      {
+	  /* binding query params */
+	  if (col->type == SQLITE_INTEGER)
+	      sqlite3_bind_int64 (stmt2, col->query_pos, col->int_value);
+	  if (col->type == SQLITE_FLOAT)
+	      sqlite3_bind_double (stmt2, col->query_pos, col->dbl_value);
+	  if (col->type == SQLITE_TEXT)
+	      sqlite3_bind_text (stmt2, col->query_pos, col->txt_value,
+				 strlen (col->txt_value), SQLITE_STATIC);
+	  col = col->next;
+      }
+
+    while (1)
+      {
+	  /* fetching the result set rows */
+	  ret = sqlite3_step (stmt2);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* fetching a row */
+		match = 1;
+		n_cols = sqlite3_column_count (stmt2);
+		for (col_no = 1; col_no < n_cols; col_no++)
+		  {
+		      /* checking blob columns */
+		      if (sqlite3_column_type (stmt2, col_no) == SQLITE_BLOB)
+			{
+			    const void *blob =
+				sqlite3_column_blob (stmt2, col_no);
+			    int blob_size =
+				sqlite3_column_bytes (stmt2, col_no);
+			    if (check_dupl_blob
+				(value_list, col_no - 1, blob, blob_size) == 0)
+				match = 0;
+			}
+		      else
+			  match = 0;
+		      if (match == 0)
+			  break;
+		  }
+		if (match == 0)
+		    continue;
+		row_no++;
+		if (row_no > 1)
+		  {
+		      /* deleting any duplicated row except the first one */
+		      sqlite3_reset (stmt1);
+		      sqlite3_clear_bindings (stmt1);
+		      sqlite3_bind_int64 (stmt1, 1,
+					  sqlite3_column_int64 (stmt2, 0));
+		      ret = sqlite3_step (stmt1);
+		      if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+			  cnt++;
+		      else
+			{
+			    fprintf (stderr, "SQL error: %s\n",
+				     sqlite3_errmsg (sqlite));
+			    goto error;
+			}
+		  }
+	    }
+	  else
+	    {
+		fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+		goto error;
+	    }
+      }
+    if (stmt2)
+	sqlite3_finalize (stmt2);
+    *count = cnt;
+    return 1;
+
+  error:
+    if (stmt2)
+	sqlite3_finalize (stmt2);
+    *count = 0;
+
+    return 0;
+}
+
+static int
+do_delete_duplicates (sqlite3 * sqlite, const char *sql1, const char *sql2,
+		      struct dupl_row *value_list, int *count)
+{
+/* deleting duplicate rows */
+    sqlite3_stmt *stmt1 = NULL;
+    sqlite3_stmt *stmt2 = NULL;
+    int ret;
+    int xcnt;
+    int cnt = 0;
+    int n_cols;
+    int col_no;
+    char *sql_err = NULL;
+
+    *count = 0;
+
+/* the complete operation is handled as an unique SQL Transaction */
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+/* preparing the main SELECT statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql1, strlen (sql1), &stmt1, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+/* preparing the DELETE statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql2, strlen (sql2), &stmt2, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto error;
+      }
+
+    while (1)
+      {
+	  /* fetching the result set rows */
+	  ret = sqlite3_step (stmt1);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* fetching a row */
+		sqlite3_reset (stmt2);
+		sqlite3_clear_bindings (stmt2);
+		n_cols = sqlite3_column_count (stmt1);
+		for (col_no = 1; col_no < n_cols; col_no++)
+		  {
+		      /* saving column values */
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_INTEGER)
+			  set_int_value (value_list, col_no - 1,
+					 sqlite3_column_int64 (stmt1, col_no));
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_FLOAT)
+			  set_double_value (value_list, col_no - 1,
+					    sqlite3_column_double (stmt1,
+								   col_no));
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_TEXT)
+			{
+			    const char *xtext =
+				(const char *) sqlite3_column_text (stmt1,
+								    col_no);
+			    set_text_value (value_list, col_no - 1, xtext);
+			}
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_BLOB)
+			{
+			    const void *blob =
+				sqlite3_column_blob (stmt1, col_no);
+			    int blob_size =
+				sqlite3_column_bytes (stmt1, col_no);
+			    set_blob_value (value_list, col_no - 1, blob,
+					    blob_size);
+			}
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_NULL)
+			  set_null_value (value_list, col_no - 1);
+		  }
+		if (do_delete_duplicates2 (sqlite, stmt2, value_list, &xcnt))
+		    cnt += xcnt;
+		else
+		    goto error;
+	    }
+	  else
+	    {
+		fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+		goto error;
+	    }
+      }
+
+    sqlite3_finalize (stmt1);
+    sqlite3_finalize (stmt2);
+
+/* confirm the still pending Transaction */
+    ret = sqlite3_exec (sqlite, "COMMIT", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+    *count = cnt;
+    return 1;
+
+  error:
+    *count = 0;
+    if (stmt1)
+	sqlite3_finalize (stmt1);
+    if (stmt2)
+	sqlite3_finalize (stmt2);
+
+/* performing a ROLLBACK anyway */
+    ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "ROLLBACK TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+    return 0;
+}
+
+SPATIALITE_DECLARE void
+remove_duplicated_rows (sqlite3 * sqlite, char *table)
+{
+/* attempting to delete Duplicate rows from a table */
+    struct dupl_row value_list;
+    char sql[8192];
+    char sql2[1024];
+    char col_list[4196];
+    int first = 1;
+    char xname[1024];
+    int pk;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+    int count;
+
+    value_list.count = 0;
+    value_list.first = NULL;
+    value_list.last = NULL;
+    value_list.table = table;
+
+    if (is_table (sqlite, table) == 0)
+      {
+	  fprintf (stderr, ".remdupl %s: no such table\n", table);
+	  return;
+      }
+/* extracting the column names (excluding any Primary Key) */
+    sprintf (sql, "PRAGMA table_info(%s)", table);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  *col_list = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (xname, results[(i * columns) + 1]);
+		pk = atoi (results[(i * columns) + 5]);
+		if (!pk)
+		  {
+		      if (first)
+			  first = 0;
+		      else
+			  strcat (col_list, ", ");
+		      shp_double_quoted_sql (xname);
+		      strcat (col_list, xname);
+		      add_to_dupl_row (&value_list, xname);
+		  }
+	    }
+      }
+    sqlite3_free_table (results);
+/* preparing the SQL statement (identifying duplicated rows) */
+    strcpy (sql, "SELECT Count(*) AS \"[dupl-count]\", ");
+    strcat (sql, col_list);
+    strcat (sql, "\nFROM ");
+    strcat (sql, table);
+    strcat (sql, "\nGROUP BY ");
+    strcat (sql, col_list);
+    strcat (sql, "\nHAVING \"[dupl-count]\" > 1");
+/* preparing the SQL statement [delete] */
+    strcpy (sql2, "DELETE FROM ");
+    strcat (sql2, table);
+    strcat (sql2, " WHERE ROWID = ?");
+
+    if (do_delete_duplicates (sqlite, sql, sql2, &value_list, &count))
+      {
+	  if (!count)
+	      fprintf (stderr, "No duplicated rows have been identified\n");
+	  else
+	      fprintf (stderr, "%d duplicated rows deleted from: %s\n", count,
+		       table);
+      }
+    clean_dupl_row (&value_list);
+}
+
+static int
+check_elementary (sqlite3 * sqlite, const char *inTable, const char *geom,
+		  const char *outTable, const char *pKey, const char *multiID,
+		  char *type, int *srid, char *coordDims)
+{
+/* preliminary check for ELEMENTARY GEOMETRIES */
+    char sql[8192];
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    char *errMsg = NULL;
+    int ok = 0;
+    int i;
+    char *gtp;
+    char *dims;
+    char *quoted;
+
+/* fetching metadata */
+    strcpy (sql, "SELECT type, coord_dimension, srid ");
+    strcat (sql, "FROM geometry_columns WHERE f_table_name LIKE '");
+    quoted = gaiaSingleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "' AND f_geometry_column LIKE '");
+    quoted = gaiaSingleQuotedSql (geom);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "'");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		gtp = results[(i * columns) + 0];
+		dims = results[(i * columns) + 1];
+		*srid = atoi (results[(i * columns) + 2]);
+		if (strcasecmp (gtp, "POINT") == 0
+		    || strcasecmp (gtp, "MULTIPOINT") == 0)
+		    strcpy (type, "POINT");
+		else if (strcasecmp (gtp, "LINESTRING") == 0
+			 || strcasecmp (gtp, "MULTILINESTRING") == 0)
+		    strcpy (type, "LINESTRING");
+		else if (strcasecmp (gtp, "POLYGON") == 0
+			 || strcasecmp (gtp, "MULTIPOLYGON") == 0)
+		    strcpy (type, "POLYGON");
+		else
+		    strcpy (type, "GEOMETRY");
+		strcpy (coordDims, dims);
+		ok = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (!ok)
+	return 0;
+
+/* checking if PrimaryKey already exists */
+    strcpy (sql, "PRAGMA table_info(\"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "\")");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (strcasecmp (pKey, results[(i * columns) + 1]) == 0)
+		    ok = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (!ok)
+	return 0;
+
+/* checking if MultiID already exists */
+    strcpy (sql, "PRAGMA table_info(\"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "\")");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (strcasecmp (multiID, results[(i * columns) + 1]) == 0)
+		    ok = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (!ok)
+	return 0;
+
+/* cheching if Output Table already exists */
+    strcpy (sql, "SELECT Count(*) FROM sqlite_master WHERE type ");
+    strcat (sql, "LIKE 'table' AND tbl_name LIKE '");
+    quoted = gaiaSingleQuotedSql (outTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "'");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (atoi (results[(i * columns) + 0]) != 0)
+		    ok = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+
+    return ok;
+}
+
+static gaiaGeomCollPtr
+elemGeomFromPoint (gaiaPointPtr pt, int srid)
+{
+/* creating a Geometry containing a single Point */
+    gaiaGeomCollPtr g = NULL;
+    switch (pt->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  g = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  g = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  g = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  g = gaiaAllocGeomColl ();
+	  break;
+      };
+    if (!g)
+	return NULL;
+    g->Srid = srid;
+    g->DeclaredType = GAIA_POINT;
+    switch (pt->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  gaiaAddPointToGeomCollXYZM (g, pt->X, pt->Y, pt->Z, pt->M);
+	  break;
+      case GAIA_XY_Z:
+	  gaiaAddPointToGeomCollXYZ (g, pt->X, pt->Y, pt->Z);
+	  break;
+      case GAIA_XY_M:
+	  gaiaAddPointToGeomCollXYM (g, pt->X, pt->Y, pt->M);
+	  break;
+      default:
+	  gaiaAddPointToGeomColl (g, pt->X, pt->Y);
+	  break;
+      };
+    return g;
+}
+
+static gaiaGeomCollPtr
+elemGeomFromLinestring (gaiaLinestringPtr ln, int srid)
+{
+/* creating a Geometry containing a single Linestring */
+    gaiaGeomCollPtr g = NULL;
+    gaiaLinestringPtr ln2;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  g = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  g = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  g = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  g = gaiaAllocGeomColl ();
+	  break;
+      };
+    if (!g)
+	return NULL;
+    g->Srid = srid;
+    g->DeclaredType = GAIA_LINESTRING;
+    ln2 = gaiaAddLinestringToGeomColl (g, ln->Points);
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		gaiaSetPointXYZM (ln2->Coords, iv, x, y, z, m);
+	    }
+	  break;
+      case GAIA_XY_Z:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		gaiaSetPointXYZ (ln2->Coords, iv, x, y, z);
+	    }
+	  break;
+      case GAIA_XY_M:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		gaiaSetPointXYM (ln2->Coords, iv, x, y, m);
+	    }
+	  break;
+      default:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPoint (ln->Coords, iv, &x, &y);
+		gaiaSetPoint (ln2->Coords, iv, x, y);
+	    }
+	  break;
+      };
+    return g;
+}
+
+static gaiaGeomCollPtr
+elemGeomFromPolygon (gaiaPolygonPtr pg, int srid)
+{
+/* creating a Geometry containing a single Polygon */
+    gaiaGeomCollPtr g = NULL;
+    gaiaPolygonPtr pg2;
+    gaiaRingPtr rng;
+    gaiaRingPtr rng2;
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    switch (pg->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  g = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  g = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  g = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  g = gaiaAllocGeomColl ();
+	  break;
+      };
+    if (!g)
+	return NULL;
+    g->Srid = srid;
+    g->DeclaredType = GAIA_POLYGON;
+    rng = pg->Exterior;
+    pg2 = gaiaAddPolygonToGeomColl (g, rng->Points, pg->NumInteriors);
+    rng2 = pg2->Exterior;
+    switch (pg->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		gaiaSetPointXYZM (rng2->Coords, iv, x, y, z, m);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (rng2->Coords, iv, x, y, z, m);
+		  }
+	    }
+	  break;
+      case GAIA_XY_Z:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		gaiaSetPointXYZ (rng2->Coords, iv, x, y, z);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (rng2->Coords, iv, x, y, z);
+		  }
+	    }
+	  break;
+      case GAIA_XY_M:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		gaiaSetPointXYM (rng2->Coords, iv, x, y, m);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (rng2->Coords, iv, x, y, m);
+		  }
+	    }
+	  break;
+      default:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPoint (rng->Coords, iv, &x, &y);
+		gaiaSetPoint (rng2->Coords, iv, x, y);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      gaiaSetPoint (rng2->Coords, iv, x, y);
+		  }
+	    }
+	  break;
+      };
+    return g;
+}
+
+SPATIALITE_DECLARE void
+elementary_geometries (sqlite3 * sqlite,
+		       char *inTable, char *geometry, char *outTable,
+		       char *pKey, char *multiId)
+{
+/* attempting to create a derived table surely containing elemetary Geoms */
+    char type[128];
+    int srid;
+    char dims[64];
+    char sql[8192];
+    char sql2[8192];
+    char sql3[8192];
+    char sql4[8192];
+    char sqlx[1024];
+    char sql_geom[1024];
+    char dummy[1024];
+    char *quoted;
+    int ret;
+    int comma = 0;
+    char *errMsg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int geom_idx = -1;
+    sqlite3_stmt *stmt_in = NULL;
+    sqlite3_stmt *stmt_out = NULL;
+    int n_columns;
+    sqlite3_int64 id = 0;
+
+    if (check_elementary
+	(sqlite, inTable, geometry, outTable, pKey, multiId, type, &srid,
+	 dims) == 0)
+      {
+	  fprintf (stderr, ".elemgeo: invalid args\n");
+	  return;
+      }
+
+/* starts a transaction */
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+
+    strcpy (sql, "SELECT ");
+    strcpy (sql2, "INSERT INTO \"");
+    strcpy (sql3, ") VALUES (NULL, ?");
+    strcpy (sql4, "CREATE TABLE \"");
+    quoted = gaiaDoubleQuotedSql (outTable);
+    if (quoted)
+      {
+	  strcat (sql2, quoted);
+	  strcat (sql4, quoted);
+	  free (quoted);
+      }
+    strcat (sql2, "\" (\"");
+    quoted = gaiaDoubleQuotedSql (pKey);
+    if (quoted)
+      {
+	  strcat (sql2, quoted);
+	  free (quoted);
+      }
+    strcat (sql2, "\", \"");
+    quoted = gaiaDoubleQuotedSql (multiId);
+    if (quoted)
+      {
+	  strcat (sql2, quoted);
+	  free (quoted);
+      }
+    strcat (sql2, "\"");
+    strcat (sql4, "\" (\n\t\"");
+    quoted = gaiaDoubleQuotedSql (pKey);
+    if (quoted)
+      {
+	  strcat (sql4, quoted);
+	  free (quoted);
+      }
+    strcat (sql4, "\" INTEGER PRIMARY KEY AUTOINCREMENT");
+    strcat (sql4, ",\n\t\"");
+    quoted = gaiaDoubleQuotedSql (multiId);
+    if (quoted)
+      {
+	  strcat (sql4, quoted);
+	  free (quoted);
+      }
+    strcat (sql4, "\" INTEGER NOT NULL");
+
+    strcpy (sqlx, "PRAGMA table_info(\"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sqlx, quoted);
+	  free (quoted);
+      }
+    strcat (sqlx, "\")");
+    ret = sqlite3_get_table (sqlite, sqlx, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (comma)
+		    strcat (sql, ", \"");
+		else
+		  {
+		      comma = 1;
+		      strcat (sql, "\"");
+		  }
+		strcat (sql2, ", \"");
+		quoted = gaiaDoubleQuotedSql (results[(i * columns) + 1]);
+		if (quoted)
+		  {
+		      strcat (sql, quoted);
+		      strcat (sql2, quoted);
+		      free (quoted);
+		  }
+		strcat (sql2, "\"");
+		strcat (sql3, ", ?");
+
+		if (strcasecmp (geometry, results[(i * columns) + 1]) == 0)
+		    geom_idx = i - 1;
+		else
+		  {
+		      strcat (sql4, ",\n\t\"");
+		      quoted = gaiaDoubleQuotedSql (results[(i * columns) + 1]);
+		      if (quoted)
+			{
+			    strcat (sql4, quoted);
+			    free (quoted);
+			}
+		      strcat (sql4, "\" ");
+		      strcat (sql4, results[(i * columns) + 2]);
+		      if (atoi (results[(i * columns) + 3]) != 0)
+			  strcat (sql4, " NOT NULL");
+		  }
+	    }
+      }
+    sqlite3_free_table (results);
+    if (geom_idx < 0)
+	goto abort;
+
+    strcat (sql, " FROM \"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "\"");
+    strcat (sql2, sql3);
+    strcat (sql2, ")");
+    strcat (sql4, ")");
+
+    strcpy (sql_geom, "SELECT AddGeometryColumn('");
+    quoted = gaiaSingleQuotedSql (outTable);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "', '");
+    quoted = gaiaSingleQuotedSql (geometry);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "', ");
+    sprintf (dummy, "%d, '", srid);
+    strcat (sql_geom, dummy);
+    quoted = gaiaSingleQuotedSql (type);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "', '");
+    quoted = gaiaSingleQuotedSql (dims);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "')");
+
+/* creating the output table */
+    ret = sqlite3_exec (sqlite, sql4, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+/* creating the output Geometry */
+    ret = sqlite3_exec (sqlite, sql_geom, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+
+/* preparing the INPUT statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt_in, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto abort;
+      }
+
+/* preparing the OUTPUT statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql2, strlen (sql2), &stmt_out, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto abort;
+      }
+
+/* data transfer */
+    n_columns = sqlite3_column_count (stmt_in);
+    while (1)
+      {
+	  ret = sqlite3_step (stmt_in);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		gaiaGeomCollPtr g =
+		    gaiaFromSpatiaLiteBlobWkb ((const unsigned char *)
+					       sqlite3_column_blob (stmt_in,
+								    geom_idx),
+					       sqlite3_column_bytes (stmt_in,
+								     geom_idx));
+		if (!g)
+		  {
+		      /* NULL input geometry */
+		      sqlite3_reset (stmt_out);
+		      sqlite3_clear_bindings (stmt_out);
+		      sqlite3_bind_int64 (stmt_out, 1, id);
+		      sqlite3_bind_null (stmt_out, geom_idx + 2);
+
+		      for (i = 0; i < n_columns; i++)
+			{
+			    int type = sqlite3_column_type (stmt_in, i);
+			    if (i == geom_idx)
+				continue;
+			    switch (type)
+			      {
+			      case SQLITE_INTEGER:
+				  sqlite3_bind_int64 (stmt_out, i + 2,
+						      sqlite3_column_int
+						      (stmt_in, i));
+				  break;
+			      case SQLITE_FLOAT:
+				  sqlite3_bind_double (stmt_out, i + 2,
+						       sqlite3_column_double
+						       (stmt_in, i));
+				  break;
+			      case SQLITE_TEXT:
+				  sqlite3_bind_text (stmt_out, i + 2,
+						     (const char *)
+						     sqlite3_column_text
+						     (stmt_in, i),
+						     sqlite3_column_bytes
+						     (stmt_in, i),
+						     SQLITE_STATIC);
+				  break;
+			      case SQLITE_BLOB:
+				  sqlite3_bind_blob (stmt_out, i + 2,
+						     sqlite3_column_blob
+						     (stmt_in, i),
+						     sqlite3_column_bytes
+						     (stmt_in, i),
+						     SQLITE_STATIC);
+				  break;
+			      case SQLITE_NULL:
+			      default:
+				  sqlite3_bind_null (stmt_out, i + 2);
+				  break;
+			      };
+			}
+
+		      ret = sqlite3_step (stmt_out);
+		      if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+			  ;
+		      else
+			{
+			    fprintf (stderr, "[OUT]step error: %s\n",
+				     sqlite3_errmsg (sqlite));
+			    goto abort;
+			}
+		  }
+		else
+		  {
+		      /* separating Elementary Geoms */
+		      gaiaPointPtr pt;
+		      gaiaLinestringPtr ln;
+		      gaiaPolygonPtr pg;
+		      gaiaGeomCollPtr outGeom;
+		      pt = g->FirstPoint;
+		      while (pt)
+			{
+			    /* separating Points */
+			    outGeom = elemGeomFromPoint (pt, g->Srid);
+			    sqlite3_reset (stmt_out);
+			    sqlite3_clear_bindings (stmt_out);
+			    sqlite3_bind_int64 (stmt_out, 1, id);
+			    if (!outGeom)
+				sqlite3_bind_null (stmt_out, geom_idx + 2);
+			    else
+			      {
+				  unsigned char *blob;
+				  int size;
+				  gaiaToSpatiaLiteBlobWkb (outGeom, &blob,
+							   &size);
+				  sqlite3_bind_blob (stmt_out, geom_idx + 2,
+						     blob, size, free);
+				  gaiaFreeGeomColl (outGeom);
+			      }
+
+			    for (i = 0; i < n_columns; i++)
+			      {
+				  int type = sqlite3_column_type (stmt_in, i);
+				  if (i == geom_idx)
+				      continue;
+				  switch (type)
+				    {
+				    case SQLITE_INTEGER:
+					sqlite3_bind_int64 (stmt_out, i + 2,
+							    sqlite3_column_int
+							    (stmt_in, i));
+					break;
+				    case SQLITE_FLOAT:
+					sqlite3_bind_double (stmt_out, i + 2,
+							     sqlite3_column_double
+							     (stmt_in, i));
+					break;
+				    case SQLITE_TEXT:
+					sqlite3_bind_text (stmt_out, i + 2,
+							   (const char *)
+							   sqlite3_column_text
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_BLOB:
+					sqlite3_bind_blob (stmt_out, i + 2,
+							   sqlite3_column_blob
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_NULL:
+				    default:
+					sqlite3_bind_null (stmt_out, i + 2);
+					break;
+				    };
+			      }
+
+			    ret = sqlite3_step (stmt_out);
+			    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+				;
+			    else
+			      {
+				  fprintf (stderr, "[OUT]step error: %s\n",
+					   sqlite3_errmsg (sqlite));
+				  goto abort;
+			      }
+			    pt = pt->Next;
+			}
+		      ln = g->FirstLinestring;
+		      while (ln)
+			{
+			    /* separating Linestrings */
+			    outGeom = elemGeomFromLinestring (ln, g->Srid);
+			    sqlite3_reset (stmt_out);
+			    sqlite3_clear_bindings (stmt_out);
+			    sqlite3_bind_int64 (stmt_out, 1, id);
+			    if (!outGeom)
+				sqlite3_bind_null (stmt_out, geom_idx + 2);
+			    else
+			      {
+				  unsigned char *blob;
+				  int size;
+				  gaiaToSpatiaLiteBlobWkb (outGeom, &blob,
+							   &size);
+				  sqlite3_bind_blob (stmt_out, geom_idx + 2,
+						     blob, size, free);
+				  gaiaFreeGeomColl (outGeom);
+			      }
+
+			    for (i = 0; i < n_columns; i++)
+			      {
+				  int type = sqlite3_column_type (stmt_in, i);
+				  if (i == geom_idx)
+				      continue;
+				  switch (type)
+				    {
+				    case SQLITE_INTEGER:
+					sqlite3_bind_int64 (stmt_out, i + 2,
+							    sqlite3_column_int
+							    (stmt_in, i));
+					break;
+				    case SQLITE_FLOAT:
+					sqlite3_bind_double (stmt_out, i + 2,
+							     sqlite3_column_double
+							     (stmt_in, i));
+					break;
+				    case SQLITE_TEXT:
+					sqlite3_bind_text (stmt_out, i + 2,
+							   (const char *)
+							   sqlite3_column_text
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_BLOB:
+					sqlite3_bind_blob (stmt_out, i + 2,
+							   sqlite3_column_blob
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_NULL:
+				    default:
+					sqlite3_bind_null (stmt_out, i + 2);
+					break;
+				    };
+			      }
+
+			    ret = sqlite3_step (stmt_out);
+			    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+				;
+			    else
+			      {
+				  fprintf (stderr, "[OUT]step error: %s\n",
+					   sqlite3_errmsg (sqlite));
+				  goto abort;
+			      }
+			    ln = ln->Next;
+			}
+		      pg = g->FirstPolygon;
+		      while (pg)
+			{
+			    /* separating Polygons */
+			    outGeom = elemGeomFromPolygon (pg, g->Srid);
+			    sqlite3_reset (stmt_out);
+			    sqlite3_clear_bindings (stmt_out);
+			    sqlite3_bind_int64 (stmt_out, 1, id);
+			    if (!outGeom)
+				sqlite3_bind_null (stmt_out, geom_idx + 2);
+			    else
+			      {
+				  unsigned char *blob;
+				  int size;
+				  gaiaToSpatiaLiteBlobWkb (outGeom, &blob,
+							   &size);
+				  sqlite3_bind_blob (stmt_out, geom_idx + 2,
+						     blob, size, free);
+				  gaiaFreeGeomColl (outGeom);
+			      }
+
+			    for (i = 0; i < n_columns; i++)
+			      {
+				  int type = sqlite3_column_type (stmt_in, i);
+				  if (i == geom_idx)
+				      continue;
+				  switch (type)
+				    {
+				    case SQLITE_INTEGER:
+					sqlite3_bind_int64 (stmt_out, i + 2,
+							    sqlite3_column_int
+							    (stmt_in, i));
+					break;
+				    case SQLITE_FLOAT:
+					sqlite3_bind_double (stmt_out, i + 2,
+							     sqlite3_column_double
+							     (stmt_in, i));
+					break;
+				    case SQLITE_TEXT:
+					sqlite3_bind_text (stmt_out, i + 2,
+							   (const char *)
+							   sqlite3_column_text
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_BLOB:
+					sqlite3_bind_blob (stmt_out, i + 2,
+							   sqlite3_column_blob
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_NULL:
+				    default:
+					sqlite3_bind_null (stmt_out, i + 2);
+					break;
+				    };
+			      }
+
+			    ret = sqlite3_step (stmt_out);
+			    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+				;
+			    else
+			      {
+				  fprintf (stderr, "[OUT]step error: %s\n",
+					   sqlite3_errmsg (sqlite));
+				  goto abort;
+			      }
+			    pg = pg->Next;
+			}
+		      gaiaFreeGeomColl (g);
+		  }
+		id++;
+	    }
+	  else
+	    {
+		fprintf (stderr, "[IN]step error: %s\n",
+			 sqlite3_errmsg (sqlite));
+		goto abort;
+	    }
+      }
+    sqlite3_finalize (stmt_in);
+    sqlite3_finalize (stmt_out);
+
+/* commits the transaction */
+    ret = sqlite3_exec (sqlite, "COMMIT", NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+    return;
+
+  abort:
+    if (stmt_in)
+	sqlite3_finalize (stmt_in);
+    if (stmt_out)
+	sqlite3_finalize (stmt_out);
+}
+
+#ifndef OMIT_FREEXL		/* including FreeXL */
+
+SPATIALITE_DECLARE int
+load_XL (sqlite3 * sqlite, const char *path, const char *table,
+	 unsigned int worksheetIndex, int first_titles, unsigned int *rows,
+	 char *err_msg)
+{
+/* loading an XL spreadsheet as a new DB table */
+    sqlite3_stmt *stmt;
+    unsigned int current_row;
+    int ret;
+    char *errMsg = NULL;
+    char xname[1024];
+    char dummyName[4096];
+    char sql[65536];
+    int sqlError = 0;
+    const void *xl_handle;
+    unsigned int info;
+    unsigned short columns;
+    unsigned short col;
+    FreeXL_CellValue cell;
+    int already_exists = 0;
+/* checking if TABLE already exists */
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     table);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load XL error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load XL error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      already_exists = 1;
+	  else
+	    {
+		fprintf (stderr, "load XL error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (already_exists)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load XL error: table '%s' already exists\n",
+		       table);
+	  else
+	      sprintf (err_msg, "load XL error: table '%s' already exists\n",
+		       table);
+	  return 0;
+      }
+/* opening the .XLS file [Workbook] */
+    ret = freexl_open (path, &xl_handle);
+    if (ret != FREEXL_OK)
+	goto error;
+/* checking if Password protected */
+    ret = freexl_get_info (xl_handle, FREEXL_BIFF_PASSWORD, &info);
+    if (ret != FREEXL_OK)
+	goto error;
+    if (info != FREEXL_BIFF_PLAIN)
+	goto error;
+/* Worksheet entries */
+    ret = freexl_get_info (xl_handle, FREEXL_BIFF_SHEET_COUNT, &info);
+    if (ret != FREEXL_OK)
+	goto error;
+    if (info == 0)
+	goto error;
+    if (worksheetIndex < info)
+	;
+    else
+	goto error;
+    ret = freexl_select_active_worksheet (xl_handle, worksheetIndex);
+    if (ret != FREEXL_OK)
+	goto error;
+    ret = freexl_worksheet_dimensions (xl_handle, rows, &columns);
+    if (ret != FREEXL_OK)
+	goto error;
+/* starting a transaction */
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "load XL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* creating the Table */
+    strcpy (xname, table);
+    shp_double_quoted_sql (xname);
+    sprintf (sql, "CREATE TABLE %s", xname);
+    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
+    for (col = 0; col < columns; col++)
+      {
+	  if (first_titles)
+	    {
+		/* fetching column names */
+		for (col = 0; col < columns; col++)
+		  {
+		      ret = freexl_get_cell_value (xl_handle, 0, col, &cell);
+		      if (ret != FREEXL_OK)
+			  sprintf (dummyName, "col_%d", col);
+		      else
+			{
+			    if (cell.type == FREEXL_CELL_INT)
+				sprintf (dummyName, "%d", cell.value.int_value);
+			    else if (cell.type == FREEXL_CELL_DOUBLE)
+				sprintf (dummyName, "%1.2f",
+					 cell.value.double_value);
+			    else if (cell.type == FREEXL_CELL_TEXT
+				     || cell.type == FREEXL_CELL_SST_TEXT
+				     || cell.type == FREEXL_CELL_DATE
+				     || cell.type == FREEXL_CELL_DATETIME
+				     || cell.type == FREEXL_CELL_TIME)
+			      {
+				  int len = strlen (cell.value.text_value);
+				  if (len < 256)
+				      strcpy (dummyName, cell.value.text_value);
+				  else
+				      sprintf (dummyName, "col_%d", col);
+			      }
+			    else
+				sprintf (dummyName, "col_%d", col);
+			}
+		      shp_double_quoted_sql (dummyName);
+		      strcat (sql, ", ");
+		      strcat (sql, dummyName);
+		  }
+	    }
+	  else
+	    {
+		/* setting default column names */
+		for (col = 0; col < columns; col++)
+		  {
+		      sprintf (dummyName, "col_%d", col);
+		      shp_double_quoted_sql (dummyName);
+		      strcat (sql, ", ");
+		      strcat (sql, dummyName);
+		  }
+	    }
+      }
+    strcat (sql, ")");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "load XL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* preparing the INSERT INTO parameterized statement */
+    strcpy (xname, table);
+    shp_double_quoted_sql (xname);
+    sprintf (sql, "INSERT INTO %s (PK_UID", xname);
+    for (col = 0; col < columns; col++)
+      {
+	  if (first_titles)
+	    {
+		ret = freexl_get_cell_value (xl_handle, 0, col, &cell);
+		if (ret != FREEXL_OK)
+		    sprintf (dummyName, "col_%d", col);
+		else
+		  {
+		      if (cell.type == FREEXL_CELL_INT)
+			  sprintf (dummyName, "%d", cell.value.int_value);
+		      else if (cell.type == FREEXL_CELL_DOUBLE)
+			  sprintf (dummyName, "%1.2f", cell.value.double_value);
+		      else if (cell.type == FREEXL_CELL_TEXT
+			       || cell.type == FREEXL_CELL_SST_TEXT
+			       || cell.type == FREEXL_CELL_DATE
+			       || cell.type == FREEXL_CELL_DATETIME
+			       || cell.type == FREEXL_CELL_TIME)
+			{
+			    int len = strlen (cell.value.text_value);
+			    if (len < 256)
+				strcpy (dummyName, cell.value.text_value);
+			    else
+				sprintf (dummyName, "col_%d", col);
+			}
+		      else
+			  sprintf (dummyName, "col_%d", col);
+		  }
+		shp_double_quoted_sql (dummyName);
+		strcat (sql, ", ");
+		strcat (sql, dummyName);
+	    }
+	  else
+	    {
+		/* setting default column names  */
+		sprintf (dummyName, "col_%d", col);
+		shp_double_quoted_sql (dummyName);
+		strcat (sql, ", ");
+		strcat (sql, dummyName);
+	    }
+      }
+    strcat (sql, ")\nVALUES (NULL");
+    for (col = 0; col < columns; col++)
+      {
+	  /* column values */
+	  strcat (sql, ", ?");
+      }
+    strcat (sql, ")");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "load XL error: %s\n", sqlite3_errmsg (sqlite));
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    if (first_titles)
+	current_row = 1;
+    else
+	current_row = 0;
+    while (current_row < *rows)
+      {
+	  /* binding query params */
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  for (col = 0; col < columns; col++)
+	    {
+		/* column values */
+		ret =
+		    freexl_get_cell_value (xl_handle, current_row, col, &cell);
+		if (ret != FREEXL_OK)
+		    sqlite3_bind_null (stmt, col + 1);
+		else
+		  {
+		      switch (cell.type)
+			{
+			case FREEXL_CELL_INT:
+			    sqlite3_bind_int (stmt, col + 1,
+					      cell.value.int_value);
+			    break;
+			case FREEXL_CELL_DOUBLE:
+			    sqlite3_bind_double (stmt, col + 1,
+						 cell.value.double_value);
+			    break;
+			case FREEXL_CELL_TEXT:
+			case FREEXL_CELL_SST_TEXT:
+			case FREEXL_CELL_DATE:
+			case FREEXL_CELL_DATETIME:
+			case FREEXL_CELL_TIME:
+			    sqlite3_bind_text (stmt, col + 1,
+					       cell.value.text_value,
+					       strlen (cell.value.text_value),
+					       SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_bind_null (stmt, col + 1);
+			    break;
+			};
+		  }
+	    }
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	      ;
+	  else
+	    {
+		fprintf (stderr, "load XL error: %s\n",
+			 sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		sqlError = 1;
+		goto clean_up;
+	    }
+	  current_row++;
+      }
+    sqlite3_finalize (stmt);
+  clean_up:
+    if (sqlError)
+      {
+	  /* some error occurred - ROLLBACK */
+	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load XL error: %s\n", errMsg);
+		sqlite3_free (errMsg);
+	    }
+	  fprintf (stderr,
+		   "XL not loaded\n\n\na ROLLBACK was automatically performed\n");
+      }
+    else
+      {
+	  /* ok - confirming pending transaction - COMMIT */
+	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load XL error: %s\n", errMsg);
+		else
+		    sprintf (err_msg, "load XL error: %s\n", errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  if (first_titles)
+	      *rows = *rows - 1;	/* allow for header row */
+	  fprintf (stderr, "XL loaded\n\n%d inserted rows\n", *rows);
+      }
+    freexl_close (xl_handle);
+    return 1;
+
+  error:
+    freexl_close (xl_handle);
+    if (!err_msg)
+	fprintf (stderr, "XL datasource '%s' is not valid\n", path);
+    else
+	sprintf (err_msg, "XL datasource '%s' is not valid\n", path);
+    return 0;
+}
+
+#endif /* FreeXL enabled/disabled */
+
+SPATIALITE_DECLARE int
+dump_geojson (sqlite3 * sqlite, char *table, char *geom_col, char *outfile_path,
+	      int precision, int option)
+{
+/* dumping a  geometry table as GeoJSON - Brad Hards 2011-11-09 */
+    char sql[4096];
+    sqlite3_stmt *stmt = NULL;
+    FILE *out = NULL;
+    int ret;
+    int rows = 0;
+    int is_const = 1;
+
+/* opening/creating the GeoJSON output file */
+    out = fopen (outfile_path, "wb");
+    if (!out)
+	goto no_file;
+
+/* preparing SQL statement */
+    sprintf (sql, "SELECT AsGeoJSON(%s, %d, %d) FROM %s WHERE %s IS NOT NULL",
+	     geom_col, precision, option, table, geom_col);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	    {
+		break;		/* end of result set */
+	    }
+	  if (ret == SQLITE_ROW)
+	    {
+		rows++;
+		fprintf (out, "%s\r\n", sqlite3_column_text (stmt, 0));
+	    }
+	  else
+	    {
+		goto sql_error;
+	    }
+      }
+    if (rows == 0)
+      {
+	  goto empty_result_set;
+      }
+
+    sqlite3_finalize (stmt);
+    fclose (out);
+    return 1;
+
+  sql_error:
+/* an SQL error occurred */
+    if (stmt)
+      {
+	  sqlite3_finalize (stmt);
+      }
+    if (out)
+      {
+	  fclose (out);
+      }
+    fprintf (stderr, "Dump GeoJSON error: %s\n", sqlite3_errmsg (sqlite));
+    return 0;
+
+  no_file:
+/* Output file could not be created / opened */
+    if (stmt)
+      {
+	  sqlite3_finalize (stmt);
+      }
+    if (out)
+      {
+	  fclose (out);
+      }
+    fprintf (stderr, "ERROR: unable to open '%s' for writing\n", outfile_path);
+    return 0;
+
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    if (stmt)
+      {
+	  sqlite3_finalize (stmt);
+      }
+    if (out)
+      {
+	  fclose (out);
+      }
+    fprintf (stderr, "The SQL SELECT returned no data to export...\n");
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/Makefile.am b/libspatialite/libspatialite-3.0.1/src/spatialite/Makefile.am
new file mode 100644
index 0000000..4f4cdae
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/Makefile.am
@@ -0,0 +1,22 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libsplite.la
+
+libsplite_la_SOURCES = mbrcache.c \
+	spatialite.c \
+	virtualdbf.c \
+	virtualXL.c \
+	virtualfdo.c \
+	virtualspatialindex.c \
+	virtualnetwork.c \
+	virtualshape.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/Makefile.in b/libspatialite/libspatialite-3.0.1/src/spatialite/Makefile.in
new file mode 100644
index 0000000..53aed4f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/Makefile.in
@@ -0,0 +1,505 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/spatialite
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsplite_la_LIBADD =
+am_libsplite_la_OBJECTS = mbrcache.lo spatialite.lo virtualdbf.lo \
+	virtualXL.lo virtualfdo.lo virtualspatialindex.lo \
+	virtualnetwork.lo virtualshape.lo
+libsplite_la_OBJECTS = $(am_libsplite_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libsplite_la_SOURCES)
+DIST_SOURCES = $(libsplite_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libsplite.la
+libsplite_la_SOURCES = mbrcache.c \
+	spatialite.c \
+	virtualdbf.c \
+	virtualXL.c \
+	virtualfdo.c \
+	virtualspatialindex.c \
+	virtualnetwork.c \
+	virtualshape.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/spatialite/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/spatialite/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libsplite.la: $(libsplite_la_OBJECTS) $(libsplite_la_DEPENDENCIES) 
+	$(LINK)  $(libsplite_la_OBJECTS) $(libsplite_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbrcache.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spatialite.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/virtualXL.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/virtualdbf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/virtualfdo.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/virtualnetwork.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/virtualshape.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/virtualspatialindex.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/mbrcache.c b/libspatialite/libspatialite-3.0.1/src/spatialite/mbrcache.c
new file mode 100644
index 0000000..cbabb02
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/mbrcache.c
@@ -0,0 +1,1529 @@
+/*
+
+ mbrcache.c -- SQLite3 extension [MBR CACHE VIRTUAL TABLE]
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <float.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiageo.h>
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+#define LONG64_MAX	_I64_MAX
+#define LONG64_MIN	_I64_MIN
+#else
+#define LONG64_MAX	9223372036854775807LL
+#define LONG64_MIN	(-LONG64_MAX + 1)
+#endif
+
+static struct sqlite3_module my_mbr_module;
+
+/*
+
+memory structs used to store the MBR's cache
+
+the basic idea is to implement a hierarchy in order to avoid
+excessive memory fragmentation and achieve better performance
+
+- the cache is a linked-list of cache page elements
+  - each cache page contains an array of 32 cache blocks
+    - each cache block contains an array of 32 cache cells
+so a single cache page con store up to 1024 cache cells
+
+*/
+
+struct mbr_cache_cell
+{
+/* 
+a  cached entity 
+*/
+
+/* the entity's ROWID */
+    sqlite3_int64 rowid;
+/* the MBR */
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+};
+
+struct mbr_cache_block
+{
+/*
+a block of 32 cached entities
+*/
+
+/* 
+allocation bitmap: the meaning of each bit is:
+1 - corresponding cache cell is in use
+0 - corresponding cache cell is unused
+*/
+    unsigned int bitmap;
+/* 
+the MBR corresponding to this cache block 
+i.e. the combined MBR for any contained cell
+*/
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+/* the cache cells array */
+    struct mbr_cache_cell cells[32];
+};
+
+struct mbr_cache_page
+{
+/*
+a page containing 32 cached blocks
+*/
+
+/* 
+allocation bitmap: the meaning of each bit is:
+1 - corresponding cache block is in full
+0 - corresponding cache block is not full
+*/
+    unsigned int bitmap;
+/* 
+the MBR corresponding to this cache page
+i.e. the combined MBR for any contained block
+*/
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+/* the cache blocks array */
+    struct mbr_cache_block blocks[32];
+/* the min-max rowid for this page */
+    sqlite3_int64 min_rowid;
+    sqlite3_int64 max_rowid;
+/* pointer to next element into the cached pages linked list */
+    struct mbr_cache_page *next;
+};
+
+struct mbr_cache
+{
+/*
+the MBR's cache
+implemented as a cache pages linked list
+*/
+
+/* pointers used to handle the cache pages linked list */
+    struct mbr_cache_page *first;
+    struct mbr_cache_page *last;
+/*
+ pointer used to identify the current cache page when inserting a new cache cell
+ */
+    struct mbr_cache_page *current;
+};
+
+typedef struct MbrCacheStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USE INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+    struct mbr_cache *cache;	/* the  MBR's cache */
+    char *table_name;		/* the main table to be cached */
+    char *column_name;		/* the column to be cached */
+    int error;			/* some previous error disables any operation */
+} MbrCache;
+typedef MbrCache *MbrCachePtr;
+
+typedef struct MbrCacheCursortStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    MbrCachePtr pVtab;		/* Virtual table of this cursor */
+    int eof;			/* the EOF marker */
+/* 
+positioning parameters while performing a cache search 
+*/
+    struct mbr_cache_page *current_page;
+    int current_block_index;
+    int current_cell_index;
+    struct mbr_cache_cell *current_cell;
+/* 
+the strategy to use:
+    0 = sequential scan
+    1 = find rowid
+    2 = spatial search
+*/
+    int strategy;
+/* the MBR to search for */
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+/*
+the MBR search mode:
+    0 = WITHIN
+    1 = CONTAIN
+*/
+    int mbr_mode;
+} MbrCacheCursor;
+typedef MbrCacheCursor *MbrCacheCursorPtr;
+
+static unsigned int
+cache_bitmask (int x)
+{
+/* return the bitmask corresponding to index X */
+    switch (x)
+      {
+      case 0:
+	  return 0x80000000;
+      case 1:
+	  return 0x40000000;
+      case 2:
+	  return 0x20000000;
+      case 3:
+	  return 0x10000000;
+      case 4:
+	  return 0x08000000;
+      case 5:
+	  return 0x04000000;
+      case 6:
+	  return 0x02000000;
+      case 7:
+	  return 0x01000000;
+      case 8:
+	  return 0x00800000;
+      case 9:
+	  return 0x00400000;
+      case 10:
+	  return 0x00200000;
+      case 11:
+	  return 0x00100000;
+      case 12:
+	  return 0x00080000;
+      case 13:
+	  return 0x00040000;
+      case 14:
+	  return 0x00020000;
+      case 15:
+	  return 0x00010000;
+      case 16:
+	  return 0x00008000;
+      case 17:
+	  return 0x00004000;
+      case 18:
+	  return 0x00002000;
+      case 19:
+	  return 0x00001000;
+      case 20:
+	  return 0x00000800;
+      case 21:
+	  return 0x00000400;
+      case 22:
+	  return 0x00000200;
+      case 23:
+	  return 0x00000100;
+      case 24:
+	  return 0x00000080;
+      case 25:
+	  return 0x00000040;
+      case 26:
+	  return 0x00000020;
+      case 27:
+	  return 0x00000010;
+      case 28:
+	  return 0x00000008;
+      case 29:
+	  return 0x00000004;
+      case 30:
+	  return 0x00000002;
+      case 31:
+	  return 0x00000001;
+      };
+    return 0x00000000;
+}
+
+static void
+mbrc_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+static struct mbr_cache *
+cache_alloc (void)
+{
+/* allocates and initializes an empty cache struct */
+    struct mbr_cache *p = malloc (sizeof (struct mbr_cache));
+    p->first = NULL;
+    p->last = NULL;
+    p->current = NULL;
+    return p;
+}
+
+static struct mbr_cache_page *
+cache_page_alloc (void)
+{
+/* allocates and initializes a cache page */
+    int i;
+    struct mbr_cache_block *pb;
+    struct mbr_cache_page *p = malloc (sizeof (struct mbr_cache_page));
+    p->bitmap = 0x00000000;
+    p->next = NULL;
+    p->minx = DBL_MAX;
+    p->miny = DBL_MAX;
+    p->maxx = -DBL_MAX;
+    p->maxy = -DBL_MAX;
+    for (i = 0; i < 32; i++)
+      {
+	  pb = p->blocks + i;
+	  pb->bitmap = 0x00000000;
+	  pb->minx = DBL_MAX;
+	  pb->miny = DBL_MAX;
+	  pb->maxx = -DBL_MAX;
+	  pb->maxy = DBL_MAX;
+      }
+    p->max_rowid = LONG64_MIN;
+    p->min_rowid = LONG64_MAX;
+    return p;
+}
+
+static void
+cache_destroy (struct mbr_cache *p)
+{
+/* memory cleanup; destroying a cache and any page into the cache */
+    struct mbr_cache_page *pp;
+    struct mbr_cache_page *ppn;
+    if (!p)
+	return;
+    pp = p->first;
+    while (pp)
+      {
+	  ppn = pp->next;
+	  free (pp);
+	  pp = ppn;
+      }
+    free (p);
+}
+
+static int
+cache_get_free_block (struct mbr_cache_page *pp)
+{
+/* scans a cache page, returning the index of the first available block containing a free cell */
+    int ib;
+    for (ib = 0; ib < 32; ib++)
+      {
+	  if ((pp->bitmap & cache_bitmask (ib)) == 0x00000000)
+	      return ib;
+      }
+    return -1;
+}
+
+static void
+cache_fix_page_bitmap (struct mbr_cache_page *pp)
+{
+/* updating the cache page bitmap */
+    int ib;
+    for (ib = 0; ib < 32; ib++)
+      {
+	  if (pp->blocks[ib].bitmap == 0xffffffff)
+	    {
+		/* all the cells into this block are used; marking the page bitmap */
+		pp->bitmap |= cache_bitmask (ib);
+	    }
+      }
+}
+
+static int
+cache_get_free_cell (struct mbr_cache_block *pb)
+{
+/* scans a cache block, returning the index of the first free cell */
+    int ic;
+    for (ic = 0; ic < 32; ic++)
+      {
+	  if ((pb->bitmap & cache_bitmask (ic)) == 0x00000000)
+	      return ic;
+      }
+    return -1;
+}
+
+static struct mbr_cache_page *
+cache_get_free_page (struct mbr_cache *p)
+{
+/* return a pointer to the first cache page containing a free cell */
+    struct mbr_cache_page *pp;
+    if (!(p->first))
+      {
+	  /* the cache is empty; so we surely need to allocate the first page */
+	  pp = cache_page_alloc ();
+	  p->first = pp;
+	  p->last = pp;
+	  p->current = pp;
+	  return pp;
+      }
+    if (p->current)
+      {
+	  /* checking if there is at least a free block into the current page */
+	  if (p->current->bitmap != 0xffffffff)
+	      return p->current;
+      }
+    pp = p->first;
+    while (pp)
+      {
+	  /* scanning the page list in order to discover if there is an existing page not yet completely filled */
+	  if (pp->bitmap != 0xffffffff)
+	    {
+		p->current = pp;
+		return pp;
+	    }
+	  pp = pp->next;
+      }
+/* we have to allocate a new page */
+    pp = cache_page_alloc ();
+    p->last->next = pp;
+    p->last = pp;
+    p->current = pp;
+    return pp;
+}
+
+static void
+cache_insert_cell (struct mbr_cache *p, sqlite3_int64 rowid, double minx,
+		   double miny, double maxx, double maxy)
+{
+/* inserting a new cell */
+    struct mbr_cache_page *pp = cache_get_free_page (p);
+    int ib = cache_get_free_block (pp);
+    struct mbr_cache_block *pb = pp->blocks + ib;
+    int ic = cache_get_free_cell (pb);
+    struct mbr_cache_cell *pc = pb->cells + ic;
+    pc->rowid = rowid;
+    pc->minx = minx;
+    pc->miny = miny;
+    pc->maxx = maxx;
+    pc->maxy = maxy;
+/* marking the cache cell as used into the block bitmap */
+    pb->bitmap |= cache_bitmask (ic);
+/* updating the cache block MBR */
+    if (pb->minx > minx)
+	pb->minx = minx;
+    if (pb->maxx < maxx)
+	pb->maxx = maxx;
+    if (pb->miny > miny)
+	pb->miny = miny;
+    if (pb->maxy < maxy)
+	pb->maxy = maxy;
+/* updating the cache page MBR */
+    if (pp->minx > minx)
+	pp->minx = minx;
+    if (pp->maxx < maxx)
+	pp->maxx = maxx;
+    if (pp->miny > miny)
+	pp->miny = miny;
+    if (pp->maxy < maxy)
+	pp->maxy = maxy;
+/* fixing the cache page bitmap */
+    cache_fix_page_bitmap (pp);
+/* updating min-max rowid into the cache page */
+    if (pp->min_rowid > rowid)
+	pp->min_rowid = rowid;
+    if (pp->max_rowid < rowid)
+	pp->max_rowid = rowid;
+}
+
+static struct mbr_cache *
+cache_load (sqlite3 * handle, const char *table, const char *column)
+{
+/* 
+initial loading the MBR cache
+retrieving any existing entity from the main table 
+*/
+    sqlite3_stmt *stmt;
+    int ret;
+    char sql[256];
+    sqlite3_int64 rowid;
+    double minx;
+    double maxx;
+    double miny;
+    double maxy;
+    int v1;
+    int v2;
+    int v3;
+    int v4;
+    int v5;
+    struct mbr_cache *p_cache;
+    char xcolumn[1024];
+    char xtable[1024];
+    strcpy (xcolumn, column);
+    mbrc_double_quoted_sql (xcolumn);
+    strcpy (xtable, table);
+    mbrc_double_quoted_sql (xtable);
+    sprintf (sql,
+	     "SELECT ROWID, MbrMinX(%s), MbrMinY(%s), MbrMaxX(%s), MbrMaxY(%s) FROM %s",
+	     xcolumn, xcolumn, xcolumn, xcolumn, xtable);
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  fprintf (stderr, "cache SQL error: %s\n", sqlite3_errmsg (handle));
+	  return NULL;
+      }
+    p_cache = cache_alloc ();
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		v1 = 0;
+		v2 = 0;
+		v3 = 0;
+		v4 = 0;
+		v5 = 0;
+		if (sqlite3_column_type (stmt, 0) == SQLITE_INTEGER)
+		    v1 = 1;
+		if (sqlite3_column_type (stmt, 1) == SQLITE_FLOAT)
+		    v2 = 1;
+		if (sqlite3_column_type (stmt, 1) == SQLITE_FLOAT)
+		    v3 = 1;
+		if (sqlite3_column_type (stmt, 1) == SQLITE_FLOAT)
+		    v4 = 1;
+		if (sqlite3_column_type (stmt, 1) == SQLITE_FLOAT)
+		    v5 = 1;
+		if (v1 && v2 && v3 && v4 && v5)
+		  {
+		      /* ok, this entity is a valid one; inserting them into the MBR's cache */
+		      rowid = sqlite3_column_int (stmt, 0);
+		      minx = sqlite3_column_double (stmt, 1);
+		      miny = sqlite3_column_double (stmt, 2);
+		      maxx = sqlite3_column_double (stmt, 3);
+		      maxy = sqlite3_column_double (stmt, 4);
+		      cache_insert_cell (p_cache, rowid, minx, miny, maxx,
+					 maxy);
+		  }
+	    }
+	  else
+	    {
+/* some unexpected error occurred */
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (handle));
+		sqlite3_finalize (stmt);
+		cache_destroy (p_cache);
+		return NULL;
+	    }
+      }
+/* we have now to finalize the query [memory cleanup] */
+    sqlite3_finalize (stmt);
+    return p_cache;
+}
+
+static int
+cache_find_next_cell (struct mbr_cache_page **page, int *i_block, int *i_cell,
+		      struct mbr_cache_cell **cell)
+{
+/* finding next cached cell */
+    struct mbr_cache_page *pp = *page;
+    struct mbr_cache_block *pb;
+    struct mbr_cache_cell *pc;
+    int ib;
+    int ic;
+    int sib = *i_block;
+    int sic = *i_cell;
+    while (pp)
+      {
+	  for (ib = sib; ib < 32; ib++)
+	    {
+		pb = pp->blocks + ib;
+		for (ic = sic; ic < 32; ic++)
+		  {
+		      if ((pb->bitmap & cache_bitmask (ic)) == 0x00000000)
+			  continue;
+		      pc = pb->cells + ic;
+		      if (pc == *cell)
+			{
+			    /* this one is the current cell */
+			    continue;
+			}
+		      /* next cell found */
+		      *page = pp;
+		      *i_block = ib;
+		      *i_cell = ic;
+		      *cell = pc;
+		      return 1;
+		  }
+		sic = 0;
+	    }
+	  sib = 0;
+	  pp = pp->next;
+      }
+    return 0;
+}
+
+static int
+cache_find_next_mbr (struct mbr_cache_page **page, int *i_block, int *i_cell,
+		     struct mbr_cache_cell **cell, double minx, double miny,
+		     double maxx, double maxy, int mode)
+{
+/* finding next cached cell */
+    struct mbr_cache_page *pp = *page;
+    struct mbr_cache_block *pb;
+    struct mbr_cache_cell *pc;
+    int ib;
+    int ic;
+    int sib = *i_block;
+    int sic = *i_cell;
+    int ok_mbr;
+    while (pp)
+      {
+	  ok_mbr = 0;
+	  if (pp->maxx >= minx && pp->minx <= maxx && pp->maxy >= miny
+	      && pp->miny <= maxy)
+	      ok_mbr = 1;
+	  if (ok_mbr)
+	    {
+		for (ib = sib; ib < 32; ib++)
+		  {
+		      pb = pp->blocks + ib;
+		      ok_mbr = 0;
+		      if (pb->maxx >= minx && pb->minx <= maxx
+			  && pb->maxy >= miny && pb->miny <= maxy)
+			  ok_mbr = 1;
+		      if (ok_mbr)
+			{
+			    for (ic = sic; ic < 32; ic++)
+			      {
+				  if ((pb->bitmap & cache_bitmask (ic)) ==
+				      0x00000000)
+				      continue;
+				  pc = pb->cells + ic;
+				  ok_mbr = 0;
+				  if (mode == GAIA_FILTER_MBR_INTERSECTS)
+				    {
+					/* MBR INTERSECTS */
+					if (pc->maxx >= minx && pc->minx <= maxx
+					    && pc->maxy >= miny
+					    && pc->miny <= maxy)
+					    ok_mbr = 1;
+				    }
+				  else if (mode == GAIA_FILTER_MBR_CONTAINS)
+				    {
+					/* MBR CONTAINS */
+					if (minx >= pc->minx && maxx <= pc->maxx
+					    && miny >= pc->miny
+					    && maxy <= pc->maxy)
+					    ok_mbr = 1;
+				    }
+				  else
+				    {
+					/* MBR WITHIN */
+					if (pc->minx >= minx && pc->maxx <= maxx
+					    && pc->miny >= miny
+					    && pc->maxy <= maxy)
+					    ok_mbr = 1;
+				    }
+				  if (ok_mbr)
+				    {
+					if (pc == *cell)
+					  {
+					      /* this one is the current cell */
+					      continue;
+					  }
+					/* next cell found */
+					*page = pp;
+					*i_block = ib;
+					*i_cell = ic;
+					*cell = pc;
+					return 1;
+				    }
+			      }
+			}
+		      sic = 0;
+		  }
+	    }
+	  sib = 0;
+	  pp = pp->next;
+      }
+    return 0;
+}
+
+static struct mbr_cache_cell *
+cache_find_by_rowid (struct mbr_cache_page *pp, sqlite3_int64 rowid)
+{
+/* trying to find a row by rowid from the Mbr cache */
+    struct mbr_cache_block *pb;
+    struct mbr_cache_cell *pc;
+    int ib;
+    int ic;
+    while (pp)
+      {
+	  if (rowid >= pp->min_rowid && rowid <= pp->max_rowid)
+	    {
+		for (ib = 0; ib < 32; ib++)
+		  {
+		      pb = pp->blocks + ib;
+		      for (ic = 0; ic < 32; ic++)
+			{
+			    if ((pb->bitmap & cache_bitmask (ic)) == 0x00000000)
+				continue;
+			    pc = pb->cells + ic;
+			    if (pc->rowid == rowid)
+				return pc;
+			}
+		  }
+	    }
+	  pp = pp->next;
+      }
+    return 0;
+}
+
+static void
+cache_update_page (struct mbr_cache_page *pp, int i_block)
+{
+/* updating the cache block and cache page MBR after a DELETE or UPDATE occurred */
+    struct mbr_cache_block *pb;
+    struct mbr_cache_cell *pc;
+    int ib;
+    int ic;
+/* updating the cache block MBR */
+    pb = pp->blocks + i_block;
+    pb->minx = DBL_MAX;
+    pb->miny = DBL_MAX;
+    pb->maxx = -DBL_MAX;
+    pb->maxy = -DBL_MAX;
+    for (ic = 0; ic < 32; ic++)
+      {
+	  if ((pb->bitmap & cache_bitmask (ic)) == 0x00000000)
+	      continue;
+	  pc = pb->cells + ic;
+	  if (pb->minx > pc->minx)
+	      pb->minx = pc->minx;
+	  if (pb->miny > pc->miny)
+	      pb->miny = pc->miny;
+	  if (pb->maxx < pc->maxx)
+	      pb->maxx = pc->maxx;
+	  if (pb->maxy < pc->maxy)
+	      pb->maxy = pc->maxy;
+      }
+/* updating the cache page MBR */
+    pp->minx = DBL_MAX;
+    pp->miny = DBL_MAX;
+    pp->maxx = -DBL_MAX;
+    pp->maxy = -DBL_MAX;
+    pp->min_rowid = LONG64_MAX;
+    pp->max_rowid = LONG64_MIN;
+    for (ib = 0; ib < 32; ib++)
+      {
+	  pb = pp->blocks + ib;
+	  for (ic = 0; ic < 32; ic++)
+	    {
+		if ((pb->bitmap & cache_bitmask (ic)) == 0x00000000)
+		    continue;
+		pc = pb->cells + ic;
+		if (pp->minx > pc->minx)
+		    pp->minx = pc->minx;
+		if (pp->miny > pc->miny)
+		    pp->miny = pc->miny;
+		if (pp->maxx < pc->maxx)
+		    pp->maxx = pc->maxx;
+		if (pp->maxy < pc->maxy)
+		    pp->maxy = pc->maxy;
+		if (pp->min_rowid > pc->rowid)
+		    pp->min_rowid = pc->rowid;
+		if (pp->max_rowid < pc->rowid)
+		    pp->max_rowid = pc->rowid;
+	    }
+      }
+}
+
+static int
+cache_delete_cell (struct mbr_cache_page *pp, sqlite3_int64 rowid)
+{
+/* trying to delete a row identified by rowid from the Mbr cache */
+    struct mbr_cache_block *pb;
+    struct mbr_cache_cell *pc;
+    int ib;
+    int ic;
+    while (pp)
+      {
+	  if (rowid >= pp->min_rowid && rowid <= pp->max_rowid)
+	    {
+		for (ib = 0; ib < 32; ib++)
+		  {
+		      pb = pp->blocks + ib;
+		      for (ic = 0; ic < 32; ic++)
+			{
+			    if ((pb->bitmap & cache_bitmask (ic)) == 0x00000000)
+				continue;
+			    pc = pb->cells + ic;
+			    if (pc->rowid == rowid)
+			      {
+				  /* marking the cell as free */
+				  pb->bitmap &= ~(cache_bitmask (ic));
+				  /* marking the block as not full */
+				  pp->bitmap &= ~(cache_bitmask (ib));
+				  /* updating the cache block and cache page MBR */
+				  cache_update_page (pp, ib);
+				  return 1;
+			      }
+			}
+		  }
+	    }
+	  pp = pp->next;
+      }
+    return 0;
+}
+
+static int
+cache_update_cell (struct mbr_cache_page *pp, sqlite3_int64 rowid, double minx,
+		   double miny, double maxx, double maxy)
+{
+/* trying to update a row identified by rowid from the Mbr cache */
+    struct mbr_cache_block *pb;
+    struct mbr_cache_cell *pc;
+    int ib;
+    int ic;
+    while (pp)
+      {
+	  if (rowid >= pp->min_rowid && rowid <= pp->max_rowid)
+	    {
+		for (ib = 0; ib < 32; ib++)
+		  {
+		      pb = pp->blocks + ib;
+		      for (ic = 0; ic < 32; ic++)
+			{
+			    if ((pb->bitmap & cache_bitmask (ic)) == 0x00000000)
+				continue;
+			    pc = pb->cells + ic;
+			    if (pc->rowid == rowid)
+			      {
+				  /* updating the cell MBR */
+				  pc->minx = minx;
+				  pc->miny = miny;
+				  pc->maxx = maxx;
+				  pc->maxy = maxy;
+				  /* updating the cache block and cache page MBR */
+				  cache_update_page (pp, ib);
+				  return 1;
+			      }
+			}
+		  }
+	    }
+	  pp = pp->next;
+      }
+    return 0;
+}
+
+static int
+mbrc_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	     sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table and caches related Geometry column */
+    int err;
+    int ret;
+    int i;
+    int len;
+    int n_rows;
+    int n_columns;
+    const char *vtable;
+    const char *table;
+    const char *column;
+    const char *col_name;
+    char **results;
+    char *err_msg = NULL;
+    char sql[4096];
+    int ok_col;
+    MbrCachePtr p_vt;
+    char xname[1024];
+    char x_vtable[1024];
+    char x_table[1024];
+    char x_column[1024];
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+    p_vt = (MbrCachePtr) sqlite3_malloc (sizeof (MbrCache));
+    if (!p_vt)
+	return SQLITE_NOMEM;
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    p_vt->pModule = &my_mbr_module;
+    p_vt->nRef = 0;
+    p_vt->zErrMsg = NULL;
+    p_vt->db = db;
+    p_vt->table_name = NULL;
+    p_vt->column_name = NULL;
+    p_vt->cache = NULL;
+/* checking for table_name and geo_column_name */
+    if (argc == 5)
+      {
+	  vtable = argv[2];
+	  len = strlen (vtable);
+	  if ((*(vtable + 0) == '\'' || *(vtable + 0) == '"')
+	      && (*(vtable + len - 1) == '\'' || *(vtable + len - 1) == '"'))
+	    {
+/* the VirtualTableName is enclosed between quotes - we need to dequote it */
+		strcpy (x_vtable, vtable + 1);
+		len = strlen (x_vtable);
+		*(x_vtable + len - 1) = '\0';
+		vtable = x_vtable;
+	    }
+	  table = argv[3];
+	  len = strlen (table);
+	  if ((*(table + 0) == '\'' || *(table + 0) == '"')
+	      && (*(table + len - 1) == '\'' || *(table + len - 1) == '"'))
+	    {
+/* the MainTableName is enclosed between quotes - we need to dequote it */
+		strcpy (x_table, table + 1);
+		len = strlen (x_table);
+		*(x_table + len - 1) = '\0';
+		table = x_table;
+	    }
+	  column = argv[4];
+	  len = strlen (column);
+	  if ((*(column + 0) == '\'' || *(column + 0) == '"')
+	      && (*(column + len - 1) == '\'' || *(column + len - 1) == '"'))
+	    {
+/* the GeometryColumnName is enclosed between quotes - we need to dequote it */
+		strcpy (x_column, column + 1);
+		len = strlen (x_column);
+		*(x_column + len - 1) = '\0';
+		column = x_column;
+	    }
+	  len = strlen (table);
+	  p_vt->table_name = sqlite3_malloc (len + 1);
+	  strcpy (p_vt->table_name, table);
+	  len = strlen (column);
+	  p_vt->column_name = sqlite3_malloc (len + 1);
+	  strcpy (p_vt->column_name, column);
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[MbrCache module] CREATE VIRTUAL: illegal arg list {table_name, geo_column_name}");
+	  return SQLITE_ERROR;
+      }
+/* retrieving the base table columns */
+    err = 0;
+    ok_col = 0;
+    strcpy (xname, table);
+    mbrc_double_quoted_sql (xname);
+    sprintf (sql, "PRAGMA table_info(%s)", xname);
+    ret = sqlite3_get_table (db, sql, &results, &n_rows, &n_columns, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  err = 1;
+	  goto illegal;
+      }
+    if (n_rows > 1)
+      {
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		col_name = results[(i * n_columns) + 1];
+		if (strcasecmp (col_name, column) == 0)
+		    ok_col = 1;
+	    }
+	  sqlite3_free_table (results);
+	  if (!ok_col)
+	      err = 1;
+      }
+    else
+	err = 1;
+  illegal:
+    if (err)
+      {
+	  /* something is going the wrong way; creating a stupid default table */
+	  strcpy (xname, vtable);
+	  mbrc_double_quoted_sql (xname);
+	  sprintf (sql, "CREATE TABLE %s (rowid INTEGER, mbr BLOB)", xname);
+	  if (sqlite3_declare_vtab (db, sql) != SQLITE_OK)
+	    {
+		*pzErr =
+		    sqlite3_mprintf
+		    ("[MbrCache module] cannot build the VirtualTable\n");
+		return SQLITE_ERROR;
+	    }
+	  p_vt->error = 1;
+	  *ppVTab = (sqlite3_vtab *) p_vt;
+	  return SQLITE_OK;
+      }
+    p_vt->error = 0;
+    strcpy (xname, vtable);
+    mbrc_double_quoted_sql (xname);
+    sprintf (sql, "CREATE TABLE %s (", xname);
+    strcat (sql, "rowid INTEGER, mbr BLOB)");
+    if (sqlite3_declare_vtab (db, sql) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[MbrCache module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       sql);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    return SQLITE_OK;
+}
+
+static int
+mbrc_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	      sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table - simply aliases mbrc_create() */
+    return mbrc_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+mbrc_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIdxInfo)
+{
+/* best index selection */
+    int i;
+    int err = 1;
+    int errors = 0;
+    int mbr = 0;
+    int rowid = 0;
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    for (i = 0; i < pIdxInfo->nConstraint; i++)
+      {
+	  /* verifying the constraints */
+	  struct sqlite3_index_constraint *p = &(pIdxInfo->aConstraint[i]);
+	  if (p->usable)
+	    {
+		if (p->iColumn == 0 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
+		    rowid++;
+		else if (p->iColumn == 1 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
+		    mbr++;
+		else
+		    errors++;
+	    }
+      }
+    if (mbr == 1 && rowid == 0 && errors == 0)
+      {
+	  /* this one is a valid spatially-filtered query */
+	  pIdxInfo->idxNum = 2;
+	  for (i = 0; i < pIdxInfo->nConstraint; i++)
+	    {
+		pIdxInfo->aConstraintUsage[i].argvIndex = 1;
+		pIdxInfo->aConstraintUsage[i].omit = 1;
+	    }
+	  err = 0;
+      }
+    if (mbr == 0 && rowid == 1 && errors == 0)
+      {
+	  /* this one is a valid rowid-filtered query */
+	  pIdxInfo->idxNum = 1;
+	  pIdxInfo->estimatedCost = 1.0;
+	  for (i = 0; i < pIdxInfo->nConstraint; i++)
+	    {
+		if (pIdxInfo->aConstraint[i].usable)
+		  {
+		      pIdxInfo->aConstraintUsage[i].argvIndex = 1;
+		      pIdxInfo->aConstraintUsage[i].omit = 1;
+		  }
+	    }
+	  err = 0;
+      }
+    if (mbr == 0 && rowid == 0 && errors == 0)
+      {
+	  /* this one is a valid unfiltered query */
+	  pIdxInfo->idxNum = 0;
+	  err = 0;
+      }
+    if (err)
+      {
+	  /* illegal query */
+	  pIdxInfo->idxNum = -1;
+      }
+    return SQLITE_OK;
+}
+
+static int
+mbrc_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    MbrCachePtr p_vt = (MbrCachePtr) pVTab;
+    if (p_vt->cache)
+	cache_destroy (p_vt->cache);
+    if (p_vt->table_name)
+	sqlite3_free (p_vt->table_name);
+    if (p_vt->column_name)
+	sqlite3_free (p_vt->column_name);
+    sqlite3_free (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+mbrc_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases mbrc_disconnect() */
+    return mbrc_disconnect (pVTab);
+}
+
+static void
+mbrc_read_row_unfiltered (MbrCacheCursorPtr cursor)
+{
+/* trying to read the next row from the Mbr cache - unfiltered mode */
+    struct mbr_cache_page *page = cursor->current_page;
+    struct mbr_cache_cell *cell = cursor->current_cell;
+    int i_block = cursor->current_block_index;
+    int i_cell = cursor->current_cell_index;
+    if (cache_find_next_cell (&page, &i_block, &i_cell, &cell))
+      {
+	  cursor->current_page = page;
+	  cursor->current_block_index = i_block;
+	  cursor->current_cell_index = i_cell;
+	  cursor->current_cell = cell;
+      }
+    else
+	cursor->eof = 1;
+}
+
+static void
+mbrc_read_row_filtered (MbrCacheCursorPtr cursor)
+{
+/* trying to read the next row from the Mbr cache - spatially filter mode */
+    struct mbr_cache_page *page = cursor->current_page;
+    struct mbr_cache_cell *cell = cursor->current_cell;
+    int i_block = cursor->current_block_index;
+    int i_cell = cursor->current_cell_index;
+    if (cache_find_next_mbr
+	(&page, &i_block, &i_cell, &cell, cursor->minx, cursor->miny,
+	 cursor->maxx, cursor->maxy, cursor->mbr_mode))
+      {
+	  cursor->current_page = page;
+	  cursor->current_block_index = i_block;
+	  cursor->current_cell_index = i_cell;
+	  cursor->current_cell = cell;
+      }
+    else
+	cursor->eof = 1;
+}
+
+static void
+mbrc_read_row_by_rowid (MbrCacheCursorPtr cursor, sqlite3_int64 rowid)
+{
+/* trying to find a row by rowid from the Mbr cache */
+    struct mbr_cache_cell *cell =
+	cache_find_by_rowid (cursor->pVtab->cache->first, rowid);
+    if (cell)
+	cursor->current_cell = cell;
+    else
+      {
+	  cursor->current_cell = NULL;
+	  cursor->eof = 1;
+      }
+}
+
+static int
+mbrc_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    MbrCachePtr p_vt = (MbrCachePtr) pVTab;
+    MbrCacheCursorPtr cursor =
+	(MbrCacheCursorPtr) sqlite3_malloc (sizeof (MbrCacheCursor));
+    if (cursor == NULL)
+	return SQLITE_ERROR;
+    cursor->pVtab = p_vt;
+    if (p_vt->error)
+      {
+	  cursor->eof = 1;
+	  *ppCursor = (sqlite3_vtab_cursor *) cursor;
+	  return SQLITE_OK;
+      }
+    if (!(p_vt->cache))
+	p_vt->cache =
+	    cache_load (p_vt->db, p_vt->table_name, p_vt->column_name);
+    cursor->current_page = cursor->pVtab->cache->first;
+    cursor->current_block_index = 0;
+    cursor->current_cell_index = 0;
+    cursor->current_cell = NULL;
+    cursor->eof = 0;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    return SQLITE_OK;
+}
+
+static int
+mbrc_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    sqlite3_free (pCursor);
+    return SQLITE_OK;
+}
+
+static int
+mbrc_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	     int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    MbrCacheCursorPtr cursor = (MbrCacheCursorPtr) pCursor;
+    if (idxStr || argc)
+	idxStr = idxStr;	/* unused arg warning suppression */
+    if (cursor->pVtab->error)
+      {
+	  cursor->eof = 1;
+	  return SQLITE_OK;
+      }
+    cursor->current_page = cursor->pVtab->cache->first;
+    cursor->current_block_index = 0;
+    cursor->current_cell_index = 0;
+    cursor->current_cell = NULL;
+    cursor->eof = 0;
+    cursor->strategy = idxNum;
+    if (idxNum == 0)
+      {
+	  /* unfiltered mode */
+	  mbrc_read_row_unfiltered (cursor);
+	  return SQLITE_OK;
+      }
+    if (idxNum == 1)
+      {
+	  /* filtering by ROWID */
+	  sqlite3_int64 rowid = sqlite3_value_int64 (argv[0]);
+	  mbrc_read_row_by_rowid (cursor, rowid);
+	  return SQLITE_OK;
+      }
+    if (idxNum == 2)
+      {
+	  /* filtering by MBR spatial relation */
+	  unsigned char *p_blob;
+	  int n_bytes;
+	  double minx;
+	  double miny;
+	  double maxx;
+	  double maxy;
+	  int mode;
+	  if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+	      cursor->eof = 1;
+	  else
+	    {
+		p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+		n_bytes = sqlite3_value_bytes (argv[0]);
+		if (gaiaParseFilterMbr
+		    (p_blob, n_bytes, &minx, &miny, &maxx, &maxy, &mode))
+		  {
+		      if (mode == GAIA_FILTER_MBR_WITHIN
+			  || mode == GAIA_FILTER_MBR_CONTAINS
+			  || mode == GAIA_FILTER_MBR_INTERSECTS)
+			{
+			    cursor->minx = minx;
+			    cursor->miny = miny;
+			    cursor->maxx = maxx;
+			    cursor->maxy = maxy;
+			    cursor->mbr_mode = mode;
+			    mbrc_read_row_filtered (cursor);
+			}
+		      else
+			  cursor->eof = 1;
+		  }
+	    }
+	  return SQLITE_OK;
+      }
+/* illegal query mode */
+    cursor->eof = 1;
+    return SQLITE_OK;
+}
+
+static int
+mbrc_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching a next row from cursor */
+    MbrCacheCursorPtr cursor = (MbrCacheCursorPtr) pCursor;
+    if (cursor->pVtab->error)
+      {
+	  cursor->eof = 1;
+	  return SQLITE_OK;
+      }
+    if (cursor->strategy == 0)
+	mbrc_read_row_unfiltered (cursor);
+    else if (cursor->strategy == 2)
+	mbrc_read_row_filtered (cursor);
+    else
+	cursor->eof = 1;
+    return SQLITE_OK;
+}
+
+static int
+mbrc_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    MbrCacheCursorPtr cursor = (MbrCacheCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+mbrc_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	     int column)
+{
+/* fetching value for the Nth column */
+    MbrCacheCursorPtr cursor = (MbrCacheCursorPtr) pCursor;
+    if (!(cursor->current_cell))
+	sqlite3_result_null (pContext);
+    else
+      {
+	  if (column == 0)
+	    {
+		/* the PRIMARY KEY column */
+		sqlite3_result_int64 (pContext, cursor->current_cell->rowid);
+	    }
+	  if (column == 1)
+	    {
+		/* the MBR column */
+		char envelope[1024];
+		sprintf (envelope,
+			 "POLYGON((%1.2f %1.2f, %1.2f %1.2f, %1.2f %1.2f, %1.2f %1.2f, %1.2f %1.2f))",
+			 cursor->current_cell->minx, cursor->current_cell->miny,
+			 cursor->current_cell->maxx, cursor->current_cell->miny,
+			 cursor->current_cell->maxx, cursor->current_cell->maxy,
+			 cursor->current_cell->minx, cursor->current_cell->maxy,
+			 cursor->current_cell->minx,
+			 cursor->current_cell->miny);
+		sqlite3_result_text (pContext, envelope, strlen (envelope),
+				     SQLITE_TRANSIENT);
+	    }
+      }
+    return SQLITE_OK;
+}
+
+static int
+mbrc_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    MbrCacheCursorPtr cursor = (MbrCacheCursorPtr) pCursor;
+    *pRowid = cursor->current_cell->rowid;
+    return SQLITE_OK;
+}
+
+static int
+mbrc_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	     sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    sqlite3_int64 rowid;
+    unsigned char *p_blob;
+    int n_bytes;
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+    int mode;
+    int illegal = 0;
+    MbrCachePtr p_vtab = (MbrCachePtr) pVTab;
+    if (pRowid)
+	pRowid = pRowid;	/* unused arg warning suppression */
+    if (p_vtab->error)
+	return SQLITE_OK;
+    if (!(p_vtab->cache))
+	p_vtab->cache =
+	    cache_load (p_vtab->db, p_vtab->table_name, p_vtab->column_name);
+    if (argc == 1)
+      {
+	  /* performing a DELETE */
+	  if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+	    {
+		rowid = sqlite3_value_int64 (argv[0]);
+		cache_delete_cell (p_vtab->cache->first, rowid);
+	    }
+	  else
+	      illegal = 1;
+      }
+    else
+      {
+	  if (sqlite3_value_type (argv[0]) == SQLITE_NULL)
+	    {
+		/* performing an INSERT */
+		if (argc == 4)
+		  {
+		      if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER
+			  && sqlite3_value_type (argv[3]) == SQLITE_BLOB)
+			{
+			    rowid = sqlite3_value_int64 (argv[2]);
+			    p_blob =
+				(unsigned char *) sqlite3_value_blob (argv[3]);
+			    n_bytes = sqlite3_value_bytes (argv[3]);
+			    if (gaiaParseFilterMbr
+				(p_blob, n_bytes, &minx, &miny, &maxx, &maxy,
+				 &mode))
+			      {
+				  if (mode == GAIA_FILTER_MBR_DECLARE)
+				    {
+					if (!cache_find_by_rowid
+					    (p_vtab->cache->first, rowid))
+					    cache_insert_cell (p_vtab->cache,
+							       rowid, minx,
+							       miny, maxx,
+							       maxy);
+				    }
+				  else
+				      illegal = 1;
+			      }
+			    else
+				illegal = 1;
+			}
+		      else
+			  illegal = 1;
+		  }
+		else
+		    illegal = 1;
+	    }
+	  else
+	    {
+		/* performing an UPDATE */
+		if (argc == 4)
+		  {
+		      if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER
+			  && sqlite3_value_type (argv[3]) == SQLITE_BLOB)
+			{
+			    rowid = sqlite3_value_int64 (argv[0]);
+			    p_blob =
+				(unsigned char *) sqlite3_value_blob (argv[3]);
+			    n_bytes = sqlite3_value_bytes (argv[3]);
+			    if (gaiaParseFilterMbr
+				(p_blob, n_bytes, &minx, &miny, &maxx, &maxy,
+				 &mode))
+			      {
+				  if (mode == GAIA_FILTER_MBR_DECLARE)
+				      cache_update_cell (p_vtab->cache->first,
+							 rowid, minx, miny,
+							 maxx, maxy);
+				  else
+				      illegal = 1;
+			      }
+			    else
+				illegal = 1;
+			}
+		      else
+			  illegal = 1;
+		  }
+		else
+		    illegal = 1;
+	    }
+      }
+    if (illegal)
+	return SQLITE_MISMATCH;
+    return SQLITE_OK;
+}
+
+static int
+mbrc_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+mbrc_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+mbrc_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+mbrc_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3MbrCacheInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    my_mbr_module.iVersion = 1;
+    my_mbr_module.xCreate = &mbrc_create;
+    my_mbr_module.xConnect = &mbrc_connect;
+    my_mbr_module.xBestIndex = &mbrc_best_index;
+    my_mbr_module.xDisconnect = &mbrc_disconnect;
+    my_mbr_module.xDestroy = &mbrc_destroy;
+    my_mbr_module.xOpen = &mbrc_open;
+    my_mbr_module.xClose = &mbrc_close;
+    my_mbr_module.xFilter = &mbrc_filter;
+    my_mbr_module.xNext = &mbrc_next;
+    my_mbr_module.xEof = &mbrc_eof;
+    my_mbr_module.xColumn = &mbrc_column;
+    my_mbr_module.xRowid = &mbrc_rowid;
+    my_mbr_module.xUpdate = &mbrc_update;
+    my_mbr_module.xBegin = &mbrc_begin;
+    my_mbr_module.xSync = &mbrc_sync;
+    my_mbr_module.xCommit = &mbrc_commit;
+    my_mbr_module.xRollback = &mbrc_rollback;
+    my_mbr_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "MbrCache", &my_mbr_module, NULL, 0);
+    return rc;
+}
+
+int
+mbrcache_extension_init (sqlite3 * db)
+{
+    return sqlite3MbrCacheInit (db);
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/spatialite.c b/libspatialite/libspatialite-3.0.1/src/spatialite/spatialite.c
new file mode 100644
index 0000000..c6ebb5e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/spatialite.c
@@ -0,0 +1,17400 @@
+/*
+
+ spatialite.c -- SQLite3 spatial extension
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+#include <locale.h>
+#include <errno.h>
+
+#if defined(_WIN32) || defined(WIN32)
+#include <io.h>
+#define isatty	_isatty
+#else
+#include <unistd.h>
+#endif
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3ext.h>
+#else
+#include <sqlite3ext.h>
+#endif
+
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite/gaiaexif.h>
+#include <spatialite/spatialite.h>
+#include <spatialite.h>
+
+#ifndef OMIT_GEOS		/* including GEOS */
+#include <geos_c.h>
+#endif
+
+#ifndef OMIT_PROJ		/* including PROJ.4 */
+#include <proj_api.h>
+#endif
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+#define GAIA_UNUSED() if (argc || argv) argc = argc;
+
+#ifndef OMIT_GEOCALLBACKS	/* supporting RTree geometry callbacks */
+struct gaia_rtree_mbr
+{
+/* a struct used by R*Tree GeometryCallback functions [MBR] */
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+};
+#endif /* end RTree geometry callbacks */
+
+static SQLITE_EXTENSION_INIT1 struct spatial_index_str
+{
+/* a struct to implement a linked list of spatial-indexes */
+    char ValidRtree;
+    char ValidCache;
+    char *TableName;
+    char *ColumnName;
+    struct spatial_index_str *Next;
+};
+
+struct stddev_str
+{
+/* a struct to implement StandardVariation and Variance aggregate functions */
+    int cleaned;
+    double mean;
+    double quot;
+    double count;
+};
+
+struct fdo_table
+{
+/* a struct to implement a linked-list for FDO-ORG table names */
+    char *table;
+    struct fdo_table *next;
+};
+
+static void
+fnct_spatialite_version (sqlite3_context * context, int argc,
+			 sqlite3_value ** argv)
+{
+/* SQL function:
+/ spatialite_version()
+/
+/ return a text string representing the current SpatiaLite version
+*/
+    int len;
+    const char *p_result = spatialite_version ();
+    GAIA_UNUSED ();
+    len = strlen (p_result);
+    sqlite3_result_text (context, p_result, len, SQLITE_TRANSIENT);
+}
+
+static void
+fnct_geos_version (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ geos_version()
+/
+/ return a text string representing the current GEOS version
+/ or NULL if GEOS is currently unsupported
+*/
+
+#ifndef OMIT_GEOS		/* GEOS version */
+    int len;
+    const char *p_result = GEOSversion ();
+    GAIA_UNUSED ();
+    len = strlen (p_result);
+    sqlite3_result_text (context, p_result, len, SQLITE_TRANSIENT);
+#else
+    sqlite3_result_null (context);
+#endif
+}
+
+
+static void
+fnct_proj4_version (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ proj4_version()
+/
+/ return a text string representing the current PROJ.4 version
+/ or NULL if PROJ.4 is currently unsupported
+*/
+
+#ifndef OMIT_PROJ		/* PROJ.4 version */
+    int len;
+    const char *p_result = pj_get_release ();
+    GAIA_UNUSED ();
+    len = strlen (p_result);
+    sqlite3_result_text (context, p_result, len, SQLITE_TRANSIENT);
+#else
+    sqlite3_result_null (context);
+#endif
+}
+
+static void
+clean_sql_string (char *buf)
+{
+/* well-formatting a string to be used as an SQL string-value */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    while (*in != '\0')
+      {
+	  if (*in == '\'')
+	      *out++ = '\'';
+	  *out++ = *in++;
+      }
+    *out = '\0';
+}
+
+static void
+double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+static void
+fnct_GeometryConstraints (sqlite3_context * context, int argc,
+			  sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeometryConstraints(BLOBencoded geometry, geometry-type, srid)
+/ GeometryConstraints(BLOBencoded geometry, geometry-type, srid, dimensions)
+/
+/ checks geometry constraints, returning:
+/
+/ -1 - if some error occurred
+/ 1 - if geometry constraints validation passes
+/ 0 - if geometry constraints validation fails
+/
+*/
+    int little_endian;
+    int endian_arch = gaiaEndianArch ();
+    unsigned char *p_blob = NULL;
+    int n_bytes = 0;
+    int srid;
+    int geom_srid = -1;
+    const unsigned char *type;
+    int xtype;
+    int geom_type = -1;
+    int geom_normalized_type;
+    const unsigned char *dimensions;
+    int dims = GAIA_XY;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_BLOB
+	|| sqlite3_value_type (argv[0]) == SQLITE_NULL)
+	;
+    else
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_TEXT)
+	type = sqlite3_value_text (argv[1]);
+    else
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	srid = sqlite3_value_int (argv[2]);
+    else
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (argc == 4)
+      {
+	  /* explicit dimensions - supporting XYZM */
+	  dimensions = sqlite3_value_text (argv[3]);
+	  if (strcasecmp ((char *) dimensions, "XYZ") == 0)
+	      dims = GAIA_XY_Z;
+	  else if (strcasecmp ((char *) dimensions, "XYM") == 0)
+	      dims = GAIA_XY_M;
+	  else if (strcasecmp ((char *) dimensions, "XYZM") == 0)
+	      dims = GAIA_XY_Z_M;
+	  else
+	      dims = GAIA_XY;
+      }
+    if (sqlite3_value_type (argv[0]) == SQLITE_BLOB)
+      {
+	  p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+	  n_bytes = sqlite3_value_bytes (argv[0]);
+      }
+    if (p_blob)
+      {
+	  /* quick Geometry validation */
+	  if (n_bytes < 45)
+	      goto illegal_geometry;	/* cannot be an internal BLOB WKB geometry */
+	  if (*(p_blob + 0) != GAIA_MARK_START)
+	      goto illegal_geometry;	/* failed to recognize START signature */
+	  if (*(p_blob + (n_bytes - 1)) != GAIA_MARK_END)
+	      goto illegal_geometry;	/* failed to recognize END signature */
+	  if (*(p_blob + 38) != GAIA_MARK_MBR)
+	      goto illegal_geometry;	/* failed to recognize MBR signature */
+	  if (*(p_blob + 1) == GAIA_LITTLE_ENDIAN)
+	      little_endian = 1;
+	  else if (*(p_blob + 1) == GAIA_BIG_ENDIAN)
+	      little_endian = 0;
+	  else
+	      goto illegal_geometry;	/* unknown encoding; neither little-endian nor big-endian */
+	  geom_type = gaiaImport32 (p_blob + 39, little_endian, endian_arch);
+	  geom_srid = gaiaImport32 (p_blob + 2, little_endian, endian_arch);
+	  goto valid_geometry;
+	illegal_geometry:
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+  valid_geometry:
+    xtype = GAIA_UNKNOWN;
+    if (strcasecmp ((char *) type, "POINT") == 0)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_POINTZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_POINTM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_POINTZM;
+		break;
+	    default:
+		xtype = GAIA_POINT;
+		break;
+	    };
+      }
+    if (strcasecmp ((char *) type, "LINESTRING") == 0)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_LINESTRINGZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_LINESTRINGM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_LINESTRINGZM;
+		break;
+	    default:
+		xtype = GAIA_LINESTRING;
+		break;
+	    };
+      }
+    if (strcasecmp ((char *) type, "POLYGON") == 0)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_POLYGONZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_POLYGONM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_POLYGONZM;
+		break;
+	    default:
+		xtype = GAIA_POLYGON;
+		break;
+	    };
+      }
+    if (strcasecmp ((char *) type, "MULTIPOINT") == 0)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_MULTIPOINTZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_MULTIPOINTM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_MULTIPOINTZM;
+		break;
+	    default:
+		xtype = GAIA_MULTIPOINT;
+		break;
+	    };
+      }
+    if (strcasecmp ((char *) type, "MULTILINESTRING") == 0)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_MULTILINESTRINGZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_MULTILINESTRINGM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_MULTILINESTRINGZM;
+		break;
+	    default:
+		xtype = GAIA_MULTILINESTRING;
+		break;
+	    };
+      }
+    if (strcasecmp ((char *) type, "MULTIPOLYGON") == 0)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_MULTIPOLYGONZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_MULTIPOLYGONM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_MULTIPOLYGONZM;
+		break;
+	    default:
+		xtype = GAIA_MULTIPOLYGON;
+		break;
+	    };
+      }
+    if (strcasecmp ((char *) type, "GEOMETRYCOLLECTION") == 0)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_GEOMETRYCOLLECTIONZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_GEOMETRYCOLLECTIONM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_GEOMETRYCOLLECTIONZM;
+		break;
+	    default:
+		xtype = GAIA_GEOMETRYCOLLECTION;
+		break;
+	    };
+      }
+    switch (geom_type)
+      {
+	  /* adjusting COMPRESSED Geometries */
+      case GAIA_COMPRESSED_LINESTRING:
+	  geom_normalized_type = GAIA_LINESTRING;
+	  break;
+      case GAIA_COMPRESSED_LINESTRINGZ:
+	  geom_normalized_type = GAIA_LINESTRINGZ;
+	  break;
+      case GAIA_COMPRESSED_LINESTRINGM:
+	  geom_normalized_type = GAIA_LINESTRINGM;
+	  break;
+      case GAIA_COMPRESSED_LINESTRINGZM:
+	  geom_normalized_type = GAIA_LINESTRINGZM;
+	  break;
+      case GAIA_COMPRESSED_POLYGON:
+	  geom_normalized_type = GAIA_POLYGON;
+	  break;
+      case GAIA_COMPRESSED_POLYGONZ:
+	  geom_normalized_type = GAIA_POLYGONZ;
+	  break;
+      case GAIA_COMPRESSED_POLYGONM:
+	  geom_normalized_type = GAIA_POLYGONM;
+	  break;
+      case GAIA_COMPRESSED_POLYGONZM:
+	  geom_normalized_type = GAIA_POLYGONZM;
+	  break;
+      default:
+	  geom_normalized_type = geom_type;
+	  break;
+      };
+    if (strcasecmp ((char *) type, "GEOMETRY") == 0)
+	xtype = -1;
+    if (xtype == GAIA_UNKNOWN)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = 1;
+	  if (p_blob)
+	    {
+		/* skipping NULL Geometry; this is assumed to be always good */
+		if (geom_srid != srid)
+		    ret = 0;
+		if (xtype == -1)
+		    ;
+		else if (xtype != geom_normalized_type)
+		    ret = 0;
+	    }
+	  sqlite3_result_int (context, ret);
+      }
+}
+
+static void
+fnct_RTreeAlign (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ RTreeAlign(RTree-table-name, PKID-value, BLOBencoded geometry)
+/
+/ attempts to update the associated R*Tree, returning:
+/
+/ -1 - if some invalid arg was passed
+/ 1 - succesfull update
+/ 0 - update failure
+/
+*/
+    unsigned char *p_blob = NULL;
+    int n_bytes = 0;
+    sqlite3_int64 pkid;
+    const unsigned char *rtree_table;
+    gaiaGeomCollPtr geom = NULL;
+    int ret;
+    char table_name[1024];
+    char sql[4192];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_TEXT)
+	rtree_table = sqlite3_value_text (argv[0]);
+    else
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	pkid = sqlite3_value_int64 (argv[1]);
+    else
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_BLOB
+	|| sqlite3_value_type (argv[2]) == SQLITE_NULL)
+	;
+    else
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_BLOB)
+      {
+	  p_blob = (unsigned char *) sqlite3_value_blob (argv[2]);
+	  n_bytes = sqlite3_value_bytes (argv[2]);
+	  geom = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+      }
+
+    if (geom == NULL)
+      {
+	  /* NULL geometry: nothing to do */
+	  sqlite3_result_int (context, 1);
+      }
+    else
+      {
+	  /* INSERTing into the R*Tree */
+	  strcpy (table_name, rtree_table);
+	  if (*(table_name + 0) == '"'
+	      && *(table_name + strlen (table_name) - 1) == '"')
+	      ;			/* earlier versions may pass an already quoted name */
+	  else
+	      double_quoted_sql (table_name);
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
+	  sprintf (sql, "INSERT INTO %s (pkid, xmin, ymin, xmax, ymax) "
+		   "VALUES (%I64d, %1.12f, %1.12f, %1.12f, %1.12f)",
+		   table_name, pkid, geom->MinX, geom->MinY, geom->MaxX,
+		   geom->MaxY);
+#else
+	  sprintf (sql, "INSERT INTO %s (pkid, xmin, ymin, xmax, ymax) "
+		   "VALUES (%lld, %1.12f, %1.12f, %1.12f, %1.12f)",
+		   table_name, pkid, geom->MinX, geom->MinY, geom->MaxX,
+		   geom->MaxY);
+#endif
+	  gaiaFreeGeomColl (geom);
+	  ret = sqlite3_exec (sqlite, sql, NULL, NULL, NULL);
+	  if (ret != SQLITE_OK)
+	      sqlite3_result_int (context, 0);
+	  else
+	      sqlite3_result_int (context, 1);
+      }
+}
+
+static int
+checkSpatialMetaData (sqlite3 * sqlite)
+{
+/* internal utility function:
+/
+/ for FDO-OGR interoperability:
+/ tests the SpatialMetadata type, returning:
+/
+/ 0 - if no valid SpatialMetaData where found
+/ 1 - if SpatiaLite-like SpatialMetadata where found
+/ 2- if FDO-OGR-like SpatialMetadata where found
+/
+*/
+    int spatialite_rs = 0;
+    int fdo_rs = 0;
+    int spatialite_gc = 0;
+    int fdo_gc = 0;
+    int rs_srid = 0;
+    int auth_name = 0;
+    int auth_srid = 0;
+    int srtext = 0;
+    int ref_sys_name = 0;
+    int proj4text = 0;
+    int f_table_name = 0;
+    int f_geometry_column = 0;
+    int geometry_type = 0;
+    int coord_dimension = 0;
+    int gc_srid = 0;
+    int geometry_format = 0;
+    int type = 0;
+    int spatial_index_enabled = 0;
+    char sql[1024];
+    int ret;
+    const char *name;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+/* checking the GEOMETRY_COLUMNS table */
+    strcpy (sql, "PRAGMA table_info(geometry_columns)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "f_table_name") == 0)
+		    f_table_name = 1;
+		if (strcasecmp (name, "f_geometry_column") == 0)
+		    f_geometry_column = 1;
+		if (strcasecmp (name, "geometry_type") == 0)
+		    geometry_type = 1;
+		if (strcasecmp (name, "coord_dimension") == 0)
+		    coord_dimension = 1;
+		if (strcasecmp (name, "srid") == 0)
+		    gc_srid = 1;
+		if (strcasecmp (name, "geometry_format") == 0)
+		    geometry_format = 1;
+		if (strcasecmp (name, "type") == 0)
+		    type = 1;
+		if (strcasecmp (name, "spatial_index_enabled") == 0)
+		    spatial_index_enabled = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (f_table_name
+	&&
+	f_geometry_column
+	&& type && coord_dimension && gc_srid && spatial_index_enabled)
+	spatialite_gc = 1;
+    if (f_table_name
+	&&
+	f_geometry_column
+	&& geometry_type && coord_dimension && gc_srid && geometry_format)
+	fdo_gc = 1;
+/* checking the SPATIAL_REF_SYS table */
+    strcpy (sql, "PRAGMA table_info(spatial_ref_sys)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "srid") == 0)
+		    rs_srid = 1;
+		if (strcasecmp (name, "auth_name") == 0)
+		    auth_name = 1;
+		if (strcasecmp (name, "auth_srid") == 0)
+		    auth_srid = 1;
+		if (strcasecmp (name, "srtext") == 0)
+		    srtext = 1;
+		if (strcasecmp (name, "ref_sys_name") == 0)
+		    ref_sys_name = 1;
+		if (strcasecmp (name, "proj4text") == 0)
+		    proj4text = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rs_srid && auth_name && auth_srid && ref_sys_name && proj4text)
+	spatialite_rs = 1;
+    if (rs_srid && auth_name && auth_srid && srtext)
+	fdo_rs = 1;
+/* verifying the MetaData format */
+    if (spatialite_gc && spatialite_rs)
+	return 1;
+    if (fdo_gc && fdo_rs)
+	return 2;
+  unknown:
+    return 0;
+}
+
+static void
+add_fdo_table (struct fdo_table **first, struct fdo_table **last,
+	       const char *table, int len)
+{
+/* adds an FDO-OGR styled Geometry Table to corresponding linked list */
+    struct fdo_table *p = malloc (sizeof (struct fdo_table));
+    p->table = malloc (len + 1);
+    strcpy (p->table, table);
+    p->next = NULL;
+    if (!(*first))
+	(*first) = p;
+    if ((*last))
+	(*last)->next = p;
+    (*last) = p;
+}
+
+static void
+free_fdo_tables (struct fdo_table *first)
+{
+/* memory cleanup; destroying the FDO-OGR tables linked list */
+    struct fdo_table *p;
+    struct fdo_table *pn;
+    p = first;
+    while (p)
+      {
+	  pn = p->next;
+	  if (p->table)
+	      free (p->table);
+	  free (p);
+	  p = pn;
+      }
+}
+
+static void
+fnct_AutoFDOStart (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AutoFDOStart(void)
+/
+/ for FDO-OGR interoperability:
+/ tests the SpatialMetadata type, then automatically
+/ creating a VirtualFDO table for each FDO-OGR main table 
+/ declared within FDO-styled SpatialMetadata
+/
+*/
+    int ret;
+    const char *name;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    char sql[1024];
+    int count = 0;
+    struct fdo_table *first = NULL;
+    struct fdo_table *last = NULL;
+    struct fdo_table *p;
+    int len;
+    char xname[1024];
+    char xtable[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (checkSpatialMetaData (sqlite) == 2)
+      {
+	  /* ok, creating VirtualFDO tables */
+	  strcpy (sql, "SELECT DISTINCT f_table_name FROM geometry_columns");
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (rows < 1)
+	      ;
+	  else
+	    {
+		for (i = 1; i <= rows; i++)
+		  {
+		      name = results[(i * columns) + 0];
+		      if (name)
+			{
+			    len = strlen (name);
+			    add_fdo_table (&first, &last, name, len);
+			}
+		  }
+	    }
+	  sqlite3_free_table (results);
+	  p = first;
+	  while (p)
+	    {
+		/* destroying the VirtualFDO table [if existing] */
+		sprintf (xname, "fdo_%s", p->table);
+		double_quoted_sql (xname);
+		sprintf (sql, "DROP TABLE IF EXISTS %s", xname);
+		ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+		if (ret != SQLITE_OK)
+		    goto error;
+		/* creating the VirtualFDO table */
+		strcpy (xtable, p->table);
+		double_quoted_sql (xtable);
+		sprintf (sql, "CREATE VIRTUAL TABLE %s USING VirtualFDO(%s)",
+			 xname, xtable);
+		ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+		if (ret != SQLITE_OK)
+		    goto error;
+		count++;
+		p = p->next;
+	    }
+	error:
+	  free_fdo_tables (first);
+	  sqlite3_result_int (context, count);
+	  return;
+      }
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_AutoFDOStop (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AutoFDOStop(void)
+/
+/ for FDO-OGR interoperability:
+/ tests the SpatialMetadata type, then automatically
+/ removes any VirtualFDO table 
+/
+*/
+    int ret;
+    const char *name;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    char sql[1024];
+    int count = 0;
+    struct fdo_table *first = NULL;
+    struct fdo_table *last = NULL;
+    struct fdo_table *p;
+    int len;
+    char xname[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (checkSpatialMetaData (sqlite) == 2)
+      {
+	  /* ok, creating VirtualFDO tables */
+	  strcpy (sql, "SELECT DISTINCT f_table_name FROM geometry_columns");
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (rows < 1)
+	      ;
+	  else
+	    {
+		for (i = 1; i <= rows; i++)
+		  {
+		      name = results[(i * columns) + 0];
+		      if (name)
+			{
+			    len = strlen (name);
+			    add_fdo_table (&first, &last, name, len);
+			}
+		  }
+	    }
+	  sqlite3_free_table (results);
+	  p = first;
+	  while (p)
+	    {
+		/* destroying the VirtualFDO table [if existing] */
+		sprintf (xname, "fdo_%s", p->table);
+		double_quoted_sql (xname);
+		sprintf (sql, "DROP TABLE IF EXISTS %s", xname);
+		ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+		if (ret != SQLITE_OK)
+		    goto error;
+		count++;
+		p = p->next;
+	    }
+	error:
+	  free_fdo_tables (first);
+	  sqlite3_result_int (context, count);
+	  return;
+      }
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static int
+testSpatiaLiteHistory (sqlite3 * sqlite)
+{
+/* internal utility function:
+/
+/ checks if the SPATIALITE_HISTORY table already exists
+/
+*/
+    int event_id = 0;
+    int table_name = 0;
+    int geometry_column = 0;
+    int event = 0;
+    int timestamp = 0;
+    int ver_sqlite = 0;
+    int ver_splite = 0;
+    char sql[1024];
+    int ret;
+    const char *name;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+/* checking the SPATIALITE_HISTORY table */
+    strcpy (sql, "PRAGMA table_info(spatialite_history)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "event_id") == 0)
+		    event_id = 1;
+		if (strcasecmp (name, "table_name") == 0)
+		    table_name = 1;
+		if (strcasecmp (name, "geometry_column") == 0)
+		    geometry_column = 1;
+		if (strcasecmp (name, "event") == 0)
+		    event = 1;
+		if (strcasecmp (name, "timestamp") == 0)
+		    timestamp = 1;
+		if (strcasecmp (name, "ver_sqlite") == 0)
+		    ver_sqlite = 1;
+		if (strcasecmp (name, "ver_splite") == 0)
+		    ver_splite = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (event_id && table_name && geometry_column && event && timestamp
+	&& ver_sqlite && ver_splite)
+	return 1;
+    return 0;
+}
+
+static int
+checkSpatiaLiteHistory (sqlite3 * sqlite)
+{
+/* internal utility function:
+/
+/ checks if the SPATIALITE_HISTORY table already exists
+/ if not, such table will then be created
+/
+*/
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+
+    if (testSpatiaLiteHistory (sqlite))
+	return 1;
+
+/* creating the SPATIALITE_HISTORY table */
+    strcpy (sql, "CREATE TABLE IF NOT EXISTS ");
+    strcat (sql, "spatialite_history (\n");
+    strcat (sql, "event_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n");
+    strcat (sql, "table_name TEXT NOT NULL,\n");
+    strcat (sql, "geometry_column TEXT,\n");
+    strcat (sql, "event TEXT NOT NULL,\n");
+    strcat (sql, "timestamp TEXT NOT NULL,\n");
+    strcat (sql, "ver_sqlite TEXT NOT NULL,\n");
+    strcat (sql, "ver_splite TEXT NOT NULL)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	return 0;
+
+    if (testSpatiaLiteHistory (sqlite))
+	return 1;
+    return 0;
+}
+
+static void
+updateSpatiaLiteHistory (sqlite3 * sqlite, const char *table,
+			 const char *geom, const char *operation)
+{
+/* inserting a row in SPATIALITE_HISTORY */
+    char sql[2048];
+    sqlite3_stmt *stmt = NULL;
+    int ret;
+
+    if (checkSpatiaLiteHistory (sqlite) == 0)
+	return;
+
+    strcpy (sql, "INSERT INTO spatialite_history ");
+    strcat (sql, "(event_id, table_name, geometry_column, event, timestamp, ");
+    strcat (sql, "ver_sqlite, ver_splite) ");
+    strcat (sql,
+	    "VALUES (NULL, ?, ?, ?, DateTime('now'), sqlite_version(), spatialite_version())");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (sqlite));
+	  goto stop;
+      }
+    sqlite3_reset (stmt);
+    sqlite3_clear_bindings (stmt);
+    sqlite3_bind_text (stmt, 1, table, strlen (table), SQLITE_STATIC);
+    if (!geom)
+	sqlite3_bind_null (stmt, 2);
+    else
+	sqlite3_bind_text (stmt, 2, geom, strlen (geom), SQLITE_STATIC);
+    sqlite3_bind_text (stmt, 3, operation, strlen (operation), SQLITE_STATIC);
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	goto stop;
+    fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+
+  stop:
+    if (stmt)
+	sqlite3_finalize (stmt);
+}
+
+static int
+createAdvancedMetaData (sqlite3 * sqlite)
+{
+/* creating the advanced MetaData tables */
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+/* creating the VIEWS_GEOMETRY_COLUMNS table */
+    strcpy (sql, "CREATE TABLE IF NOT EXISTS ");
+    strcat (sql, "views_geometry_columns (\n");
+    strcat (sql, "view_name TEXT NOT NULL,\n");
+    strcat (sql, "view_geometry TEXT NOT NULL,\n");
+    strcat (sql, "view_rowid TEXT NOT NULL,\n");
+    strcat (sql, "f_table_name VARCHAR(256) NOT NULL,\n");
+    strcat (sql, "f_geometry_column VARCHAR(256) NOT NULL,\n");
+    strcat (sql, "CONSTRAINT pk_geom_cols_views PRIMARY KEY ");
+    strcat (sql, "(view_name, view_geometry),\n");
+    strcat (sql, "CONSTRAINT fk_views_geom_cols FOREIGN KEY ");
+    strcat (sql, "(f_table_name, f_geometry_column) ");
+    strcat (sql, "REFERENCES geometry_columns ");
+    strcat (sql, "(f_table_name, f_geometry_column) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	return 0;
+/* creating an INDEX supporting the GEOMETRY_COLUMNS FK */
+    strcpy (sql, "CREATE INDEX IF NOT EXISTS ");
+    strcat (sql, "idx_viewsjoin ON views_geometry_columns\n");
+    strcat (sql, "(f_table_name, f_geometry_column)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	return 0;
+/* creating the VIRTS_GEOMETRY_COLUMNS table */
+    strcpy (sql, "CREATE TABLE IF NOT EXISTS ");
+    strcat (sql, "virts_geometry_columns (\n");
+    strcat (sql, "virt_name TEXT NOT NULL,\n");
+    strcat (sql, "virt_geometry TEXT NOT NULL,\n");
+    strcat (sql, "type VARCHAR(30) NOT NULL,\n");
+    strcat (sql, "srid INTEGER NOT NULL,\n");
+    strcat (sql, "CONSTRAINT pk_geom_cols_virts PRIMARY KEY ");
+    strcat (sql, "(virt_name, virt_geometry),\n");
+    strcat (sql, "CONSTRAINT fk_vgc_srid FOREIGN KEY ");
+    strcat (sql, "(srid) REFERENCES spatial_ref_sys (srid))");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	return 0;
+/* creating an INDEX supporting the SPATIAL_REF_SYS FK */
+    strcpy (sql, "CREATE INDEX IF NOT EXISTS ");
+    strcat (sql, "idx_virtssrid ON virts_geometry_columns\n");
+    strcat (sql, "(srid)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	return 0;
+/* creating the GEOMETRY_COLUMNS_AUTH table */
+    strcpy (sql, "CREATE TABLE IF NOT EXISTS ");
+    strcat (sql, "geometry_columns_auth (\n");
+    strcat (sql, "f_table_name VARCHAR(256) NOT NULL,\n");
+    strcat (sql, "f_geometry_column VARCHAR(256) NOT NULL,\n");
+    strcat (sql, "read_only INTEGER NOT NULL,\n");
+    strcat (sql, "hidden INTEGER NOT NULL,\n");
+    strcat (sql, "CONSTRAINT pk_gc_auth PRIMARY KEY ");
+    strcat (sql, "(f_table_name, f_geometry_column),\n");
+    strcat (sql, "CONSTRAINT fk_gc_auth FOREIGN KEY ");
+    strcat (sql, "(f_table_name, f_geometry_column) ");
+    strcat (sql, "REFERENCES geometry_columns ");
+    strcat (sql, "(f_table_name, f_geometry_column) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	return 0;
+    return 1;
+}
+
+static void
+fnct_CheckSpatialMetaData (sqlite3_context * context, int argc,
+			   sqlite3_value ** argv)
+{
+/* SQL function:
+/ CheckSpatialMetaData(void)
+/
+/ for FDO-OGR interoperability:
+/ tests the SpatialMetadata type, returning:
+/
+/ 0 - if no valid SpatialMetaData where found
+/ 1 - if SpatiaLite-like SpatialMetadata where found
+/ 2- if FDO-OGR-like SpatialMetadata where found
+/
+*/
+    sqlite3 *sqlite;
+    int ret;
+    GAIA_UNUSED ();
+    sqlite = sqlite3_context_db_handle (context);
+    ret = checkSpatialMetaData (sqlite);
+    if (ret == 1)
+      {
+	  /* trying to create the advanced metadata tables */
+	  createAdvancedMetaData (sqlite);
+      }
+    sqlite3_result_int (context, ret);
+    return;
+}
+
+static void
+fnct_InitSpatialMetaData (sqlite3_context * context, int argc,
+			  sqlite3_value ** argv)
+{
+/* SQL function:
+/ InitSpatialMetaData(void)
+/
+/ creates the SPATIAL_REF_SYS and GEOMETRY_COLUMNS tables
+/ returns 1 on success
+/ 0 on failure
+*/
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+/* creating the SPATIAL_REF_SYS table */
+    strcpy (sql, "CREATE TABLE spatial_ref_sys (\n");
+    strcat (sql, "srid INTEGER NOT NULL PRIMARY KEY,\n");
+    strcat (sql, "auth_name TEXT NOT NULL,\n");
+    strcat (sql, "auth_srid INTEGER NOT NULL,\n");
+    strcat (sql, "ref_sys_name TEXT,\n");
+    strcat (sql, "proj4text TEXT NOT NULL,\n");
+    strcat (sql, "srs_wkt TEXT) ");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    strcpy (sql, "CREATE UNIQUE INDEX idx_spatial_ref_sys \n");
+    strcat (sql, "ON spatial_ref_sys (auth_srid, auth_name)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    updateSpatiaLiteHistory (sqlite, "spatial_ref_sys", NULL,
+			     "table successfully created");
+/* creating the GEOMETRY_COLUMN table */
+    strcpy (sql, "CREATE TABLE geometry_columns (\n");
+    strcat (sql, "f_table_name TEXT NOT NULL,\n");
+    strcat (sql, "f_geometry_column TEXT NOT NULL,\n");
+    strcat (sql, "type TEXT NOT NULL,\n");
+    strcat (sql, "coord_dimension TEXT NOT NULL,\n");
+    strcat (sql, "srid INTEGER NOT NULL,\n");
+    strcat (sql, "spatial_index_enabled INTEGER NOT NULL,\n");
+    strcat (sql, "CONSTRAINT pk_geom_cols PRIMARY KEY ");
+    strcat (sql, "(f_table_name, f_geometry_column),\n");
+    strcat (sql, "CONSTRAINT fk_gc_srs FOREIGN KEY ");
+    strcat (sql, "(srid) REFERENCES spatial_ref_sys (srid))");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    updateSpatiaLiteHistory (sqlite, "geometry_columns", NULL,
+			     "table successfully created");
+/* creating an INDEX corresponding to the SRID FK */
+    strcpy (sql, "CREATE INDEX idx_srid_geocols ON geometry_columns\n");
+    strcat (sql, "(srid) ");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+/* creating the GEOM_COLS_REF_SYS view */
+    strcpy (sql, "CREATE VIEW geom_cols_ref_sys AS\n");
+    strcat (sql, "SELECT f_table_name, f_geometry_column, type,\n");
+    strcat (sql, "coord_dimension, spatial_ref_sys.srid AS srid,\n");
+    strcat (sql, "auth_name, auth_srid, ref_sys_name, proj4text\n");
+    strcat (sql, "FROM geometry_columns, spatial_ref_sys\n");
+    strcat (sql, "WHERE geometry_columns.srid = spatial_ref_sys.srid");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    if (!createAdvancedMetaData (sqlite))
+	goto error;
+/* creating the SpatialIndex VIRTUAL TABLE */
+    strcpy (sql, "CREATE VIRTUAL TABLE SpatialIndex ");
+    strcat (sql, "USING VirtualSpatialIndex()");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    if (spatial_ref_sys_init (sqlite, 0))
+	updateSpatiaLiteHistory (sqlite, "spatial_ref_sys", NULL,
+				 "table successfully populated");
+    sqlite3_result_int (context, 1);
+    return;
+  error:
+    fprintf (stderr, " InitSpatiaMetaData ()error:\"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static int
+recoverGeomColumn (sqlite3 * sqlite, const unsigned char *table,
+		   const unsigned char *column, int xtype, int dims, int srid)
+{
+/* checks if TABLE.COLUMN exists and has the required features */
+    int ok = 1;
+    char sql[1024];
+    int type;
+    sqlite3_stmt *stmt;
+    gaiaGeomCollPtr geom;
+    const void *blob_value;
+    int len;
+    int ret;
+    int i_col;
+    char xcolumn[1024];
+    char xtable[1024];
+    strcpy (xcolumn, (char *) column);
+    double_quoted_sql (xcolumn);
+    strcpy (xtable, (char *) table);
+    double_quoted_sql (xtable);
+    sprintf (sql, "SELECT %s FROM %s", xcolumn, xtable);
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "recoverGeomColumn: error %d \"%s\"\n",
+		   sqlite3_errcode (sqlite), sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set rows */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* checking Geometry features */
+		geom = NULL;
+		for (i_col = 0; i_col < sqlite3_column_count (stmt); i_col++)
+		  {
+		      if (sqlite3_column_type (stmt, i_col) != SQLITE_BLOB)
+			  ok = 0;
+		      else
+			{
+			    blob_value = sqlite3_column_blob (stmt, i_col);
+			    len = sqlite3_column_bytes (stmt, i_col);
+			    geom = gaiaFromSpatiaLiteBlobWkb (blob_value, len);
+			    if (!geom)
+				ok = 0;
+			    else
+			      {
+				  if (geom->DimensionModel != dims)
+				      ok = 0;
+				  if (geom->Srid != srid)
+				      ok = 0;
+				  type = gaiaGeometryType (geom);
+				  if (xtype == -1)
+				      ;	/* GEOMETRY */
+				  else
+				    {
+					if (xtype == type)
+					    ;
+					else
+					    ok = 0;
+				    }
+				  gaiaFreeGeomColl (geom);
+			      }
+			}
+		  }
+	    }
+	  if (!ok)
+	      break;
+      }
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "recoverGeomColumn: error %d \"%s\"\n",
+		   sqlite3_errcode (sqlite), sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    return ok;
+}
+
+static void
+buildSpatialIndex (sqlite3 * sqlite, const unsigned char *table,
+		   const char *col_name)
+{
+/* loading a SpatialIndex [RTree] */
+    char sql[2048];
+    char sql2[1024];
+    char *errMsg = NULL;
+    int ret;
+    char xname[1024];
+    char xtable[1024];
+    sprintf (xname, "idx_%s_%s", table, col_name);
+    double_quoted_sql (xname);
+    sprintf (sql, "INSERT INTO %s (pkid, xmin, xmax, ymin, ymax) ", xname);
+    strcpy (xname, col_name);
+    double_quoted_sql (xname);
+    strcpy (xtable, (char *) table);
+    double_quoted_sql (xtable);
+    sprintf (sql2,
+	     "SELECT ROWID, MbrMinX(%s), MbrMaxX(%s), MbrMinY(%s), MbrMaxY(%s) FROM %s",
+	     xname, xname, xname, xname, xtable);
+    strcat (sql, sql2);
+    sprintf (sql2, " WHERE MbrMinX(%s) IS NOT NULL", xname);
+    strcat (sql, sql2);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "buildSpatialIndex error: \"%s\"\n", errMsg);
+	  sqlite3_free (errMsg);
+      }
+}
+
+static void
+updateGeometryTriggers (sqlite3 * sqlite, const unsigned char *table,
+			const unsigned char *column)
+{
+/* updates triggers for some Spatial Column */
+    char sql[256];
+    char trigger[4096];
+    char **results;
+    int ret;
+    int rows;
+    int columns;
+    int i;
+    char tblname[256];
+    char colname[256];
+    char col_type[32];
+    char col_srid[32];
+    char col_index[32];
+    char col_dims[64];
+    int index;
+    int cached;
+    int dims;
+    char *txt_dims;
+    int len;
+    char *errMsg = NULL;
+    char dummy[512];
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    char xname[1024];
+    char xcolname[1024];
+    char xtable[1024];
+    char xindex[1024];
+    struct spatial_index_str *first_idx = NULL;
+    struct spatial_index_str *last_idx = NULL;
+    struct spatial_index_str *curr_idx;
+    struct spatial_index_str *next_idx;
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    sprintf (sql,
+	     "SELECT f_table_name, f_geometry_column, type, srid, spatial_index_enabled, coord_dimension "
+	     "FROM geometry_columns WHERE f_table_name LIKE '%s' AND f_geometry_column LIKE '%s'",
+	     sqltable, sqlcolumn);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "updateTableTriggers: \"%s\"\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    for (i = 1; i <= rows; i++)
+      {
+	  /* preparing the triggers */
+	  strcpy (tblname, results[(i * columns)]);
+	  strcpy (colname, results[(i * columns) + 1]);
+	  strcpy (col_type, results[(i * columns) + 2]);
+	  /* 
+	     / Even Rouault - 3 Mar 2010 
+	     / the OGR driver wrongly inserts a NULL SRID
+	     / into GEOMETRY_COLUMNS, so we must check such
+	     / an odd condition to avoid a crash
+	   */
+	  if (results[(i * columns) + 3] == NULL)
+	      strcpy (col_srid, "-1");
+	  else
+	      strcpy (col_srid, results[(i * columns) + 3]);
+	  strcpy (col_index, results[(i * columns) + 4]);
+	  strcpy (col_dims, results[(i * columns) + 5]);
+	  if (atoi (col_index) == 1)
+	      index = 1;
+	  else
+	      index = 0;
+	  if (atoi (col_index) == 2)
+	      cached = 1;
+	  else
+	      cached = 0;
+	  dims = GAIA_XY;
+	  if (strcasecmp (col_dims, "XYZ") == 0)
+	      dims = GAIA_XY_Z;
+	  if (strcasecmp (col_dims, "XYM") == 0)
+	      dims = GAIA_XY_M;
+	  if (strcasecmp (col_dims, "XYZM") == 0)
+	      dims = GAIA_XY_Z_M;
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		txt_dims = "XYZ";
+		break;
+	    case GAIA_XY_M:
+		txt_dims = "XYM";
+		break;
+	    case GAIA_XY_Z_M:
+		txt_dims = "XYZM";
+		break;
+	    default:
+		txt_dims = "XY";
+		break;
+	    };
+
+	  /* trying to delete old versions [v2.0, v2.2] triggers[if any] */
+	  strcpy (sqltable, (char *) tblname);
+	  clean_sql_string (sqltable);
+	  strcpy (sqlcolumn, (char *) colname);
+	  clean_sql_string (sqlcolumn);
+	  sprintf (xname, "gti_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  sprintf (xname, "gtu_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  sprintf (xname, "gsi_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  sprintf (xname, "gsu_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  /* end deletion old versions [v2.0, v2.2] triggers[if any] */
+
+	  /* deleting the old INSERT trigger TYPE [if any] */
+	  sprintf (xname, "ggi_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  /* inserting the new INSERT trigger TYPE */
+	  strcpy (xtable, tblname);
+	  double_quoted_sql (xtable);
+	  strcpy (xcolname, colname);
+	  double_quoted_sql (xcolname);
+	  sprintf (trigger, "CREATE TRIGGER %s BEFORE INSERT ON %s\n", xname,
+		   xtable);
+	  strcat (trigger, "FOR EACH ROW BEGIN\n");
+	  sprintf (dummy,
+		   "SELECT RAISE(ROLLBACK, '%s.%s violates Geometry constraint [geom-type or SRID not allowed]')\n",
+		   sqltable, sqlcolumn);
+	  strcat (trigger, dummy);
+	  strcat (trigger, "WHERE (SELECT type FROM geometry_columns\n");
+	  sprintf (dummy,
+		   "WHERE f_table_name = '%s' AND f_geometry_column = '%s'\n",
+		   sqltable, sqlcolumn);
+	  strcat (trigger, dummy);
+	  sprintf (dummy,
+		   "AND GeometryConstraints(NEW.%s, type, srid, '%s') = 1) IS NULL;\n",
+		   xcolname, txt_dims);
+	  strcat (trigger, dummy);
+	  strcat (trigger, "END;");
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  /* deleting the old UPDATE trigger TYPE [if any] */
+	  sprintf (xname, "ggu_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  /* inserting the new UPDATE trigger TYPE */
+	  sprintf (trigger, "CREATE TRIGGER %s BEFORE UPDATE ON %s\n", xname,
+		   xtable);
+	  strcat (trigger, "FOR EACH ROW BEGIN\n");
+	  sprintf (dummy,
+		   "SELECT RAISE(ROLLBACK, '%s.%s violates Geometry constraint [geom-type or SRID not allowed]')\n",
+		   sqltable, sqlcolumn);
+	  strcat (trigger, dummy);
+	  strcat (trigger, "WHERE (SELECT type FROM geometry_columns\n");
+	  sprintf (dummy,
+		   "WHERE f_table_name = '%s' AND f_geometry_column = '%s'\n",
+		   sqltable, sqlcolumn);
+	  strcat (trigger, dummy);
+	  sprintf (dummy,
+		   "AND GeometryConstraints(NEW.%s, type, srid, '%s') = 1) IS NULL;\n",
+		   xcolname, txt_dims);
+	  strcat (trigger, dummy);
+	  strcat (trigger, "END;");
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  /* inserting SpatialIndex information into the linked list */
+	  curr_idx = malloc (sizeof (struct spatial_index_str));
+	  len = strlen (tblname);
+	  curr_idx->TableName = malloc (len + 1);
+	  strcpy (curr_idx->TableName, tblname);
+	  len = strlen ((char *) colname);
+	  curr_idx->ColumnName = malloc (len + 1);
+	  strcpy (curr_idx->ColumnName, (char *) colname);
+	  curr_idx->ValidRtree = (char) index;
+	  curr_idx->ValidCache = (char) cached;
+	  curr_idx->Next = NULL;
+	  if (!first_idx)
+	      first_idx = curr_idx;
+	  if (last_idx)
+	      last_idx->Next = curr_idx;
+	  last_idx = curr_idx;
+	  /* deleting the old INSERT trigger SPATIAL_INDEX [if any] */
+	  sprintf (xname, "gii_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (index)
+	    {
+		/* inserting the new INSERT trigger SRID */
+		sprintf (xindex, "idx_%s_%s", tblname, colname);
+		double_quoted_sql (xindex);
+		sprintf (trigger, "CREATE TRIGGER %s AFTER INSERT ON %s\n",
+			 xname, xtable);
+		strcat (trigger, "FOR EACH ROW BEGIN\n");
+		sprintf (dummy, "DELETE FROM %s WHERE pkid=NEW.ROWID;\n",
+			 xindex);
+		strcat (trigger, dummy);
+		sprintf (xindex, "idx_%s_%s", tblname, colname);
+		clean_sql_string (xindex);
+		sprintf (dummy, "SELECT RTreeAlign('%s', NEW.ROWID, NEW.%s);",
+			 xindex, xcolname);
+		strcat (trigger, dummy);
+		strcat (trigger, "END;");
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+	    }
+	  /* deleting the old UPDATE trigger SPATIAL_INDEX [if any] */
+	  sprintf (xname, "giu_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (index)
+	    {
+		/* inserting the new UPDATE trigger SRID */
+		sprintf (xindex, "idx_%s_%s", tblname, colname);
+		double_quoted_sql (xindex);
+		sprintf (trigger, "CREATE TRIGGER %s AFTER UPDATE ON %s\n",
+			 xname, xtable);
+		strcat (trigger, "FOR EACH ROW BEGIN\n");
+		sprintf (dummy, "DELETE FROM %s WHERE pkid=NEW.ROWID;\n",
+			 xindex);
+		strcat (trigger, dummy);
+		sprintf (xindex, "idx_%s_%s", tblname, colname);
+		clean_sql_string (xindex);
+		sprintf (dummy, "SELECT RTreeAlign('%s', NEW.ROWID, NEW.%s);",
+			 xindex, xcolname);
+		strcat (trigger, dummy);
+		strcat (trigger, "END;");
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+	    }
+	  /* deleting the old UPDATE trigger SPATIAL_INDEX [if any] */
+	  sprintf (xname, "gid_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (index)
+	    {
+		/* inserting the new DELETE trigger SRID */
+		sprintf (xindex, "idx_%s_%s", tblname, colname);
+		double_quoted_sql (xindex);
+		sprintf (trigger, "CREATE TRIGGER %s AFTER DELETE ON %s\n",
+			 xname, xtable);
+		strcat (trigger, "FOR EACH ROW BEGIN\n");
+		sprintf (dummy, "DELETE FROM %s WHERE pkid = OLD.ROWID;\n",
+			 xindex);
+		strcat (trigger, dummy);
+		strcat (trigger, "END;");
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+	    }
+	  /* deleting the old INSERT trigger MBR_CACHE [if any] */
+	  sprintf (xname, "gci_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (cached)
+	    {
+		/* inserting the new INSERT trigger SRID */
+		sprintf (xindex, "cache_%s_%s", tblname, colname);
+		double_quoted_sql (xindex);
+		sprintf (trigger, "CREATE TRIGGER %s AFTER INSERT ON %s\n",
+			 xname, xtable);
+		strcat (trigger, "FOR EACH ROW BEGIN\n");
+		sprintf (dummy,
+			 "INSERT INTO %s (rowid, mbr) VALUES (NEW.ROWID,\nBuildMbrFilter(",
+			 xindex);
+		strcat (trigger, dummy);
+		sprintf (dummy, "MbrMinX(NEW.%s), ", xcolname);
+		strcat (trigger, dummy);
+		sprintf (dummy, "MbrMinY(NEW.%s), ", xcolname);
+		strcat (trigger, dummy);
+		sprintf (dummy, "MbrMaxX(NEW.%s), ", xcolname);
+		strcat (trigger, dummy);
+		sprintf (dummy, "MbrMaxY(NEW.%s)));\n", xcolname);
+		strcat (trigger, dummy);
+		strcat (trigger, "END;");
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+	    }
+	  /* deleting the old UPDATE trigger MBR_CACHE [if any] */
+	  sprintf (xname, "gcu_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (cached)
+	    {
+		/* inserting the new UPDATE trigger SRID */
+		sprintf (xindex, "cache_%s_%s", tblname, colname);
+		double_quoted_sql (xindex);
+		sprintf (trigger, "CREATE TRIGGER %s AFTER UPDATE ON %s\n",
+			 xname, xtable);
+		strcat (trigger, "FOR EACH ROW BEGIN\n");
+		sprintf (dummy, "UPDATE %s SET ", xindex);
+		strcat (trigger, dummy);
+		sprintf (dummy, "mbr = BuildMbrFilter(MbrMinX(NEW.%s), ",
+			 xcolname);
+		strcat (trigger, dummy);
+		sprintf (dummy, "MbrMinY(NEW.%s), ", xcolname);
+		strcat (trigger, dummy);
+		sprintf (dummy, "MbrMaxX(NEW.%s), ", xcolname);
+		strcat (trigger, dummy);
+		sprintf (dummy, "MbrMaxY(NEW.%s))\n", xcolname);
+		strcat (trigger, dummy);
+		strcat (trigger, "WHERE rowid = NEW.ROWID;\n");
+		strcat (trigger, "END;");
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+	    }
+	  /* deleting the old UPDATE trigger MBR_CACHE [if any] */
+	  sprintf (xname, "gcd_%s_%s", tblname, colname);
+	  double_quoted_sql (xname);
+	  sprintf (trigger, "DROP TRIGGER IF EXISTS %s", xname);
+	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+	  if (ret != SQLITE_OK)
+	      goto error;
+	  if (cached)
+	    {
+		/* inserting the new DELETE trigger SRID */
+		sprintf (xindex, "cache_%s_%s", tblname, colname);
+		double_quoted_sql (xindex);
+		sprintf (trigger, "CREATE TRIGGER %s AFTER DELETE ON %s\n",
+			 xname, xtable);
+		strcat (trigger, "FOR EACH ROW BEGIN\n");
+		sprintf (dummy, "DELETE FROM %s WHERE rowid = OLD.ROWID;\n",
+			 xindex);
+		strcat (trigger, dummy);
+		strcat (trigger, "END;");
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+	    }
+      }
+    sqlite3_free_table (results);
+/* now we'll adjust any related SpatialIndex as required */
+    curr_idx = first_idx;
+    while (curr_idx)
+      {
+	  if (curr_idx->ValidRtree)
+	    {
+		/* building RTree SpatialIndex */
+		sprintf (xindex, "idx_%s_%s", curr_idx->TableName,
+			 curr_idx->ColumnName);
+		double_quoted_sql (xindex);
+		sprintf (trigger, "CREATE VIRTUAL TABLE %s USING rtree(\n",
+			 xindex);
+		strcat (trigger, "pkid, xmin, xmax, ymin, ymax)");
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+		buildSpatialIndex (sqlite,
+				   (unsigned char *) (curr_idx->TableName),
+				   curr_idx->ColumnName);
+	    }
+	  if (curr_idx->ValidCache)
+	    {
+		/* building MbrCache SpatialIndex */
+		sprintf (xindex, "cache_%s_%s", curr_idx->TableName,
+			 curr_idx->ColumnName);
+		double_quoted_sql (xindex);
+		strcpy (xtable, curr_idx->TableName);
+		double_quoted_sql (xtable);
+		strcpy (xcolname, curr_idx->ColumnName);
+		double_quoted_sql (xcolname);
+		sprintf (trigger,
+			 "CREATE VIRTUAL TABLE %s USING MbrCache(%s, %s)\n",
+			 xindex, xtable, xcolname);
+		ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
+		if (ret != SQLITE_OK)
+		    goto error;
+	    }
+	  curr_idx = curr_idx->Next;
+      }
+    goto index_cleanup;
+  error:
+    fprintf (stderr, "updateTableTriggers: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+  index_cleanup:
+    curr_idx = first_idx;
+    while (curr_idx)
+      {
+	  next_idx = curr_idx->Next;
+	  if (curr_idx->TableName)
+	      free (curr_idx->TableName);
+	  if (curr_idx->ColumnName)
+	      free (curr_idx->ColumnName);
+	  free (curr_idx);
+	  curr_idx = next_idx;
+      }
+}
+
+static void
+fnct_AddGeometryColumn (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ AddGeometryColumn(table, column, srid, type , dimension  [  , not-null ]  )
+/
+/ creates a new COLUMN of given TYPE into TABLE
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    const unsigned char *type;
+    const unsigned char *txt_dims;
+    int xtype;
+    int srid = -1;
+    int dimension = 2;
+    int dims = -1;
+    char dummy[32];
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char tblname[256];
+    char xtable[1024];
+    char xcolumn[1024];
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    int notNull = 0;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    if (sqlite3_value_type (argv[2]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: argument 3 [SRID] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    srid = sqlite3_value_int (argv[2]);
+    if (sqlite3_value_type (argv[3]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: argument 4 [geometry_type] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    type = sqlite3_value_text (argv[3]);
+    if (sqlite3_value_type (argv[4]) == SQLITE_INTEGER)
+      {
+	  dimension = sqlite3_value_int (argv[4]);
+	  if (dimension == 2)
+	      dims = GAIA_XY;
+	  if (dimension == 3)
+	      dims = GAIA_XY_Z;
+      }
+    else if (sqlite3_value_type (argv[4]) == SQLITE_TEXT)
+      {
+	  txt_dims = sqlite3_value_text (argv[4]);
+	  if (strcasecmp ((char *) txt_dims, "XY") == 0)
+	      dims = GAIA_XY;
+	  if (strcasecmp ((char *) txt_dims, "XYZ") == 0)
+	      dims = GAIA_XY_Z;
+	  if (strcasecmp ((char *) txt_dims, "XYM") == 0)
+	      dims = GAIA_XY_M;
+	  if (strcasecmp ((char *) txt_dims, "XYZM") == 0)
+	      dims = GAIA_XY_Z_M;
+      }
+    else
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: argument 5 [dimension] is not of the Integer or Text type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (argc > 5)
+      {
+	  /* optional NOT NULL arg */
+	  if (sqlite3_value_type (argv[5]) != SQLITE_INTEGER)
+	    {
+		fprintf (stderr,
+			 "AddGeometryColumn() error: argument 6 [not null] is not of the Integer type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  notNull = sqlite3_value_int (argv[5]);
+      }
+    xtype = GAIA_UNKNOWN;
+    if (strcasecmp ((char *) type, "POINT") == 0)
+	xtype = GAIA_POINT;
+    if (strcasecmp ((char *) type, "LINESTRING") == 0)
+	xtype = GAIA_LINESTRING;
+    if (strcasecmp ((char *) type, "POLYGON") == 0)
+	xtype = GAIA_POLYGON;
+    if (strcasecmp ((char *) type, "MULTIPOINT") == 0)
+	xtype = GAIA_MULTIPOINT;
+    if (strcasecmp ((char *) type, "MULTILINESTRING") == 0)
+	xtype = GAIA_MULTILINESTRING;
+    if (strcasecmp ((char *) type, "MULTIPOLYGON") == 0)
+	xtype = GAIA_MULTIPOLYGON;
+    if (strcasecmp ((char *) type, "GEOMETRYCOLLECTION") == 0)
+	xtype = GAIA_GEOMETRYCOLLECTION;
+    if (strcasecmp ((char *) type, "GEOMETRY") == 0)
+	xtype = -1;
+    if (xtype == GAIA_UNKNOWN)
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: argument 4 [geometry_type] has an illegal value\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (dims == GAIA_XY || dims == GAIA_XY_Z || dims == GAIA_XY_M
+	|| dims == GAIA_XY_Z_M)
+	;
+    else
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: argument 5 [dimension] ILLEGAL VALUE\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+/* checking if the table exists */
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     sqltable);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "AddGeometryColumn: \"%s\"\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    *tblname = '\0';
+    for (i = 1; i <= rows; i++)
+	strcpy (tblname, results[(i * columns)]);
+    sqlite3_free_table (results);
+    if (*tblname == '\0')
+      {
+	  fprintf (stderr,
+		   "AddGeometryColumn() error: table '%s' does not exist\n",
+		   table);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+/* trying to add the column */
+    strcpy (xtable, (char *) table);
+    double_quoted_sql (xtable);
+    strcpy (xcolumn, (char *) column);
+    double_quoted_sql (xcolumn);
+    strcpy (sql, "ALTER TABLE ");
+    strcat (sql, xtable);
+    strcat (sql, " ADD COLUMN ");
+    strcat (sql, xcolumn);
+    strcat (sql, " ");
+    switch (xtype)
+      {
+      case GAIA_POINT:
+	  strcat (sql, "POINT");
+	  break;
+      case GAIA_LINESTRING:
+	  strcat (sql, "LINESTRING");
+	  break;
+      case GAIA_POLYGON:
+	  strcat (sql, "POLYGON");
+	  break;
+      case GAIA_MULTIPOINT:
+	  strcat (sql, "MULTIPOINT");
+	  break;
+      case GAIA_MULTILINESTRING:
+	  strcat (sql, "MULTILINESTRING");
+	  break;
+      case GAIA_MULTIPOLYGON:
+	  strcat (sql, "MULTIPOLYGON");
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+	  strcat (sql, "GEOMETRYCOLLECTION");
+	  break;
+      case -1:
+	  strcat (sql, "GEOMETRY");
+	  break;
+      };
+    if (notNull)
+      {
+	  /* adding a NOT NULL clause */
+	  strcat (sql, " NOT NULL DEFAULT ''");
+      }
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+/*ok, inserting into geometry_columns [Spatial Metadata] */
+    strcpy (sql,
+	    "INSERT INTO geometry_columns (f_table_name, f_geometry_column, type, ");
+    strcat (sql, "coord_dimension, srid, spatial_index_enabled) VALUES (");
+    strcat (sql, "'");
+    strcat (sql, sqltable);
+    strcat (sql, "', '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "', '");
+    switch (xtype)
+      {
+      case GAIA_POINT:
+	  strcat (sql, "POINT");
+	  break;
+      case GAIA_LINESTRING:
+	  strcat (sql, "LINESTRING");
+	  break;
+      case GAIA_POLYGON:
+	  strcat (sql, "POLYGON");
+	  break;
+      case GAIA_MULTIPOINT:
+	  strcat (sql, "MULTIPOINT");
+	  break;
+      case GAIA_MULTILINESTRING:
+	  strcat (sql, "MULTILINESTRING");
+	  break;
+      case GAIA_MULTIPOLYGON:
+	  strcat (sql, "MULTIPOLYGON");
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+	  strcat (sql, "GEOMETRYCOLLECTION");
+	  break;
+      case -1:
+	  strcat (sql, "GEOMETRY");
+	  break;
+      };
+    strcat (sql, "', '");
+    switch (dims)
+      {
+      case GAIA_XY:
+	  strcat (sql, "XY");
+	  break;
+      case GAIA_XY_Z:
+	  strcat (sql, "XYZ");
+	  break;
+      case GAIA_XY_M:
+	  strcat (sql, "XYM");
+	  break;
+      case GAIA_XY_Z_M:
+	  strcat (sql, "XYZM");
+	  break;
+      };
+    strcat (sql, "', ");
+    if (srid <= 0)
+	strcat (sql, "-1");
+    else
+      {
+	  sprintf (dummy, "%d", srid);
+	  strcat (sql, dummy);
+      }
+    strcat (sql, ", 0)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    updateGeometryTriggers (sqlite, table, column);
+    sqlite3_result_int (context, 1);
+    strcpy (sql, "Geometry [");
+    switch (xtype)
+      {
+      case GAIA_POINT:
+	  strcat (sql, "POINT");
+	  break;
+      case GAIA_LINESTRING:
+	  strcat (sql, "LINESTRING");
+	  break;
+      case GAIA_POLYGON:
+	  strcat (sql, "POLYGON");
+	  break;
+      case GAIA_MULTIPOINT:
+	  strcat (sql, "MULTIPOINT");
+	  break;
+      case GAIA_MULTILINESTRING:
+	  strcat (sql, "MULTILINESTRING");
+	  break;
+      case GAIA_MULTIPOLYGON:
+	  strcat (sql, "MULTIPOLYGON");
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+	  strcat (sql, "GEOMETRYCOLLECTION");
+	  break;
+      case -1:
+	  strcat (sql, "GEOMETRY");
+	  break;
+      };
+    strcat (sql, ",");
+    switch (dims)
+      {
+      case GAIA_XY:
+	  strcat (sql, "XY");
+	  break;
+      case GAIA_XY_Z:
+	  strcat (sql, "XYZ");
+	  break;
+      case GAIA_XY_M:
+	  strcat (sql, "XYM");
+	  break;
+      case GAIA_XY_Z_M:
+	  strcat (sql, "XYZM");
+	  break;
+      };
+    sprintf (sqlcolumn, ",SRID=%d", (srid <= 0) ? -1 : srid);
+    strcat (sql, sqlcolumn);
+    strcat (sql, "] successfully created");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    fprintf (stderr, "AddGeometryColumn() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_RecoverGeometryColumn (sqlite3_context * context, int argc,
+			    sqlite3_value ** argv)
+{
+/* SQL function:
+/ RecoverGeometryColumn(table, column, srid, type , dimension )
+/
+/ checks if an existing TABLE.COLUMN satisfies the required geometric features
+/ if yes adds it to SpatialMetaData and enabling triggers
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    const unsigned char *type;
+    int xtype;
+    int xxtype;
+    int srid = -1;
+    const unsigned char *txt_dims;
+    int dimension = 2;
+    int dims = -1;
+    char dummy[32];
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char tblname[256];
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    if (sqlite3_value_type (argv[2]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: argument 3 [SRID] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    srid = sqlite3_value_int (argv[2]);
+    if (sqlite3_value_type (argv[3]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: argument 4 [geometry_type] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    type = sqlite3_value_text (argv[3]);
+    if (sqlite3_value_type (argv[4]) == SQLITE_INTEGER)
+      {
+	  dimension = sqlite3_value_int (argv[4]);
+	  if (dimension == 2)
+	      dims = GAIA_XY;
+	  if (dimension == 3)
+	      dims = GAIA_XY_Z;
+      }
+    else if (sqlite3_value_type (argv[4]) == SQLITE_TEXT)
+      {
+	  txt_dims = sqlite3_value_text (argv[4]);
+	  if (strcasecmp ((char *) txt_dims, "XY") == 0)
+	      dims = GAIA_XY;
+	  if (strcasecmp ((char *) txt_dims, "XYZ") == 0)
+	      dims = GAIA_XY_Z;
+	  if (strcasecmp ((char *) txt_dims, "XYM") == 0)
+	      dims = GAIA_XY_M;
+	  if (strcasecmp ((char *) txt_dims, "XYZM") == 0)
+	      dims = GAIA_XY_Z_M;
+      }
+    else
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: argument 5 [dimension] is not of the Integer or Text type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    xtype = GAIA_UNKNOWN;
+    if (strcasecmp ((char *) type, "POINT") == 0)
+	xtype = GAIA_POINT;
+    if (strcasecmp ((char *) type, "LINESTRING") == 0)
+	xtype = GAIA_LINESTRING;
+    if (strcasecmp ((char *) type, "POLYGON") == 0)
+	xtype = GAIA_POLYGON;
+    if (strcasecmp ((char *) type, "MULTIPOINT") == 0)
+	xtype = GAIA_MULTIPOINT;
+    if (strcasecmp ((char *) type, "MULTILINESTRING") == 0)
+	xtype = GAIA_MULTILINESTRING;
+    if (strcasecmp ((char *) type, "MULTIPOLYGON") == 0)
+	xtype = GAIA_MULTIPOLYGON;
+    if (strcasecmp ((char *) type, "GEOMETRYCOLLECTION") == 0)
+	xtype = GAIA_GEOMETRYCOLLECTION;
+    if (strcasecmp ((char *) type, "GEOMETRY") == 0)
+	xtype = -1;
+    if (xtype == GAIA_UNKNOWN)
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: argument 4 [geometry_type] has an illegal value\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (dims == GAIA_XY || dims == GAIA_XY_Z || dims == GAIA_XY_M
+	|| dims == GAIA_XY_Z_M)
+	;
+    else
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: argument 5 [dimension] ILLEGAL VALUE\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+/* checking if the table exists */
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     sqltable);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "RecoverGeometryColumn: \"%s\"\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    *tblname = '\0';
+    for (i = 1; i <= rows; i++)
+      {
+	  /* preparing the triggers */
+	  strcpy (tblname, results[(i * columns)]);
+      }
+    sqlite3_free_table (results);
+    if (*tblname == '\0')
+      {
+	  fprintf (stderr,
+		   "RecoverGeometryColumn() error: table '%s' does not exist\n",
+		   table);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+/* adjusting the actual GeometryType */
+    xxtype = xtype;
+    xtype = GAIA_UNKNOWN;
+    if (xxtype == GAIA_POINT)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_POINTZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_POINTM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_POINTZM;
+		break;
+	    default:
+		xtype = GAIA_POINT;
+		break;
+	    };
+      }
+    if (xxtype == GAIA_LINESTRING)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_LINESTRINGZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_LINESTRINGM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_LINESTRINGZM;
+		break;
+	    default:
+		xtype = GAIA_LINESTRING;
+		break;
+	    };
+      }
+    if (xxtype == GAIA_POLYGON)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_POLYGONZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_POLYGONM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_POLYGONZM;
+		break;
+	    default:
+		xtype = GAIA_POLYGON;
+		break;
+	    };
+      }
+    if (xxtype == GAIA_MULTIPOINT)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_MULTIPOINTZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_MULTIPOINTM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_MULTIPOINTZM;
+		break;
+	    default:
+		xtype = GAIA_MULTIPOINT;
+		break;
+	    };
+      }
+    if (xxtype == GAIA_MULTILINESTRING)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_MULTILINESTRINGZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_MULTILINESTRINGM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_MULTILINESTRINGZM;
+		break;
+	    default:
+		xtype = GAIA_MULTILINESTRING;
+		break;
+	    };
+      }
+    if (xxtype == GAIA_MULTIPOLYGON)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_MULTIPOLYGONZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_MULTIPOLYGONM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_MULTIPOLYGONZM;
+		break;
+	    default:
+		xtype = GAIA_MULTIPOLYGON;
+		break;
+	    };
+      }
+    if (xxtype == GAIA_GEOMETRYCOLLECTION)
+      {
+	  switch (dims)
+	    {
+	    case GAIA_XY_Z:
+		xtype = GAIA_GEOMETRYCOLLECTIONZ;
+		break;
+	    case GAIA_XY_M:
+		xtype = GAIA_GEOMETRYCOLLECTIONM;
+		break;
+	    case GAIA_XY_Z_M:
+		xtype = GAIA_GEOMETRYCOLLECTIONZM;
+		break;
+	    default:
+		xtype = GAIA_GEOMETRYCOLLECTION;
+		break;
+	    };
+      }
+    if (xxtype == -1)
+	xtype = -1;		/* GEOMETRY */
+    if (!recoverGeomColumn (sqlite, table, column, xtype, dims, srid))
+      {
+	  fprintf (stderr, "RecoverGeometryColumn(): validation failed\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    strcpy (sql,
+	    "INSERT INTO geometry_columns (f_table_name, f_geometry_column, type, ");
+    strcat (sql, "coord_dimension, srid, spatial_index_enabled) VALUES (");
+    strcat (sql, "'");
+    strcat (sql, sqltable);
+    strcat (sql, "', '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "', '");
+    switch (xtype)
+      {
+      case GAIA_POINT:
+      case GAIA_POINTZ:
+      case GAIA_POINTM:
+      case GAIA_POINTZM:
+	  strcat (sql, "POINT");
+	  break;
+      case GAIA_LINESTRING:
+      case GAIA_LINESTRINGZ:
+      case GAIA_LINESTRINGM:
+      case GAIA_LINESTRINGZM:
+	  strcat (sql, "LINESTRING");
+	  break;
+      case GAIA_POLYGON:
+      case GAIA_POLYGONZ:
+      case GAIA_POLYGONM:
+      case GAIA_POLYGONZM:
+	  strcat (sql, "POLYGON");
+	  break;
+      case GAIA_MULTIPOINT:
+      case GAIA_MULTIPOINTZ:
+      case GAIA_MULTIPOINTM:
+      case GAIA_MULTIPOINTZM:
+	  strcat (sql, "MULTIPOINT");
+	  break;
+      case GAIA_MULTILINESTRING:
+      case GAIA_MULTILINESTRINGZ:
+      case GAIA_MULTILINESTRINGM:
+      case GAIA_MULTILINESTRINGZM:
+	  strcat (sql, "MULTILINESTRING");
+	  break;
+      case GAIA_MULTIPOLYGON:
+      case GAIA_MULTIPOLYGONZ:
+      case GAIA_MULTIPOLYGONM:
+      case GAIA_MULTIPOLYGONZM:
+	  strcat (sql, "MULTIPOLYGON");
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+      case GAIA_GEOMETRYCOLLECTIONZ:
+      case GAIA_GEOMETRYCOLLECTIONM:
+      case GAIA_GEOMETRYCOLLECTIONZM:
+	  strcat (sql, "GEOMETRYCOLLECTION");
+	  break;
+      case -1:
+	  strcat (sql, "GEOMETRY");
+	  break;
+      };
+    strcat (sql, "', '");
+    switch (dims)
+      {
+      case GAIA_XY:
+	  strcat (sql, "XY");
+	  break;
+      case GAIA_XY_Z:
+	  strcat (sql, "XYZ");
+	  break;
+      case GAIA_XY_M:
+	  strcat (sql, "XYM");
+	  break;
+      case GAIA_XY_Z_M:
+	  strcat (sql, "XYZM");
+	  break;
+      };
+    strcat (sql, "', ");
+    if (srid <= 0)
+	strcat (sql, "-1");
+    else
+      {
+	  sprintf (dummy, "%d", srid);
+	  strcat (sql, dummy);
+      }
+    strcat (sql, ", 0)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    updateGeometryTriggers (sqlite, table, column);
+    sqlite3_result_int (context, 1);
+    strcpy (sql, "Geometry [");
+    switch (xtype)
+      {
+      case GAIA_POINT:
+	  strcat (sql, "POINT");
+	  break;
+      case GAIA_LINESTRING:
+	  strcat (sql, "LINESTRING");
+	  break;
+      case GAIA_POLYGON:
+	  strcat (sql, "POLYGON");
+	  break;
+      case GAIA_MULTIPOINT:
+	  strcat (sql, "MULTIPOINT");
+	  break;
+      case GAIA_MULTILINESTRING:
+	  strcat (sql, "MULTILINESTRING");
+	  break;
+      case GAIA_MULTIPOLYGON:
+	  strcat (sql, "MULTIPOLYGON");
+	  break;
+      case GAIA_GEOMETRYCOLLECTION:
+	  strcat (sql, "GEOMETRYCOLLECTION");
+	  break;
+      case -1:
+	  strcat (sql, "GEOMETRY");
+	  break;
+      };
+    strcat (sql, ",");
+    switch (dims)
+      {
+      case GAIA_XY:
+	  strcat (sql, "XY");
+	  break;
+      case GAIA_XY_Z:
+	  strcat (sql, "XYZ");
+	  break;
+      case GAIA_XY_M:
+	  strcat (sql, "XYM");
+	  break;
+      case GAIA_XY_Z_M:
+	  strcat (sql, "XYZM");
+	  break;
+      };
+    sprintf (sqlcolumn, ",SRID=%d", (srid <= 0) ? -1 : srid);
+    strcat (sql, sqlcolumn);
+    strcat (sql, "] successfully recovered");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    fprintf (stderr, "RecoverGeometryColumn() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_DiscardGeometryColumn (sqlite3_context * context, int argc,
+			    sqlite3_value ** argv)
+{
+/* SQL function:
+/ DiscardGeometryColumn(table, column)
+/
+/ removes TABLE.COLUMN from the Spatial MetaData [thus disabling triggers too]
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char xname[1024];
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "DiscardGeometryColumn() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "DiscardGeometryColumn() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    sprintf (sql,
+	     "DELETE FROM geometry_columns WHERE f_table_name LIKE '%s' AND f_geometry_column LIKE '%s'",
+	     sqltable, sqlcolumn);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+/* removing triggers too */
+    sprintf (xname, "ggi_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "ggu_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gii_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "giu_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gid_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gci_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gcu_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gcd_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+
+    /* trying to delete old versions [v2.0, v2.2] triggers[if any] */
+    sprintf (xname, "gti_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gtu_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gsi_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sprintf (xname, "gsu_%s_%s", (char *) table, (char *) column);
+    double_quoted_sql (xname);
+    sprintf (sql, "DROP TRIGGER IF EXISTS %s", xname);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    /* end deletion old versions [v2.0, v2.2] triggers[if any] */
+
+    sqlite3_result_int (context, 1);
+    strcpy (sql, "Geometry successfully discarded");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    fprintf (stderr, "DiscardGeometryColumn() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_InitFDOSpatialMetaData (sqlite3_context * context, int argc,
+			     sqlite3_value ** argv)
+{
+/* SQL function:
+/ InitFDOSpatialMetaData(void)
+/
+/ creates the FDO-styled SPATIAL_REF_SYS and GEOMETRY_COLUMNS tables
+/ returns 1 on success
+/ 0 on failure
+*/
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+/* creating the SPATIAL_REF_SYS tables */
+    strcpy (sql, "CREATE TABLE spatial_ref_sys (\n");
+    strcat (sql, "srid INTEGER PRIMARY KEY,\n");
+    strcat (sql, "auth_name TEXT,\n");
+    strcat (sql, "auth_srid INTEGER,\n");
+    strcat (sql, "srtext TEXT)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+/* creating the GEOMETRY_COLUMN tables */
+    strcpy (sql, "CREATE TABLE geometry_columns (\n");
+    strcat (sql, "f_table_name TEXT,\n");
+    strcat (sql, "f_geometry_column TEXT,\n");
+    strcat (sql, "geometry_type INTEGER,\n");
+    strcat (sql, "coord_dimension INTEGER,\n");
+    strcat (sql, "srid INTEGER,\n");
+    strcat (sql, "geometry_format TEXT)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sqlite3_result_int (context, 1);
+    return;
+  error:fprintf (stderr, "InitFDOSpatiaMetaData() error: \"%s\"\n",
+	     errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static int
+recoverFDOGeomColumn (sqlite3 * sqlite, const unsigned char *table,
+		      const unsigned char *column, int xtype, int srid)
+{
+/* checks if TABLE.COLUMN exists and has the required features */
+    int ok = 1;
+    char sql[1024];
+    int type;
+    sqlite3_stmt *stmt;
+    gaiaGeomCollPtr geom;
+    const void *blob_value;
+    int len;
+    int ret;
+    int i_col;
+    char xcolumn[1024];
+    char xtable[1024];
+    strcpy (xcolumn, (char *) column);
+    double_quoted_sql (xcolumn);
+    strcpy (xtable, (char *) table);
+    double_quoted_sql (xtable);
+    sprintf (sql, "SELECT %s FROM %s", xcolumn, xtable);
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "recoverFDOGeomColumn: error %d \"%s\"\n",
+		   sqlite3_errcode (sqlite), sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set rows */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* checking Geometry features */
+		geom = NULL;
+		for (i_col = 0; i_col < sqlite3_column_count (stmt); i_col++)
+		  {
+		      if (sqlite3_column_type (stmt, i_col) != SQLITE_BLOB)
+			  ok = 0;
+		      else
+			{
+			    blob_value = sqlite3_column_blob (stmt, i_col);
+			    len = sqlite3_column_bytes (stmt, i_col);
+			    geom = gaiaFromSpatiaLiteBlobWkb (blob_value, len);
+			    if (!geom)
+				ok = 0;
+			    else
+			      {
+				  if (geom->Srid != srid)
+				      ok = 0;
+				  type = gaiaGeometryType (geom);
+				  if (xtype == type)
+				      ;
+				  else
+				      ok = 0;
+				  gaiaFreeGeomColl (geom);
+			      }
+			}
+		  }
+	    }
+	  if (!ok)
+	      break;
+      }
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "recoverFDOGeomColumn: error %d \"%s\"\n",
+		   sqlite3_errcode (sqlite), sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    return ok;
+}
+
+static void
+fnct_AddFDOGeometryColumn (sqlite3_context * context, int argc,
+			   sqlite3_value ** argv)
+{
+/* SQL function:
+/ AddFDOGeometryColumn(table, column, srid, geometry_type , dimension, geometry_format )
+/
+/ creates a new COLUMN of given TYPE into TABLE
+/ returns 1 on success
+/ 0 on failure
+*/
+    const char *table;
+    const char *column;
+    const char *format;
+    char xformat[64];
+    int type;
+    int srid = -1;
+    int dimension = 2;
+    char dummy[32];
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char tblname[256];
+    char xtable[1024];
+    char xcolumn[1024];
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = (const char *) sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = (const char *) sqlite3_value_text (argv[1]);
+    if (sqlite3_value_type (argv[2]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 3 [SRID] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    srid = sqlite3_value_int (argv[2]);
+    if (sqlite3_value_type (argv[3]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 4 [geometry_type] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    type = sqlite3_value_int (argv[3]);
+    if (sqlite3_value_type (argv[4]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 5 [dimension] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    dimension = sqlite3_value_int (argv[4]);
+    if (sqlite3_value_type (argv[5]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 6 [geometry_format] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    format = (const char *) sqlite3_value_text (argv[5]);
+    if (type ==
+	GAIA_POINT
+	|| type ==
+	GAIA_LINESTRING
+	|| type ==
+	GAIA_POLYGON
+	|| type ==
+	GAIA_MULTIPOINT
+	|| type ==
+	GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	;
+    else
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 4 [geometry_type] has an illegal value\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (dimension < 2 || dimension > 4)
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 5 [dimension] current version only accepts dimension=2,3,4\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (strcasecmp (format, "WKT") == 0)
+	strcpy (xformat, "WKT");
+    else if (strcasecmp (format, "WKB") == 0)
+	strcpy (xformat, "WKB");
+    else if (strcasecmp (format, "FGF") == 0)
+	strcpy (xformat, "FGF");
+    else
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: argument 6 [geometry_format] has to be one of: WKT,WKB,FGF\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+/* checking if the table exists */
+    strcpy (xtable, (char *) table);
+    double_quoted_sql (xtable);
+    strcpy (xcolumn, (char *) column);
+    double_quoted_sql (xcolumn);
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     sqltable);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "AddFDOGeometryColumn: \"%s\"\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    *tblname = '\0';
+    for (i = 1; i <= rows; i++)
+      {
+	  strcpy (tblname, results[(i * columns)]);
+      }
+    sqlite3_free_table (results);
+    if (*tblname == '\0')
+      {
+	  fprintf (stderr,
+		   "AddFDOGeometryColumn() error: table '%s' does not exist\n",
+		   table);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+/* trying to add the column */
+    strcpy (sql, "ALTER TABLE ");
+    strcat (sql, xtable);
+    strcat (sql, " ADD COLUMN ");
+    strcat (sql, xcolumn);
+    strcat (sql, " BLOB");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+/*ok, inserting into geometry_columns [FDO Spatial Metadata] */
+    strcpy (sql,
+	    "INSERT INTO geometry_columns (f_table_name, f_geometry_column, geometry_type, ");
+    strcat (sql, "coord_dimension, srid, geometry_format) VALUES (");
+    strcat (sql, "'");
+    strcat (sql, sqltable);
+    strcat (sql, "', '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "', ");
+    sprintf (dummy, "%d, %d, ", type, dimension);
+    strcat (sql, dummy);
+    if (srid <= 0)
+	strcat (sql, "-1");
+    else
+      {
+	  sprintf (dummy, "%d", srid);
+	  strcat (sql, dummy);
+      }
+    strcat (sql, ", '");
+    strcat (sql, xformat);
+    strcat (sql, "')");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sqlite3_result_int (context, 1);
+    return;
+  error:
+    fprintf (stderr, "AddFDOGeometryColumn() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_RecoverFDOGeometryColumn (sqlite3_context * context, int argc,
+			       sqlite3_value ** argv)
+{
+/* SQL function:
+/ RecoverFDOGeometryColumn(table, column, srid, geometry_type , dimension, geometry_format )
+/
+/ checks if an existing TABLE.COLUMN satisfies the required geometric features
+/ if yes adds it to FDO-styled SpatialMetaData 
+/ returns 1 on success
+/ 0 on failure
+*/
+    const char *table;
+    const char *column;
+    const char *format;
+    char xformat[64];
+    int type;
+    int srid = -1;
+    int dimension = 2;
+    char dummy[32];
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char tblname[256];
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = (const char *) sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = (const char *) sqlite3_value_text (argv[1]);
+    if (sqlite3_value_type (argv[2]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 3 [SRID] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    srid = sqlite3_value_int (argv[2]);
+    if (sqlite3_value_type (argv[3]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 4 [geometry_type] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    type = sqlite3_value_int (argv[3]);
+    if (sqlite3_value_type (argv[4]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 5 [dimension] is not of the Integer type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    dimension = sqlite3_value_int (argv[4]);
+    if (sqlite3_value_type (argv[5]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 6 [geometry_format] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    format = (const char *) sqlite3_value_text (argv[5]);
+    if (type ==
+	GAIA_POINT
+	|| type ==
+	GAIA_LINESTRING
+	|| type ==
+	GAIA_POLYGON
+	|| type ==
+	GAIA_MULTIPOINT
+	|| type ==
+	GAIA_MULTILINESTRING
+	|| type == GAIA_MULTIPOLYGON || type == GAIA_GEOMETRYCOLLECTION)
+	;
+    else
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 4 [geometry_type] has an illegal value\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (dimension < 2 || dimension > 4)
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 5 [dimension] current version only accepts dimension=2,3,4\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (strcasecmp (format, "WKT") == 0)
+	strcpy (xformat, "WKT");
+    else if (strcasecmp (format, "WKB") == 0)
+	strcpy (xformat, "WKB");
+    else if (strcasecmp (format, "FGF") == 0)
+	strcpy (xformat, "FGF");
+    else
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: argument 6 [geometry_format] has to be one of: WKT,WKB,FGF\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+/* checking if the table exists */
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     sqltable);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "RecoverFDOGeometryColumn: \"%s\"\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    *tblname = '\0';
+    for (i = 1; i <= rows; i++)
+      {
+	  strcpy (tblname, results[(i * columns)]);
+      }
+    sqlite3_free_table (results);
+    if (*tblname == '\0')
+      {
+	  fprintf (stderr,
+		   "RecoverFDOGeometryColumn() error: table '%s' does not exist\n",
+		   table);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (!recoverFDOGeomColumn
+	(sqlite, (const unsigned char *) table,
+	 (const unsigned char *) column, type, srid))
+      {
+	  fprintf (stderr, "RecoverFDOGeometryColumn(): validation failed\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    strcpy (sqltable, (char *) tblname);
+    clean_sql_string (sqltable);
+    strcpy (sql,
+	    "INSERT INTO geometry_columns (f_table_name, f_geometry_column, geometry_type, ");
+    strcat (sql, "coord_dimension, srid, geometry_format) VALUES (");
+    strcat (sql, "'");
+    strcat (sql, sqltable);
+    strcat (sql, "', '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "', ");
+    sprintf (dummy, "%d, %d, ", type, dimension);
+    strcat (sql, dummy);
+    if (srid <= 0)
+	strcat (sql, "-1");
+    else
+      {
+	  sprintf (dummy, "%d", srid);
+	  strcat (sql, dummy);
+      }
+    strcat (sql, ", '");
+    strcat (sql, xformat);
+    strcat (sql, "')");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sqlite3_result_int (context, 1);
+    return;
+  error:
+    fprintf (stderr, "RecoverFDOGeometryColumn() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_DiscardFDOGeometryColumn (sqlite3_context * context, int argc,
+			       sqlite3_value ** argv)
+{
+/* SQL function:
+/ DiscardFDOGeometryColumn(table, column)
+/
+/ removes TABLE.COLUMN from the Spatial MetaData
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "DiscardFDOGeometryColumn() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "DiscardFDOGeometryColumn() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    sprintf (sql,
+	     "DELETE FROM geometry_columns WHERE f_table_name LIKE '%s' AND f_geometry_column LIKE '%s'",
+	     sqltable, sqlcolumn);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    sqlite3_result_int (context, 1);
+    return;
+  error:
+    fprintf (stderr, "DiscardFDOGeometryColumn() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static int
+eval_rtree_entry (int ok_geom, double geom_value, int ok_rtree,
+		  double rtree_value)
+{
+/* evaluating geom-coord and rtree-coord */
+    if (!ok_geom && !ok_rtree)
+	return 1;
+    if (ok_geom && ok_rtree)
+      {
+	  float g = (float) geom_value;
+	  float r = (float) rtree_value;
+	  if (g != r)
+	      return 0;
+	  return 1;
+      }
+    return 0;
+}
+
+static int
+check_spatial_index (sqlite3 * sqlite, const unsigned char *table,
+		     const unsigned char *geom)
+{
+/* attempting to check an R*Tree for consistency */
+    char xtable[1024];
+    char xgeom[1024];
+    char idx_name[2048];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    int is_defined = 0;
+    sqlite3_stmt *stmt;
+    sqlite3_int64 count_geom;
+    sqlite3_int64 count_rtree;
+    double g_xmin;
+    double g_ymin;
+    double g_xmax;
+    double g_ymax;
+    int ok_g_xmin;
+    int ok_g_ymin;
+    int ok_g_xmax;
+    int ok_g_ymax;
+    double i_xmin;
+    double i_ymin;
+    double i_xmax;
+    double i_ymax;
+    int ok_i_xmin;
+    int ok_i_ymin;
+    int ok_i_xmax;
+    int ok_i_ymax;
+
+/* checking if the R*Tree Spatial Index is defined */
+    strcpy (xtable, (const char *) table);
+    clean_sql_string (xtable);
+    strcpy (xgeom, (const char *) geom);
+    clean_sql_string (xgeom);
+    strcpy (sql, "SELECT Count(*) FROM geometry_columns ");
+    sprintf (sql2, "WHERE f_table_name LIKE '%s' ", xtable);
+    strcat (sql, sql2);
+    sprintf (sql2, "AND f_geometry_column LIKE '%s' ", xgeom);
+    strcat (sql, sql2);
+    strcat (sql, "AND spatial_index_enabled = 1");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CheckSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	      is_defined = sqlite3_column_int (stmt, 0);
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (!is_defined)
+	return -1;
+
+    sprintf (xgeom, "%s", geom);
+    double_quoted_sql (xgeom);
+    strcpy (xtable, (const char *) table);
+    double_quoted_sql (xtable);
+    sprintf (idx_name, "idx_%s_%s", table, geom);
+    double_quoted_sql (idx_name);
+
+/* counting how many Geometries are set into the main-table */
+    sprintf (sql, "SELECT Count(*) FROM %s ", xtable);
+    sprintf (sql2, "WHERE ST_GeometryType(%s) IS NOT NULL", xgeom);
+    strcat (sql, sql2);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CheckSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	      count_geom = sqlite3_column_int (stmt, 0);
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+    sqlite3_finalize (stmt);
+
+/* counting how many R*Tree entries are defined */
+    sprintf (sql, "SELECT Count(*) FROM %s", idx_name);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CheckSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	      count_rtree = sqlite3_column_int (stmt, 0);
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (count_geom != count_rtree)
+      {
+	  /* unexpected count difference */
+	  return 0;
+      }
+
+/* checking the geometry-table against the corresponding R*Tree */
+    sprintf (sql, "SELECT ");
+    sprintf (sql2, "MbrMinX(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "MbrMinY(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "MbrMaxX(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "MbrMaxY(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    strcat (sql, "i.xmin, i.ymin, i.xmax, i.ymax\n");
+    sprintf (sql2, "FROM %s AS g\n", xtable);
+    strcat (sql, sql2);
+    sprintf (sql2, "LEFT JOIN %s AS i ", idx_name);
+    strcat (sql, sql2);
+    strcat (sql, "ON (g.ROWID = i.pkid)");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CheckSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		/* checking a row */
+		ok_g_xmin = 1;
+		ok_g_ymin = 1;
+		ok_g_xmax = 1;
+		ok_g_ymax = 1;
+		ok_i_xmin = 1;
+		ok_i_ymin = 1;
+		ok_i_xmax = 1;
+		ok_i_ymax = 1;
+		if (sqlite3_column_type (stmt, 0) == SQLITE_NULL)
+		    ok_g_xmin = 0;
+		else
+		    g_xmin = sqlite3_column_double (stmt, 0);
+		if (sqlite3_column_type (stmt, 1) == SQLITE_NULL)
+		    ok_g_ymin = 0;
+		else
+		    g_ymin = sqlite3_column_double (stmt, 1);
+		if (sqlite3_column_type (stmt, 2) == SQLITE_NULL)
+		    ok_g_xmax = 0;
+		else
+		    g_xmax = sqlite3_column_double (stmt, 2);
+		if (sqlite3_column_type (stmt, 3) == SQLITE_NULL)
+		    ok_g_ymax = 0;
+		else
+		    g_ymax = sqlite3_column_double (stmt, 3);
+		if (sqlite3_column_type (stmt, 4) == SQLITE_NULL)
+		    ok_i_xmin = 0;
+		else
+		    i_xmin = sqlite3_column_double (stmt, 4);
+		if (sqlite3_column_type (stmt, 5) == SQLITE_NULL)
+		    ok_i_ymin = 0;
+		else
+		    i_ymin = sqlite3_column_double (stmt, 5);
+		if (sqlite3_column_type (stmt, 6) == SQLITE_NULL)
+		    ok_i_xmax = 0;
+		else
+		    i_xmax = sqlite3_column_double (stmt, 6);
+		if (sqlite3_column_type (stmt, 7) == SQLITE_NULL)
+		    ok_i_ymax = 0;
+		else
+		    i_ymax = sqlite3_column_double (stmt, 7);
+		if (eval_rtree_entry (ok_g_xmin, g_xmin, ok_i_xmin, i_xmin) ==
+		    0)
+		    goto mismatching;
+		if (eval_rtree_entry (ok_g_ymin, g_ymin, ok_i_ymin, i_ymin) ==
+		    0)
+		    goto mismatching;
+		if (eval_rtree_entry (ok_g_xmax, g_xmax, ok_i_xmax, i_xmax) ==
+		    0)
+		    goto mismatching;
+		if (eval_rtree_entry (ok_g_ymax, g_ymax, ok_i_ymax, i_ymax) ==
+		    0)
+		    goto mismatching;
+	    }
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+/* we have now to finalize the query [memory cleanup] */
+    sqlite3_finalize (stmt);
+
+
+/* now we'll check the R*Tree against the corresponding geometry-table */
+    sprintf (sql, "SELECT ");
+    sprintf (sql2, "MbrMinX(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "MbrMinY(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "MbrMaxX(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "MbrMaxY(g.%s), ", xgeom);
+    strcat (sql, sql2);
+    strcat (sql, "i.xmin, i.ymin, i.xmax, i.ymax\n");
+    sprintf (sql2, "FROM %s AS i\n", idx_name);
+    strcat (sql, sql2);
+    sprintf (sql2, "LEFT JOIN %s AS g ", xtable);
+    strcat (sql, sql2);
+    strcat (sql, "ON (g.ROWID = i.pkid)");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CheckSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		/* checking a row */
+		ok_g_xmin = 1;
+		ok_g_ymin = 1;
+		ok_g_xmax = 1;
+		ok_g_ymax = 1;
+		ok_i_xmin = 1;
+		ok_i_ymin = 1;
+		ok_i_xmax = 1;
+		ok_i_ymax = 1;
+		if (sqlite3_column_type (stmt, 0) == SQLITE_NULL)
+		    ok_g_xmin = 0;
+		else
+		    g_xmin = sqlite3_column_double (stmt, 0);
+		if (sqlite3_column_type (stmt, 1) == SQLITE_NULL)
+		    ok_g_ymin = 0;
+		else
+		    g_ymin = sqlite3_column_double (stmt, 1);
+		if (sqlite3_column_type (stmt, 2) == SQLITE_NULL)
+		    ok_g_xmax = 0;
+		else
+		    g_xmax = sqlite3_column_double (stmt, 2);
+		if (sqlite3_column_type (stmt, 3) == SQLITE_NULL)
+		    ok_g_ymax = 0;
+		else
+		    g_ymax = sqlite3_column_double (stmt, 3);
+		if (sqlite3_column_type (stmt, 4) == SQLITE_NULL)
+		    ok_i_xmin = 0;
+		else
+		    i_xmin = sqlite3_column_double (stmt, 4);
+		if (sqlite3_column_type (stmt, 5) == SQLITE_NULL)
+		    ok_i_ymin = 0;
+		else
+		    i_ymin = sqlite3_column_double (stmt, 5);
+		if (sqlite3_column_type (stmt, 6) == SQLITE_NULL)
+		    ok_i_xmax = 0;
+		else
+		    i_xmax = sqlite3_column_double (stmt, 6);
+		if (sqlite3_column_type (stmt, 7) == SQLITE_NULL)
+		    ok_i_ymax = 0;
+		else
+		    i_ymax = sqlite3_column_double (stmt, 7);
+		if (eval_rtree_entry (ok_g_xmin, g_xmin, ok_i_xmin, i_xmin) ==
+		    0)
+		    goto mismatching;
+		if (eval_rtree_entry (ok_g_ymin, g_ymin, ok_i_ymin, i_ymin) ==
+		    0)
+		    goto mismatching;
+		if (eval_rtree_entry (ok_g_xmax, g_xmax, ok_i_xmax, i_xmax) ==
+		    0)
+		    goto mismatching;
+		if (eval_rtree_entry (ok_g_ymax, g_ymax, ok_i_ymax, i_ymax) ==
+		    0)
+		    goto mismatching;
+	    }
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    strcpy (sql, "Check SpatialIndex: is valid");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) geom, sql);
+    return 1;
+  mismatching:
+    sqlite3_finalize (stmt);
+    strcpy (sql, "Check SpatialIndex: INCONSISTENCIES detected");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) geom, sql);
+    return 0;
+}
+
+static int
+check_any_spatial_index (sqlite3 * sqlite)
+{
+/* attempting to check any defined R*Tree for consistency */
+    const unsigned char *table;
+    const unsigned char *column;
+    int status;
+    char sql[1024];
+    int ret;
+    int invalid_rtree = 0;
+    sqlite3_stmt *stmt;
+
+/* retrieving any defined R*Tree */
+    strcpy (sql,
+	    "SELECT f_table_name, f_geometry_column FROM geometry_columns ");
+    strcat (sql, "WHERE spatial_index_enabled = 1");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CheckSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		/* checking a single R*Tree */
+		table = sqlite3_column_text (stmt, 0);
+		column = sqlite3_column_text (stmt, 1);
+		status = check_spatial_index (sqlite, table, column);
+		if (status < 0)
+		  {
+		      sqlite3_finalize (stmt);
+		      return -1;
+		  }
+		if (status == 0)
+		    invalid_rtree = 1;
+	    }
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (invalid_rtree)
+	return 0;
+    return 1;
+}
+
+static void
+fnct_CheckSpatialIndex (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ CheckSpatialIndex()
+/ CheckSpatialIndex(table, column)
+/
+/ checks a SpatialIndex for consistency, returning:
+/ 1 - the R*Tree is fully consistent
+/ 0 - the R*Tree is inconsistent
+/ NULL on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    int status;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (argc == 0)
+      {
+	  /* no arguments: we must check any defined R*Tree */
+	  status = check_any_spatial_index (sqlite);
+	  if (status < 0)
+	      sqlite3_result_null (context);
+	  else if (status > 0)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "CheckSpatialIndex() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_null (context);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "CheckSpatialIndex() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_null (context);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    status = check_spatial_index (sqlite, table, column);
+    if (status < 0)
+	sqlite3_result_null (context);
+    else if (status > 0)
+	sqlite3_result_int (context, 1);
+    else
+	sqlite3_result_int (context, 0);
+}
+
+static int
+recover_spatial_index (sqlite3 * sqlite, const unsigned char *table,
+		       const unsigned char *geom)
+{
+/* attempting to rebuild an R*Tree */
+    char sql[8192];
+    char sql2[2048];
+    char *errMsg = NULL;
+    int ret;
+    char xtable[1024];
+    char xgeom[1024];
+    char idx_name[2048];
+    int is_defined = 0;
+    sqlite3_stmt *stmt;
+
+/* checking if the R*Tree Spatial Index is defined */
+    strcpy (xtable, (const char *) table);
+    clean_sql_string (xtable);
+    strcpy (xgeom, (const char *) geom);
+    clean_sql_string (xgeom);
+    strcpy (sql, "SELECT Count(*) FROM geometry_columns ");
+    sprintf (sql2, "WHERE f_table_name LIKE '%s' ", xtable);
+    strcat (sql, sql2);
+    sprintf (sql2, "AND f_geometry_column LIKE '%s' ", xgeom);
+    strcat (sql, sql2);
+    strcat (sql, "AND spatial_index_enabled = 1");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "RecoverSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	      is_defined = sqlite3_column_int (stmt, 0);
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (!is_defined)
+	return -1;
+
+/* erasing the R*Tree table */
+    sprintf (idx_name, "idx_%s_%s", table, geom);
+    double_quoted_sql (idx_name);
+    sprintf (sql, "DELETE FROM %s", idx_name);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+/* populating the R*Tree table from scratch */
+    buildSpatialIndex (sqlite, table, (const char *) geom);
+    strcpy (sql, "SpatialIndex: successfully recovered");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) geom, sql);
+    return 1;
+  error:
+    fprintf (stderr, "RecoverSpatialIndex() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    return 0;
+}
+
+static int
+recover_any_spatial_index (sqlite3 * sqlite, int no_check)
+{
+/* attempting to rebuild any defined R*Tree */
+    const unsigned char *table;
+    const unsigned char *column;
+    int status;
+    char sql[1024];
+    int ret;
+    int to_be_fixed;
+    sqlite3_stmt *stmt;
+
+/* retrieving any defined R*Tree */
+    strcpy (sql,
+	    "SELECT f_table_name, f_geometry_column FROM geometry_columns ");
+    strcat (sql, "WHERE spatial_index_enabled = 1");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "RecoverSpatialIndex SQL error: %s\n",
+		   sqlite3_errmsg (sqlite));
+	  return -1;
+      }
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		/* checking a single R*Tree */
+		table = sqlite3_column_text (stmt, 0);
+		column = sqlite3_column_text (stmt, 1);
+		to_be_fixed = 1;
+		if (!no_check)
+		  {
+		      status = check_spatial_index (sqlite, table, column);
+		      if (status < 0)
+			{
+			    /* some unexpected error occurred */
+			    goto fatal_error;
+			}
+		      else if (status > 0)
+			{
+			    /* the Spatial Index is already valid */
+			    to_be_fixed = 0;
+			}
+		  }
+		if (to_be_fixed)
+		  {
+		      /* rebuilding the Spatial Index */
+		      status = recover_spatial_index (sqlite, table, column);
+		      if (status < 0)
+			{
+			    /* some unexpected error occurred */
+			    goto fatal_error;
+			}
+		      else if (status == 0)
+			  goto error;
+		  }
+	    }
+	  else
+	    {
+		printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return -1;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    return 1;
+  error:
+    sqlite3_finalize (stmt);
+    return 0;
+  fatal_error:
+    sqlite3_finalize (stmt);
+    return -1;
+}
+
+static void
+fnct_RecoverSpatialIndex (sqlite3_context * context, int argc,
+			  sqlite3_value ** argv)
+{
+/* SQL function:
+/ RecoverSpatialIndex()
+/ RecoverSpatialIndex(no_check)
+/ RecoverSpatialIndex(table, column)
+/ RecoverSpatialIndex(table, column, no_check)
+/
+/ attempts to rebuild a SpatialIndex, returning:
+/ 1 - on success
+/ 0 - on failure
+/ NULL if any syntax error is detected
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    int no_check = 0;
+    int status;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (argc <= 1)
+      {
+	  /* no arguments: we must rebuild any defined R*Tree */
+	  if (argc == 1)
+	    {
+		if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+		    no_check = sqlite3_value_int (argv[0]);
+		else
+		  {
+		      fprintf (stderr,
+			       "RecoverSpatialIndex() error: argument 1 [no_check] is not of the Integer type\n");
+		      sqlite3_result_null (context);
+		      return;
+		  }
+	    }
+	  status = recover_any_spatial_index (sqlite, no_check);
+	  if (status < 0)
+	      sqlite3_result_null (context);
+	  else if (status > 0)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverSpatialIndex() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_null (context);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RecoverSpatialIndex() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_null (context);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    if (argc == 3)
+      {
+	  if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	      no_check = sqlite3_value_int (argv[2]);
+	  else
+	    {
+		fprintf (stderr,
+			 "RecoverSpatialIndex() error: argument 2 [no_check] is not of the Integer type\n");
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    if (!no_check)
+      {
+	  /* checking the current SpatialIndex validity */
+	  status = check_spatial_index (sqlite, table, column);
+	  if (status < 0)
+	    {
+		/* some unexpected error occurred */
+		sqlite3_result_null (context);
+		return;
+	    }
+	  else if (status > 0)
+	    {
+		/* the Spatial Index is already valid */
+		sqlite3_result_int (context, 1);
+		return;
+	    }
+      }
+/* rebuilding the Spatial Index */
+    status = recover_spatial_index (sqlite, table, column);
+    if (status < 0)
+	sqlite3_result_null (context);
+    else if (status > 0)
+	sqlite3_result_int (context, 1);
+    else
+	sqlite3_result_int (context, 0);
+}
+
+static void
+fnct_CreateSpatialIndex (sqlite3_context * context, int argc,
+			 sqlite3_value ** argv)
+{
+/* SQL function:
+/ CreateSpatialIndex(table, column )
+/
+/ creates a SpatialIndex based on Column and Table
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "CreateSpatialIndex() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "CreateSpatialIndex() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    strcpy (sql,
+	    "UPDATE geometry_columns SET spatial_index_enabled = 1 WHERE f_table_name LIKE '");
+    strcat (sql, sqltable);
+    strcat (sql, "' AND f_geometry_column LIKE '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "' AND spatial_index_enabled = 0");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    if (sqlite3_changes (sqlite) == 0)
+      {
+	  fprintf (stderr,
+		   "CreateSpatialIndex() error: either \"%s\".\"%s\" isn't a Geometry column or a SpatialIndex is already defined\n",
+		   table, column);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    updateGeometryTriggers (sqlite, table, column);
+    sqlite3_result_int (context, 1);
+    strcpy (sql, "R*Tree Spatial Index successfully created");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    fprintf (stderr, "CreateSpatialIndex() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_CreateMbrCache (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CreateMbrCache(table, column )
+/
+/ creates an MBR Cache based on Column and Table
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "CreateMbrCache() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "CreateMbrCache() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    strcpy (sql,
+	    "UPDATE geometry_columns SET spatial_index_enabled = 2 WHERE f_table_name LIKE '");
+    strcat (sql, sqltable);
+    strcat (sql, "' AND f_geometry_column LIKE '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "' AND spatial_index_enabled = 0");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    if (sqlite3_changes (sqlite) == 0)
+      {
+	  fprintf (stderr,
+		   "CreateMbrCache() error: either \"%s\".\"%s\" isn't a Geometry column or a SpatialIndex is already defined\n",
+		   table, column);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    updateGeometryTriggers (sqlite, table, column);
+    sqlite3_result_int (context, 1);
+    strcpy (sql, "MbrCache successfully created");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    fprintf (stderr, "CreateMbrCache() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_DisableSpatialIndex (sqlite3_context * context, int argc,
+			  sqlite3_value ** argv)
+{
+/* SQL function:
+/ DisableSpatialIndex(table, column )
+/
+/ disables a SpatialIndex based on Column and Table
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "DisableSpatialIndex() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "DisableSpatialIndex() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    strcpy (sql,
+	    "UPDATE geometry_columns SET spatial_index_enabled = 0 WHERE f_table_name LIKE '");
+    strcat (sql, sqltable);
+    strcat (sql, "' AND f_geometry_column LIKE '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "' AND spatial_index_enabled <> 0");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+	goto error;
+    if (sqlite3_changes (sqlite) == 0)
+      {
+	  fprintf (stderr,
+		   "DisableSpatialIndex() error: either \"%s\".\"%s\" isn't a Geometry column or no SpatialIndex is defined\n",
+		   table, column);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    updateGeometryTriggers (sqlite, table, column);
+    sqlite3_result_int (context, 1);
+    strcpy (sql, "SpatialIndex successfully disabled");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    fprintf (stderr, "DisableSpatialIndex() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_RebuildGeometryTriggers (sqlite3_context * context, int argc,
+			      sqlite3_value ** argv)
+{
+/* SQL function:
+/ RebuildGeometryTriggers(table, column )
+/
+/ rebuilds Geometry Triggers (constraints)  based on Column and Table
+/ returns 1 on success
+/ 0 on failure
+*/
+    const unsigned char *table;
+    const unsigned char *column;
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    char sqltable[1024];
+    char sqlcolumn[1024];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RebuildGeometryTriggers() error: argument 1 [table_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    table = sqlite3_value_text (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+      {
+	  fprintf (stderr,
+		   "RebuildGeometryTriggers() error: argument 2 [column_name] is not of the String type\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    column = sqlite3_value_text (argv[1]);
+    strcpy (sqltable, (char *) table);
+    clean_sql_string (sqltable);
+    strcpy (sqlcolumn, (char *) column);
+    clean_sql_string (sqlcolumn);
+    strcpy (sql,
+	    "SELECT f_table_name FROM geometry_columns WHERE f_table_name LIKE '");
+    strcat (sql, sqltable);
+    strcat (sql, "' AND f_geometry_column LIKE '");
+    strcat (sql, sqlcolumn);
+    strcat (sql, "'");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto error;
+    sqlite3_free_table (results);
+    if (rows <= 0)
+      {
+	  fprintf (stderr,
+		   "RebuildGeometryTriggers() error: \"%s\".\"%s\" isn't a Geometry column\n",
+		   table, column);
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    updateGeometryTriggers (sqlite, table, column);
+    sqlite3_result_int (context, 1);
+    strcpy (sql, "Geometry Triggers successfully rebuilt");
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    fprintf (stderr, "RebuildGeometryTriggers() error: \"%s\"\n", errMsg);
+    sqlite3_free (errMsg);
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+
+static int
+check_topo_table (sqlite3 * sqlite, const char *table, int is_view)
+{
+/* checking if some Topology-related table/view already exists */
+    int exists = 0;
+    char sql[2048];
+    char sqltable[1024];
+    char *errMsg = NULL;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    strcpy (sqltable, table);
+    clean_sql_string (sqltable);
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = '%s' AND name LIKE '%s'",
+	     (!is_view) ? "table" : "view", table);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+	return 0;
+    for (i = 1; i <= rows; i++)
+	exists = 1;
+    sqlite3_free_table (results);
+    return exists;
+}
+
+static int
+create_topo_nodes (sqlite3 * sqlite, const char *table, int srid, int dims)
+{
+/* creating the topo_nodes table */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE TABLE %s (\n", sqltable);
+    strcat (sql, "node_id INTEGER PRIMARY KEY AUTOINCREMENT,\n");
+    strcat (sql, "gml_id TEXT)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE TABLE '%s' error: %s\n", table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    clean_sql_string (sqltable);
+    sprintf (sql,
+	     "SELECT AddGeometryColumn('%s', 'Geometry', %d, 'POINT', '%s')",
+	     sqltable, srid, (dims == GAIA_XY_Z) ? "XYZ" : "XY");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "AddGeometryColumn '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    sprintf (sql, "SELECT CreateSpatialIndex('%s', 'Geometry')", sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CreateSpatialIndex '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_gml", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (gml_id)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('gml_id') error: %s\n", sqltable,
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_topo_edges (sqlite3 * sqlite, const char *table, int srid, int dims)
+{
+/* creating the topo_edges table */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE TABLE %s (\n", sqltable);
+    strcat (sql, "edge_id INTEGER PRIMARY KEY AUTOINCREMENT,\n");
+    strcat (sql, "node_from_href TEXT,\n");
+    strcat (sql, "node_to_href TEXT,\n");
+    strcat (sql, "gml_id TEXT)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE TABLE '%s' error: %s\n", table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    clean_sql_string (sqltable);
+    sprintf (sql,
+	     "SELECT AddGeometryColumn('%s', 'Geometry', %d, 'LINESTRING', '%s')",
+	     sqltable, srid, (dims == GAIA_XY_Z) ? "XYZ" : "XY");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "AddGeometryColumn '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    sprintf (sql, "SELECT CreateSpatialIndex('%s', 'Geometry')", sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CreateSpatialIndex '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_gml_id", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (gml_id)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('gml_id') error: %s\n", sqltable,
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_from", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (node_from_href)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('node_from_href') error: %s\n",
+		   sqltable, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_to", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (node_to_href)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('node_to_href') error: %s\n",
+		   sqltable, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_topo_faces (sqlite3 * sqlite, const char *table, int srid, int dims)
+{
+/* creating the topo_faces table */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE TABLE %s (\n", sqltable);
+    strcat (sql, "face_id INTEGER PRIMARY KEY AUTOINCREMENT,\n");
+    strcat (sql, "gml_id TEXT)");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE TABLE '%s' error: %s\n", table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    clean_sql_string (sqltable);
+    sprintf (sql,
+	     "SELECT AddGeometryColumn('%s', 'Geometry', %d, 'POLYGON', '%s')",
+	     sqltable, srid, (dims == GAIA_XY_Z) ? "XYZ" : "XY");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "AddGeometryColumn '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    sprintf (sql, "SELECT CreateSpatialIndex('%s', 'Geometry')", sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CreateSpatialIndex '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_gml", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (gml_id)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('gml_id') error: %s\n", sqltable,
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_topo_faces_edges (sqlite3 * sqlite, const char *table,
+			 const char *table2)
+{
+/* creating the topo_faces_edges table */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE TABLE %s (\n", sqltable);
+    strcat (sql, "face_id INTEGER NOT NULL,\n");
+    strcat (sql, "sub INTEGER NOT NULL,\n");
+    strcat (sql, "gml_id TEXT,\n");
+    strcat (sql, "orientation TEXT,\n");
+    strcat (sql, "CONSTRAINT pk_faces_edges PRIMARY KEY ");
+    strcat (sql, "(face_id, sub),\n");
+    strcat (sql, "CONSTRAINT fk_faces_edges FOREIGN KEY ");
+    strcat (sql, "(face_id) REFERENCES ");
+    strcpy (sql2, table2);
+    double_quoted_sql (sql2);
+    strcat (sql, sql2);
+    strcat (sql, " (face_id))\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE TABLE '%s' error: %s\n", table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_edge", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (gml_id)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('gml_id') error: %s\n", sqltable,
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_topo_curves (sqlite3 * sqlite, const char *table, const char *table2,
+		    int srid, int dims)
+{
+/* creating the topo_curves table */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE TABLE %s (\n", sqltable);
+    strcat (sql, "curve_id INTEGER NOT NULL,\n");
+    strcat (sql, "edge_id INTEGER NOT NULL,\n");
+    strcat (sql, "CONSTRAINT pk_curves PRIMARY KEY ");
+    strcat (sql, "(curve_id, edge_id),\n");
+    strcat (sql, "CONSTRAINT fk_curves FOREIGN KEY ");
+    strcat (sql, "(edge_id) REFERENCES ");
+    strcpy (sql2, table2);
+    double_quoted_sql (sql2);
+    strcat (sql, sql2);
+    strcat (sql, " (edge_id))\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE TABLE '%s' error: %s\n", table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    clean_sql_string (sqltable);
+    sprintf (sql,
+	     "SELECT AddGeometryColumn('%s', 'Geometry', %d, 'MULTILINESTRING', '%s')",
+	     sqltable, srid, (dims == GAIA_XY_Z) ? "XYZ" : "XY");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "AddGeometryColumn '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    sprintf (sql, "SELECT CreateSpatialIndex('%s', 'Geometry')", sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CreateSpatialIndex '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_edge", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (edge_id)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('edge_id') error: %s\n", sqltable,
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_topo_surfaces (sqlite3 * sqlite, const char *table, const char *table2,
+		      int srid, int dims)
+{
+/* creating the topo_surfaces table */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE TABLE %s (\n", sqltable);
+    strcat (sql, "surface_id INTEGER NOT NULL,\n");
+    strcat (sql, "face_id INTEGER NOT NULL,\n");
+    strcat (sql, "CONSTRAINT pk_surfaces PRIMARY KEY ");
+    strcat (sql, "(surface_id, face_id),\n");
+    strcat (sql, "CONSTRAINT fk_surfaces FOREIGN KEY ");
+    strcat (sql, "(face_id) REFERENCES ");
+    strcpy (sql2, table2);
+    double_quoted_sql (sql2);
+    strcat (sql, sql2);
+    strcat (sql, " (face_id))\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE TABLE '%s' error: %s\n", table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    clean_sql_string (sqltable);
+    sprintf (sql,
+	     "SELECT AddGeometryColumn('%s', 'Geometry', %d, 'MULTIPOLYGON', '%s')",
+	     sqltable, srid, (dims == GAIA_XY_Z) ? "XYZ" : "XY");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "AddGeometryColumn '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    sprintf (sql, "SELECT CreateSpatialIndex('%s', 'Geometry')", sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CreateSpatialIndex '%s'.'Geometry' error: %s\n",
+		   table, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    strcpy (sqltable, table);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "idx_%s_face", sqltable);
+    double_quoted_sql (sql2);
+    sprintf (sql, "CREATE INDEX %s ON %s (face_id)", sql2, sqltable);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "Create Index '%s'('face_id') error: %s\n", sqltable,
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_check_node_ids (sqlite3 * sqlite, const char *view,
+		       const char *table_nodes)
+{
+/* creating the check node ids VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT gml_id AS gml_id, Count(node_id) AS count\n");
+    strcpy (sqltable, table_nodes);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "GROUP BY gml_id\n");
+    strcat (sql, "HAVING count > 1\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_check_node_geoms (sqlite3 * sqlite, const char *view,
+			 const char *table_nodes)
+{
+/* creating the check node geoms VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT n1.node_id AS node1_id, n1.gml_id AS node1_gml_id, ");
+    strcat (sql, "n2.node_id AS node2_id, n2.gml_id AS node2_gml_id\n");
+    strcpy (sqltable, table_nodes);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s AS n1\n", sqltable);
+    strcat (sql, sql2);
+    sprintf (sql2, "JOIN %s AS n2 ON (\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "  n1.node_id <> n2.node_id AND\n");
+    strcat (sql, "  ST_Equals(n1.Geometry, n2.Geometry) = 1 AND\n");
+    strcat (sql, "  n2.node_id IN (\n");
+    strcat (sql, "	SELECT ROWID FROM SpatialIndex\n");
+    strcpy (sqltable, table_nodes);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "	WHERE f_table_name = '%s' AND\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "	  search_frame = n1.Geometry))\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_check_edge_ids (sqlite3 * sqlite, const char *view,
+		       const char *table_edges)
+{
+/* creating the check edge ids VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT gml_id AS gml_id, Count(edge_id) AS count\n");
+    strcpy (sqltable, table_edges);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "GROUP BY gml_id\n");
+    strcat (sql, "HAVING count > 1\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_check_edge_geoms (sqlite3 * sqlite, const char *view,
+			 const char *table_edges)
+{
+/* creating the check edge geoms VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT e1.edge_id AS edge1_id, e1.gml_id AS edge1_gml_id, ");
+    strcat (sql, "e2.edge_id AS edge2_id, e2.gml_id AS edge2_gml_id\n");
+    strcpy (sqltable, table_edges);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s AS e1\n", sqltable);
+    strcat (sql, sql2);
+    sprintf (sql2, "JOIN %s AS e2 ON (\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "  e1.edge_id <> e2.edge_id AND\n");
+    strcat (sql, "NOT (e1.node_from_href = e2.node_from_href ");
+    strcat (sql, "AND e1.node_to_href = e2.node_to_href) AND\n");
+    strcat (sql, "  ST_Crosses(e1.Geometry, e2.Geometry) = 1 AND\n");
+    strcat (sql, "  e2.edge_id IN (\n");
+    strcat (sql, "	SELECT ROWID FROM SpatialIndex\n");
+    strcpy (sqltable, table_edges);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "	WHERE f_table_name = '%s' AND\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "	  search_frame = e1.Geometry))\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_check_face_ids (sqlite3 * sqlite, const char *view,
+		       const char *table_faces)
+{
+/* creating the check face ids VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT gml_id AS gml_id, Count(face_id) AS count\n");
+    strcpy (sqltable, table_faces);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "GROUP BY gml_id\n");
+    strcat (sql, "HAVING count > 1\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_faces_resolved (sqlite3 * sqlite, const char *view, const char *faces,
+		       const char *faces_edges, const char *edges)
+{
+/* creating the Faces Resolved VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT f.face_id AS face_id, ");
+    strcat (sql, "ST_Polygonize(e.Geometry) AS Geometry\n");
+    strcpy (sqltable, faces);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s AS f\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "LEFT JOIN ");
+    strcpy (sqltable, faces_edges);
+    double_quoted_sql (sqltable);
+    strcat (sql, sqltable);
+    double_quoted_sql (sqltable);
+    strcat (sql, " AS fe ON (fe.face_id = f.face_id)\n");
+    strcat (sql, "LEFT JOIN ");
+    strcpy (sqltable, edges);
+    double_quoted_sql (sqltable);
+    strcat (sql, sqltable);
+    double_quoted_sql (sqltable);
+    strcat (sql, " AS e ON (e.gml_id = fe.gml_id)\n");
+    strcat (sql, "GROUP BY f.face_id\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_curves_resolved (sqlite3 * sqlite, const char *view, const char *curves,
+			char *edges)
+{
+/* creating the Curves Resolved VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT c.curve_id AS curve_id, ");
+    strcat (sql, "CastToMultiLinestring(Collect(e.Geometry)) AS Geometry\n");
+    strcpy (sqltable, curves);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s AS c\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "LEFT JOIN ");
+    strcpy (sqltable, edges);
+    double_quoted_sql (sqltable);
+    strcat (sql, sqltable);
+    double_quoted_sql (sqltable);
+    strcat (sql, " AS e ON (e.edge_id = c.edge_id)\n");
+    strcat (sql, "GROUP BY c.curve_id\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_surfaces_resolved (sqlite3 * sqlite, const char *view,
+			  const char *surfaces, const char *faces)
+{
+/* creating the Surfaces Resolved VIEW */
+    char sql[2048];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+    strcpy (sqltable, view);
+    double_quoted_sql (sqltable);
+    sprintf (sql, "CREATE VIEW %s AS\n", sqltable);
+    strcat (sql, "SELECT s.surface_id AS surface_id, ");
+    strcat (sql, "CastToMultipolygon(Collect(f.Geometry)) AS Geometry\n");
+    strcpy (sqltable, surfaces);
+    double_quoted_sql (sqltable);
+    sprintf (sql2, "FROM %s AS s\n", sqltable);
+    strcat (sql, sql2);
+    strcat (sql, "LEFT JOIN ");
+    strcpy (sqltable, faces);
+    double_quoted_sql (sqltable);
+    strcat (sql, sqltable);
+    double_quoted_sql (sqltable);
+    strcat (sql, " AS f ON (f.face_id = s.face_id)\n");
+    strcat (sql, "GROUP BY s.surface_id\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE VIEW '%s' error: %s\n", view, err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+create_topo_master (sqlite3 * sqlite)
+{
+/* creating the topo_master table */
+    char sql[4196];
+    int ret;
+    char *err_msg = NULL;
+
+/* creating the table */
+    strcpy (sql, "CREATE TABLE topology_master (\n");
+    strcat (sql, "nodes TEXT NOT NULL,\n");
+    strcat (sql, "edges TEXT NOT NULL,\n");
+    strcat (sql, "faces TEXT NOT NULL,\n");
+    strcat (sql, "faces_edges TEXT NOT NULL,\n");
+    strcat (sql, "curves TEXT NOT NULL,\n");
+    strcat (sql, "surfaces TEXT NOT NULL,\n");
+    strcat (sql, "check_node_ids TEXT NOT NULL,\n");
+    strcat (sql, "check_node_geoms TEXT NOT NULL,\n");
+    strcat (sql, "check_edge_ids TEXT NOT NULL,\n");
+    strcat (sql, "check_edge_geoms TEXT NOT NULL,\n");
+    strcat (sql, "check_face_ids TEXT NOT NULL,\n");
+    strcat (sql, "faces_resolved TEXT NOT NULL,\n");
+    strcat (sql, "curves_resolved TEXT NOT NULL,\n");
+    strcat (sql, "surfaces_resolved TEXT NOT NULL,\n");
+    strcat (sql, "coord_dimension TEXT NOT NULL,\n");
+    strcat (sql, "srid INTEGER NOT NULL,\n");
+    strcat (sql, "CONSTRAINT fk_topo_master FOREIGN KEY \n");
+    strcat (sql, "(srid) REFERENCES spatial_ref_sys (srid))\n");
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE TABLE 'topology_master' error: %s\n",
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+update_topo_master (sqlite3 * sqlite, const char *nodes, const char *edges,
+		    const char *faces, const char *faces_edges,
+		    const char *curves, const char *surfaces,
+		    const char *check_nodes, const char *check_node_geoms,
+		    const char *check_edges, const char *check_edge_geoms,
+		    const char *check_faces, const char *faces_res,
+		    const char *curves_res, const char *surfaces_res, int srid,
+		    int dims)
+{
+/* updating the topo_master table */
+    char sql[4196];
+    char sql2[2048];
+    char sqltable[1024];
+    int ret;
+    char *err_msg = NULL;
+
+/* inserting Topology data into MASTER */
+    strcpy (sql, "INSERT INTO topology_master ");
+    strcat (sql, "(nodes, edges, faces, faces_edges, ");
+    strcat (sql, "curves, surfaces, check_node_ids, ");
+    strcat (sql, "check_node_geoms, check_edge_ids, ");
+    strcat (sql, "check_edge_geoms, check_face_ids, ");
+    strcat (sql, "faces_resolved, curves_resolved, ");
+    strcat (sql, "surfaces_resolved, ");
+    strcat (sql, "coord_dimension, srid) ");
+    strcat (sql, "VALUES (");
+    strcpy (sqltable, nodes);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, edges);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, faces);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, faces_edges);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, curves);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, surfaces);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, check_nodes);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, check_node_geoms);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, check_edges);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, check_edge_geoms);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, check_faces);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, faces_res);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, curves_res);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    strcpy (sqltable, surfaces_res);
+    clean_sql_string (sqltable);
+    sprintf (sql2, "'%s', ", sqltable);
+    strcat (sql, sql2);
+    sprintf (sql2, "'%s', %d)", (dims == GAIA_XY_Z) ? "XYZ" : "XY", srid);
+    strcat (sql, sql2);
+    ret = sqlite3_exec (sqlite, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "INSERT INTO 'topology_master' error: %s\n",
+		   err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    return 1;
+}
+
+static void
+fnct_CreateTopologyTables (sqlite3_context * context, int argc,
+			   sqlite3_value ** argv)
+{
+/* SQL function:
+/ CreateTopologyTables(srid, coord_dims)
+/  or
+/ CreateTopologyTables(prefix, srid, coord_dims)
+/
+/ creates any Topology related table 
+/ returns 1 on success
+/ 0 on failure
+*/
+    const char *prefix = "topo_";
+    const unsigned char *txt_dims;
+    int srid = -1;
+    int dimension;
+    int dims = -1;
+    char table_curves[1024];
+    char table_surfaces[1024];
+    char table_nodes[1024];
+    char table_edges[1024];
+    char table_faces[1024];
+    char table_faces_edges[1024];
+    char view_check_node_ids[1024];
+    char view_check_node_geoms[1024];
+    char view_check_edge_ids[1024];
+    char view_check_edge_geoms[1024];
+    char view_check_face_ids[1024];
+    char view_faces_resolved[1024];
+    char view_curves_resolved[1024];
+    char view_surfaces_resolved[1024];
+    const char *tables[16];
+    int views[16];
+    int *p_view;
+    const char **p_tbl;
+    int ok_table;
+    int create_master = 1;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (argc == 3)
+      {
+	  if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+	    {
+		fprintf (stderr,
+			 "CreateTopologyTables() error: argument 1 [table_prefix] is not of the String type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  prefix = (char *) sqlite3_value_text (argv[0]);
+	  if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+	    {
+		fprintf (stderr,
+			 "CreateTopologyTables() error: argument 2 [SRID] is not of the Integer type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  srid = sqlite3_value_int (argv[1]);
+	  if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	    {
+		dimension = sqlite3_value_int (argv[2]);
+		if (dimension == 2)
+		    dims = GAIA_XY;
+		if (dimension == 3)
+		    dims = GAIA_XY_Z;
+	    }
+	  else if (sqlite3_value_type (argv[2]) == SQLITE_TEXT)
+	    {
+		txt_dims = sqlite3_value_text (argv[2]);
+		if (strcasecmp ((char *) txt_dims, "XY") == 0)
+		    dims = GAIA_XY;
+		if (strcasecmp ((char *) txt_dims, "XYZ") == 0)
+		    dims = GAIA_XY_Z;
+	    }
+	  else
+	    {
+		fprintf (stderr,
+			 "CreateTopologyTables() error: argument 3 [dimension] is not of the Integer or Text type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+      }
+    else
+      {
+	  if (sqlite3_value_type (argv[0]) != SQLITE_INTEGER)
+	    {
+		fprintf (stderr,
+			 "CreateTopologyTables() error: argument 1 [SRID] is not of the Integer type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  srid = sqlite3_value_int (argv[0]);
+	  if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	    {
+		dimension = sqlite3_value_int (argv[1]);
+		if (dimension == 2)
+		    dims = GAIA_XY;
+		if (dimension == 3)
+		    dims = GAIA_XY_Z;
+	    }
+	  else if (sqlite3_value_type (argv[1]) == SQLITE_TEXT)
+	    {
+		txt_dims = sqlite3_value_text (argv[1]);
+		if (strcasecmp ((char *) txt_dims, "XY") == 0)
+		    dims = GAIA_XY;
+		if (strcasecmp ((char *) txt_dims, "XYZ") == 0)
+		    dims = GAIA_XY_Z;
+	    }
+	  else
+	    {
+		fprintf (stderr,
+			 "CreateTopologyTables() error: argument 2 [dimension] is not of the Integer or Text type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+      }
+    if (dims == GAIA_XY || dims == GAIA_XY_Z)
+	;
+    else
+      {
+	  fprintf (stderr,
+		   "CreateTopologyTables() error: [dimension] ILLEGAL VALUE\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (srid <= 0)
+      {
+	  fprintf (stderr,
+		   "CreateTopologyTables() error: [SRID] ILLEGAL VALUE\n");
+	  sqlite3_result_int (context, 0);
+	  return;
+      }
+
+/* checking Topology tables */
+    tables[0] = "topology_master";
+    views[0] = 0;
+    sprintf (table_curves, "%scurves", prefix);
+    tables[1] = table_curves;
+    views[1] = 0;
+    sprintf (table_surfaces, "%ssurfaces", prefix);
+    tables[2] = table_surfaces;
+    views[2] = 0;
+    sprintf (table_nodes, "%snodes", prefix);
+    tables[3] = table_nodes;
+    views[3] = 0;
+    sprintf (table_edges, "%sedges", prefix);
+    tables[4] = table_edges;
+    views[4] = 0;
+    sprintf (table_faces, "%sfaces", prefix);
+    tables[5] = table_faces;
+    views[5] = 0;
+    sprintf (table_faces_edges, "%sfaces_edges", prefix);
+    tables[6] = table_faces_edges;
+    views[6] = 0;
+    sprintf (view_check_node_ids, "%snodes_check_dupl_ids", prefix);
+    tables[7] = view_check_node_ids;
+    views[7] = 1;
+    sprintf (view_check_node_geoms, "%snodes_check_dupl_geoms", prefix);
+    tables[8] = view_check_node_geoms;
+    views[8] = 1;
+    sprintf (view_check_edge_ids, "%sedges_check_dupl_ids", prefix);
+    tables[9] = view_check_edge_ids;
+    views[9] = 1;
+    sprintf (view_check_edge_geoms, "%sedges_check_dupl_geoms", prefix);
+    tables[10] = view_check_edge_geoms;
+    views[10] = 1;
+    sprintf (view_check_face_ids, "%sfaces_check_dupl_ids", prefix);
+    tables[11] = view_check_face_ids;
+    views[11] = 1;
+    sprintf (view_faces_resolved, "%sfaces_resolved", prefix);
+    tables[12] = view_faces_resolved;
+    views[12] = 1;
+    sprintf (view_curves_resolved, "%scurves_resolved", prefix);
+    tables[13] = view_curves_resolved;
+    views[13] = 1;
+    sprintf (view_surfaces_resolved, "%ssurfaces_resolved", prefix);
+    tables[14] = view_surfaces_resolved;
+    views[14] = 1;
+    tables[15] = NULL;
+    p_view = views;
+    p_tbl = tables;
+    while (*p_tbl != NULL)
+      {
+	  ok_table = check_topo_table (sqlite, *p_tbl, *p_view);
+	  if (ok_table)
+	    {
+		if (strcmp (*p_tbl, "topology_master") == 0)
+		    create_master = 0;
+		else
+		  {
+		      fprintf (stderr,
+			       "CreateTopologyTables() error: table '%s' already exists\n",
+			       *p_tbl);
+		      sqlite3_result_int (context, 0);
+		      return;
+		  }
+	    }
+	  p_tbl++;
+	  p_view++;
+      }
+
+/* creating Topology tables */
+    if (create_master)
+      {
+	  if (!create_topo_master (sqlite))
+	      goto error;
+      }
+    if (!create_topo_nodes (sqlite, table_nodes, srid, dims))
+	goto error;
+    if (!create_topo_edges (sqlite, table_edges, srid, dims))
+	goto error;
+    if (!create_topo_faces (sqlite, table_faces, srid, dims))
+	goto error;
+    if (!create_topo_faces_edges (sqlite, table_faces_edges, table_faces))
+	goto error;
+    if (!create_topo_curves (sqlite, table_curves, table_edges, srid, dims))
+	goto error;
+    if (!create_topo_surfaces (sqlite, table_surfaces, table_faces, srid, dims))
+	goto error;
+    if (!create_check_node_ids (sqlite, view_check_node_ids, table_nodes))
+	goto error;
+    if (!create_check_node_geoms (sqlite, view_check_node_geoms, table_nodes))
+	goto error;
+    if (!create_check_edge_ids (sqlite, view_check_edge_ids, table_edges))
+	goto error;
+    if (!create_check_edge_geoms (sqlite, view_check_edge_geoms, table_edges))
+	goto error;
+    if (!create_check_face_ids (sqlite, view_check_face_ids, table_faces))
+	goto error;
+    if (!create_faces_resolved
+	(sqlite, view_faces_resolved, table_faces, table_faces_edges,
+	 table_edges))
+	goto error;
+    if (!create_curves_resolved
+	(sqlite, view_curves_resolved, table_curves, table_edges))
+	goto error;
+    if (!create_surfaces_resolved
+	(sqlite, view_surfaces_resolved, table_surfaces, table_faces))
+	goto error;
+    if (!update_topo_master
+	(sqlite, table_nodes, table_edges, table_faces, table_faces_edges,
+	 table_curves, table_surfaces, view_check_node_ids,
+	 view_check_node_geoms, view_check_edge_ids, view_check_edge_geoms,
+	 view_check_face_ids, view_faces_resolved, view_curves_resolved,
+	 view_surfaces_resolved, srid, dims))
+	goto error;
+    updateSpatiaLiteHistory (sqlite, "*** TOPOLOGY ***", NULL,
+			     "Topology tables successfully created");
+    sqlite3_result_int (context, 1);
+    return;
+
+  error:
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static void
+fnct_UpdateLayerStatistics (sqlite3_context * context, int argc,
+			    sqlite3_value ** argv)
+{
+/* SQL function:
+/ UpdateLayerStatistics(table, column )
+/
+/ Updates LAYER_STATISTICS [based on Column and Table]
+/ returns 1 on success
+/ 0 on failure
+*/
+    const char *sql;
+    const unsigned char *table = NULL;
+    const unsigned char *column = NULL;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (argc >= 1)
+      {
+	  if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+	    {
+		fprintf (stderr,
+			 "UpdateLayerStatistics() error: argument 1 [table_name] is not of the String type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  table = sqlite3_value_text (argv[0]);
+      }
+    if (argc >= 2)
+      {
+	  if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+	    {
+		fprintf (stderr,
+			 "UpdateLayerStatistics() error: argument 2 [column_name] is not of the String type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  column = sqlite3_value_text (argv[1]);
+      }
+    if (!update_layer_statistics (sqlite, table, column))
+	goto error;
+    sqlite3_result_int (context, 1);
+    sql = "UpdateLayerStatistics";
+    if (table == NULL)
+	table = "ALL-TABLES";
+    if (column == NULL)
+	column = "ALL-GEOMETRY-COLUMNS";
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    sqlite3_result_int (context, 0);
+    return;
+}
+
+static gaiaPointPtr
+simplePoint (gaiaGeomCollPtr geo)
+{
+/* helper function
+/ if this GEOMETRY contains only one POINT, and no other elementary geometry
+/ the POINT address will be returned
+/ otherwise NULL will be returned
+*/
+    int cnt = 0;
+    gaiaPointPtr point;
+    gaiaPointPtr this_point = NULL;
+    if (!geo)
+	return NULL;
+    if (geo->FirstLinestring || geo->FirstPolygon)
+	return NULL;
+    point = geo->FirstPoint;
+    while (point)
+      {
+	  /* counting how many POINTs are there */
+	  cnt++;
+	  this_point = point;
+	  point = point->Next;
+      }
+    if (cnt == 1 && this_point)
+	return this_point;
+    return NULL;
+}
+
+static gaiaLinestringPtr
+simpleLinestring (gaiaGeomCollPtr geo)
+{
+/* helper function
+/ if this GEOMETRY contains only one LINESTRING, and no other elementary geometry
+/ the LINESTRING address will be returned
+/ otherwise NULL will be returned
+*/
+    int cnt = 0;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr this_line = NULL;
+    if (!geo)
+	return NULL;
+    if (geo->FirstPoint || geo->FirstPolygon)
+	return NULL;
+    line = geo->FirstLinestring;
+    while (line)
+      {
+	  /* counting how many LINESTRINGs are there */
+	  cnt++;
+	  this_line = line;
+	  line = line->Next;
+      }
+    if (cnt == 1 && this_line)
+	return this_line;
+    return NULL;
+}
+
+static gaiaPolygonPtr
+simplePolygon (gaiaGeomCollPtr geo)
+{
+/* helper function
+/ if this GEOMETRY contains only one POLYGON, and no other elementary geometry
+/ the POLYGON address will be returned
+/ otherwise NULL will be returned
+*/
+    int cnt = 0;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr this_polyg = NULL;
+    if (!geo)
+	return NULL;
+    if (geo->FirstPoint || geo->FirstLinestring)
+	return NULL;
+    polyg = geo->FirstPolygon;
+    while (polyg)
+      {
+	  /* counting how many POLYGONs are there */
+	  cnt++;
+	  this_polyg = polyg;
+	  polyg = polyg->Next;
+      }
+    if (cnt == 1 && this_polyg)
+	return this_polyg;
+    return NULL;
+}
+
+static void
+fnct_AsText (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsText(BLOB encoded geometry)
+/
+/ returns the corresponding WKT encoded value
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    gaiaOutBufferInitialize (&out_buf);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaOutWkt (&out_buf, geo);
+	  if (out_buf.Error || out_buf.Buffer == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = out_buf.WriteOffset;
+		sqlite3_result_text (context, out_buf.Buffer, len, free);
+		out_buf.Buffer = NULL;
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_AsWkt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsWkt(BLOB encoded geometry [, Integer precision])
+/
+/ returns the corresponding WKT encoded value
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    int precision = 15;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (argc == 2)
+      {
+	  if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	      precision = sqlite3_value_int (argv[1]);
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    gaiaOutBufferInitialize (&out_buf);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaOutWktStrict (&out_buf, geo, precision);
+	  if (out_buf.Error || out_buf.Buffer == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = out_buf.WriteOffset;
+		sqlite3_result_text (context, out_buf.Buffer, len, free);
+		out_buf.Buffer = NULL;
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+/*
+/
+/ AsSvg(geometry,[relative], [precision]) implementation
+/
+////////////////////////////////////////////////////////////
+/
+/ Author: Klaus Foerster klaus.foerster at svg.cc
+/ version 0.9. 2008 September 21
+ /
+ */
+
+static void
+fnct_AsSvg (sqlite3_context * context, int argc, sqlite3_value ** argv,
+	    int relative, int precision)
+{
+/* SQL function:
+   AsSvg(BLOB encoded geometry, [int relative], [int precision])
+   returns the corresponding SVG encoded value or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  /* make sure relative is 0 or 1 */
+	  if (relative > 0)
+	      relative = 1;
+	  else
+	      relative = 0;
+	  /* make sure precision is between 0 and 15 - default to 6 if absent */
+	  if (precision > GAIA_SVG_DEFAULT_MAX_PRECISION)
+	      precision = GAIA_SVG_DEFAULT_MAX_PRECISION;
+	  if (precision < 0)
+	      precision = 0;
+	  /* produce SVG-notation - actual work is done in gaiageo/gg_wkt.c */
+	  gaiaOutBufferInitialize (&out_buf);
+	  gaiaOutSvg (&out_buf, geo, relative, precision);
+	  if (out_buf.Error || out_buf.Buffer == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = out_buf.WriteOffset;
+		sqlite3_result_text (context, out_buf.Buffer, len, free);
+		out_buf.Buffer = NULL;
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_AsSvg1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* called without additional arguments */
+    fnct_AsSvg (context, argc, argv, GAIA_SVG_DEFAULT_RELATIVE,
+		GAIA_SVG_DEFAULT_PRECISION);
+}
+
+static void
+fnct_AsSvg2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* called with relative-switch */
+    if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	fnct_AsSvg (context, argc, argv, sqlite3_value_int (argv[1]),
+		    GAIA_SVG_DEFAULT_PRECISION);
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_AsSvg3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* called with relative-switch and precision-argument */
+    if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER
+	&& sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	fnct_AsSvg (context, argc, argv, sqlite3_value_int (argv[1]),
+		    sqlite3_value_int (argv[2]));
+    else
+	sqlite3_result_null (context);
+}
+
+/* END of Klaus Foerster AsSvg() implementation */
+
+static void
+proj_params (sqlite3 * sqlite, int srid, char *proj_params)
+{
+/* retrives the PROJ params from SPATIAL_SYS_REF table, if possible */
+    char sql[256];
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    int ret;
+    char *errMsg = NULL;
+    *proj_params = '\0';
+    sprintf (sql,
+	     "SELECT proj4text FROM spatial_ref_sys WHERE srid = %d", srid);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "unknown SRID: %d\t<%s>\n", srid, errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    for (i = 1; i <= rows; i++)
+	strcpy (proj_params, results[(i * columns)]);
+    if (*proj_params == '\0')
+	fprintf (stderr, "unknown SRID: %d\n", srid);
+    sqlite3_free_table (results);
+}
+
+#ifndef OMIT_PROJ		/* PROJ.4 is strictly required to support KML */
+static void
+fnct_AsKml1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsKml(BLOB encoded geometry [, Integer precision])
+/
+/ returns the corresponding 'bare geom' KML representation 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geo_wgs84;
+    char proj_from[2048];
+    char proj_to[2048];
+    int precision = 15;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (argc == 2)
+      {
+	  if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	      precision = sqlite3_value_int (argv[1]);
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    gaiaOutBufferInitialize (&out_buf);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (geo->Srid == 4326)
+	      ;			/* already WGS84 */
+	  else if (geo->Srid == -1)
+	    {
+		/* unknown SRID: giving up */
+		sqlite3_result_null (context);
+		goto stop;
+	    }
+	  else
+	    {
+		/* attempting to reproject into WGS84 */
+		proj_params (sqlite, geo->Srid, proj_from);
+		proj_params (sqlite, 4326, proj_to);
+		if (*proj_to == '\0' || *proj_from == '\0')
+		  {
+		      sqlite3_result_null (context);
+		      goto stop;
+		  }
+		geo_wgs84 = gaiaTransform (geo, proj_from, proj_to);
+		if (!geo_wgs84)
+		  {
+		      sqlite3_result_null (context);
+		      goto stop;
+		  }
+		/* ok, reprojection was successful */
+		gaiaFreeGeomColl (geo);
+		geo = geo_wgs84;
+	    }
+	  /* produce KML-notation - actual work is done in gaiageo/gg_wkt.c */
+	  gaiaOutBareKml (&out_buf, geo, precision);
+	  if (out_buf.Error || out_buf.Buffer == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = out_buf.WriteOffset;
+		sqlite3_result_text (context, out_buf.Buffer, len, free);
+		out_buf.Buffer = NULL;
+	    }
+      }
+  stop:
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_AsKml3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsKml(Anything name, Anything description, BLOB encoded geometry [, Integer precision])
+/
+/ returns the corresponding 'full' KML representation 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geo_wgs84;
+    sqlite3_int64 int_value;
+    double dbl_value;
+    const char *name;
+    const char *desc;
+    char *name_malloc = NULL;
+    char *desc_malloc = NULL;
+    char dummy[128];
+    char proj_from[2048];
+    char proj_to[2048];
+    int precision = 15;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    switch (sqlite3_value_type (argv[0]))
+      {
+      case SQLITE_TEXT:
+	  name = (const char *) sqlite3_value_text (argv[0]);
+	  len = strlen (name);
+	  name_malloc = malloc (len + 1);
+	  strcpy (name_malloc, name);
+	  name = name_malloc;
+	  break;
+      case SQLITE_INTEGER:
+	  int_value = sqlite3_value_int64 (argv[0]);
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
+	  sprintf (dummy, "%I64d", int_value);
+#else
+	  sprintf (dummy, "%lld", int_value);
+#endif
+	  len = strlen (dummy);
+	  name_malloc = malloc (len + 1);
+	  strcpy (name_malloc, dummy);
+	  name = name_malloc;
+	  break;
+      case SQLITE_FLOAT:
+	  dbl_value = sqlite3_value_double (argv[0]);
+	  sprintf (dummy, "%1.6f", dbl_value);
+	  len = strlen (dummy);
+	  name_malloc = malloc (len + 1);
+	  strcpy (name_malloc, dummy);
+	  name = name_malloc;
+	  break;
+      case SQLITE_BLOB:
+	  name = "BLOB";
+	  break;
+      default:
+	  name = "NULL";
+	  break;
+      };
+    switch (sqlite3_value_type (argv[1]))
+      {
+      case SQLITE_TEXT:
+	  desc = (const char *) sqlite3_value_text (argv[1]);
+	  len = strlen (desc);
+	  desc_malloc = malloc (len + 1);
+	  strcpy (desc_malloc, desc);
+	  desc = desc_malloc;
+	  break;
+      case SQLITE_INTEGER:
+	  int_value = sqlite3_value_int64 (argv[1]);
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
+	  sprintf (dummy, "%I64d", int_value);
+#else
+	  sprintf (dummy, "%lld", int_value);
+#endif
+	  len = strlen (dummy);
+	  desc_malloc = malloc (len + 1);
+	  strcpy (desc_malloc, dummy);
+	  desc = desc_malloc;
+	  break;
+      case SQLITE_FLOAT:
+	  dbl_value = sqlite3_value_double (argv[1]);
+	  sprintf (dummy, "%1.6f", dbl_value);
+	  len = strlen (dummy);
+	  desc_malloc = malloc (len + 1);
+	  strcpy (desc_malloc, dummy);
+	  desc = desc_malloc;
+	  break;
+      case SQLITE_BLOB:
+	  desc = "BLOB";
+	  break;
+      default:
+	  desc = "NULL";
+	  break;
+      };
+    gaiaOutBufferInitialize (&out_buf);
+    if (sqlite3_value_type (argv[2]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  goto stop;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[2]);
+    n_bytes = sqlite3_value_bytes (argv[2]);
+    if (argc == 4)
+      {
+	  if (sqlite3_value_type (argv[3]) == SQLITE_INTEGER)
+	      precision = sqlite3_value_int (argv[3]);
+	  else
+	    {
+		sqlite3_result_null (context);
+		goto stop;
+	    }
+      }
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (geo->Srid == 4326)
+	      ;			/* already WGS84 */
+	  else if (geo->Srid == -1)
+	    {
+		/* unknown SRID: giving up */
+		sqlite3_result_null (context);
+		goto stop;
+	    }
+	  else
+	    {
+		/* attempting to reproject into WGS84 */
+		proj_params (sqlite, geo->Srid, proj_from);
+		proj_params (sqlite, 4326, proj_to);
+		if (*proj_to == '\0' || *proj_from == '\0')
+		  {
+		      sqlite3_result_null (context);
+		      goto stop;
+		  }
+		geo_wgs84 = gaiaTransform (geo, proj_from, proj_to);
+		if (!geo_wgs84)
+		  {
+		      sqlite3_result_null (context);
+		      goto stop;
+		  }
+		/* ok, reprojection was successful */
+		gaiaFreeGeomColl (geo);
+		geo = geo_wgs84;
+	    }
+	  /* produce KML-notation - actual work is done in gaiageo/gg_wkt.c */
+	  gaiaOutFullKml (&out_buf, name, desc, geo, precision);
+	  if (out_buf.Error || out_buf.Buffer == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = out_buf.WriteOffset;
+		sqlite3_result_text (context, out_buf.Buffer, len, free);
+		out_buf.Buffer = NULL;
+	    }
+      }
+  stop:
+    gaiaFreeGeomColl (geo);
+    if (name_malloc)
+	free (name_malloc);
+    if (desc_malloc)
+	free (desc_malloc);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_AsKml (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsKml(Anything name, Anything description, BLOB encoded geometry)
+/     or
+/ AsKml(BLOB encoded geometry)
+/
+/ returns the corresponding KML representation 
+/ or NULL if any error is encountered
+*/
+    if (argc == 3 || argc == 4)
+	fnct_AsKml3 (context, argc, argv);
+    else
+	fnct_AsKml1 (context, argc, argv);
+}
+#endif /* end including PROJ.4 */
+
+static void
+fnct_AsGml (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsGml(BLOB encoded geometry)
+/    or
+/ AsGml(integer version, BLOB encoded geometry)
+/    or
+/ AsGml(integer version, BLOB encoded geometry, integer precision)
+/
+/ *version* may be 2 (GML 2.1.2) or 3 (GML 3.1.1)
+/ default *version*: 2
+/
+/ *precision* is the number of output decimal digits
+/ default *precision*: 15
+/
+/ returns the corresponding GML representation 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    int version = 2;
+    int precision = 15;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (argc == 3)
+      {
+	  if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+	      version = sqlite3_value_int (argv[0]);
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+	  if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+	  p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+	  n_bytes = sqlite3_value_bytes (argv[1]);
+	  if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	      precision = sqlite3_value_int (argv[2]);
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    else if (argc == 2)
+      {
+	  if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER
+	      && sqlite3_value_type (argv[1]) == SQLITE_BLOB)
+	    {
+		version = sqlite3_value_int (argv[0]);
+		p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+		n_bytes = sqlite3_value_bytes (argv[1]);
+	    }
+	  else if (sqlite3_value_type (argv[0]) == SQLITE_BLOB
+		   && sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	    {
+		p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+		n_bytes = sqlite3_value_bytes (argv[0]);
+		precision = sqlite3_value_int (argv[1]);
+	    }
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    else
+      {
+	  if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+	  p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+	  n_bytes = sqlite3_value_bytes (argv[0]);
+      }
+    gaiaOutBufferInitialize (&out_buf);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (geo->Srid == -1)
+	      sqlite3_result_null (context);	/* unknown SRID: giving up */
+	  else
+	    {
+		/* produce GML-notation - actual work is done in gaiageo/gg_wkt.c */
+		gaiaOutGml (&out_buf, version, precision, geo);
+		if (out_buf.Error || out_buf.Buffer == NULL)
+		    sqlite3_result_null (context);
+		else
+		  {
+		      len = out_buf.WriteOffset;
+		      sqlite3_result_text (context, out_buf.Buffer, len, free);
+		      out_buf.Buffer = NULL;
+		  }
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_AsGeoJSON (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsGeoJSON(BLOB encoded geometry)
+/    or
+/ AsGeoJSON(BLOB encoded geometry, integer precision)
+/    or
+/ AsGeoJSON(BLOB encoded geometry, integer precision, integer options)
+/
+/ *precision* is the number of output decimal digits
+/ default *precision*: 15
+/
+/ *options* may be one of the followings:
+/   0 = no options [default]
+/   1 = GeoJSON MBR
+/   2 = GeoJSON Short CRS (e.g EPSG:4326) 
+/   3 = 1 + 2 (Mbr + shortCrs)
+/   4 = GeoJSON Long CRS (e.g urn:ogc:def:crs:EPSG::4326)
+/   5 = 1 + 4 (Mbr + longCrs)
+/
+/ returns the corresponding GML representation 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    int precision = 15;
+    int options = 0;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (argc == 3)
+      {
+	  if (sqlite3_value_type (argv[0]) == SQLITE_BLOB
+	      && sqlite3_value_type (argv[1]) == SQLITE_INTEGER
+	      && sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	    {
+		p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+		n_bytes = sqlite3_value_bytes (argv[0]);
+		precision = sqlite3_value_int (argv[1]);
+		options = sqlite3_value_int (argv[2]);
+		if (options >= 1 && options <= 5)
+		    ;
+		else
+		    options = 0;
+	    }
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    else if (argc == 2)
+      {
+	  if (sqlite3_value_type (argv[0]) == SQLITE_BLOB
+	      && sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	    {
+		p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+		n_bytes = sqlite3_value_bytes (argv[0]);
+		precision = sqlite3_value_int (argv[1]);
+	    }
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    else
+      {
+	  if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+	  p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+	  n_bytes = sqlite3_value_bytes (argv[0]);
+      }
+    gaiaOutBufferInitialize (&out_buf);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (geo->Srid == -1)
+	      sqlite3_result_null (context);	/* unknown SRID: giving up */
+	  else
+	    {
+		/* produce GeoJSON-notation - actual work is done in gaiageo/gg_wkt.c */
+		gaiaOutGeoJSON (&out_buf, geo, precision, options);
+		if (out_buf.Error || out_buf.Buffer == NULL)
+		    sqlite3_result_null (context);
+		else
+		  {
+		      len = out_buf.WriteOffset;
+		      sqlite3_result_text (context, out_buf.Buffer, len, free);
+		      out_buf.Buffer = NULL;
+		  }
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_AsBinary (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsBinary(BLOB encoded geometry)
+/
+/ returns the corresponding WKB encoded value
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaToWkb (geo, &p_result, &len);
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_AsFGF (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsFGF(BLOB encoded geometry)
+/
+/ returns the corresponding FGF encoded value
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    int coord_dims;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  fprintf (stderr,
+		   "AsFGF() error: argument 2 [geom_coords] is not of the Integer type\n");
+	  sqlite3_result_null (context);
+	  return;
+      }
+    coord_dims = sqlite3_value_int (argv[1]);
+    if (coord_dims
+	== 0 || coord_dims == 1 || coord_dims == 2 || coord_dims == 3)
+	;
+    else
+      {
+	  fprintf (stderr,
+		   "AsFGF() error: argument 2 [geom_coords] out of range [0,1,2,3]\n");
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaToFgf (geo, &p_result, &len, coord_dims);
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_MakePoint1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MakePoint(double X, double Y)
+/
+/ builds a POINT 
+/ or NULL if any error is encountered
+*/
+    int len;
+    int int_value;
+    unsigned char *p_result = NULL;
+    double x;
+    double y;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaMakePoint (x, y, -1, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_MakePoint2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MakePoint(double X, double Y, int SRID)
+/
+/ builds a POINT 
+/ or NULL if any error is encountered
+*/
+    int len;
+    int int_value;
+    unsigned char *p_result = NULL;
+    double x;
+    double y;
+    int srid;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	srid = sqlite3_value_int (argv[2]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaMakePoint (x, y, srid, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+addGeomPointToDynamicLine (gaiaDynamicLinePtr dyn, gaiaGeomCollPtr geom)
+{
+/* appending a simple-Point Geometry to a Dynamic Line */
+    int pts;
+    int lns;
+    int pgs;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+
+    if (dyn == NULL)
+	return;
+    if (dyn->Error)
+	return;
+/* checking if GEOM simply is a POINT */
+    if (geom == NULL)
+      {
+	  dyn->Error = 1;
+	  return;
+      }
+    pts = 0;
+    lns = 0;
+    pgs = 0;
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  lns++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts == 1 && lns == 0 && pgs == 0)
+	;
+    else
+      {
+	  /* failure: not a simple POINT */
+	  dyn->Error = 1;
+	  return;
+      }
+
+    if (dyn->Srid != geom->Srid)
+      {
+	  /* failure: SRID mismatch */
+	  dyn->Error = 1;
+	  return;
+      }
+
+    switch (geom->FirstPoint->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  gaiaAppendPointZMToDynamicLine (dyn, geom->FirstPoint->X,
+					  geom->FirstPoint->Y,
+					  geom->FirstPoint->Z,
+					  geom->FirstPoint->M);
+	  break;
+      case GAIA_XY_Z:
+	  gaiaAppendPointZToDynamicLine (dyn, geom->FirstPoint->X,
+					 geom->FirstPoint->Y,
+					 geom->FirstPoint->Z);
+	  break;
+      case GAIA_XY_M:
+	  gaiaAppendPointMToDynamicLine (dyn, geom->FirstPoint->X,
+					 geom->FirstPoint->Y,
+					 geom->FirstPoint->M);
+	  break;
+      default:
+	  gaiaAppendPointToDynamicLine (dyn, geom->FirstPoint->X,
+					geom->FirstPoint->Y);
+	  break;
+      }
+}
+
+static void
+fnct_MakeLine_step (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MakeLine(BLOBencoded geom)
+/
+/ aggregate function - STEP
+/
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geom;
+    gaiaDynamicLinePtr *p;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geom = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geom)
+	return;
+    p = sqlite3_aggregate_context (context, sizeof (gaiaDynamicLinePtr));
+    if (!(*p))
+      {
+	  /* this is the first row */
+	  *p = gaiaAllocDynamicLine ();
+	  (*p)->Srid = geom->Srid;
+	  addGeomPointToDynamicLine (*p, geom);
+	  gaiaFreeGeomColl (geom);
+      }
+    else
+      {
+	  /* subsequent rows */
+	  addGeomPointToDynamicLine (*p, geom);
+	  gaiaFreeGeomColl (geom);
+      }
+}
+
+static gaiaGeomCollPtr
+geomFromDynamicLine (gaiaDynamicLinePtr dyn)
+{
+/* attempting to build a Geometry from a Dynamic Line */
+    gaiaGeomCollPtr geom = NULL;
+    gaiaLinestringPtr ln = NULL;
+    gaiaPointPtr pt;
+    int iv;
+    int count = 0;
+    int dims = GAIA_XY;
+
+    if (dyn == NULL)
+	return NULL;
+    if (dyn->Error)
+	return NULL;
+
+    pt = dyn->First;
+    while (pt)
+      {
+	  /* counting points and checking dims */
+	  count++;
+	  if (dims == GAIA_XY && pt->DimensionModel != GAIA_XY)
+	      dims = pt->DimensionModel;
+	  if (dims == GAIA_XY_Z
+	      && (pt->DimensionModel == GAIA_XY_M
+		  || pt->DimensionModel == GAIA_XY_Z_M))
+	      dims = GAIA_XY_Z_M;
+	  if (dims == GAIA_XY_M
+	      && (pt->DimensionModel == GAIA_XY_Z
+		  || pt->DimensionModel == GAIA_XY_Z_M))
+	      dims = GAIA_XY_Z_M;
+	  pt = pt->Next;
+      }
+    if (count == 0)
+	return NULL;
+
+    switch (dims)
+      {
+      case GAIA_XY_Z_M:
+	  geom = gaiaAllocGeomCollXYZM ();
+	  ln = gaiaAllocLinestringXYZM (count);
+	  break;
+      case GAIA_XY_Z:
+	  geom = gaiaAllocGeomCollXYZ ();
+	  ln = gaiaAllocLinestringXYZ (count);
+	  break;
+      case GAIA_XY_M:
+	  geom = gaiaAllocGeomCollXYM ();
+	  ln = gaiaAllocLinestringXYM (count);
+	  break;
+      default:
+	  geom = gaiaAllocGeomColl ();
+	  ln = gaiaAllocLinestring (count);
+	  break;
+      };
+
+    if (geom != NULL && ln != NULL)
+      {
+	  gaiaInsertLinestringInGeomColl (geom, ln);
+	  geom->Srid = dyn->Srid;
+      }
+    else
+      {
+	  if (geom)
+	      gaiaFreeGeomColl (geom);
+	  if (ln)
+	      gaiaFreeLinestring (ln);
+	  return NULL;
+      }
+
+    iv = 0;
+    pt = dyn->First;
+    while (pt)
+      {
+	  /* setting linestring points */
+	  if (dims == GAIA_XY_Z_M)
+	    {
+		gaiaSetPointXYZM (ln->Coords, iv, pt->X, pt->Y, pt->Z, pt->M);
+	    }
+	  else if (dims == GAIA_XY_Z)
+	    {
+		gaiaSetPointXYZ (ln->Coords, iv, pt->X, pt->Y, pt->Z);
+	    }
+	  else if (dims == GAIA_XY_M)
+	    {
+		gaiaSetPointXYM (ln->Coords, iv, pt->X, pt->Y, pt->M);
+	    }
+	  else
+	    {
+		gaiaSetPoint (ln->Coords, iv, pt->X, pt->Y);
+	    }
+	  iv++;
+	  pt = pt->Next;
+      }
+    return geom;
+}
+
+static void
+fnct_MakeLine_final (sqlite3_context * context)
+{
+/* SQL function:
+/ MakeLine(BLOBencoded geom)
+/
+/ aggregate function - FINAL
+/
+*/
+    gaiaGeomCollPtr result;
+    gaiaDynamicLinePtr *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    result = geomFromDynamicLine (*p);
+    gaiaFreeDynamicLine (*p);
+    if (!result)
+	sqlite3_result_null (context);
+    else
+      {
+	  /* builds the BLOB geometry to be returned */
+	  int len;
+	  unsigned char *p_result = NULL;
+	  gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+	  sqlite3_result_blob (context, p_result, len, free);
+	  gaiaFreeGeomColl (result);
+      }
+}
+
+static void
+fnct_MakeLine (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MakeLine(point-geometry geom1, point-geometry geom2)
+/
+/ builds a SEGMENT joining two POINTs 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_blob;
+    int n_bytes;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  goto stop;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1)
+      {
+	  sqlite3_result_null (context);
+	  goto stop;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  goto stop;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo2)
+      {
+	  sqlite3_result_null (context);
+	  goto stop;
+      }
+    gaiaMakeLine (geo1, geo2, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+  stop:
+    if (geo1)
+	gaiaFreeGeomColl (geo1);
+    if (geo2)
+	gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Collect_step (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Collect(BLOBencoded geom)
+/
+/ aggregate function - STEP
+/
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geom;
+    gaiaGeomCollPtr result;
+    gaiaGeomCollPtr *p;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geom = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geom)
+	return;
+    p = sqlite3_aggregate_context (context, sizeof (gaiaGeomCollPtr));
+    if (!(*p))
+      {
+	  /* this is the first row */
+	  *p = geom;
+      }
+    else
+      {
+	  /* subsequent rows */
+	  result = gaiaMergeGeometries (*p, geom);
+	  gaiaFreeGeomColl (*p);
+	  *p = result;
+	  gaiaFreeGeomColl (geom);
+      }
+}
+
+static void
+fnct_Collect_final (sqlite3_context * context)
+{
+/* SQL function:
+/ Collect(BLOBencoded geom)
+/
+/ aggregate function - FINAL
+/
+*/
+    gaiaGeomCollPtr result;
+    gaiaGeomCollPtr *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    result = *p;
+    if (!result)
+	sqlite3_result_null (context);
+    else if (gaiaIsEmpty (result))
+      {
+	  gaiaFreeGeomColl (result);
+	  sqlite3_result_null (context);
+      }
+    else
+      {
+	  /* builds the BLOB geometry to be returned */
+	  int len;
+	  unsigned char *p_result = NULL;
+	  gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+	  sqlite3_result_blob (context, p_result, len, free);
+	  gaiaFreeGeomColl (result);
+      }
+}
+
+static void
+fnct_Collect (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Collect(geometry geom1, geometry geom2)
+/
+/ merges two generic GEOMETRIES into a single one 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaMergeGeometries (geo1, geo2);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else if (gaiaIsEmpty (result))
+	    {
+		gaiaFreeGeomColl (result);
+		sqlite3_result_null (context);
+	    }
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+geom_from_text1 (sqlite3_context * context, int argc, sqlite3_value ** argv,
+		 short type)
+{
+/* SQL function:
+/ GeomFromText(WKT encoded geometry)
+/
+/ returns the current geometry by parsing WKT encoded string 
+/ or NULL if any error is encountered
+/
+/ if *type* is a negative value can accept any GEOMETRY CLASS
+/ otherwise only requests conforming with required CLASS are valid
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseWkt (text, type);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+geom_from_text2 (sqlite3_context * context, int argc, sqlite3_value ** argv,
+		 short type)
+{
+/* SQL function:
+/ GeomFromText(WKT encoded geometry, SRID)
+/
+/ returns the current geometry by parsing WKT encoded string 
+/ or NULL if any error is encountered
+/
+/ if *type* is a negative value can accept any GEOMETRY CLASS
+/ otherwise only requests conforming with required CLASS are valid
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseWkt (text, type);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = sqlite3_value_int (argv[1]);
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static int
+check_wkb (const unsigned char *wkb, int size, short type)
+{
+/* checking type coherency for WKB encoded GEOMETRY */
+    int little_endian;
+    int wkb_type;
+    int endian_arch = gaiaEndianArch ();
+    if (size < 5)
+	return 0;		/* too short to be a WKB */
+    if (*(wkb + 0) == 0x01)
+	little_endian = GAIA_LITTLE_ENDIAN;
+    else if (*(wkb + 0) == 0x00)
+	little_endian = GAIA_BIG_ENDIAN;
+    else
+	return 0;		/* illegal byte ordering; neither BIG-ENDIAN nor LITTLE-ENDIAN */
+    wkb_type = gaiaImport32 (wkb + 1, little_endian, endian_arch);
+    if (wkb_type == GAIA_POINT || wkb_type == GAIA_LINESTRING
+	|| wkb_type == GAIA_POLYGON || wkb_type == GAIA_MULTIPOINT
+	|| wkb_type == GAIA_MULTILINESTRING || wkb_type == GAIA_MULTIPOLYGON
+	|| wkb_type == GAIA_GEOMETRYCOLLECTION || wkb_type == GAIA_POINTZ
+	|| wkb_type == GAIA_LINESTRINGZ || wkb_type == GAIA_POLYGONZ
+	|| wkb_type == GAIA_MULTIPOINTZ || wkb_type == GAIA_MULTILINESTRINGZ
+	|| wkb_type == GAIA_MULTIPOLYGONZ
+	|| wkb_type == GAIA_GEOMETRYCOLLECTIONZ || wkb_type == GAIA_POINTM
+	|| wkb_type == GAIA_LINESTRINGM || wkb_type == GAIA_POLYGONM
+	|| wkb_type == GAIA_MULTIPOINTM || wkb_type == GAIA_MULTILINESTRINGM
+	|| wkb_type == GAIA_MULTIPOLYGONM
+	|| wkb_type == GAIA_GEOMETRYCOLLECTIONM || wkb_type == GAIA_POINTZM
+	|| wkb_type == GAIA_LINESTRINGZM || wkb_type == GAIA_POLYGONZM
+	|| wkb_type == GAIA_MULTIPOINTZM || wkb_type == GAIA_MULTILINESTRINGZM
+	|| wkb_type == GAIA_MULTIPOLYGONZM
+	|| wkb_type == GAIA_GEOMETRYCOLLECTIONZM)
+	;
+    else
+	return 0;		/* illegal GEOMETRY CLASS */
+    if (type < 0)
+	;			/* no restrinction about GEOMETRY CLASS TYPE */
+    else
+      {
+	  if (wkb_type != type)
+	      return 0;		/* invalid CLASS TYPE for request */
+      }
+    return 1;
+}
+
+static void
+geom_from_wkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv,
+		short type)
+{
+/* SQL function:
+/ GeomFromWKB(WKB encoded geometry)
+/
+/ returns the current geometry by parsing a WKB encoded blob 
+/ or NULL if any error is encountered
+/
+/ if *type* is a negative value can accept any GEOMETRY CLASS
+/ otherwise only requests conforming with required CLASS are valid
+*/
+    int len;
+    int n_bytes;
+    unsigned char *p_result = NULL;
+    const unsigned char *wkb;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    wkb = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!check_wkb (wkb, n_bytes, type))
+	return;
+    geo = gaiaFromWkb (wkb, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+geom_from_wkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv,
+		short type)
+{
+/* SQL function:
+/ GeomFromWKB(WKB encoded geometry, SRID)
+/
+/ returns the current geometry by parsing a WKB encoded blob
+/ or NULL if any error is encountered
+/
+/ if *type* is a negative value can accept any GEOMETRY CLASS
+/ otherwise only requests conforming with required CLASS are valid
+*/
+    int len;
+    int n_bytes;
+    unsigned char *p_result = NULL;
+    const unsigned char *wkb;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    wkb = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!check_wkb (wkb, n_bytes, type))
+	return;
+    geo = gaiaFromWkb (wkb, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = sqlite3_value_int (argv[1]);
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_GeometryFromFGF1 (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromFGF(FGF encoded geometry)
+/
+/ returns the current geometry by parsing an FGF encoded blob 
+/ or NULL if any error is encountered
+/
+/ if *type* is a negative value can accept any GEOMETRY CLASS
+/ otherwise only requests conforming with required CLASS are valid
+*/
+    int len;
+    int n_bytes;
+    unsigned char *p_result = NULL;
+    const unsigned char *fgf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    fgf = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromFgf (fgf, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_GeometryFromFGF2 (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromFGF(FGF encoded geometry, SRID)
+/
+/ returns the current geometry by parsing an FGF encoded string 
+/ or NULL if any error is encountered
+/
+/ if *type* is a negative value can accept any GEOMETRY CLASS
+/ otherwise only requests conforming with required CLASS are valid
+*/
+    int len;
+    int n_bytes;
+    unsigned char *p_result = NULL;
+    const unsigned char *fgf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    fgf = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromFgf (fgf, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = sqlite3_value_int (argv[1]);
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+/*
+/ the following functions simply readdress the request to geom_from_text?()
+/ setting the appropriate GEOMETRY CLASS TYPE
+*/
+
+static void
+fnct_GeomFromText1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) -1);
+}
+
+static void
+fnct_GeomFromText2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) -1);
+}
+
+static void
+fnct_GeomCollFromText1 (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) GAIA_GEOMETRYCOLLECTION);
+}
+
+static void
+fnct_GeomCollFromText2 (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) GAIA_GEOMETRYCOLLECTION);
+}
+
+static void
+fnct_LineFromText1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) GAIA_LINESTRING);
+}
+
+static void
+fnct_LineFromText2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) GAIA_LINESTRING);
+}
+
+static void
+fnct_PointFromText1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) GAIA_POINT);
+}
+
+static void
+fnct_PointFromText2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) GAIA_POINT);
+}
+
+static void
+fnct_PolyFromText1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) GAIA_POLYGON);
+}
+
+static void
+fnct_PolyFromText2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) GAIA_POLYGON);
+}
+
+static void
+fnct_MLineFromText1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) GAIA_MULTILINESTRING);
+}
+
+static void
+fnct_MLineFromText2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) GAIA_MULTILINESTRING);
+}
+
+static void
+fnct_MPointFromText1 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) GAIA_MULTIPOINT);
+}
+
+static void
+fnct_MPointFromText2 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) GAIA_MULTIPOINT);
+}
+
+static void
+fnct_MPolyFromText1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text1 (context, argc, argv, (short) GAIA_MULTIPOLYGON);
+}
+
+static void
+fnct_MPolyFromText2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_text2 (context, argc, argv, (short) GAIA_MULTIPOLYGON);
+}
+
+/*
+/ the following functions simply readdress the request to geom_from_wkb?()
+/ setting the appropriate GEOMETRY CLASS TYPE
+*/
+
+static void
+fnct_GeomFromWkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) -1);
+}
+
+static void
+fnct_GeomFromWkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) -1);
+}
+
+static void
+fnct_GeomCollFromWkb1 (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) GAIA_GEOMETRYCOLLECTION);
+}
+
+static void
+fnct_GeomCollFromWkb2 (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) GAIA_GEOMETRYCOLLECTION);
+}
+
+static void
+fnct_LineFromWkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) GAIA_LINESTRING);
+}
+
+static void
+fnct_LineFromWkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) GAIA_LINESTRING);
+}
+
+static void
+fnct_PointFromWkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) GAIA_POINT);
+}
+
+static void
+fnct_PointFromWkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) GAIA_POINT);
+}
+
+static void
+fnct_PolyFromWkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) GAIA_POLYGON);
+}
+
+static void
+fnct_PolyFromWkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) GAIA_POLYGON);
+}
+
+static void
+fnct_MLineFromWkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) GAIA_MULTILINESTRING);
+}
+
+static void
+fnct_MLineFromWkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) GAIA_MULTILINESTRING);
+}
+
+static void
+fnct_MPointFromWkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) GAIA_MULTIPOINT);
+}
+
+static void
+fnct_MPointFromWkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) GAIA_MULTIPOINT);
+}
+
+static void
+fnct_MPolyFromWkb1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb1 (context, argc, argv, (short) GAIA_MULTIPOLYGON);
+}
+
+static void
+fnct_MPolyFromWkb2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    geom_from_wkb2 (context, argc, argv, (short) GAIA_MULTIPOLYGON);
+}
+
+static void
+fnct_CompressGeometry (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ CompressGeometry(BLOB encoded geometry)
+/
+/ returns a COMPRESSED geometry [if a valid Geometry was supplied]
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaToCompressedBlobWkb (geo, &p_result, &len);
+	  sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_UncompressGeometry (sqlite3_context * context, int argc,
+			 sqlite3_value ** argv)
+{
+/* SQL function:
+/ UncompressGeometry(BLOB encoded geometry)
+/
+/ returns an UNCOMPRESSED geometry [if a valid Geometry was supplied] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+	  sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_SanitizeGeometry (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ SanitizeGeometry(BLOB encoded geometry)
+/
+/ returns a SANITIZED geometry [if a valid Geometry was supplied]
+/ or NULL in any other case
+/
+/ Sanitizing includes:
+/ - repeated vertices suppression
+/ - enforcing ring closure
+/
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr sanitized = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  sanitized = gaiaSanitize (geo);
+	  gaiaToSpatiaLiteBlobWkb (sanitized, &p_result, &len);
+	  sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaFreeGeomColl (sanitized);
+}
+
+static void
+cast_count (gaiaGeomCollPtr geom, int *pts, int *lns, int *pgs)
+{
+/* counting elementary geometries */
+    int n_pts = 0;
+    int n_lns = 0;
+    int n_pgs = 0;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    if (geom)
+      {
+	  pt = geom->FirstPoint;
+	  while (pt)
+	    {
+		n_pts++;
+		pt = pt->Next;
+	    }
+	  ln = geom->FirstLinestring;
+	  while (ln)
+	    {
+		n_lns++;
+		ln = ln->Next;
+	    }
+	  pg = geom->FirstPolygon;
+	  while (pg)
+	    {
+		n_pgs++;
+		pg = pg->Next;
+	    }
+      }
+    *pts = n_pts;
+    *lns = n_lns;
+    *pgs = n_pgs;
+}
+
+static void
+fnct_CastToPoint (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToPoint(BLOB encoded geometry)
+/
+/ returns a POINT-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts == 1 && lns == 0 && pgs == 0)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_POINT;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToLinestring (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToLinestring(BLOB encoded geometry)
+/
+/ returns a LINESTRING-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts == 0 && lns == 1 && pgs == 0)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_LINESTRING;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToPolygon (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToPolygon(BLOB encoded geometry)
+/
+/ returns a POLYGON-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts == 0 && lns == 0 && pgs == 1)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_POLYGON;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToMultiPoint (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToMultiPoint(BLOB encoded geometry)
+/
+/ returns a MULTIPOINT-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts >= 1 && lns == 0 && pgs == 0)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_MULTIPOINT;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToMultiLinestring (sqlite3_context * context, int argc,
+			    sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToMultiLinestring(BLOB encoded geometry)
+/
+/ returns a MULTILINESTRING-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts == 0 && lns >= 1 && pgs == 0)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_MULTILINESTRING;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToMultiPolygon (sqlite3_context * context, int argc,
+			 sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToMultiPolygon(BLOB encoded geometry)
+/
+/ returns a MULTIPOLYGON-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts == 0 && lns == 0 && pgs >= 1)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_MULTIPOLYGON;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToGeometryCollection (sqlite3_context * context, int argc,
+			       sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToGeometryCollection(BLOB encoded geometry)
+/
+/ returns a GEOMETRYCOLLECTION-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts >= 1 || lns >= 1 || pgs >= 1)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToMulti (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToMulti(BLOB encoded geometry)
+/
+/ returns a MULTIPOINT, MULTILINESTRING, MULTIPOLYGON or
+/ GEOMETRYCOLLECTION-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts >= 1 || lns >= 1 || pgs >= 1)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		if (pts >= 1 && lns == 0 && pgs == 0)
+		    geom2->DeclaredType = GAIA_MULTIPOINT;
+		else if (pts == 0 && lns >= 1 && pgs == 0)
+		    geom2->DeclaredType = GAIA_MULTILINESTRING;
+		else if (pts == 0 && lns == 0 && pgs >= 1)
+		    geom2->DeclaredType = GAIA_MULTIPOLYGON;
+		else
+		    geom2->DeclaredType = GAIA_GEOMETRYCOLLECTION;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToSingle (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToSingle(BLOB encoded geometry)
+/
+/ returns a POINT, LINESTRING or POLYGON-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    int ok;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  ok = 0;
+	  if (pts == 1 && lns == 0 && pgs == 0)
+	      ok = 1;
+	  if (pts == 0 && lns == 1 && pgs == 0)
+	      ok = 1;
+	  if (pts == 0 && lns == 0 && pgs == 1)
+	      ok = 1;
+	  if (ok)
+	    {
+		geom2 = gaiaCloneGeomColl (geo);
+		geom2->Srid = geo->Srid;
+		if (pts == 1)
+		    geom2->DeclaredType = GAIA_POINT;
+		else if (lns == 1)
+		    geom2->DeclaredType = GAIA_LINESTRING;
+		else
+		    geom2->DeclaredType = GAIA_POLYGON;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToXY (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToXY(BLOB encoded geometry)
+/
+/ returns an XY-dimension Geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  geom2 = gaiaCastGeomCollToXY (geo);
+	  if (geom2)
+	    {
+		geom2->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToXYZ (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToXY(BLOB encoded geometry)
+/
+/ returns an XY-dimension Geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  geom2 = gaiaCastGeomCollToXYZ (geo);
+	  if (geom2)
+	    {
+		geom2->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToXYM (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToXY(BLOB encoded geometry)
+/
+/ returns an XYM-dimension Geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  geom2 = gaiaCastGeomCollToXYM (geo);
+	  if (geom2)
+	    {
+		geom2->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CastToXYZM (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CastToXY(BLOB encoded geometry)
+/
+/ returns an XYZM-dimension Geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  geom2 = gaiaCastGeomCollToXYZM (geo);
+	  if (geom2)
+	    {
+		geom2->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_ExtractMultiPoint (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ ExtractMultiPoint(BLOB encoded geometry)
+/
+/ returns a MULTIPOINT-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pts >= 1)
+	    {
+		geom2 = gaiaCloneGeomCollPoints (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_MULTIPOINT;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_ExtractMultiLinestring (sqlite3_context * context, int argc,
+			     sqlite3_value ** argv)
+{
+/* SQL function:
+/ ExtractMultiLinestring(BLOB encoded geometry)
+/
+/ returns a MULTILINESTRING-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (lns >= 1)
+	    {
+		geom2 = gaiaCloneGeomCollLinestrings (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_MULTILINESTRING;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_ExtractMultiPolygon (sqlite3_context * context, int argc,
+			  sqlite3_value ** argv)
+{
+/* SQL function:
+/ ExtractMultiPolygon(BLOB encoded geometry)
+/
+/ returns a MULTIPOLYGON-type geometry [if conversion is possible] 
+/ or NULL in any other case
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    int pts;
+    int lns;
+    int pgs;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  cast_count (geo, &pts, &lns, &pgs);
+	  if (pgs >= 1)
+	    {
+		geom2 = gaiaCloneGeomCollPolygons (geo);
+		geom2->Srid = geo->Srid;
+		geom2->DeclaredType = GAIA_MULTIPOLYGON;
+		gaiaToSpatiaLiteBlobWkb (geom2, &p_result, &len);
+		gaiaFreeGeomColl (geom2);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Dimension (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Dimension(BLOB encoded geometry)
+/
+/ returns:
+/ 0 if geometry is a POINT or MULTIPOINT
+/ 1 if geometry is a LINESTRING or MULTILINESTRING
+/ 2 if geometry is a POLYGON or MULTIPOLYGON
+/ 0, 1, 2, for GEOMETRYCOLLECTIONS according to geometries contained inside
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int dim;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  dim = gaiaDimension (geo);
+	  sqlite3_result_int (context, dim);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CoordDimension (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CoordDimension(BLOB encoded geometry)
+/
+/ returns:
+/ 'XY', 'XYM', 'XYZ', 'XYZM'
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    char *p_dim = NULL;
+    char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (geo->DimensionModel == GAIA_XY)
+	      p_dim = "XY";
+	  else if (geo->DimensionModel == GAIA_XY_Z)
+	      p_dim = "XYZ";
+	  else if (geo->DimensionModel == GAIA_XY_M)
+	      p_dim = "XYM";
+	  else if (geo->DimensionModel == GAIA_XY_Z_M)
+	      p_dim = "XYZM";
+	  if (p_dim)
+	    {
+		len = strlen (p_dim);
+		p_result = malloc (len + 1);
+		strcpy (p_result, p_dim);
+	    }
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = strlen (p_result);
+		sqlite3_result_text (context, p_result, len, free);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_GeometryType (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeometryType(BLOB encoded geometry)
+/
+/ returns the class for current geometry:
+/ 'POINT' or 'MULTIPOINT' [Z, M, ZM]
+/ 'LINESTRING' or 'MULTILINESTRING' [Z, M, ZM]
+/ 'POLYGON' or 'MULTIPOLYGON' [Z, M, ZM]
+/ 'GEOMETRYCOLLECTION'  [Z, M, ZM]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    int type;
+    char *p_type = NULL;
+    char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  type = gaiaGeometryType (geo);
+	  switch (type)
+	    {
+	    case GAIA_POINT:
+		p_type = "POINT";
+		break;
+	    case GAIA_POINTZ:
+		p_type = "POINT Z";
+		break;
+	    case GAIA_POINTM:
+		p_type = "POINT M";
+		break;
+	    case GAIA_POINTZM:
+		p_type = "POINT ZM";
+		break;
+	    case GAIA_MULTIPOINT:
+		p_type = "MULTIPOINT";
+		break;
+	    case GAIA_MULTIPOINTZ:
+		p_type = "MULTIPOINT Z";
+		break;
+	    case GAIA_MULTIPOINTM:
+		p_type = "MULTIPOINT M";
+		break;
+	    case GAIA_MULTIPOINTZM:
+		p_type = "MULTIPOINT ZM";
+		break;
+	    case GAIA_LINESTRING:
+	    case GAIA_COMPRESSED_LINESTRING:
+		p_type = "LINESTRING";
+		break;
+	    case GAIA_LINESTRINGZ:
+	    case GAIA_COMPRESSED_LINESTRINGZ:
+		p_type = "LINESTRING Z";
+		break;
+	    case GAIA_LINESTRINGM:
+	    case GAIA_COMPRESSED_LINESTRINGM:
+		p_type = "LINESTRING M";
+		break;
+	    case GAIA_LINESTRINGZM:
+	    case GAIA_COMPRESSED_LINESTRINGZM:
+		p_type = "LINESTRING ZM";
+		break;
+	    case GAIA_MULTILINESTRING:
+		p_type = "MULTILINESTRING";
+		break;
+	    case GAIA_MULTILINESTRINGZ:
+		p_type = "MULTILINESTRING Z";
+		break;
+	    case GAIA_MULTILINESTRINGM:
+		p_type = "MULTILINESTRING M";
+		break;
+	    case GAIA_MULTILINESTRINGZM:
+		p_type = "MULTILINESTRING ZM";
+		break;
+	    case GAIA_POLYGON:
+	    case GAIA_COMPRESSED_POLYGON:
+		p_type = "POLYGON";
+		break;
+	    case GAIA_POLYGONZ:
+	    case GAIA_COMPRESSED_POLYGONZ:
+		p_type = "POLYGON Z";
+		break;
+	    case GAIA_POLYGONM:
+	    case GAIA_COMPRESSED_POLYGONM:
+		p_type = "POLYGON M";
+		break;
+	    case GAIA_POLYGONZM:
+	    case GAIA_COMPRESSED_POLYGONZM:
+		p_type = "POLYGON ZM";
+		break;
+	    case GAIA_MULTIPOLYGON:
+		p_type = "MULTIPOLYGON";
+		break;
+	    case GAIA_MULTIPOLYGONZ:
+		p_type = "MULTIPOLYGON Z";
+		break;
+	    case GAIA_MULTIPOLYGONM:
+		p_type = "MULTIPOLYGON M";
+		break;
+	    case GAIA_MULTIPOLYGONZM:
+		p_type = "MULTIPOLYGON ZM";
+		break;
+	    case GAIA_GEOMETRYCOLLECTION:
+		p_type = "GEOMETRYCOLLECTION";
+		break;
+	    case GAIA_GEOMETRYCOLLECTIONZ:
+		p_type = "GEOMETRYCOLLECTION Z";
+		break;
+	    case GAIA_GEOMETRYCOLLECTIONM:
+		p_type = "GEOMETRYCOLLECTION M";
+		break;
+	    case GAIA_GEOMETRYCOLLECTIONZM:
+		p_type = "GEOMETRYCOLLECTION ZM";
+		break;
+	    };
+	  if (p_type)
+	    {
+		len = strlen (p_type);
+		p_result = malloc (len + 1);
+		strcpy (p_result, p_type);
+	    }
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = strlen (p_result);
+		sqlite3_result_text (context, p_result, len, free);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_GeometryAliasType (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeometryAliasType(BLOB encoded geometry)
+/
+/ returns the alias-class for current geometry:
+/ 'POINT'
+/ 'LINESTRING'
+/ 'POLYGON'
+/ 'MULTIPOINT'
+/ 'MULTILINESTRING'
+/ 'MULTIPOLYGON'
+/ 'GEOMETRYCOLLECTION' 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    int type;
+    char *p_type = NULL;
+    char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  type = gaiaGeometryAliasType (geo);
+	  switch (type)
+	    {
+	    case GAIA_POINT:
+		p_type = "POINT";
+		break;
+	    case GAIA_MULTIPOINT:
+		p_type = "MULTIPOINT";
+		break;
+	    case GAIA_LINESTRING:
+		p_type = "LINESTRING";
+		break;
+	    case GAIA_MULTILINESTRING:
+		p_type = "MULTILINESTRING";
+		break;
+	    case GAIA_POLYGON:
+		p_type = "POLYGON";
+		break;
+	    case GAIA_MULTIPOLYGON:
+		p_type = "MULTIPOLYGON";
+		break;
+	    case GAIA_GEOMETRYCOLLECTION:
+		p_type = "GEOMETRYCOLLECTION";
+		break;
+	    };
+	  if (p_type)
+	    {
+		len = strlen (p_type);
+		p_result = malloc (len + 1);
+		strcpy (p_result, p_type);
+	    }
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = strlen (p_result);
+		sqlite3_result_text (context, p_result, len, free);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_SridFromAuthCRS (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ SridFromAuthCRS(auth_name, auth_srid)
+/
+/ returns the SRID
+/ or NULL if any error is encountered
+*/
+    const unsigned char *auth_name;
+    int auth_srid;
+    int srid = -1;
+    char sql[1024];
+    char sql2[1024];
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *err_msg = NULL;
+    int ret;
+    int i;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    auth_name = sqlite3_value_text (argv[0]);
+    auth_srid = sqlite3_value_int (argv[1]);
+
+    sprintf (sql, "SELECT srid FROM spatial_ref_sys ");
+    sprintf (sql2, "WHERE auth_name LIKE '%s' AND auth_srid = %d", auth_name,
+	     auth_srid);
+    strcat (sql, sql2);
+    ret =
+	sqlite3_get_table (sqlite, sql, &results, &n_rows, &n_columns,
+			   &err_msg);
+    if (ret != SQLITE_OK)
+	goto done;
+    if (n_rows >= 1)
+      {
+	  for (i = 1; i <= n_rows; i++)
+	      srid = atoi (results[(i * n_columns) + 0]);
+      }
+    sqlite3_free_table (results);
+  done:
+    sqlite3_result_int (context, srid);
+}
+
+static void
+fnct_SRID (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Srid(BLOB encoded geometry)
+/
+/ returns the SRID
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_int (context, geo->Srid);
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_SetSRID (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ SetSrid(BLOBencoded geometry, srid)
+/
+/ returns a new geometry that is the original one received, but with the new SRID [no coordinates translation is applied]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    int srid;
+    unsigned char *p_result = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	srid = sqlite3_value_int (argv[1]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  geo->Srid = srid;
+	  gaiaToSpatiaLiteBlobWkb (geo, &p_result, &n_bytes);
+	  sqlite3_result_blob (context, p_result, n_bytes, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_IsEmpty (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ IsEmpty(BLOB encoded geometry)
+/
+/ returns:
+/ 1 if this geometry contains no elementary geometries
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_int (context, 1);
+    else
+	sqlite3_result_int (context, gaiaIsEmpty (geo));
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Envelope (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Envelope(BLOB encoded geometry)
+/
+/ returns the MBR for current geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr bbox;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr rect;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (gaiaIsEmpty (geo))
+	      sqlite3_result_null (context);
+	  else
+	    {
+		gaiaMbrGeometry (geo);
+		bbox = gaiaAllocGeomColl ();
+		bbox->Srid = geo->Srid;
+		polyg = gaiaAddPolygonToGeomColl (bbox, 5, 0);
+		rect = polyg->Exterior;
+		gaiaSetPoint (rect->Coords, 0, geo->MinX, geo->MinY);	/* vertex # 1 */
+		gaiaSetPoint (rect->Coords, 1, geo->MaxX, geo->MinY);	/* vertex # 2 */
+		gaiaSetPoint (rect->Coords, 2, geo->MaxX, geo->MaxY);	/* vertex # 3 */
+		gaiaSetPoint (rect->Coords, 3, geo->MinX, geo->MaxY);	/* vertex # 4 */
+		gaiaSetPoint (rect->Coords, 4, geo->MinX, geo->MinY);	/* vertex # 5 [same as vertex # 1 to close the polygon] */
+		gaiaToSpatiaLiteBlobWkb (bbox, &p_result, &len);
+		gaiaFreeGeomColl (bbox);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+build_filter_mbr (sqlite3_context * context, int argc,
+		  sqlite3_value ** argv, int mode)
+{
+/* SQL functions:
+/ BuildMbrFilter(double X1, double Y1, double X2, double Y2)
+/ FilterMBRWithin(double X1, double Y1, double X2, double Y2)
+/ FilterMBRContain(double X1, double Y1, double X2, double Y2)
+/ FilterMBRIntersects(double X1, double Y1, double X2, double Y2)
+/
+/ builds a generic filter for MBR from two points (identifying a rectangle's diagonal) 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    double x1;
+    double y1;
+    double x2;
+    double y2;
+    int int_value;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x1 = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x1 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y1 = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y1 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	x2 = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  x2 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[3]) == SQLITE_FLOAT)
+	y2 = sqlite3_value_double (argv[3]);
+    else if (sqlite3_value_type (argv[3]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[3]);
+	  y2 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaBuildFilterMbr (x1, y1, x2, y2, mode, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+}
+
+/*
+/ the following functions simply readdress the request to build_filter_mbr()
+/ setting the appropriate MODe
+*/
+
+static void
+fnct_BuildMbrFilter (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    build_filter_mbr (context, argc, argv, GAIA_FILTER_MBR_DECLARE);
+}
+
+static void
+fnct_FilterMbrWithin (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+    build_filter_mbr (context, argc, argv, GAIA_FILTER_MBR_WITHIN);
+}
+
+static void
+fnct_FilterMbrContains (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+    build_filter_mbr (context, argc, argv, GAIA_FILTER_MBR_CONTAINS);
+}
+
+static void
+fnct_FilterMbrIntersects (sqlite3_context * context, int argc,
+			  sqlite3_value ** argv)
+{
+    build_filter_mbr (context, argc, argv, GAIA_FILTER_MBR_INTERSECTS);
+}
+
+static void
+fnct_BuildMbr1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ BuildMBR(double X1, double Y1, double X2, double Y2)
+/
+/ builds an MBR from two points (identifying a rectangle's diagonal) 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    double x1;
+    double y1;
+    double x2;
+    double y2;
+    int int_value;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x1 = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x1 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y1 = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y1 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	x2 = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  x2 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[3]) == SQLITE_FLOAT)
+	y2 = sqlite3_value_double (argv[3]);
+    else if (sqlite3_value_type (argv[3]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[3]);
+	  y2 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaBuildMbr (x1, y1, x2, y2, -1, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_BuildMbr2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ BuildMBR(double X1, double Y1, double X2, double Y2, int SRID)
+/
+/ builds an MBR from two points (identifying a rectangle's diagonal) 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    double x1;
+    double y1;
+    double x2;
+    double y2;
+    int int_value;
+    int srid;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x1 = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x1 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y1 = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y1 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	x2 = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  x2 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[3]) == SQLITE_FLOAT)
+	y2 = sqlite3_value_double (argv[3]);
+    else if (sqlite3_value_type (argv[3]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[3]);
+	  y2 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[4]) == SQLITE_INTEGER)
+	srid = sqlite3_value_int (argv[4]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaBuildMbr (x1, y1, x2, y2, srid, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_BuildCircleMbr1 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ BuildCircleMBR(double X, double Y, double radius)
+/
+/ builds an MBR from two points (identifying a rectangle's diagonal) 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    double x;
+    double y;
+    double radius;
+    int int_value;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	radius = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  radius = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaBuildCircleMbr (x, y, radius, -1, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_BuildCircleMbr2 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ BuildCircleMBR(double X, double Y, double radius, int SRID)
+/
+/ builds an MBR from two points (identifying a rectangle's diagonal) 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    double x;
+    double y;
+    double radius;
+    int int_value;
+    int srid;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	radius = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  radius = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[3]) == SQLITE_INTEGER)
+	srid = sqlite3_value_int (argv[3]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaBuildCircleMbr (x, y, radius, srid, &p_result, &len);
+    if (!p_result)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_Extent_step (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Extent(BLOBencoded geom)
+/
+/ aggregate function - STEP
+/
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geom;
+    double **p;
+    double *max_min;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geom = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geom)
+	return;
+    gaiaMbrGeometry (geom);
+    p = sqlite3_aggregate_context (context, sizeof (double **));
+    if (!(*p))
+      {
+	  /* this is the first row */
+	  max_min = malloc (sizeof (double) * 4);
+	  *(max_min + 0) = geom->MinX;
+	  *(max_min + 1) = geom->MinY;
+	  *(max_min + 2) = geom->MaxX;
+	  *(max_min + 3) = geom->MaxY;
+	  *p = max_min;
+      }
+    else
+      {
+	  /* subsequent rows */
+	  max_min = *p;
+	  if (geom->MinX < *(max_min + 0))
+	      *(max_min + 0) = geom->MinX;
+	  if (geom->MinY < *(max_min + 1))
+	      *(max_min + 1) = geom->MinY;
+	  if (geom->MaxX > *(max_min + 2))
+	      *(max_min + 2) = geom->MaxX;
+	  if (geom->MaxY > *(max_min + 3))
+	      *(max_min + 3) = geom->MaxY;
+      }
+    gaiaFreeGeomColl (geom);
+}
+
+static void
+fnct_Extent_final (sqlite3_context * context)
+{
+/* SQL function:
+/ Extent(BLOBencoded geom)
+/
+/ aggregate function - FINAL
+/
+*/
+    gaiaGeomCollPtr result;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr rect;
+    double *max_min;
+    double minx;
+    double miny;
+    double maxx;
+    double maxy;
+    double **p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    max_min = *p;
+    if (!max_min)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    result = gaiaAllocGeomColl ();
+    if (!result)
+	sqlite3_result_null (context);
+    else
+      {
+	  /* builds the BLOB geometry to be returned */
+	  int len;
+	  unsigned char *p_result = NULL;
+	  polyg = gaiaAddPolygonToGeomColl (result, 5, 0);
+	  rect = polyg->Exterior;
+	  minx = *(max_min + 0);
+	  miny = *(max_min + 1);
+	  maxx = *(max_min + 2);
+	  maxy = *(max_min + 3);
+	  gaiaSetPoint (rect->Coords, 0, minx, miny);	/* vertex # 1 */
+	  gaiaSetPoint (rect->Coords, 1, maxx, miny);	/* vertex # 2 */
+	  gaiaSetPoint (rect->Coords, 2, maxx, maxy);	/* vertex # 3 */
+	  gaiaSetPoint (rect->Coords, 3, minx, maxy);	/* vertex # 4 */
+	  gaiaSetPoint (rect->Coords, 4, minx, miny);	/* vertex # 5 [same as vertex # 1 to close the polygon] */
+	  gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+	  sqlite3_result_blob (context, p_result, len, free);
+	  gaiaFreeGeomColl (result);
+      }
+    free (max_min);
+}
+
+static void
+fnct_MbrMinX (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MbrMinX(BLOB encoded GEMETRY)
+/
+/ returns the MinX coordinate for current geometry's MBR 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double coord;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!gaiaGetMbrMinX (p_blob, n_bytes, &coord))
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_double (context, coord);
+}
+
+static void
+fnct_MbrMaxX (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MbrMaxX(BLOB encoded GEMETRY)
+/
+/ returns the MaxX coordinate for current geometry's MBR 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double coord;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!gaiaGetMbrMaxX (p_blob, n_bytes, &coord))
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_double (context, coord);
+}
+
+static void
+fnct_MbrMinY (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MbrMinY(BLOB encoded GEMETRY)
+/
+/ returns the MinY coordinate for current geometry's MBR 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double coord;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!gaiaGetMbrMinY (p_blob, n_bytes, &coord))
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_double (context, coord);
+}
+
+static void
+fnct_MbrMaxY (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ MbrMaxY(BLOB encoded GEMETRY)
+/
+/ returns the MaxY coordinate for current geometry's MBR 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double coord;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!gaiaGetMbrMaxY (p_blob, n_bytes, &coord))
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_double (context, coord);
+}
+
+#ifndef OMIT_GEOCALLBACKS	/* supporting RTree geometry callbacks */
+static void
+gaia_mbr_del (void *p)
+{
+/* freeing data used by R*Tree Geometry Callback */
+    sqlite3_free (p);
+}
+
+static int
+fnct_RTreeIntersects (sqlite3_rtree_geometry * p, int nCoord, double *aCoord,
+		      int *pRes)
+{
+/* R*Tree Geometry callback function:
+/ ... MATCH RTreeIntersects(double x1, double y1, double x2, double y2)
+*/
+    struct gaia_rtree_mbr *mbr;
+    double xmin;
+    double xmax;
+    double ymin;
+    double ymax;
+    float fminx;
+    float fminy;
+    float fmaxx;
+    float fmaxy;
+    double tic;
+    double tic2;
+
+    if (p->pUser == 0)
+      {
+	  /* first call: we must check args and then initialize the MBR struct */
+	  if (nCoord != 4)
+	      return SQLITE_ERROR;
+	  if (p->nParam != 4)
+	      return SQLITE_ERROR;
+	  mbr = (struct gaia_rtree_mbr *) (p->pUser =
+					   sqlite3_malloc (sizeof
+							   (struct
+							    gaia_rtree_mbr)));
+	  if (!mbr)
+	      return SQLITE_NOMEM;
+	  p->xDelUser = gaia_mbr_del;
+	  xmin = p->aParam[0];
+	  ymin = p->aParam[1];
+	  xmax = p->aParam[2];
+	  ymax = p->aParam[3];
+	  if (xmin > xmax)
+	    {
+		xmin = p->aParam[2];
+		xmax = p->aParam[0];
+	    }
+	  if (ymin > ymax)
+	    {
+		ymin = p->aParam[3];
+		ymax = p->aParam[1];
+	    }
+
+	  /* adjusting the MBR so to compensate for DOUBLE/FLOAT truncations */
+	  fminx = (float) xmin;
+	  fminy = (float) ymin;
+	  fmaxx = (float) xmax;
+	  fmaxy = (float) ymax;
+	  tic = fabs (xmin - fminx);
+	  tic2 = fabs (ymin - fminy);
+	  if (tic2 > tic)
+	      tic = tic2;
+	  tic2 = fabs (xmax - fmaxx);
+	  if (tic2 > tic)
+	      tic = tic2;
+	  tic2 = fabs (ymax - fmaxy);
+	  if (tic2 > tic)
+	      tic = tic2;
+	  tic *= 2.0;
+
+	  mbr->minx = xmin - tic;
+	  mbr->miny = ymin - tic;
+	  mbr->maxx = xmax + tic;
+	  mbr->maxy = ymax + tic;
+      }
+
+    mbr = (struct gaia_rtree_mbr *) (p->pUser);
+    xmin = aCoord[0];
+    xmax = aCoord[1];
+    ymin = aCoord[2];
+    ymax = aCoord[3];
+    *pRes = 1;
+/* evaluating Intersects relationship */
+    if (xmin > mbr->maxx)
+	*pRes = 0;
+    if (xmax < mbr->minx)
+	*pRes = 0;
+    if (ymin > mbr->maxy)
+	*pRes = 0;
+    if (ymax < mbr->miny)
+	*pRes = 0;
+    return SQLITE_OK;
+}
+
+static int
+fnct_RTreeDistWithin (sqlite3_rtree_geometry * p, int nCoord, double *aCoord,
+		      int *pRes)
+{
+/* R*Tree Geometry callback function:
+/ ... MATCH RTreeDistWithin(double x, double y, double radius)
+*/
+    struct gaia_rtree_mbr *mbr;
+    double xmin;
+    double xmax;
+    double ymin;
+    double ymax;
+
+    if (p->pUser == 0)
+      {
+	  /* first call: we must check args and then initialize the MBR struct */
+	  if (nCoord != 4)
+	      return SQLITE_ERROR;
+	  if (p->nParam != 3)
+	      return SQLITE_ERROR;
+	  mbr = (struct gaia_rtree_mbr *) (p->pUser =
+					   sqlite3_malloc (sizeof
+							   (struct
+							    gaia_rtree_mbr)));
+	  if (!mbr)
+	      return SQLITE_NOMEM;
+	  p->xDelUser = gaia_mbr_del;
+	  mbr->minx = p->aParam[0] - p->aParam[2];
+	  mbr->miny = p->aParam[1] - p->aParam[2];
+	  mbr->maxx = p->aParam[0] + p->aParam[2];
+	  mbr->maxy = p->aParam[1] + p->aParam[2];
+      }
+
+    mbr = (struct gaia_rtree_mbr *) (p->pUser);
+    xmin = aCoord[0];
+    xmax = aCoord[1];
+    ymin = aCoord[2];
+    ymax = aCoord[3];
+    *pRes = 1;
+/* evaluating Intersects relationship */
+    if (xmin > mbr->maxx)
+	*pRes = 0;
+    if (xmax < mbr->minx)
+	*pRes = 0;
+    if (ymin > mbr->maxy)
+	*pRes = 0;
+    if (ymax < mbr->miny)
+	*pRes = 0;
+    return SQLITE_OK;
+}
+#endif /* end RTree geometry callbacks */
+
+static void
+fnct_X (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ X(BLOB encoded POINT)
+/
+/ returns the X coordinate for current POINT geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaPointPtr point;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  point = simplePoint (geo);
+	  if (!point)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, point->X);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Y (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Y(BLOB encoded POINT)
+/
+/ returns the Y coordinate for current POINT geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaPointPtr point;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  point = simplePoint (geo);
+	  if (!point)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, point->Y);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Z (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Z(BLOB encoded POINT)
+/
+/ returns the Z coordinate for current POINT geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaPointPtr point;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  point = simplePoint (geo);
+	  if (!point)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		if (point->DimensionModel == GAIA_XY_Z
+		    || point->DimensionModel == GAIA_XY_Z_M)
+		    sqlite3_result_double (context, point->Z);
+		else
+		    sqlite3_result_null (context);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_M (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ M(BLOB encoded POINT)
+/
+/ returns the M coordinate for current POINT geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaPointPtr point;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  point = simplePoint (geo);
+	  if (!point)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		if (point->DimensionModel == GAIA_XY_M
+		    || point->DimensionModel == GAIA_XY_Z_M)
+		    sqlite3_result_double (context, point->M);
+		else
+		    sqlite3_result_null (context);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_NumPoints (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ NumPoints(BLOB encoded LINESTRING)
+/
+/ returns the number of vertices for current LINESTRING geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaLinestringPtr line;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  line = simpleLinestring (geo);
+	  if (!line)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_int (context, line->Points);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+point_n (sqlite3_context * context, int argc, sqlite3_value ** argv,
+	 int request)
+{
+/* SQL functions:
+/ StartPoint(BLOB encoded LINESTRING geometry)
+/ EndPoint(BLOB encoded LINESTRING geometry)
+/ PointN(BLOB encoded LINESTRING geometry, integer point_no)
+/
+/ returns the Nth POINT for current LINESTRING geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int vertex;
+    int len;
+    double x;
+    double y;
+    double z;
+    double m;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    gaiaLinestringPtr line;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (request == GAIA_POINTN)
+      {
+	  /* PointN() requires point index to be defined as an SQL function argument */
+	  if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+	  vertex = sqlite3_value_int (argv[1]);
+      }
+    else if (request == GAIA_END_POINT)
+	vertex = -1;		/* EndPoint() specifies a negative point index */
+    else
+	vertex = 1;		/* StartPoint() */
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  line = simpleLinestring (geo);
+	  if (!line)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		if (vertex < 0)
+		    vertex = line->Points - 1;
+		else
+		    vertex -= 1;	/* decreasing the point index by 1, because PointN counts starting at index 1 */
+		if (vertex >= 0 && vertex < line->Points)
+		  {
+		      if (line->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (line->Coords, vertex, &x, &y, &z);
+			    result = gaiaAllocGeomCollXYZ ();
+			    result->Srid = geo->Srid;
+			    gaiaAddPointToGeomCollXYZ (result, x, y, z);
+			}
+		      else if (line->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (line->Coords, vertex, &x, &y, &m);
+			    result = gaiaAllocGeomCollXYM ();
+			    result->Srid = geo->Srid;
+			    gaiaAddPointToGeomCollXYM (result, x, y, m);
+			}
+		      else if (line->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (line->Coords, vertex, &x, &y, &z,
+					      &m);
+			    result = gaiaAllocGeomCollXYZM ();
+			    result->Srid = geo->Srid;
+			    gaiaAddPointToGeomCollXYZM (result, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaGetPoint (line->Coords, vertex, &x, &y);
+			    result = gaiaAllocGeomColl ();
+			    result->Srid = geo->Srid;
+			    gaiaAddPointToGeomColl (result, x, y);
+			}
+		  }
+		else
+		    result = NULL;
+		if (!result)
+		    sqlite3_result_null (context);
+		else
+		  {
+		      gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		      gaiaFreeGeomColl (result);
+		      sqlite3_result_blob (context, p_result, len, free);
+		  }
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+/*
+/ the following functions simply readdress the request to point_n()
+/ setting the appropriate request mode
+*/
+
+static void
+fnct_StartPoint (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    point_n (context, argc, argv, GAIA_START_POINT);
+}
+
+static void
+fnct_EndPoint (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    point_n (context, argc, argv, GAIA_END_POINT);
+}
+
+static void
+fnct_PointN (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    point_n (context, argc, argv, GAIA_POINTN);
+}
+
+static void
+fnct_ExteriorRing (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL functions:
+/ ExteriorRing(BLOB encoded POLYGON geometry)
+/
+/ returns the EXTERIOR RING for current POLYGON geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    gaiaLinestringPtr line;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  polyg = simplePolygon (geo);
+	  if (!polyg)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		ring = polyg->Exterior;
+		if (ring->DimensionModel == GAIA_XY_Z)
+		    result = gaiaAllocGeomCollXYZ ();
+		else if (ring->DimensionModel == GAIA_XY_M)
+		    result = gaiaAllocGeomCollXYM ();
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		    result = gaiaAllocGeomCollXYZM ();
+		else
+		    result = gaiaAllocGeomColl ();
+		result->Srid = geo->Srid;
+		line = gaiaAddLinestringToGeomColl (result, ring->Points);
+		for (iv = 0; iv < line->Points; iv++)
+		  {
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (ring->Coords, iv, &x, &y, &z);
+			    gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (ring->Coords, iv, &x, &y, &m);
+			    gaiaSetPointXYM (line->Coords, iv, x, y, m);
+			}
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (ring->Coords, iv, &x, &y, &z, &m);
+			    gaiaSetPointXYZM (line->Coords, iv, x, y, z, m);
+			}
+		      else
+			{
+			    gaiaGetPoint (ring->Coords, iv, &x, &y);
+			    gaiaSetPoint (line->Coords, iv, x, y);
+			}
+		  }
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		gaiaFreeGeomColl (result);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_NumInteriorRings (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ NumInteriorRings(BLOB encoded POLYGON)
+/
+/ returns the number of INTERIOR RINGS for current POLYGON geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaPolygonPtr polyg;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  polyg = simplePolygon (geo);
+	  if (!polyg)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_int (context, polyg->NumInteriors);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_InteriorRingN (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL functions:
+/ InteriorRingN(BLOB encoded POLYGON geometry)
+/
+/ returns the Nth INTERIOR RING for current POLYGON geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int border;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    gaiaLinestringPtr line;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    border = sqlite3_value_int (argv[1]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  polyg = simplePolygon (geo);
+	  if (!polyg)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		if (border >= 1 && border <= polyg->NumInteriors)
+		  {
+		      ring = polyg->Interiors + (border - 1);
+		      if (ring->DimensionModel == GAIA_XY_Z)
+			  result = gaiaAllocGeomCollXYZ ();
+		      else if (ring->DimensionModel == GAIA_XY_M)
+			  result = gaiaAllocGeomCollXYM ();
+		      else if (ring->DimensionModel == GAIA_XY_Z_M)
+			  result = gaiaAllocGeomCollXYZM ();
+		      else
+			  result = gaiaAllocGeomColl ();
+		      result->Srid = geo->Srid;
+		      line = gaiaAddLinestringToGeomColl (result, ring->Points);
+		      for (iv = 0; iv < line->Points; iv++)
+			{
+			    if (ring->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (ring->Coords, iv, &x, &y,
+						   &z);
+				  gaiaSetPointXYZ (line->Coords, iv, x, y, z);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (ring->Coords, iv, &x, &y,
+						   &m);
+				  gaiaSetPointXYM (line->Coords, iv, x, y, m);
+			      }
+			    else if (ring->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (ring->Coords, iv, &x, &y,
+						    &z, &m);
+				  gaiaSetPointXYZM (line->Coords, iv, x, y, z,
+						    m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (ring->Coords, iv, &x, &y);
+				  gaiaSetPoint (line->Coords, iv, x, y);
+			      }
+			}
+		      gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		      gaiaFreeGeomColl (result);
+		      sqlite3_result_blob (context, p_result, len, free);
+		  }
+		else
+		    sqlite3_result_null (context);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_NumGeometries (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ NumGeometries(BLOB encoded GEOMETRYCOLLECTION)
+/
+/ returns the number of elementary geometries for current geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int cnt = 0;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  point = geo->FirstPoint;
+	  while (point)
+	    {
+		/* counts how many points are there */
+		cnt++;
+		point = point->Next;
+	    }
+	  line = geo->FirstLinestring;
+	  while (line)
+	    {
+		/* counts how many linestrings are there */
+		cnt++;
+		line = line->Next;
+	    }
+	  polyg = geo->FirstPolygon;
+	  while (polyg)
+	    {
+		/* counts how many polygons are there */
+		cnt++;
+		polyg = polyg->Next;
+	    }
+	  sqlite3_result_int (context, cnt);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_GeometryN (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeometryN(BLOB encoded GEOMETRYCOLLECTION geometry)
+/
+/ returns the Nth geometry for current GEOMETRYCOLLECTION or MULTIxxxx geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int entity;
+    int len;
+    int cnt = 0;
+    int iv;
+    int ib;
+    double x;
+    double y;
+    double z;
+    double m;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaLinestringPtr line2;
+    gaiaPolygonPtr polyg;
+    gaiaPolygonPtr polyg2;
+    gaiaRingPtr ring_in;
+    gaiaRingPtr ring_out;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    entity = sqlite3_value_int (argv[1]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  point = geo->FirstPoint;
+	  while (point)
+	    {
+		/* counts how many points are there */
+		cnt++;
+		if (cnt == entity)
+		  {
+		      /* ok, required elementary geometry is this POINT */
+		      if (point->DimensionModel == GAIA_XY_Z)
+			  result = gaiaAllocGeomCollXYZ ();
+		      else if (point->DimensionModel == GAIA_XY_M)
+			  result = gaiaAllocGeomCollXYM ();
+		      else if (point->DimensionModel == GAIA_XY_Z_M)
+			  result = gaiaAllocGeomCollXYZM ();
+		      else
+			  result = gaiaAllocGeomColl ();
+		      result->Srid = geo->Srid;
+		      if (point->DimensionModel == GAIA_XY_Z)
+			  gaiaAddPointToGeomCollXYZ (result, point->X,
+						     point->Y, point->Z);
+		      else if (point->DimensionModel == GAIA_XY_M)
+			  gaiaAddPointToGeomCollXYM (result, point->X,
+						     point->Y, point->M);
+		      else if (point->DimensionModel == GAIA_XY_Z_M)
+			  gaiaAddPointToGeomCollXYZM (result, point->X,
+						      point->Y, point->Z,
+						      point->M);
+		      else
+			  gaiaAddPointToGeomColl (result, point->X, point->Y);
+		      goto skip;
+		  }
+		point = point->Next;
+	    }
+	  line = geo->FirstLinestring;
+	  while (line)
+	    {
+		/* counts how many linestrings are there */
+		cnt++;
+		if (cnt == entity)
+		  {
+		      /* ok, required elementary geometry is this LINESTRING */
+		      if (line->DimensionModel == GAIA_XY_Z)
+			  result = gaiaAllocGeomCollXYZ ();
+		      else if (line->DimensionModel == GAIA_XY_M)
+			  result = gaiaAllocGeomCollXYM ();
+		      else if (line->DimensionModel == GAIA_XY_Z_M)
+			  result = gaiaAllocGeomCollXYZM ();
+		      else
+			  result = gaiaAllocGeomColl ();
+		      result->Srid = geo->Srid;
+		      line2 =
+			  gaiaAddLinestringToGeomColl (result, line->Points);
+		      for (iv = 0; iv < line2->Points; iv++)
+			{
+			    if (line->DimensionModel == GAIA_XY_Z)
+			      {
+				  gaiaGetPointXYZ (line->Coords, iv, &x, &y,
+						   &z);
+				  gaiaSetPointXYZ (line2->Coords, iv, x, y, z);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_M)
+			      {
+				  gaiaGetPointXYM (line->Coords, iv, &x, &y,
+						   &m);
+				  gaiaSetPointXYM (line2->Coords, iv, x, y, m);
+			      }
+			    else if (line->DimensionModel == GAIA_XY_Z_M)
+			      {
+				  gaiaGetPointXYZM (line->Coords, iv, &x, &y,
+						    &z, &m);
+				  gaiaSetPointXYZM (line2->Coords, iv, x, y,
+						    z, m);
+			      }
+			    else
+			      {
+				  gaiaGetPoint (line->Coords, iv, &x, &y);
+				  gaiaSetPoint (line2->Coords, iv, x, y);
+			      }
+			}
+		      goto skip;
+		  }
+		line = line->Next;
+	    }
+	  polyg = geo->FirstPolygon;
+	  while (polyg)
+	    {
+		/* counts how many polygons are there */
+		cnt++;
+		if (cnt == entity)
+		  {
+		      /* ok, required elementary geometry is this POLYGON */
+		      if (polyg->DimensionModel == GAIA_XY_Z)
+			  result = gaiaAllocGeomCollXYZ ();
+		      else if (polyg->DimensionModel == GAIA_XY_M)
+			  result = gaiaAllocGeomCollXYM ();
+		      else if (polyg->DimensionModel == GAIA_XY_Z_M)
+			  result = gaiaAllocGeomCollXYZM ();
+		      else
+			  result = gaiaAllocGeomColl ();
+		      result->Srid = geo->Srid;
+		      ring_in = polyg->Exterior;
+		      polyg2 =
+			  gaiaAddPolygonToGeomColl (result, ring_in->Points,
+						    polyg->NumInteriors);
+		      ring_out = polyg2->Exterior;
+		      for (iv = 0; iv < ring_out->Points; iv++)
+			{
+			    /* copying the exterior ring POINTs */
+			    gaiaGetPoint (ring_in->Coords, iv, &x, &y);
+			    gaiaSetPoint (ring_out->Coords, iv, x, y);
+			}
+		      for (ib = 0; ib < polyg2->NumInteriors; ib++)
+			{
+			    /* processing the interior rings */
+			    ring_in = polyg->Interiors + ib;
+			    ring_out =
+				gaiaAddInteriorRing (polyg2, ib,
+						     ring_in->Points);
+			    for (iv = 0; iv < ring_out->Points; iv++)
+			      {
+				  if (ring_in->DimensionModel == GAIA_XY_Z)
+				    {
+					gaiaGetPointXYZ (ring_in->Coords, iv,
+							 &x, &y, &z);
+					gaiaSetPointXYZ (ring_out->Coords, iv,
+							 x, y, z);
+				    }
+				  else if (ring_in->DimensionModel == GAIA_XY_M)
+				    {
+					gaiaGetPointXYM (ring_in->Coords, iv,
+							 &x, &y, &m);
+					gaiaSetPointXYM (ring_out->Coords, iv,
+							 x, y, m);
+				    }
+				  else if (ring_in->DimensionModel ==
+					   GAIA_XY_Z_M)
+				    {
+					gaiaGetPointXYZM (ring_in->Coords, iv,
+							  &x, &y, &z, &m);
+					gaiaSetPointXYZM (ring_out->Coords,
+							  iv, x, y, z, m);
+				    }
+				  else
+				    {
+					gaiaGetPoint (ring_in->Coords, iv, &x,
+						      &y);
+					gaiaSetPoint (ring_out->Coords, iv, x,
+						      y);
+				    }
+			      }
+			}
+		      goto skip;
+		  }
+		polyg = polyg->Next;
+	    }
+	skip:
+	  if (result)
+	    {
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		gaiaFreeGeomColl (result);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+mbrs_eval (sqlite3_context * context, int argc, sqlite3_value ** argv,
+	   int request)
+{
+/* SQL function:
+/ MBRsomething(BLOB encoded GEOMETRY-1, BLOB encoded GEOMETRY-2)
+/
+/ returns:
+/ 1 if the required spatial relationship between the two MBRs is TRUE
+/ 0 otherwise
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int ret;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobMbr (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobMbr (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  ret = 0;
+	  gaiaMbrGeometry (geo1);
+	  gaiaMbrGeometry (geo2);
+	  switch (request)
+	    {
+	    case GAIA_MBR_CONTAINS:
+		ret = gaiaMbrsContains (geo1, geo2);
+		break;
+	    case GAIA_MBR_DISJOINT:
+		ret = gaiaMbrsDisjoint (geo1, geo2);
+		break;
+	    case GAIA_MBR_EQUAL:
+		ret = gaiaMbrsEqual (geo1, geo2);
+		break;
+	    case GAIA_MBR_INTERSECTS:
+		ret = gaiaMbrsIntersects (geo1, geo2);
+		break;
+	    case GAIA_MBR_OVERLAPS:
+		ret = gaiaMbrsOverlaps (geo1, geo2);
+		break;
+	    case GAIA_MBR_TOUCHES:
+		ret = gaiaMbrsTouches (geo1, geo2);
+		break;
+	    case GAIA_MBR_WITHIN:
+		ret = gaiaMbrsWithin (geo1, geo2);
+		break;
+	    }
+	  if (ret < 0)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+/*
+/ the following functions simply readdress the mbr_eval()
+/ setting the appropriate request mode
+*/
+
+static void
+fnct_MbrContains (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    mbrs_eval (context, argc, argv, GAIA_MBR_CONTAINS);
+}
+
+static void
+fnct_MbrDisjoint (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    mbrs_eval (context, argc, argv, GAIA_MBR_DISJOINT);
+}
+
+static void
+fnct_MbrEqual (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    mbrs_eval (context, argc, argv, GAIA_MBR_EQUAL);
+}
+
+static void
+fnct_MbrIntersects (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    mbrs_eval (context, argc, argv, GAIA_MBR_INTERSECTS);
+}
+
+static void
+fnct_MbrOverlaps (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    mbrs_eval (context, argc, argv, GAIA_MBR_OVERLAPS);
+}
+
+static void
+fnct_MbrTouches (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    mbrs_eval (context, argc, argv, GAIA_MBR_TOUCHES);
+}
+
+static void
+fnct_MbrWithin (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    mbrs_eval (context, argc, argv, GAIA_MBR_WITHIN);
+}
+
+static void
+fnct_ShiftCoords (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ ShiftCoords(BLOBencoded geometry, shiftX, shiftY)
+/
+/ returns a new geometry that is the original one received, but with shifted coordinates
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    double shift_x;
+    double shift_y;
+    int int_value;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	shift_x = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  shift_x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	shift_y = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  shift_y = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaShiftCoords (geo, shift_x, shift_y);
+	  gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_ScaleCoords (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ ScaleCoords(BLOBencoded geometry, scale_factor_x [, scale_factor_y])
+/
+/ returns a new geometry that is the original one received, but with scaled coordinates
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    double scale_x;
+    double scale_y;
+    int int_value;
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	scale_x = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  scale_x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (argc == 2)
+	scale_y = scale_x;	/* this one is an isotropic scaling request */
+    else
+      {
+	  /* an anisotropic scaling is requested */
+	  if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	      scale_y = sqlite3_value_double (argv[2]);
+	  else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	    {
+		int_value = sqlite3_value_int (argv[2]);
+		scale_y = int_value;
+	    }
+	  else
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaScaleCoords (geo, scale_x, scale_y);
+	  gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_RotateCoords (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ RotateCoords(BLOBencoded geometry, angle)
+/
+/ returns a new geometry that is the original one received, but with rotated coordinates
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    double angle;
+    int int_value;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	angle = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  angle = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaRotateCoords (geo, angle);
+	  gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_ReflectCoords (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ ReflectCoords(BLOBencoded geometry, x_axis,  y_axis)
+/
+/ returns a new geometry that is the original one received, but with mirrored coordinates
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    int x_axis;
+    int y_axis;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	x_axis = sqlite3_value_int (argv[1]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	y_axis = sqlite3_value_int (argv[2]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaReflectCoords (geo, x_axis, y_axis);
+	  gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_SwapCoords (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ SwapCoords(BLOBencoded geometry)
+/
+/ returns a new geometry that is the original one received, but with swapped x- and y-coordinate
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaSwapCoords (geo);
+	  gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+	  if (!p_result)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_blob (context, p_result, len, free);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static int
+get_ellipse_params (sqlite3 * sqlite, int srid, double *a, double *b,
+		    double *rf)
+{
+/* 
+/ retrieves the PROJ +ellps=xx [+a=xx +b=xx] params 
+/from SPATIAL_SYS_REF table, if possible 
+*/
+    char proj4text[2048];
+    char *p_proj;
+    char *p_ellps;
+    char *p_a;
+    char *p_b;
+    char *p_end;
+    proj_params (sqlite, srid, proj4text);
+    if (*proj4text == '\0')
+	return 0;
+/* parsing the proj4text geodesic string */
+    p_proj = strstr (proj4text, "+proj=");
+    p_ellps = strstr (proj4text, "+ellps=");
+    p_a = strstr (proj4text, "+a=");
+    p_b = strstr (proj4text, "+b=");
+/* checking if +proj=longlat is true */
+    if (!p_proj)
+	return 0;
+    p_end = strchr (p_proj, ' ');
+    if (p_end)
+	*p_end = '\0';
+    if (strcmp (p_proj + 6, "longlat") != 0)
+	return 0;
+    if (p_ellps)
+      {
+	  /* trying to retrieve the ellipsoid params by name */
+	  p_end = strchr (p_ellps, ' ');
+	  if (p_end)
+	      *p_end = '\0';
+	  if (gaiaEllipseParams (p_ellps + 7, a, b, rf))
+	      return 1;
+      }
+    if (p_a && p_b)
+      {
+	  /* trying to retrieve the +a=xx and +b=xx args */
+	  p_end = strchr (p_a, ' ');
+	  if (p_end)
+	      *p_end = '\0';
+	  p_end = strchr (p_b, ' ');
+	  if (p_end)
+	      *p_end = '\0';
+	  *a = atof (p_a + 3);
+	  *b = atof (p_b + 3);
+	  *rf = 1.0 / ((*a - *b) / *a);
+	  return 1;
+      }
+    return 0;
+}
+
+static void
+fnct_FromEWKB (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromEWKB(EWKB encoded geometry)
+/
+/ returns the current geometry by parsing Geos/PostGis EWKB encoded string 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaFromEWKB (text);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_ToEWKB (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsEWKB(BLOB encoded geometry)
+/
+/ returns a text string corresponding to Geos/PostGIS EWKB notation 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    else
+      {
+	  gaiaOutBufferInitialize (&out_buf);
+	  gaiaToEWKB (&out_buf, geo);
+	  if (out_buf.Error || out_buf.Buffer == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = out_buf.WriteOffset;
+		sqlite3_result_text (context, out_buf.Buffer, len, free);
+		out_buf.Buffer = NULL;
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_ToEWKT (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ AsEWKT(BLOB encoded geometry)
+/
+/ returns the corresponding PostGIS EWKT encoded value
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    gaiaOutBuffer out_buf;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    gaiaOutBufferInitialize (&out_buf);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  gaiaToEWKT (&out_buf, geo);
+	  if (out_buf.Error || out_buf.Buffer == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		len = out_buf.WriteOffset;
+		sqlite3_result_text (context, out_buf.Buffer, len, free);
+		out_buf.Buffer = NULL;
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+    gaiaOutBufferReset (&out_buf);
+}
+
+static void
+fnct_FromEWKT (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromEWKT(EWKT encoded geometry)
+/
+/ returns the current geometry by parsing EWKT  (PostGIS) encoded string 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseEWKT (text);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_FromGeoJSON (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromGeoJSON(GeoJSON encoded geometry)
+/
+/ returns the current geometry by parsing GeoJSON encoded string 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseGeoJSON (text);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_FromKml (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromKml(KML encoded geometry)
+/
+/ returns the current geometry by parsing KML encoded string 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseKml (text);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_FromGml (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromGml(GML encoded geometry)
+/
+/ returns the current geometry by parsing GML encoded string 
+/ or NULL if any error is encountered
+*/
+    int len;
+    unsigned char *p_result = NULL;
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseGml (text, sqlite);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geo, &p_result, &len);
+    gaiaFreeGeomColl (geo);
+    sqlite3_result_blob (context, p_result, len, free);
+}
+
+static void
+fnct_LinesFromRings (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ LinesFromRings(BLOBencoded geometry, BOOL multi_linestring)
+/
+/ returns a new geometry [LINESTRING or MULTILINESTRING] representing 
+/ the linearization for current (MULTI)POLYGON geometry
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr geom_new = NULL;
+    int len;
+    int multi_linestring;
+    unsigned char *p_result = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (argc == 2)
+      {
+	  if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	      multi_linestring = sqlite3_value_int (argv[1]);
+      }
+    geom_new = gaiaLinearize (geo, multi_linestring);
+    if (!geom_new)
+	goto invalid;
+    gaiaFreeGeomColl (geo);
+    gaiaToSpatiaLiteBlobWkb (geom_new, &p_result, &len);
+    gaiaFreeGeomColl (geom_new);
+    sqlite3_result_blob (context, p_result, len, free);
+    return;
+  invalid:
+    if (geo)
+	gaiaFreeGeomColl (geo);
+    sqlite3_result_null (context);
+}
+
+#ifndef OMIT_GEOS		/* including GEOS */
+
+static void
+fnct_BuildArea (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ BuildArea(BLOBencoded geometry)
+/
+/ Assuming that Geometry represents a set of sparse Linestrings,
+/ this function will attempt to reassemble a single Polygon
+/ (or a set of Polygons)
+/ NULL is returned for invalid arguments
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaPolygonize (geo, 0);
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+
+static void
+fnct_Polygonize_step (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ Polygonize(BLOBencoded geom)
+/
+/ aggregate function - STEP
+/
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geom;
+    gaiaGeomCollPtr result;
+    gaiaGeomCollPtr *p;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geom = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geom)
+	return;
+    p = sqlite3_aggregate_context (context, sizeof (gaiaGeomCollPtr));
+    if (!(*p))
+      {
+	  /* this is the first row */
+	  *p = geom;
+      }
+    else
+      {
+	  /* subsequent rows */
+	  result = gaiaMergeGeometries (*p, geom);
+	  gaiaFreeGeomColl (*p);
+	  *p = result;
+	  gaiaFreeGeomColl (geom);
+      }
+}
+
+static void
+fnct_Polygonize_final (sqlite3_context * context)
+{
+/* SQL function:
+/ Polygonize(BLOBencoded geom)
+/
+/ aggregate function - FINAL
+/
+*/
+    gaiaGeomCollPtr result;
+    gaiaGeomCollPtr geom;
+    gaiaGeomCollPtr *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    result = *p;
+    if (!result)
+	sqlite3_result_null (context);
+    else
+      {
+	  geom = gaiaPolygonize (result, 0);
+	  if (geom == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		geom->Srid = result->Srid;
+		gaiaToSpatiaLiteBlobWkb (geom, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (geom);
+	    }
+	  gaiaFreeGeomColl (result);
+      }
+}
+
+#endif /* end including GEOS */
+
+static void
+fnct_DissolveSegments (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ DissolveSegments(BLOBencoded geometry)
+/
+/ Dissolves any LINESTRING or RING into elementary segments
+/ NULL is returned for invalid arguments
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaDissolveSegments (geo);
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_DissolvePoints (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ DissolvePoints(BLOBencoded geometry)
+/
+/ Dissolves any LINESTRING or RING into elementary Vertices
+/ NULL is returned for invalid arguments
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaDissolvePoints (geo);
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_CollectionExtract (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ CollectionExtract(BLOBencoded geometry, Integer type)
+/
+/ Extracts from a GEOMETRYCOLLECTION any item of the required TYPE
+/ 1=Point - 2=Linestring - 3=Polygon
+/ NULL is returned for invalid arguments
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int type;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	type = sqlite3_value_int (argv[1]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (type == 1 || type == 2 || type == 3)
+	;
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  switch (type)
+	    {
+	    case 1:
+		result = gaiaExtractPointsFromGeomColl (geo);
+		break;
+	    case 2:
+		result = gaiaExtractLinestringsFromGeomColl (geo);
+		break;
+	    case 3:
+		result = gaiaExtractPolygonsFromGeomColl (geo);
+		break;
+	    };
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+#ifndef OMIT_PROJ		/* including PROJ.4 */
+
+static void
+fnct_Transform (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Transform(BLOBencoded geometry, srid)
+/
+/ returns a new geometry that is the original one received, but with the new SRID [no coordinates translation is applied]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    int srid_from;
+    int srid_to;
+    char proj_from[2048];
+    char proj_to[2048];
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+	srid_to = sqlite3_value_int (argv[1]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  *proj_from = '\0';
+	  *proj_to = '\0';
+	  srid_from = geo->Srid;
+	  proj_params (sqlite, srid_from, proj_from);
+	  proj_params (sqlite, srid_to, proj_to);
+	  if (*proj_to == '\0' || *proj_from == '\0')
+	    {
+		gaiaFreeGeomColl (geo);
+		sqlite3_result_null (context);
+		return;
+	    }
+	  result = gaiaTransform (geo, proj_from, proj_to);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = srid_to;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+#endif /* end including PROJ.4 */
+
+#ifndef OMIT_GEOS		/* including GEOS */
+
+static void
+fnct_Boundary (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Boundary(BLOB encoded geometry)
+/
+/ returns the combinatorial boundary for current geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr boundary;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (gaiaIsEmpty (geo))
+	      sqlite3_result_null (context);
+	  else
+	    {
+		boundary = gaiaBoundary (geo);
+		if (!boundary)
+		    sqlite3_result_null (context);
+		else
+		  {
+		      gaiaToSpatiaLiteBlobWkb (boundary, &p_result, &len);
+		      gaiaFreeGeomColl (boundary);
+		      sqlite3_result_blob (context, p_result, len, free);
+		  }
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_IsClosed (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ IsClosed(BLOB encoded LINESTRING or MULTILINESTRING geometry)
+/
+/ returns:
+/ 1 if this LINESTRING is closed [or if this is a MULTILINESTRING and every LINESTRINGs are closed] 
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaLinestringPtr line;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  line = simpleLinestring (geo);
+	  if (!line < 0)
+	      sqlite3_result_int (context, -1);
+	  else
+	      sqlite3_result_int (context, gaiaIsClosed (line));
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_IsSimple (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ IsSimple(BLOB encoded GEOMETRY)
+/
+/ returns:
+/ 1 if this GEOMETRY is simple
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int ret;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaIsSimple (geo);
+	  if (ret < 0)
+	      sqlite3_result_int (context, -1);
+	  else
+	      sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_IsRing (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ IsRing(BLOB encoded LINESTRING geometry)
+/
+/ returns:
+/ 1 if this LINESTRING is a valid RING
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int ret;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaLinestringPtr line;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  line = simpleLinestring (geo);
+	  if (!line < 0)
+	      sqlite3_result_int (context, -1);
+	  else
+	    {
+		ret = gaiaIsRing (line);
+		sqlite3_result_int (context, ret);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_IsValid (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ IsValid(BLOB encoded GEOMETRY)
+/
+/ returns:
+/ 1 if this GEOMETRY is a valid one
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int ret;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaIsValid (geo);
+	  if (ret < 0)
+	      sqlite3_result_int (context, -1);
+	  else
+	      sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Length (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GLength(BLOB encoded GEOMETRYCOLLECTION)
+/
+/ returns  the total length for current geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double length = 0.0;
+    int ret;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  ret = gaiaGeomCollLength (geo, &length);
+	  if (!ret)
+	      sqlite3_result_null (context);
+	  sqlite3_result_double (context, length);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Area (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Area(BLOB encoded GEOMETRYCOLLECTION)
+/
+/ returns the total area for current geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double area = 0.0;
+    int ret;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  ret = gaiaGeomCollArea (geo, &area);
+	  if (!ret)
+	      sqlite3_result_null (context);
+	  sqlite3_result_double (context, area);
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Centroid (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Centroid(BLOBencoded POLYGON or MULTIPOLYGON geometry)
+/
+/ returns a POINT representing the centroid for current POLYGON / MULTIPOLYGON geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    int ret;
+    double x;
+    double y;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (gaiaIsEmpty (geo))
+	      sqlite3_result_null (context);
+	  else
+	    {
+		ret = gaiaGeomCollCentroid (geo, &x, &y);
+		if (!ret)
+		    sqlite3_result_null (context);
+		else
+		  {
+		      result = gaiaAllocGeomColl ();
+		      result->Srid = geo->Srid;
+		      gaiaAddPointToGeomColl (result, x, y);
+		      gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		      gaiaFreeGeomColl (result);
+		      sqlite3_result_blob (context, p_result, len, free);
+		  }
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_PointOnSurface (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ PointOnSurface(BLOBencoded POLYGON or MULTIPOLYGON geometry)
+/
+/ returns a POINT guaranteed to lie on the Surface
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    double x;
+    double y;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (!gaiaGetPointOnSurface (geo, &x, &y))
+	      sqlite3_result_null (context);
+	  else
+	    {
+		result = gaiaAllocGeomColl ();
+		gaiaAddPointToGeomColl (result, x, y);
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		gaiaFreeGeomColl (result);
+		sqlite3_result_blob (context, p_result, len, free);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Simplify (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Simplify(BLOBencoded geometry, tolerance)
+/
+/ returns a new geometry that is a caricature of the original one received, but simplified using the Douglas-Peuker algorihtm
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    int int_value;
+    double tolerance;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	tolerance = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  tolerance = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaGeomCollSimplify (geo, tolerance);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_SimplifyPreserveTopology (sqlite3_context * context, int argc,
+			       sqlite3_value ** argv)
+{
+/* SQL function:
+/ SimplifyPreserveTopology(BLOBencoded geometry, tolerance)
+/
+/ returns a new geometry that is a caricature of the original one received, but simplified using the Douglas-Peuker algorihtm [preserving topology]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    int int_value;
+    double tolerance;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	tolerance = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  tolerance = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaGeomCollSimplifyPreserveTopology (geo, tolerance);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_ConvexHull (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ ConvexHull(BLOBencoded geometry)
+/
+/ returns a new geometry representing the CONVEX HULL for current geometry
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaConvexHull (geo);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Buffer (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Buffer(BLOBencoded geometry, radius)
+/
+/ returns a new geometry representing the BUFFER for current geometry
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    double radius;
+    int int_value;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	radius = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  radius = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaGeomCollBuffer (geo, radius, 30);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_Intersection (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Intersection(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns a new geometry representing the INTERSECTION of both geometries
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaGeometryIntersection (geo1, geo2);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else if (gaiaIsEmpty (result))
+	    {
+		gaiaFreeGeomColl (result);
+		sqlite3_result_null (context);
+	    }
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Union_step (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Union(BLOBencoded geom)
+/
+/ aggregate function - STEP
+/
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geom;
+    gaiaGeomCollPtr result;
+    gaiaGeomCollPtr *p;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geom = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geom)
+	return;
+    p = sqlite3_aggregate_context (context, sizeof (gaiaGeomCollPtr));
+    if (!(*p))
+      {
+	  /* this is the first row */
+	  *p = geom;
+      }
+    else
+      {
+	  /* subsequent rows */
+	  result = gaiaGeometryUnion (*p, geom);
+	  gaiaFreeGeomColl (*p);
+	  *p = result;
+	  gaiaFreeGeomColl (geom);
+      }
+}
+
+static void
+fnct_Union_final (sqlite3_context * context)
+{
+/* SQL function:
+/ Union(BLOBencoded geom)
+/
+/ aggregate function - FINAL
+/
+*/
+    gaiaGeomCollPtr result;
+    gaiaGeomCollPtr *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    result = *p;
+    if (!result)
+	sqlite3_result_null (context);
+    else if (gaiaIsEmpty (result))
+      {
+	  gaiaFreeGeomColl (result);
+	  sqlite3_result_null (context);
+      }
+    else
+      {
+	  /* builds the BLOB geometry to be returned */
+	  int len;
+	  unsigned char *p_result = NULL;
+	  gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+	  sqlite3_result_blob (context, p_result, len, free);
+	  gaiaFreeGeomColl (result);
+      }
+}
+
+static void
+fnct_Union (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Union(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns a new geometry representing the UNION of both geometries
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaGeometryUnion (geo1, geo2);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else if (gaiaIsEmpty (result))
+	    {
+		gaiaFreeGeomColl (result);
+		sqlite3_result_null (context);
+	    }
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Difference (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Difference(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns a new geometry representing the DIFFERENCE of both geometries
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaGeometryDifference (geo1, geo2);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else if (gaiaIsEmpty (result))
+	    {
+		gaiaFreeGeomColl (result);
+		sqlite3_result_null (context);
+	    }
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_SymDifference (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ SymDifference(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns a new geometry representing the SYMMETRIC DIFFERENCE of both geometries
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaGeometrySymDifference (geo1, geo2);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else if (gaiaIsEmpty (result))
+	    {
+		gaiaFreeGeomColl (result);
+		sqlite3_result_null (context);
+	    }
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Equals (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Equals(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if the two geometries are "spatially equal"
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollEquals (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Intersects (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Intersects(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if the two geometries do "spatially intersects"
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollIntersects (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Disjoint (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Disjoint(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if the two geometries are "spatially disjoint"
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollDisjoint (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Overlaps (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Overlaps(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if the two geometries do "spatially overlaps"
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollOverlaps (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Crosses (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Crosses(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if the two geometries do "spatially crosses"
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollCrosses (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Touches (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Touches(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if the two geometries do "spatially touches"
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollTouches (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Within (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Within(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if GEOM-1 is completely contained within GEOM-2
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollWithin (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Contains (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Contains(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if GEOM-1 completely contains GEOM-2
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollContains (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Relate (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Relate(BLOBencoded geom1, BLOBencoded geom2, string pattern)
+/
+/ returns:
+/ 1 if GEOM-1 and GEOM-2 have a spatial relationship as specified by the patternMatrix 
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    const unsigned char *pattern;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    pattern = sqlite3_value_text (argv[2]);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollRelate (geo1, geo2, (char *) pattern);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Distance (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Distance(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns the distance between GEOM-1 and GEOM-2
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    double dist;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  ret = gaiaGeomCollDistance (geo1, geo2, &dist);
+	  if (!ret)
+	      sqlite3_result_null (context);
+	  sqlite3_result_double (context, dist);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_PtDistWithin (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ PtDistWithin(BLOBencoded geom1, BLOBencoded geom2, double dist 
+/ [, boolen use_spheroid])
+/
+/ returns TRUE if the distance between GEOM-1 and GEOM-2
+/ is less or equal to dist
+/
+/ - if both geom1 and geom2 are in the 4326 (WGS84) SRID,
+/   (and does actually contains a single POINT each one)
+/   dist is assumed to be measured in Meters
+/ - in this case the optional arg use_spheroid is
+/   checked to determine if geodesic distance has to be
+/   computed on the sphere (quickest) or on the spheroid 
+/   default: use_spheroid = FALSE
+/ 
+/ in any other case the "plain" distance is evaluated
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    double ref_dist;
+    int use_spheroid = 0;
+    double x0;
+    double y0;
+    double x1;
+    double y1;
+    int pt0 = 0;
+    int ln0 = 0;
+    int pg0 = 0;
+    int pt1 = 0;
+    int ln1 = 0;
+    int pg1 = 0;
+    double dist;
+    double a;
+    double b;
+    double rf;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER
+	|| sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	;
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (argc == 4)
+      {
+	  /* optional use_spheroid arg */
+	  if (sqlite3_value_type (argv[3]) != SQLITE_INTEGER)
+	    {
+		sqlite3_result_null (context);
+		return;
+	    }
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int dst = sqlite3_value_int (argv[2]);
+	  ref_dist = dst;
+      }
+    else
+	ref_dist = sqlite3_value_double (argv[2]);
+    if (argc == 4)
+	use_spheroid = sqlite3_value_int (argv[3]);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (geo1->Srid == 4326 && geo2->Srid == 4326)
+	    {
+		/* checking for single points */
+		pt = geo1->FirstPoint;
+		while (pt)
+		  {
+		      x0 = pt->X;
+		      y0 = pt->Y;
+		      pt0++;
+		      pt = pt->Next;
+		  }
+		ln = geo1->FirstLinestring;
+		while (ln)
+		  {
+		      ln0++;
+		      ln = ln->Next;
+		  }
+		pg = geo1->FirstPolygon;
+		while (pg)
+		  {
+		      pg0++;
+		      pg = pg->Next;
+		  }
+		pt = geo2->FirstPoint;
+		while (pt)
+		  {
+		      x1 = pt->X;
+		      y1 = pt->Y;
+		      pt1++;
+		      pt = pt->Next;
+		  }
+		ln = geo2->FirstLinestring;
+		while (ln)
+		  {
+		      ln1++;
+		      ln = ln->Next;
+		  }
+		pg = geo2->FirstPolygon;
+		while (pg)
+		  {
+		      pg1++;
+		      pg = pg->Next;
+		  }
+		if (pt0 == 1 && pt1 == 1 && ln0 == 0 && ln1 == 0 && pg0 == 0
+		    && pg1 == 0)
+		  {
+		      /* using geodesic distance */
+		      a = 6378137.0;
+		      rf = 298.257223563;
+		      b = (a * (1.0 - (1.0 / rf)));
+		      if (use_spheroid)
+			{
+			    dist =
+				gaiaGeodesicDistance (a, b, rf, y0, x0, y1, x1);
+			    if (dist <= ref_dist)
+				sqlite3_result_int (context, 1);
+			    else
+				sqlite3_result_int (context, 0);
+			}
+		      else
+			{
+			    dist =
+				gaiaGreatCircleDistance (a, b, y0, x0, y1, x1);
+			    if (dist <= ref_dist)
+				sqlite3_result_int (context, 1);
+			    else
+				sqlite3_result_int (context, 0);
+			}
+		  }
+		goto stop;
+	    }
+/* defaulting to flat distance */
+	  ret = gaiaGeomCollDistance (geo1, geo2, &dist);
+	  if (!ret)
+	      sqlite3_result_null (context);
+	  if (dist <= ref_dist)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+      }
+  stop:
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+geos_error (const char *fmt, ...)
+{
+/* reporting some GEOS error */
+    va_list ap;
+    char msg[2048];
+    va_start (ap, fmt);
+    vsprintf (msg, fmt, ap);
+    va_end (ap);
+    fprintf (stderr, "GEOS error: %s\n", msg);
+    gaiaSetGeosErrorMsg (msg);
+}
+
+
+static void
+geos_warning (const char *fmt, ...)
+{
+/* reporting some GEOS warning */
+    va_list ap;
+    char msg[2048];
+    va_start (ap, fmt);
+    vsprintf (msg, fmt, ap);
+    va_end (ap);
+    fprintf (stderr, "GEOS warning: %s\n", msg);
+    gaiaSetGeosWarningMsg (msg);
+}
+
+static void
+fnct_aux_polygonize (sqlite3_context * context, gaiaGeomCollPtr geom_org,
+		     int force_multipolygon, int allow_multipolygon)
+{
+/* a  common function performing any kind of polygonization op */
+    gaiaGeomCollPtr geom_new = NULL;
+    int len;
+    unsigned char *p_result = NULL;
+    gaiaPolygonPtr pg;
+    int pgs = 0;
+    if (!geom_org)
+	goto invalid;
+    geom_new = gaiaPolygonize (geom_org, force_multipolygon);
+    if (!geom_new)
+	goto invalid;
+    gaiaFreeGeomColl (geom_org);
+    pg = geom_new->FirstPolygon;
+    while (pg)
+      {
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pgs > 1 && allow_multipolygon == 0)
+      {
+	  /* invalid: a POLYGON is expected !!! */
+	  gaiaFreeGeomColl (geom_new);
+	  sqlite3_result_null (context);
+	  return;
+      }
+    gaiaToSpatiaLiteBlobWkb (geom_new, &p_result, &len);
+    gaiaFreeGeomColl (geom_new);
+    sqlite3_result_blob (context, p_result, len, free);
+    return;
+  invalid:
+    if (geom_org)
+	gaiaFreeGeomColl (geom_org);
+    sqlite3_result_null (context);
+}
+
+/*
+/ the following functions performs initial argument checking, 
+/ and then readdressing the request to fnct_aux_polygonize()
+/ for actual processing
+*/
+
+static void
+fnct_BdPolyFromText1 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdPolyFromText(WKT encoded MULTILINESTRING)
+/
+/ returns the current geometry [POLYGON] by parsing a WKT encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseWkt (text, -1);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = -1;
+    fnct_aux_polygonize (context, geo, 0, 0);
+    return;
+}
+
+static void
+fnct_BdPolyFromText2 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdPolyFromText(WKT encoded MULTILINESTRING, SRID)
+/
+/ returns the current geometry [POLYGON] by parsing a WKT encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseWkt (text, -1);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = sqlite3_value_int (argv[1]);
+    fnct_aux_polygonize (context, geo, 0, 0);
+    return;
+}
+
+static void
+fnct_BdMPolyFromText1 (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdMPolyFromText(WKT encoded MULTILINESTRING)
+/
+/ returns the current geometry [MULTIPOLYGON] by parsing a WKT encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseWkt (text, -1);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = -1;
+    fnct_aux_polygonize (context, geo, 1, 1);
+    return;
+}
+
+static void
+fnct_BdMPolyFromText2 (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdMPolyFromText(WKT encoded MULTILINESTRING, SRID)
+/
+/ returns the current geometry [MULTIPOLYGON] by parsing a WKT encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    const unsigned char *text;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    text = sqlite3_value_text (argv[0]);
+    geo = gaiaParseWkt (text, -1);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = sqlite3_value_int (argv[1]);
+    fnct_aux_polygonize (context, geo, 1, 1);
+    return;
+}
+
+static void
+fnct_BdPolyFromWKB1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdPolyFromWKB(WKB encoded MULTILINESTRING)
+/
+/ returns the current geometry [POLYGON] by parsing a WKB encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    int n_bytes;
+    const unsigned char *wkb;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    wkb = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!check_wkb (wkb, n_bytes, -1))
+	return;
+    geo = gaiaFromWkb (wkb, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = -1;
+    fnct_aux_polygonize (context, geo, 0, 0);
+    return;
+}
+
+static void
+fnct_BdPolyFromWKB2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdPolyFromWKB(WKB encoded MULTILINESTRING)
+/
+/ returns the current geometry [POLYGON] by parsing a WKB encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    int n_bytes;
+    const unsigned char *wkb;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    wkb = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!check_wkb (wkb, n_bytes, -1))
+	return;
+    geo = gaiaFromWkb (wkb, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = sqlite3_value_int (argv[1]);
+    fnct_aux_polygonize (context, geo, 0, 0);
+    return;
+}
+
+static void
+fnct_BdMPolyFromWKB1 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdMPolyFromWKB(WKB encoded MULTILINESTRING)
+/
+/ returns the current geometry [MULTIPOLYGON] by parsing a WKB encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    int n_bytes;
+    const unsigned char *wkb;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    wkb = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!check_wkb (wkb, n_bytes, -1))
+	return;
+    geo = gaiaFromWkb (wkb, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = -1;
+    fnct_aux_polygonize (context, geo, 1, 1);
+    return;
+}
+
+static void
+fnct_BdMPolyFromWKB2 (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ BdMPolyFromWKB(WKB encoded MULTILINESTRING)
+/
+/ returns the current geometry [MULTIPOLYGON] by parsing a WKB encoded MULTILINESTRING 
+/ or NULL if any error is encountered
+/
+*/
+    int n_bytes;
+    const unsigned char *wkb;
+    gaiaGeomCollPtr geo = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_INTEGER)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    wkb = sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (!check_wkb (wkb, n_bytes, -1))
+	return;
+    geo = gaiaFromWkb (wkb, n_bytes);
+    if (geo == NULL)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (geo->DeclaredType != GAIA_MULTILINESTRING)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    geo->Srid = sqlite3_value_int (argv[1]);
+    fnct_aux_polygonize (context, geo, 1, 1);
+    return;
+}
+
+#ifdef GEOS_ADVANCED		/* GEOS advanced and experimental features */
+
+static void
+fnct_OffsetCurve (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ OffsetCurve(BLOBencoded geometry, radius, left-or-right-side)
+/
+/ returns a new geometry representing the OFFSET-CURVE for current geometry
+/ [a LINESTRING is expected]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    double radius;
+    int int_value;
+    int left_right;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	radius = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  radius = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	left_right = sqlite3_value_int (argv[2]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaOffsetCurve (geo, radius, 16, left_right);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_SingleSidedBuffer (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ SingleSidedBuffer(BLOBencoded geometry, radius, left-or-right-side)
+/
+/ returns a new geometry representing the SingleSided BUFFER 
+/ for current geometry [a LINESTRING is expected]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    double radius;
+    int int_value;
+    int left_right;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	radius = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  radius = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	left_right = sqlite3_value_int (argv[2]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaSingleSidedBuffer (geo, radius, 16, left_right);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_HausdorffDistance (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ HausdorffDistance(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns the discrete Hausdorff distance between GEOM-1 and GEOM-2
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    double dist;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  ret = gaiaHausdorffDistance (geo1, geo2, &dist);
+	  if (!ret)
+	      sqlite3_result_null (context);
+	  sqlite3_result_double (context, dist);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_SharedPaths (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ SharedPaths(BLOBencoded geometry1, BLOBencoded geometry2)
+/
+/ returns a new geometry representing common (shared) Edges
+/ [two LINESTRINGs/MULTILINESTRINGs are expected]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo1 == NULL || geo2 == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaSharedPaths (geo1, geo2);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo1->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Covers (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Covers(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if GEOM-1 "spatially covers" GEOM-2
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollCovers (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_CoveredBy (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ CoveredBy(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns:
+/ 1 if GEOM-1 is "spatially covered by" GEOM-2
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_int (context, -1);
+    else
+      {
+	  ret = gaiaGeomCollCoveredBy (geo1, geo2);
+	  sqlite3_result_int (context, ret);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_LineInterpolatePoint (sqlite3_context * context, int argc,
+			   sqlite3_value ** argv)
+{
+/* SQL function:
+/ LineInterpolatePoint(BLOBencoded geometry1, double fraction)
+/
+/ returns a new geometry representing a point interpolated along a line
+/ [a LINESTRING is expected / fraction ranging from 0.0 to 1.0]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int int_value;
+    double fraction;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	fraction = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  fraction = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaLineInterpolatePoint (geo, fraction);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_LineLocatePoint (sqlite3_context * context, int argc,
+		      sqlite3_value ** argv)
+{
+/* SQL function:
+/ LineLocatePoint(BLOBencoded geometry1, BLOBencoded geometry2)
+/
+/ return a number (between 0.0 and 1.0) representing the location 
+/ of the closest point on LineString to the given Point, as a fraction 
+/ of total 2d line length
+/
+/ - geom1 is expected to represent some LINESTRING
+/ - geom2 is expected to represent some POINT
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double fraction;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo1 == NULL || geo2 == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  fraction = gaiaLineLocatePoint (geo1, geo2);
+	  if (fraction >= 0.0 && fraction <= 1.0)
+	      sqlite3_result_double (context, fraction);
+	  else
+	      sqlite3_result_null (context);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_LineSubstring (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ LineSubstring(BLOBencoded geometry1, double start_fraction, double end_fraction)
+/
+/ Return a Linestring being a substring of the input one starting and ending at 
+/ the given fractions of total 2d length [fractions ranging from 0.0 to 1.0]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int int_value;
+    double fraction1;
+    double fraction2;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	fraction1 = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  fraction1 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	fraction2 = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  fraction2 = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaLineSubstring (geo, fraction1, fraction2);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_ClosestPoint (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ ClosestPoint(BLOBencoded geometry1, BLOBencoded geometry2)
+/
+/ Returns the Point on geom1 that is closest to geom2
+/ NULL is returned for invalid arguments (or if distance is ZERO)
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo1 == NULL || geo2 == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaShortestLine (geo1, geo2);
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else if (result->FirstLinestring == NULL)
+	    {
+		gaiaFreeGeomColl (result);
+		sqlite3_result_null (context);
+	    }
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		double x;
+		double y;
+		double z;
+		double m;
+		int len;
+		unsigned char *p_result = NULL;
+		gaiaGeomCollPtr pt = NULL;
+		gaiaLinestringPtr ln = result->FirstLinestring;
+		if (ln->DimensionModel == GAIA_XY_Z)
+		    pt = gaiaAllocGeomCollXYZ ();
+		else if (ln->DimensionModel == GAIA_XY_M)
+		    pt = gaiaAllocGeomCollXYM ();
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		    pt = gaiaAllocGeomCollXYZM ();
+		else
+		    pt = gaiaAllocGeomColl ();
+		if (ln->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (ln->Coords, 0, &x, &y, &z);
+		      gaiaAddPointToGeomCollXYZ (pt, x, y, z);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (ln->Coords, 0, &x, &y, &m);
+		      gaiaAddPointToGeomCollXYM (pt, x, y, m);
+		  }
+		else if (ln->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (ln->Coords, 0, &x, &y, &z, &m);
+		      gaiaAddPointToGeomCollXYZM (pt, x, y, z, m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (ln->Coords, 0, &x, &y);
+		      gaiaAddPointToGeomColl (pt, x, y);
+		  }
+		pt->Srid = geo1->Srid;
+		gaiaToSpatiaLiteBlobWkb (pt, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+		gaiaFreeGeomColl (pt);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_ShortestLine (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ ShortestLine(BLOBencoded geometry1, BLOBencoded geometry2)
+/
+/ Returns the shortest line between two geometries
+/ NULL is returned for invalid arguments (or if distance is ZERO)
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo1 == NULL || geo2 == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaShortestLine (geo1, geo2);
+	  sqlite3_result_null (context);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo1->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_Snap (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ Snap(BLOBencoded geometry1, BLOBencoded geometry2, double tolerance)
+/
+/ Returns a new Geometry corresponding to geom1 snapped to geom2
+/ and using the given tolerance
+/ NULL is returned for invalid arguments (or if distance is ZERO)
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int int_value;
+    double tolerance;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_FLOAT)
+	tolerance = sqlite3_value_double (argv[2]);
+    else if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[2]);
+	  tolerance = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo1 == NULL || geo2 == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaSnap (geo1, geo2, tolerance);
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo1->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_LineMerge (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ LineMerge(BLOBencoded geometry)
+/
+/ Assuming that Geometry represents a set of sparse Linestrings,
+/ this function will attempt to reassemble a single line
+/ (or a set of lines)
+/ NULL is returned for invalid arguments
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaLineMerge (geo);
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+
+static void
+fnct_UnaryUnion (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ UnaryUnion(BLOBencoded geometry)
+/
+/ exactly like Union, but using a single Collection
+/ NULL is returned for invalid arguments
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (geo == NULL)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaUnaryUnion (geo);
+	  if (result == NULL)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+#endif /* end GEOS advanced and experimental features */
+
+#endif /* end including GEOS */
+
+#ifndef OMIT_MATHSQL		/* supporting SQL math functions */
+
+static void
+fnct_math_acos (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ acos(double X)
+/
+/ Returns the arc cosine of X, that is, the value whose cosine is X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    errno = 0;
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = acos (sqlite3_value_double (argv[0]));
+	  if (errno == EDOM)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = acos (x);
+	  if (errno == EDOM)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_asin (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ asin(double X)
+/
+/ Returns the arc sine of X, that is, the value whose sine is X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    errno = 0;
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = asin (sqlite3_value_double (argv[0]));
+	  if (errno == EDOM)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = asin (x);
+	  if (errno == EDOM)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_atan (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ atan(double X)
+/
+/ Returns the arc tangent of X, that is, the value whose tangent is X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = atan (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = atan (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_ceil (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ ceil(double X)
+/
+/ Returns the smallest integer value not less than X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = ceil (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = ceil (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_cos (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ cos(double X)
+/
+/ Returns the cosine of X, where X is given in radians
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = cos (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = cos (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_cot (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ cot(double X)
+/
+/ Returns the cotangent of X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    double tang;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    tang = tan (x);
+    if (tang == 0.0)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    x = 1.0 / tang;
+    sqlite3_result_double (context, x);
+}
+
+static void
+fnct_math_degrees (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ degrees(double X)
+/
+/ Returns the argument X, converted from radians to degrees
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    x = x * 57.29577951308232;
+    sqlite3_result_double (context, x);
+}
+
+static void
+fnct_math_exp (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ exp(double X)
+/
+/ Returns the value of e (the base of natural logarithms) raised to the power of X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = exp (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = exp (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_floor (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ floor(double X)
+/
+/ Returns the largest integer value not greater than X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = floor (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = floor (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_logn (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ log(double X)
+/
+/ Returns the natural logarithm of X; that is, the base-e logarithm of X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    errno = 0;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = log (sqlite3_value_double (argv[0]));
+	  if (errno == EDOM || errno == ERANGE)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = log (x);
+	  if (errno == EDOM || errno == ERANGE)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_logn2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ log(double B, double X)
+/
+/ Returns the logarithm of X to the base B
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x = 0.0;
+    double b = 1.0;
+    double log1;
+    double log2;
+    errno = 0;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	b = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  b = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (x <= 0.0 || b <= 1.0)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    log1 = log (x);
+    if (errno == EDOM || errno == ERANGE)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    log2 = log (b);
+    if (errno == EDOM || errno == ERANGE)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    sqlite3_result_double (context, log1 / log2);
+}
+
+static void
+fnct_math_log_2 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ log2(double X)
+/
+/ Returns the base-2 logarithm of X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    double log1;
+    double log2;
+    errno = 0;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    log1 = log (x);
+    if (errno == EDOM || errno == ERANGE)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    log2 = log (2.0);
+    sqlite3_result_double (context, log1 / log2);
+}
+
+static void
+fnct_math_log_10 (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ log10(double X)
+/
+/ Returns the base-10 logarithm of X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    double log1;
+    double log2;
+    GAIA_UNUSED ();
+    errno = 0;
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    log1 = log (x);
+    if (errno == EDOM || errno == ERANGE)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    log2 = log (10.0);
+    sqlite3_result_double (context, log1 / log2);
+}
+
+static void
+fnct_math_pi (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ pi(void)
+/
+/ Returns the value of (pi)
+*/
+    GAIA_UNUSED ();
+    sqlite3_result_double (context, 3.14159265358979323846);
+}
+
+static void
+fnct_math_pow (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ pow(double X, double Y)
+/
+/ Returns the value of X raised to the power of Y.
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    double y;
+    double p;
+    GAIA_UNUSED ();
+    errno = 0;
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	y = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  y = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p = pow (x, y);
+    if (errno == EDOM)
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_double (context, p);
+}
+
+static void
+fnct_math_stddev_step (sqlite3_context * context, int argc,
+		       sqlite3_value ** argv)
+{
+/* SQL function:
+/ stddev_pop(double X)
+/ stddev_samp(double X)
+/ var_pop(double X)
+/ var_samp(double X)
+/
+/ aggregate function - STEP
+/
+*/
+    struct stddev_str *p;
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+	return;
+    p = sqlite3_aggregate_context (context, sizeof (struct stddev_str));
+    if (!(p->cleaned))
+      {
+	  p->cleaned = 1;
+	  p->mean = x;
+	  p->quot = 0.0;
+	  p->count = 0.0;
+      }
+    p->count += 1.0;
+    p->quot =
+	p->quot +
+	(((p->count - 1.0) * ((x - p->mean) * (x - p->mean))) / p->count);
+    p->mean = p->mean + ((x - p->mean) / p->count);
+}
+
+static void
+fnct_math_stddev_pop_final (sqlite3_context * context)
+{
+/* SQL function:
+/ stddev_pop(double X)
+/ aggregate function -  FINAL
+/
+*/
+    double x;
+    struct stddev_str *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    x = sqrt (p->quot / p->count);
+    sqlite3_result_double (context, x);
+}
+
+static void
+fnct_math_stddev_samp_final (sqlite3_context * context)
+{
+/* SQL function:
+/ stddev_samp(double X)
+/ aggregate function -  FINAL
+/
+*/
+    double x;
+    struct stddev_str *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    x = sqrt (p->quot / (p->count - 1.0));
+    sqlite3_result_double (context, x);
+}
+
+static void
+fnct_math_var_pop_final (sqlite3_context * context)
+{
+/* SQL function:
+/ var_pop(double X)
+/ aggregate function -  FINAL
+/
+*/
+    double x;
+    struct stddev_str *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    x = p->quot / p->count;
+    sqlite3_result_double (context, x);
+}
+
+static void
+fnct_math_var_samp_final (sqlite3_context * context)
+{
+/* SQL function:
+/ var_samp(double X)
+/ aggregate function -  FINAL
+/
+*/
+    double x;
+    struct stddev_str *p = sqlite3_aggregate_context (context, 0);
+    if (!p)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    x = p->quot / (p->count - 1.0);
+    sqlite3_result_double (context, x);
+}
+
+static void
+fnct_math_radians (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ radians(double X)
+/
+/ Returns the argument X, converted from degrees to radians
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    x = x * .0174532925199432958;
+    sqlite3_result_double (context, x);
+}
+
+
+static void
+fnct_math_round (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ round(double X)
+/
+/ Returns the the nearest integer, but round halfway cases away from zero
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = math_round (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = math_round (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_sign (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ sign(double X)
+/
+/ Returns the sign of the argument as -1, 0, or 1, depending on whether X is negative, zero, or positive
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	x = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (x > 0.0)
+	sqlite3_result_double (context, 1.0);
+    else if (x < 0.0)
+	sqlite3_result_double (context, -1.0);
+    else
+	sqlite3_result_double (context, 0.0);
+}
+
+static void
+fnct_math_sin (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ sin(double X)
+/
+/ Returns the sine of X, where X is given in radians
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = sin (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = sin (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_sqrt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ sqrt(double X)
+/
+/ Returns the square root of a non-negative number X
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    errno = 0;
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = sqrt (sqlite3_value_double (argv[0]));
+	  if (errno)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = sqrt (x);
+	  if (errno == EDOM)
+	      sqlite3_result_null (context);
+	  else
+	      sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+fnct_math_tan (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ tan(double X)
+/
+/ Returns the tangent of X, where X is given in radians
+/ or NULL if any error is encountered
+*/
+    int int_value;
+    double x;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+      {
+	  x = tan (sqlite3_value_double (argv[0]));
+	  sqlite3_result_double (context, x);
+      }
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  x = int_value;
+	  x = tan (x);
+	  sqlite3_result_double (context, x);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+#endif /* end supporting SQL math functions */
+
+static void
+fnct_GeomFromExifGpsBlob (sqlite3_context * context, int argc,
+			  sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeomFromExifGpsBlob(BLOB encoded image)
+/
+/ returns:
+/ a POINT geometry
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geom;
+    unsigned char *geoblob;
+    int geosize;
+    double longitude;
+    double latitude;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    if (gaiaGetGpsCoords (p_blob, n_bytes, &longitude, &latitude))
+      {
+	  geom = gaiaAllocGeomColl ();
+	  geom->Srid = 4326;
+	  gaiaAddPointToGeomColl (geom, longitude, latitude);
+	  gaiaToSpatiaLiteBlobWkb (geom, &geoblob, &geosize);
+	  gaiaFreeGeomColl (geom);
+	  sqlite3_result_blob (context, geoblob, geosize, free);
+      }
+    else
+	sqlite3_result_null (context);
+}
+
+static void
+blob_guess (sqlite3_context * context, int argc, sqlite3_value ** argv,
+	    int request)
+{
+/* SQL function:
+/ IsGifBlob(BLOB encoded image)
+/ IsPngBlob, IsJpegBlob, IsExifBlob, IsExifGpsBlob, IsTiffBlob,
+/ IsZipBlob, IsPdfBlob,IsGeometryBlob
+/
+/ returns:
+/ 1 if the required BLOB_TYPE is TRUE
+/ 0 otherwise
+/ or -1 if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    int blob_type;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_int (context, -1);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    blob_type = gaiaGuessBlobType (p_blob, n_bytes);
+    if (request == GAIA_GEOMETRY_BLOB)
+      {
+	  if (blob_type == GAIA_GEOMETRY_BLOB)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_ZIP_BLOB)
+      {
+	  if (blob_type == GAIA_ZIP_BLOB)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_PDF_BLOB)
+      {
+	  if (blob_type == GAIA_PDF_BLOB)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_TIFF_BLOB)
+      {
+	  if (blob_type == GAIA_TIFF_BLOB)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_GIF_BLOB)
+      {
+	  if (blob_type == GAIA_GIF_BLOB)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_PNG_BLOB)
+      {
+	  if (blob_type == GAIA_PNG_BLOB)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_JPEG_BLOB)
+      {
+	  if (blob_type == GAIA_JPEG_BLOB || blob_type == GAIA_EXIF_BLOB
+	      || blob_type == GAIA_EXIF_GPS_BLOB)
+	      sqlite3_result_int (context, 1);
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_EXIF_BLOB)
+      {
+	  if (blob_type == GAIA_EXIF_BLOB || blob_type == GAIA_EXIF_GPS_BLOB)
+	    {
+		sqlite3_result_int (context, 1);
+	    }
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    if (request == GAIA_EXIF_GPS_BLOB)
+      {
+	  if (blob_type == GAIA_EXIF_GPS_BLOB)
+	    {
+		sqlite3_result_int (context, 1);
+	    }
+	  else
+	      sqlite3_result_int (context, 0);
+	  return;
+      }
+    sqlite3_result_int (context, -1);
+}
+
+/*
+/ the following functions simply readdress the blob_guess()
+/ setting the appropriate request mode
+*/
+
+static void
+fnct_IsGeometryBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_GEOMETRY_BLOB);
+}
+
+static void
+fnct_IsZipBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_ZIP_BLOB);
+}
+
+static void
+fnct_IsPdfBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_PDF_BLOB);
+}
+
+static void
+fnct_IsTiffBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_TIFF_BLOB);
+}
+
+static void
+fnct_IsGifBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_GIF_BLOB);
+}
+
+static void
+fnct_IsPngBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_PNG_BLOB);
+}
+
+static void
+fnct_IsJpegBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_JPEG_BLOB);
+}
+
+static void
+fnct_IsExifBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_EXIF_BLOB);
+}
+
+static void
+fnct_IsExifGpsBlob (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    blob_guess (context, argc, argv, GAIA_EXIF_GPS_BLOB);
+}
+
+static void
+fnct_GeodesicLength (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ GeodesicLength(BLOB encoded GEOMETRYCOLLECTION)
+/
+/ returns  the total Geodesic length for current geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double l;
+    double length = 0.0;
+    double a;
+    double b;
+    double rf;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    int ib;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (get_ellipse_params (sqlite, geo->Srid, &a, &b, &rf))
+	    {
+		line = geo->FirstLinestring;
+		while (line)
+		  {
+		      /* Linestrings */
+		      l = gaiaGeodesicTotalLength (a, b, rf,
+						   line->DimensionModel,
+						   line->Coords, line->Points);
+		      if (l < 0.0)
+			{
+			    length = -1.0;
+			    break;
+			}
+		      length += l;
+		      line = line->Next;
+		  }
+		if (length >= 0)
+		  {
+		      /* Polygons */
+		      polyg = geo->FirstPolygon;
+		      while (polyg)
+			{
+			    /* exterior Ring */
+			    ring = polyg->Exterior;
+			    l = gaiaGeodesicTotalLength (a, b, rf,
+							 ring->DimensionModel,
+							 ring->Coords,
+							 ring->Points);
+			    if (l < 0.0)
+			      {
+				  length = -1.0;
+				  break;
+			      }
+			    length += l;
+			    for (ib = 0; ib < polyg->NumInteriors; ib++)
+			      {
+				  /* interior Rings */
+				  ring = polyg->Interiors + ib;
+				  l = gaiaGeodesicTotalLength (a, b, rf,
+							       ring->
+							       DimensionModel,
+							       ring->Coords,
+							       ring->Points);
+				  if (l < 0.0)
+				    {
+					length = -1.0;
+					break;
+				    }
+				  length += l;
+			      }
+			    if (length < 0.0)
+				break;
+			    polyg = polyg->Next;
+			}
+		  }
+		if (length < 0.0)
+		    sqlite3_result_null (context);
+		else
+		    sqlite3_result_double (context, length);
+	    }
+	  else
+	      sqlite3_result_null (context);
+	  gaiaFreeGeomColl (geo);
+      }
+}
+
+static void
+fnct_GreatCircleLength (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ GreatCircleLength(BLOB encoded GEOMETRYCOLLECTION)
+/
+/ returns  the total Great Circle length for current geometry 
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    double length = 0.0;
+    double a;
+    double b;
+    double rf;
+    gaiaGeomCollPtr geo = NULL;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    gaiaRingPtr ring;
+    int ib;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  if (get_ellipse_params (sqlite, geo->Srid, &a, &b, &rf))
+	    {
+		line = geo->FirstLinestring;
+		while (line)
+		  {
+		      /* Linestrings */
+		      length +=
+			  gaiaGreatCircleTotalLength (a, b,
+						      line->DimensionModel,
+						      line->Coords,
+						      line->Points);
+		      line = line->Next;
+		  }
+		if (length >= 0)
+		  {
+		      /* Polygons */
+		      polyg = geo->FirstPolygon;
+		      while (polyg)
+			{
+			    /* exterior Ring */
+			    ring = polyg->Exterior;
+			    length +=
+				gaiaGreatCircleTotalLength (a, b,
+							    ring->
+							    DimensionModel,
+							    ring->Coords,
+							    ring->Points);
+			    for (ib = 0; ib < polyg->NumInteriors; ib++)
+			      {
+				  /* interior Rings */
+				  ring = polyg->Interiors + ib;
+				  length +=
+				      gaiaGreatCircleTotalLength (a, b,
+								  ring->
+								  DimensionModel,
+								  ring->Coords,
+								  ring->Points);
+			      }
+			    polyg = polyg->Next;
+			}
+		  }
+		sqlite3_result_double (context, length);
+	    }
+	  else
+	      sqlite3_result_null (context);
+	  gaiaFreeGeomColl (geo);
+      }
+}
+
+static void
+convertUnit (sqlite3_context * context, int argc, sqlite3_value ** argv,
+	     int unit_from, int unit_to)
+{
+/* SQL functions:
+/ CvtToKm(), CvtToDm(), CvtToCm(), CvtToMm(), CvtToKmi(), CvtToIn(), CvtToFt(),
+/ CvtToYd(), CvtToMi(), CvtToFath(), CvtToCh(), CvtToLink(), CvtToUsIn(), 
+/ CvtToUsFt(), CvtToUsYd(), CvtToUsCh(), CvtToUsMi(), CvtToIndFt(), 
+/ CvtToIndYd(), CvtToIndCh(), 
+/ CvtFromKm(), CvtFromDm(), CvtFromCm(), CvtFromMm(), CvtFromKmi(), 
+/ CvtFromIn(), CvtFromFt(), CvtFromYd(), CvtFromMi(), CvtFromFath(), 
+/ CvtFromCh(), CvtFromLink(), CvtFromUsIn(), CvtFromUsFt(), CvtFromUsYd(), 
+/ CvtFromUsCh(), CvtFromUsMi(), CvtFromIndFt(), CvtFromIndYd(), 
+/ CvtFromIndCh()
+/
+/ converts a Length from one unit to a different one
+/ or NULL if any error is encountered
+*/
+    double cvt;
+    double value;
+    int int_value;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
+	value = sqlite3_value_double (argv[0]);
+    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[0]);
+	  value = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (!gaiaConvertLength (value, unit_from, unit_to, &cvt))
+	sqlite3_result_null (context);
+    else
+	sqlite3_result_double (context, cvt);
+}
+
+static void
+fnct_cvtToKm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_KM);
+}
+
+static void
+fnct_cvtToDm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_DM);
+}
+
+static void
+fnct_cvtToCm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_CM);
+}
+
+static void
+fnct_cvtToMm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_MM);
+}
+
+static void
+fnct_cvtToKmi (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_KMI);
+}
+
+static void
+fnct_cvtToIn (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_IN);
+}
+
+static void
+fnct_cvtToFt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_FT);
+}
+
+static void
+fnct_cvtToYd (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_YD);
+}
+
+static void
+fnct_cvtToMi (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_MI);
+}
+
+static void
+fnct_cvtToFath (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_FATH);
+}
+
+static void
+fnct_cvtToCh (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_CH);
+}
+
+static void
+fnct_cvtToLink (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_LINK);
+}
+
+static void
+fnct_cvtToUsIn (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_US_IN);
+}
+
+static void
+fnct_cvtToUsFt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_US_FT);
+}
+
+static void
+fnct_cvtToUsYd (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_US_YD);
+}
+
+static void
+fnct_cvtToUsCh (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_US_CH);
+}
+
+static void
+fnct_cvtToUsMi (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_US_MI);
+}
+
+static void
+fnct_cvtToIndFt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_IND_FT);
+}
+
+static void
+fnct_cvtToIndYd (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_IND_YD);
+}
+
+static void
+fnct_cvtToIndCh (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_M, GAIA_IND_CH);
+}
+
+static void
+fnct_cvtFromKm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_KM, GAIA_M);
+}
+
+static void
+fnct_cvtFromDm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_DM, GAIA_M);
+}
+
+static void
+fnct_cvtFromCm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_CM, GAIA_M);
+}
+
+static void
+fnct_cvtFromMm (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_MM, GAIA_M);
+}
+
+static void
+fnct_cvtFromKmi (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_KMI, GAIA_M);
+}
+
+static void
+fnct_cvtFromIn (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_IN, GAIA_M);
+}
+
+static void
+fnct_cvtFromFt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_FT, GAIA_M);
+}
+
+static void
+fnct_cvtFromYd (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_YD, GAIA_M);
+}
+
+static void
+fnct_cvtFromMi (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_MI, GAIA_M);
+}
+
+static void
+fnct_cvtFromFath (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_FATH, GAIA_M);
+}
+
+static void
+fnct_cvtFromCh (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_CH, GAIA_M);
+}
+
+static void
+fnct_cvtFromLink (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_LINK, GAIA_M);
+}
+
+static void
+fnct_cvtFromUsIn (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_US_IN, GAIA_M);
+}
+
+static void
+fnct_cvtFromUsFt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_US_FT, GAIA_M);
+}
+
+static void
+fnct_cvtFromUsYd (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_US_YD, GAIA_M);
+}
+
+static void
+fnct_cvtFromUsCh (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_US_CH, GAIA_M);
+}
+
+static void
+fnct_cvtFromUsMi (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_US_MI, GAIA_M);
+}
+
+static void
+fnct_cvtFromIndFt (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_IND_FT, GAIA_M);
+}
+
+static void
+fnct_cvtFromIndYd (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_IND_YD, GAIA_M);
+}
+
+static void
+fnct_cvtFromIndCh (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+    convertUnit (context, argc, argv, GAIA_IND_CH, GAIA_M);
+}
+
+static void
+register_spatialite_sql_functions (sqlite3 * db)
+{
+    sqlite3_create_function (db, "spatialite_version", 0, SQLITE_ANY, 0,
+			     fnct_spatialite_version, 0, 0);
+    sqlite3_create_function (db, "proj4_version", 0, SQLITE_ANY, 0,
+			     fnct_proj4_version, 0, 0);
+    sqlite3_create_function (db, "geos_version", 0, SQLITE_ANY, 0,
+			     fnct_geos_version, 0, 0);
+    sqlite3_create_function (db, "GeometryConstraints", 3, SQLITE_ANY, 0,
+			     fnct_GeometryConstraints, 0, 0);
+    sqlite3_create_function (db, "GeometryConstraints", 4, SQLITE_ANY, 0,
+			     fnct_GeometryConstraints, 0, 0);
+    sqlite3_create_function (db, "RTreeAlign", 3, SQLITE_ANY, 0,
+			     fnct_RTreeAlign, 0, 0);
+    sqlite3_create_function (db, "CheckSpatialMetaData", 0, SQLITE_ANY, 0,
+			     fnct_CheckSpatialMetaData, 0, 0);
+    sqlite3_create_function (db, "AutoFDOStart", 0, SQLITE_ANY, 0,
+			     fnct_AutoFDOStart, 0, 0);
+    sqlite3_create_function (db, "AutoFDOStop", 0, SQLITE_ANY, 0,
+			     fnct_AutoFDOStop, 0, 0);
+    sqlite3_create_function (db, "InitFDOSpatialMetaData", 0, SQLITE_ANY, 0,
+			     fnct_InitFDOSpatialMetaData, 0, 0);
+    sqlite3_create_function (db, "AddFDOGeometryColumn", 6, SQLITE_ANY, 0,
+			     fnct_AddFDOGeometryColumn, 0, 0);
+    sqlite3_create_function (db, "RecoverFDOGeometryColumn", 6, SQLITE_ANY, 0,
+			     fnct_RecoverFDOGeometryColumn, 0, 0);
+    sqlite3_create_function (db, "DiscardFDOGeometryColumn", 2, SQLITE_ANY, 0,
+			     fnct_DiscardFDOGeometryColumn, 0, 0);
+    sqlite3_create_function (db, "InitSpatialMetaData", 0, SQLITE_ANY, 0,
+			     fnct_InitSpatialMetaData, 0, 0);
+    sqlite3_create_function (db, "AddGeometryColumn", 5, SQLITE_ANY, 0,
+			     fnct_AddGeometryColumn, 0, 0);
+    sqlite3_create_function (db, "AddGeometryColumn", 6, SQLITE_ANY, 0,
+			     fnct_AddGeometryColumn, 0, 0);
+    sqlite3_create_function (db, "RecoverGeometryColumn", 5, SQLITE_ANY, 0,
+			     fnct_RecoverGeometryColumn, 0, 0);
+    sqlite3_create_function (db, "DiscardGeometryColumn", 2, SQLITE_ANY, 0,
+			     fnct_DiscardGeometryColumn, 0, 0);
+    sqlite3_create_function (db, "RecoverSpatialIndex", 0, SQLITE_ANY, 0,
+			     fnct_RecoverSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "RecoverSpatialIndex", 1, SQLITE_ANY, 0,
+			     fnct_RecoverSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "RecoverSpatialIndex", 2, SQLITE_ANY, 0,
+			     fnct_RecoverSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "RecoverSpatialIndex", 3, SQLITE_ANY, 0,
+			     fnct_RecoverSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "CheckSpatialIndex", 0, SQLITE_ANY, 0,
+			     fnct_CheckSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "CheckSpatialIndex", 2, SQLITE_ANY, 0,
+			     fnct_CheckSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "CreateSpatialIndex", 2, SQLITE_ANY, 0,
+			     fnct_CreateSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "CreateMbrCache", 2, SQLITE_ANY, 0,
+			     fnct_CreateMbrCache, 0, 0);
+    sqlite3_create_function (db, "DisableSpatialIndex", 2, SQLITE_ANY, 0,
+			     fnct_DisableSpatialIndex, 0, 0);
+    sqlite3_create_function (db, "RebuildGeometryTriggers", 2, SQLITE_ANY, 0,
+			     fnct_RebuildGeometryTriggers, 0, 0);
+    sqlite3_create_function (db, "CreateTopologyTables", 2, SQLITE_ANY, 0,
+			     fnct_CreateTopologyTables, 0, 0);
+    sqlite3_create_function (db, "CreateTopologyTables", 3, SQLITE_ANY, 0,
+			     fnct_CreateTopologyTables, 0, 0);
+    sqlite3_create_function (db, "UpdateLayerStatistics", 0, SQLITE_ANY, 0,
+			     fnct_UpdateLayerStatistics, 0, 0);
+    sqlite3_create_function (db, "UpdateLayerStatistics", 1, SQLITE_ANY, 0,
+			     fnct_UpdateLayerStatistics, 0, 0);
+    sqlite3_create_function (db, "UpdateLayerStatistics", 2, SQLITE_ANY, 0,
+			     fnct_UpdateLayerStatistics, 0, 0);
+    sqlite3_create_function (db, "AsText", 1, SQLITE_ANY, 0, fnct_AsText, 0, 0);
+    sqlite3_create_function (db, "ST_AsText", 1, SQLITE_ANY, 0, fnct_AsText,
+			     0, 0);
+    sqlite3_create_function (db, "AsWkt", 1, SQLITE_ANY, 0, fnct_AsWkt, 0, 0);
+    sqlite3_create_function (db, "AsWkt", 2, SQLITE_ANY, 0, fnct_AsWkt, 0, 0);
+    sqlite3_create_function (db, "AsSvg", 1, SQLITE_ANY, 0, fnct_AsSvg1, 0, 0);
+    sqlite3_create_function (db, "AsSvg", 2, SQLITE_ANY, 0, fnct_AsSvg2, 0, 0);
+    sqlite3_create_function (db, "AsSvg", 3, SQLITE_ANY, 0, fnct_AsSvg3, 0, 0);
+
+#ifndef OMIT_PROJ		/* PROJ.4 is strictly required to support KML */
+    sqlite3_create_function (db, "AsKml", 1, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
+    sqlite3_create_function (db, "AsKml", 2, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
+    sqlite3_create_function (db, "AsKml", 3, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
+    sqlite3_create_function (db, "AsKml", 4, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
+#endif /* end including PROJ.4 */
+
+    sqlite3_create_function (db, "AsGml", 1, SQLITE_ANY, 0, fnct_AsGml, 0, 0);
+    sqlite3_create_function (db, "AsGml", 2, SQLITE_ANY, 0, fnct_AsGml, 0, 0);
+    sqlite3_create_function (db, "AsGml", 3, SQLITE_ANY, 0, fnct_AsGml, 0, 0);
+    sqlite3_create_function (db, "GeomFromGml", 1, SQLITE_ANY, 0,
+			     fnct_FromGml, 0, 0);
+    sqlite3_create_function (db, "AsGeoJSON", 1, SQLITE_ANY, 0, fnct_AsGeoJSON,
+			     0, 0);
+    sqlite3_create_function (db, "AsGeoJSON", 2, SQLITE_ANY, 0, fnct_AsGeoJSON,
+			     0, 0);
+    sqlite3_create_function (db, "AsGeoJSON", 3, SQLITE_ANY, 0, fnct_AsGeoJSON,
+			     0, 0);
+    sqlite3_create_function (db, "GeomFromGeoJSON", 1, SQLITE_ANY, 0,
+			     fnct_FromGeoJSON, 0, 0);
+    sqlite3_create_function (db, "GeomFromKml", 1, SQLITE_ANY, 0,
+			     fnct_FromKml, 0, 0);
+    sqlite3_create_function (db, "AsFGF", 2, SQLITE_ANY, 0, fnct_AsFGF, 0, 0);
+    sqlite3_create_function (db, "GeomFromEWKB", 1, SQLITE_ANY, 0,
+			     fnct_FromEWKB, 0, 0);
+    sqlite3_create_function (db, "AsEWKB", 1, SQLITE_ANY, 0, fnct_ToEWKB, 0, 0);
+    sqlite3_create_function (db, "AsEWKT", 1, SQLITE_ANY, 0, fnct_ToEWKT, 0, 0);
+    sqlite3_create_function (db, "GeomFromEWKT", 1, SQLITE_ANY, 0,
+			     fnct_FromEWKT, 0, 0);
+    sqlite3_create_function (db, "AsBinary", 1, SQLITE_ANY, 0, fnct_AsBinary, 0,
+			     0);
+    sqlite3_create_function (db, "ST_AsBinary", 1, SQLITE_ANY, 0, fnct_AsBinary,
+			     0, 0);
+    sqlite3_create_function (db, "GeomFromText", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromText1, 0, 0);
+    sqlite3_create_function (db, "GeomFromText", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromText2, 0, 0);
+    sqlite3_create_function (db, "GeometryFromText", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromText1, 0, 0);
+    sqlite3_create_function (db, "GeometryFromText", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromText2, 0, 0);
+    sqlite3_create_function (db, "GeomCollFromText", 1, SQLITE_ANY, 0,
+			     fnct_GeomCollFromText1, 0, 0);
+    sqlite3_create_function (db, "GeomCollFromText", 2, SQLITE_ANY, 0,
+			     fnct_GeomCollFromText2, 0, 0);
+    sqlite3_create_function (db, "GeometryCollectionFromText", 1, SQLITE_ANY, 0,
+			     fnct_GeomCollFromText1, 0, 0);
+    sqlite3_create_function (db, "GeometryCollectionFromText", 2, SQLITE_ANY, 0,
+			     fnct_GeomCollFromText2, 0, 0);
+    sqlite3_create_function (db, "PointFromText", 1, SQLITE_ANY, 0,
+			     fnct_PointFromText1, 0, 0);
+    sqlite3_create_function (db, "PointFromText", 2, SQLITE_ANY, 0,
+			     fnct_PointFromText2, 0, 0);
+    sqlite3_create_function (db, "LineFromText", 1, SQLITE_ANY, 0,
+			     fnct_LineFromText1, 0, 0);
+    sqlite3_create_function (db, "LineFromText", 2, SQLITE_ANY, 0,
+			     fnct_LineFromText2, 0, 0);
+    sqlite3_create_function (db, "LineStringFromText", 1, SQLITE_ANY, 0,
+			     fnct_LineFromText1, 0, 0);
+    sqlite3_create_function (db, "LineStringFromText", 2, SQLITE_ANY, 0,
+			     fnct_LineFromText2, 0, 0);
+    sqlite3_create_function (db, "PolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromText1, 0, 0);
+    sqlite3_create_function (db, "PolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromText2, 0, 0);
+    sqlite3_create_function (db, "PolygonFromText", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromText1, 0, 0);
+    sqlite3_create_function (db, "PolygonFromText", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromText2, 0, 0);
+    sqlite3_create_function (db, "MPointFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromText1, 0, 0);
+    sqlite3_create_function (db, "MPointFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromText2, 0, 0);
+    sqlite3_create_function (db, "MultiPointFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromText1, 0, 0);
+    sqlite3_create_function (db, "MultiPointFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromText2, 0, 0);
+    sqlite3_create_function (db, "MLineFromText", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromText1, 0, 0);
+    sqlite3_create_function (db, "MLineFromText", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromText2, 0, 0);
+    sqlite3_create_function (db, "MultiLineStringFromText", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromText1, 0, 0);
+    sqlite3_create_function (db, "MultiLineStringFromText", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromText2, 0, 0);
+    sqlite3_create_function (db, "MPolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "MPolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "MultiPolygonFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "MultiPolygonFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "GeomFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb1, 0, 0);
+    sqlite3_create_function (db, "GeomFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb2, 0, 0);
+    sqlite3_create_function (db, "GeometryFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb1, 0, 0);
+    sqlite3_create_function (db, "GeometryFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb2, 0, 0);
+    sqlite3_create_function (db, "GeomCollFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_GeomCollFromWkb1, 0, 0);
+    sqlite3_create_function (db, "GeomCollFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_GeomCollFromWkb2, 0, 0);
+    sqlite3_create_function (db, "GeometryCollectionFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_GeomCollFromWkb1, 0, 0);
+    sqlite3_create_function (db, "GeometryCollectionFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_GeomCollFromWkb2, 0, 0);
+    sqlite3_create_function (db, "PointFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_PointFromWkb1, 0, 0);
+    sqlite3_create_function (db, "PointFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_PointFromWkb2, 0, 0);
+    sqlite3_create_function (db, "LineFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_LineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "LineFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_LineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "LineStringFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_LineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "LineStringFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_LineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "PolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "PolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "PolygonFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "PolygonFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "MPointFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb1, 0, 0);
+    sqlite3_create_function (db, "MPointFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb2, 0, 0);
+    sqlite3_create_function (db, "MultiPointFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb1, 0, 0);
+    sqlite3_create_function (db, "MultiPointFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb2, 0, 0);
+    sqlite3_create_function (db, "MLineFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "MLineFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "MultiLineStringFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "MultiLineStringFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "MPolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "MPolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "MultiPolygonFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "MultiPolygonFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_GeomFromText", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_GeomFromText", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryFromText", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryFromText", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_GeomCollFromText", 1, SQLITE_ANY, 0,
+			     fnct_GeomCollFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_GeomCollFromText", 2, SQLITE_ANY, 0,
+			     fnct_GeomCollFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryCollectionFromText", 1, SQLITE_ANY,
+			     0, fnct_GeomCollFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryCollectionFromText", 2, SQLITE_ANY,
+			     0, fnct_GeomCollFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_PointFromText", 1, SQLITE_ANY, 0,
+			     fnct_PointFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_PointFromText", 2, SQLITE_ANY, 0,
+			     fnct_PointFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_LineFromText", 1, SQLITE_ANY, 0,
+			     fnct_LineFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_LineFromText", 2, SQLITE_ANY, 0,
+			     fnct_LineFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_LineStringFromText", 1, SQLITE_ANY, 0,
+			     fnct_LineFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_LineStringFromText", 2, SQLITE_ANY, 0,
+			     fnct_LineFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_PolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_PolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_PolygonFromText", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_PolygonFromText", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_MPointFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_MPointFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPointFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPointFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_MLineFromText", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_MLineFromText", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_MultiLineStringFromText", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_MultiLineStringFromText", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_MPolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_MPolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPolygonFromText", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPolygonFromText", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_GeomFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_GeomFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_GeomFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_GeomCollFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_GeomCollFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_GeomCollFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_GeomCollFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryCollectionFromWKB", 1, SQLITE_ANY,
+			     0, fnct_GeomCollFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryCollectionFromWKB", 2, SQLITE_ANY,
+			     0, fnct_GeomCollFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_PointFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_PointFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_PointFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_PointFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_LineFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_LineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_LineFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_LineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_LineStringFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_LineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_LineStringFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_LineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_PolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_PolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_PolygonFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_PolygonFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_PolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_MPointFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_MPointFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPointFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPointFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPointFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_MLineFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_MLineFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_MultiLineStringFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_MultiLineStringFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MLineFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_MPolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_MPolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPolygonFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb1, 0, 0);
+    sqlite3_create_function (db, "ST_MultiPolygonFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_MPolyFromWkb2, 0, 0);
+    sqlite3_create_function (db, "GeomFromFGF", 1, SQLITE_ANY, 0,
+			     fnct_GeometryFromFGF1, 0, 0);
+    sqlite3_create_function (db, "GeomFromFGF", 2, SQLITE_ANY, 0,
+			     fnct_GeometryFromFGF2, 0, 0);
+    sqlite3_create_function (db, "CompressGeometry", 1, SQLITE_ANY, 0,
+			     fnct_CompressGeometry, 0, 0);
+    sqlite3_create_function (db, "UncompressGeometry", 1, SQLITE_ANY, 0,
+			     fnct_UncompressGeometry, 0, 0);
+    sqlite3_create_function (db, "SanitizeGeometry", 1, SQLITE_ANY, 0,
+			     fnct_SanitizeGeometry, 0, 0);
+    sqlite3_create_function (db, "CastToPoint", 1, SQLITE_ANY, 0,
+			     fnct_CastToPoint, 0, 0);
+    sqlite3_create_function (db, "CastToLinestring", 1, SQLITE_ANY, 0,
+			     fnct_CastToLinestring, 0, 0);
+    sqlite3_create_function (db, "CastToPolygon", 1, SQLITE_ANY, 0,
+			     fnct_CastToPolygon, 0, 0);
+    sqlite3_create_function (db, "CastToMultiPoint", 1, SQLITE_ANY, 0,
+			     fnct_CastToMultiPoint, 0, 0);
+    sqlite3_create_function (db, "CastToMultiLinestring", 1, SQLITE_ANY, 0,
+			     fnct_CastToMultiLinestring, 0, 0);
+    sqlite3_create_function (db, "CastToMultiPolygon", 1, SQLITE_ANY, 0,
+			     fnct_CastToMultiPolygon, 0, 0);
+    sqlite3_create_function (db, "CastToGeometryCollection", 1, SQLITE_ANY, 0,
+			     fnct_CastToGeometryCollection, 0, 0);
+    sqlite3_create_function (db, "CastToMulti", 1, SQLITE_ANY, 0,
+			     fnct_CastToMulti, 0, 0);
+    sqlite3_create_function (db, "ST_Multi", 1, SQLITE_ANY, 0, fnct_CastToMulti,
+			     0, 0);
+    sqlite3_create_function (db, "CastToSingle", 1, SQLITE_ANY, 0,
+			     fnct_CastToSingle, 0, 0);
+    sqlite3_create_function (db, "CastToXY", 1, SQLITE_ANY, 0, fnct_CastToXY, 0,
+			     0);
+    sqlite3_create_function (db, "CastToXYZ", 1, SQLITE_ANY, 0, fnct_CastToXYZ,
+			     0, 0);
+    sqlite3_create_function (db, "CastToXYM", 1, SQLITE_ANY, 0, fnct_CastToXYM,
+			     0, 0);
+    sqlite3_create_function (db, "CastToXYZM", 1, SQLITE_ANY, 0,
+			     fnct_CastToXYZM, 0, 0);
+    sqlite3_create_function (db, "ExtractMultiPoint", 1, SQLITE_ANY, 0,
+			     fnct_ExtractMultiPoint, 0, 0);
+    sqlite3_create_function (db, "ExtractMultiLinestring", 1, SQLITE_ANY, 0,
+			     fnct_ExtractMultiLinestring, 0, 0);
+    sqlite3_create_function (db, "ExtractMultiPolygon", 1, SQLITE_ANY, 0,
+			     fnct_ExtractMultiPolygon, 0, 0);
+    sqlite3_create_function (db, "Dimension", 1, SQLITE_ANY, 0, fnct_Dimension,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Dimension", 1, SQLITE_ANY, 0,
+			     fnct_Dimension, 0, 0);
+    sqlite3_create_function (db, "CoordDimension", 1, SQLITE_ANY, 0,
+			     fnct_CoordDimension, 0, 0);
+    sqlite3_create_function (db, "GeometryType", 1, SQLITE_ANY, 0,
+			     fnct_GeometryType, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryType", 1, SQLITE_ANY, 0,
+			     fnct_GeometryType, 0, 0);
+    sqlite3_create_function (db, "GeometryAliasType", 1, SQLITE_ANY, 0,
+			     fnct_GeometryAliasType, 0, 0);
+    sqlite3_create_function (db, "SridFromAuthCRS", 2, SQLITE_ANY, 0,
+			     fnct_SridFromAuthCRS, 0, 0);
+    sqlite3_create_function (db, "SRID", 1, SQLITE_ANY, 0, fnct_SRID, 0, 0);
+    sqlite3_create_function (db, "ST_SRID", 1, SQLITE_ANY, 0, fnct_SRID, 0, 0);
+    sqlite3_create_function (db, "SetSRID", 2, SQLITE_ANY, 0, fnct_SetSRID, 0,
+			     0);
+    sqlite3_create_function (db, "IsEmpty", 1, SQLITE_ANY, 0, fnct_IsEmpty, 0,
+			     0);
+    sqlite3_create_function (db, "ST_IsEmpty", 1, SQLITE_ANY, 0, fnct_IsEmpty,
+			     0, 0);
+    sqlite3_create_function (db, "Envelope", 1, SQLITE_ANY, 0, fnct_Envelope,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Envelope", 1, SQLITE_ANY, 0,
+			     fnct_Envelope, 0, 0);
+    sqlite3_create_function (db, "X", 1, SQLITE_ANY, 0, fnct_X, 0, 0);
+    sqlite3_create_function (db, "Y", 1, SQLITE_ANY, 0, fnct_Y, 0, 0);
+    sqlite3_create_function (db, "Z", 1, SQLITE_ANY, 0, fnct_Z, 0, 0);
+    sqlite3_create_function (db, "M", 1, SQLITE_ANY, 0, fnct_M, 0, 0);
+    sqlite3_create_function (db, "ST_X", 1, SQLITE_ANY, 0, fnct_X, 0, 0);
+    sqlite3_create_function (db, "ST_Y", 1, SQLITE_ANY, 0, fnct_Y, 0, 0);
+    sqlite3_create_function (db, "ST_Z", 1, SQLITE_ANY, 0, fnct_Z, 0, 0);
+    sqlite3_create_function (db, "ST_M", 1, SQLITE_ANY, 0, fnct_M, 0, 0);
+    sqlite3_create_function (db, "NumPoints", 1, SQLITE_ANY, 0,
+			     fnct_NumPoints, 0, 0);
+    sqlite3_create_function (db, "ST_NumPoints", 1, SQLITE_ANY, 0,
+			     fnct_NumPoints, 0, 0);
+    sqlite3_create_function (db, "StartPoint", 1, SQLITE_ANY, 0,
+			     fnct_StartPoint, 0, 0);
+    sqlite3_create_function (db, "EndPoint", 1, SQLITE_ANY, 0, fnct_EndPoint,
+			     0, 0);
+    sqlite3_create_function (db, "ST_StartPoint", 1, SQLITE_ANY, 0,
+			     fnct_StartPoint, 0, 0);
+    sqlite3_create_function (db, "ST_EndPoint", 1, SQLITE_ANY, 0,
+			     fnct_EndPoint, 0, 0);
+    sqlite3_create_function (db, "PointN", 2, SQLITE_ANY, 0, fnct_PointN, 0, 0);
+    sqlite3_create_function (db, "ST_PointN", 2, SQLITE_ANY, 0, fnct_PointN,
+			     0, 0);
+    sqlite3_create_function (db, "ExteriorRing", 1, SQLITE_ANY, 0,
+			     fnct_ExteriorRing, 0, 0);
+    sqlite3_create_function (db, "ST_ExteriorRing", 1, SQLITE_ANY, 0,
+			     fnct_ExteriorRing, 0, 0);
+    sqlite3_create_function (db, "NumInteriorRing", 1, SQLITE_ANY, 0,
+			     fnct_NumInteriorRings, 0, 0);
+    sqlite3_create_function (db, "NumInteriorRings", 1, SQLITE_ANY, 0,
+			     fnct_NumInteriorRings, 0, 0);
+    sqlite3_create_function (db, "ST_NumInteriorRing", 1, SQLITE_ANY, 0,
+			     fnct_NumInteriorRings, 0, 0);
+    sqlite3_create_function (db, "InteriorRingN", 2, SQLITE_ANY, 0,
+			     fnct_InteriorRingN, 0, 0);
+    sqlite3_create_function (db, "ST_InteriorRingN", 2, SQLITE_ANY, 0,
+			     fnct_InteriorRingN, 0, 0);
+    sqlite3_create_function (db, "NumGeometries", 1, SQLITE_ANY, 0,
+			     fnct_NumGeometries, 0, 0);
+    sqlite3_create_function (db, "ST_NumGeometries", 1, SQLITE_ANY, 0,
+			     fnct_NumGeometries, 0, 0);
+    sqlite3_create_function (db, "GeometryN", 2, SQLITE_ANY, 0,
+			     fnct_GeometryN, 0, 0);
+    sqlite3_create_function (db, "ST_GeometryN", 2, SQLITE_ANY, 0,
+			     fnct_GeometryN, 0, 0);
+    sqlite3_create_function (db, "MBRContains", 2, SQLITE_ANY, 0,
+			     fnct_MbrContains, 0, 0);
+    sqlite3_create_function (db, "MbrDisjoint", 2, SQLITE_ANY, 0,
+			     fnct_MbrDisjoint, 0, 0);
+    sqlite3_create_function (db, "MBREqual", 2, SQLITE_ANY, 0, fnct_MbrEqual,
+			     0, 0);
+    sqlite3_create_function (db, "MbrIntersects", 2, SQLITE_ANY, 0,
+			     fnct_MbrIntersects, 0, 0);
+    sqlite3_create_function (db, "MBROverlaps", 2, SQLITE_ANY, 0,
+			     fnct_MbrOverlaps, 0, 0);
+    sqlite3_create_function (db, "MbrTouches", 2, SQLITE_ANY, 0,
+			     fnct_MbrTouches, 0, 0);
+    sqlite3_create_function (db, "MbrWithin", 2, SQLITE_ANY, 0,
+			     fnct_MbrWithin, 0, 0);
+    sqlite3_create_function (db, "ShiftCoords", 3, SQLITE_ANY, 0,
+			     fnct_ShiftCoords, 0, 0);
+    sqlite3_create_function (db, "ShiftCoordinates", 3, SQLITE_ANY, 0,
+			     fnct_ShiftCoords, 0, 0);
+    sqlite3_create_function (db, "ScaleCoords", 2, SQLITE_ANY, 0,
+			     fnct_ScaleCoords, 0, 0);
+    sqlite3_create_function (db, "ScaleCoordinates", 2, SQLITE_ANY, 0,
+			     fnct_ScaleCoords, 0, 0);
+    sqlite3_create_function (db, "ScaleCoords", 3, SQLITE_ANY, 0,
+			     fnct_ScaleCoords, 0, 0);
+    sqlite3_create_function (db, "ScaleCoordinates", 3, SQLITE_ANY, 0,
+			     fnct_ScaleCoords, 0, 0);
+    sqlite3_create_function (db, "RotateCoords", 2, SQLITE_ANY, 0,
+			     fnct_RotateCoords, 0, 0);
+    sqlite3_create_function (db, "RotateCoordinates", 2, SQLITE_ANY, 0,
+			     fnct_RotateCoords, 0, 0);
+    sqlite3_create_function (db, "ReflectCoords", 3, SQLITE_ANY, 0,
+			     fnct_ReflectCoords, 0, 0);
+    sqlite3_create_function (db, "ReflectCoordinates", 3, SQLITE_ANY, 0,
+			     fnct_ReflectCoords, 0, 0);
+    sqlite3_create_function (db, "SwapCoords", 1, SQLITE_ANY, 0,
+			     fnct_SwapCoords, 0, 0);
+    sqlite3_create_function (db, "SwapCoordinates", 1, SQLITE_ANY, 0,
+			     fnct_SwapCoords, 0, 0);
+    sqlite3_create_function (db, "BuildMbr", 4, SQLITE_ANY, 0, fnct_BuildMbr1,
+			     0, 0);
+    sqlite3_create_function (db, "BuildMbr", 5, SQLITE_ANY, 0, fnct_BuildMbr2,
+			     0, 0);
+    sqlite3_create_function (db, "BuildCircleMbr", 3, SQLITE_ANY, 0,
+			     fnct_BuildCircleMbr1, 0, 0);
+    sqlite3_create_function (db, "BuildCircleMbr", 4, SQLITE_ANY, 0,
+			     fnct_BuildCircleMbr2, 0, 0);
+    sqlite3_create_function (db, "Extent", 1, SQLITE_ANY, 0, 0,
+			     fnct_Extent_step, fnct_Extent_final);
+    sqlite3_create_function (db, "MbrMinX", 1, SQLITE_ANY, 0, fnct_MbrMinX, 0,
+			     0);
+    sqlite3_create_function (db, "MbrMaxX", 1, SQLITE_ANY, 0, fnct_MbrMaxX, 0,
+			     0);
+    sqlite3_create_function (db, "MbrMinY", 1, SQLITE_ANY, 0, fnct_MbrMinY, 0,
+			     0);
+    sqlite3_create_function (db, "MbrMaxY", 1, SQLITE_ANY, 0, fnct_MbrMaxY, 0,
+			     0);
+    sqlite3_create_function (db, "MakePoint", 2, SQLITE_ANY, 0, fnct_MakePoint1,
+			     0, 0);
+    sqlite3_create_function (db, "MakePoint", 3, SQLITE_ANY, 0, fnct_MakePoint2,
+			     0, 0);
+    sqlite3_create_function (db, "MakeLine", 1, SQLITE_ANY, 0, 0,
+			     fnct_MakeLine_step, fnct_MakeLine_final);
+    sqlite3_create_function (db, "MakeLine", 2, SQLITE_ANY, 0, fnct_MakeLine, 0,
+			     0);
+    sqlite3_create_function (db, "Collect", 1, SQLITE_ANY, 0, 0,
+			     fnct_Collect_step, fnct_Collect_final);
+    sqlite3_create_function (db, "Collect", 2, SQLITE_ANY, 0, fnct_Collect, 0,
+			     0);
+    sqlite3_create_function (db, "ST_Collect", 1, SQLITE_ANY, 0, 0,
+			     fnct_Collect_step, fnct_Collect_final);
+    sqlite3_create_function (db, "ST_Collect", 2, SQLITE_ANY, 0, fnct_Collect,
+			     0, 0);
+    sqlite3_create_function (db, "BuildMbrFilter", 4, SQLITE_ANY, 0,
+			     fnct_BuildMbrFilter, 0, 0);
+    sqlite3_create_function (db, "FilterMbrWithin", 4, SQLITE_ANY, 0,
+			     fnct_FilterMbrWithin, 0, 0);
+    sqlite3_create_function (db, "FilterMbrContains", 4, SQLITE_ANY, 0,
+			     fnct_FilterMbrContains, 0, 0);
+    sqlite3_create_function (db, "FilterMbrIntersects", 4, SQLITE_ANY, 0,
+			     fnct_FilterMbrIntersects, 0, 0);
+    sqlite3_create_function (db, "LinesFromRings", 1, SQLITE_ANY, 0,
+			     fnct_LinesFromRings, 0, 0);
+    sqlite3_create_function (db, "LinesFromRings", 2, SQLITE_ANY, 0,
+			     fnct_LinesFromRings, 0, 0);
+
+#ifndef OMIT_GEOS		/* including GEOS */
+    sqlite3_create_function (db, "BuildArea", 1, SQLITE_ANY, 0, fnct_BuildArea,
+			     0, 0);
+    sqlite3_create_function (db, "ST_BuildArea", 1, SQLITE_ANY, 0,
+			     fnct_BuildArea, 0, 0);
+    sqlite3_create_function (db, "Polygonize", 1, SQLITE_ANY, 0, 0,
+			     fnct_Polygonize_step, fnct_Polygonize_final);
+    sqlite3_create_function (db, "ST_Polygonize", 1, SQLITE_ANY, 0, 0,
+			     fnct_Polygonize_step, fnct_Polygonize_final);
+#endif /* end including GEOS */
+
+    sqlite3_create_function (db, "DissolveSegments", 1, SQLITE_ANY, 0,
+			     fnct_DissolveSegments, 0, 0);
+    sqlite3_create_function (db, "ST_DissolveSegments", 1, SQLITE_ANY, 0,
+			     fnct_DissolveSegments, 0, 0);
+    sqlite3_create_function (db, "DissolvePoints", 1, SQLITE_ANY, 0,
+			     fnct_DissolvePoints, 0, 0);
+    sqlite3_create_function (db, "ST_DissolvePoints", 1, SQLITE_ANY, 0,
+			     fnct_DissolvePoints, 0, 0);
+    sqlite3_create_function (db, "CollectionExtract", 2, SQLITE_ANY, 0,
+			     fnct_CollectionExtract, 0, 0);
+    sqlite3_create_function (db, "ST_CollectionExtract", 2, SQLITE_ANY, 0,
+			     fnct_CollectionExtract, 0, 0);
+#ifndef OMIT_GEOCALLBACKS	/* supporting RTree geometry callbacks */
+    sqlite3_rtree_geometry_callback (db, "RTreeWithin", fnct_RTreeIntersects,
+				     0);
+    sqlite3_rtree_geometry_callback (db, "RTreeContains", fnct_RTreeIntersects,
+				     0);
+    sqlite3_rtree_geometry_callback (db, "RTreeIntersects",
+				     fnct_RTreeIntersects, 0);
+    sqlite3_rtree_geometry_callback (db, "RTreeDistWithin",
+				     fnct_RTreeDistWithin, 0);
+#endif /* end RTree geometry callbacks */
+
+/* some BLOB/JPEG/EXIF functions */
+    sqlite3_create_function (db, "IsGeometryBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsGeometryBlob, 0, 0);
+    sqlite3_create_function (db, "IsZipBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsZipBlob, 0, 0);
+    sqlite3_create_function (db, "IsPdfBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsPdfBlob, 0, 0);
+    sqlite3_create_function (db, "IsTiffBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsTiffBlob, 0, 0);
+    sqlite3_create_function (db, "IsGifBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsGifBlob, 0, 0);
+    sqlite3_create_function (db, "IsPngBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsPngBlob, 0, 0);
+    sqlite3_create_function (db, "IsJpegBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsJpegBlob, 0, 0);
+    sqlite3_create_function (db, "IsExifBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsExifBlob, 0, 0);
+    sqlite3_create_function (db, "IsExifGpsBlob", 1, SQLITE_ANY, 0,
+			     fnct_IsExifGpsBlob, 0, 0);
+    sqlite3_create_function (db, "GeomFromExifGpsBlob", 1, SQLITE_ANY, 0,
+			     fnct_GeomFromExifGpsBlob, 0, 0);
+
+/* some Geodesic functions */
+    sqlite3_create_function (db, "GreatCircleLength", 1, SQLITE_ANY, 0,
+			     fnct_GreatCircleLength, 0, 0);
+    sqlite3_create_function (db, "GeodesicLength", 1, SQLITE_ANY, 0,
+			     fnct_GeodesicLength, 0, 0);
+
+/* some Length Unit conversion functions */
+    sqlite3_create_function (db, "CvtToKm", 1, SQLITE_ANY, 0, fnct_cvtToKm, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToDm", 1, SQLITE_ANY, 0, fnct_cvtToDm, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToCm", 1, SQLITE_ANY, 0, fnct_cvtToCm, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToMm", 1, SQLITE_ANY, 0, fnct_cvtToMm, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToKmi", 1, SQLITE_ANY, 0, fnct_cvtToKmi,
+			     0, 0);
+    sqlite3_create_function (db, "CvtToIn", 1, SQLITE_ANY, 0, fnct_cvtToIn, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToFt", 1, SQLITE_ANY, 0, fnct_cvtToFt, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToYd", 1, SQLITE_ANY, 0, fnct_cvtToYd, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToMi", 1, SQLITE_ANY, 0, fnct_cvtToMi, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToFath", 1, SQLITE_ANY, 0,
+			     fnct_cvtToFath, 0, 0);
+    sqlite3_create_function (db, "CvtToCh", 1, SQLITE_ANY, 0, fnct_cvtToCh, 0,
+			     0);
+    sqlite3_create_function (db, "CvtToLink", 1, SQLITE_ANY, 0,
+			     fnct_cvtToLink, 0, 0);
+    sqlite3_create_function (db, "CvtToUsIn", 1, SQLITE_ANY, 0,
+			     fnct_cvtToUsIn, 0, 0);
+    sqlite3_create_function (db, "CvtToUsFt", 1, SQLITE_ANY, 0,
+			     fnct_cvtToUsFt, 0, 0);
+    sqlite3_create_function (db, "CvtToUsYd", 1, SQLITE_ANY, 0,
+			     fnct_cvtToUsYd, 0, 0);
+    sqlite3_create_function (db, "CvtToUsCh", 1, SQLITE_ANY, 0,
+			     fnct_cvtToUsCh, 0, 0);
+    sqlite3_create_function (db, "CvtToUsMi", 1, SQLITE_ANY, 0,
+			     fnct_cvtToUsMi, 0, 0);
+    sqlite3_create_function (db, "CvtToIndFt", 1, SQLITE_ANY, 0,
+			     fnct_cvtToIndFt, 0, 0);
+    sqlite3_create_function (db, "CvtToIndYd", 1, SQLITE_ANY, 0,
+			     fnct_cvtToIndYd, 0, 0);
+    sqlite3_create_function (db, "CvtToIndCh", 1, SQLITE_ANY, 0,
+			     fnct_cvtToIndCh, 0, 0);
+    sqlite3_create_function (db, "CvtFromKm", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromKm, 0, 0);
+    sqlite3_create_function (db, "CvtFromDm", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromDm, 0, 0);
+    sqlite3_create_function (db, "CvtFromCm", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromCm, 0, 0);
+    sqlite3_create_function (db, "CvtFromMm", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromMm, 0, 0);
+    sqlite3_create_function (db, "CvtFromKmi", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromKmi, 0, 0);
+    sqlite3_create_function (db, "CvtFromIn", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromIn, 0, 0);
+    sqlite3_create_function (db, "CvtFromFt", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromFt, 0, 0);
+    sqlite3_create_function (db, "CvtFromYd", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromYd, 0, 0);
+    sqlite3_create_function (db, "CvtFromMi", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromMi, 0, 0);
+    sqlite3_create_function (db, "CvtFromFath", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromFath, 0, 0);
+    sqlite3_create_function (db, "CvtFromCh", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromCh, 0, 0);
+    sqlite3_create_function (db, "CvtFromLink", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromLink, 0, 0);
+    sqlite3_create_function (db, "CvtFromUsIn", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromUsIn, 0, 0);
+    sqlite3_create_function (db, "CvtFromUsFt", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromUsFt, 0, 0);
+    sqlite3_create_function (db, "CvtFromUsYd", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromUsYd, 0, 0);
+    sqlite3_create_function (db, "CvtFromUsCh", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromUsCh, 0, 0);
+    sqlite3_create_function (db, "CvtFromUsMi", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromUsMi, 0, 0);
+    sqlite3_create_function (db, "CvtFromIndFt", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromIndFt, 0, 0);
+    sqlite3_create_function (db, "CvtFromIndYd", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromIndYd, 0, 0);
+    sqlite3_create_function (db, "CvtFromIndCh", 1, SQLITE_ANY, 0,
+			     fnct_cvtFromIndCh, 0, 0);
+
+#ifndef OMIT_MATHSQL		/* supporting SQL math functions */
+
+/* some extra math functions */
+    sqlite3_create_function (db, "acos", 1, SQLITE_ANY, 0, fnct_math_acos, 0,
+			     0);
+    sqlite3_create_function (db, "asin", 1, SQLITE_ANY, 0, fnct_math_asin, 0,
+			     0);
+    sqlite3_create_function (db, "atan", 1, SQLITE_ANY, 0, fnct_math_atan, 0,
+			     0);
+    sqlite3_create_function (db, "ceil", 1, SQLITE_ANY, 0, fnct_math_ceil, 0,
+			     0);
+    sqlite3_create_function (db, "ceiling", 1, SQLITE_ANY, 0, fnct_math_ceil,
+			     0, 0);
+    sqlite3_create_function (db, "cos", 1, SQLITE_ANY, 0, fnct_math_cos, 0, 0);
+    sqlite3_create_function (db, "cot", 1, SQLITE_ANY, 0, fnct_math_cot, 0, 0);
+    sqlite3_create_function (db, "degrees", 1, SQLITE_ANY, 0,
+			     fnct_math_degrees, 0, 0);
+    sqlite3_create_function (db, "exp", 1, SQLITE_ANY, 0, fnct_math_exp, 0, 0);
+    sqlite3_create_function (db, "floor", 1, SQLITE_ANY, 0, fnct_math_floor,
+			     0, 0);
+    sqlite3_create_function (db, "ln", 1, SQLITE_ANY, 0, fnct_math_logn, 0, 0);
+    sqlite3_create_function (db, "log", 1, SQLITE_ANY, 0, fnct_math_logn, 0, 0);
+    sqlite3_create_function (db, "log", 2, SQLITE_ANY, 0, fnct_math_logn2, 0,
+			     0);
+    sqlite3_create_function (db, "log2", 1, SQLITE_ANY, 0, fnct_math_log_2, 0,
+			     0);
+    sqlite3_create_function (db, "log10", 1, SQLITE_ANY, 0, fnct_math_log_10,
+			     0, 0);
+    sqlite3_create_function (db, "pi", 0, SQLITE_ANY, 0, fnct_math_pi, 0, 0);
+    sqlite3_create_function (db, "pow", 2, SQLITE_ANY, 0, fnct_math_pow, 0, 0);
+    sqlite3_create_function (db, "power", 2, SQLITE_ANY, 0, fnct_math_pow, 0,
+			     0);
+    sqlite3_create_function (db, "radians", 1, SQLITE_ANY, 0,
+			     fnct_math_radians, 0, 0);
+    sqlite3_create_function (db, "round", 1, SQLITE_ANY, 0, fnct_math_round,
+			     0, 0);
+    sqlite3_create_function (db, "sign", 1, SQLITE_ANY, 0, fnct_math_sign, 0,
+			     0);
+    sqlite3_create_function (db, "sin", 1, SQLITE_ANY, 0, fnct_math_sin, 0, 0);
+    sqlite3_create_function (db, "stddev_pop", 1, SQLITE_ANY, 0, 0,
+			     fnct_math_stddev_step, fnct_math_stddev_pop_final);
+    sqlite3_create_function (db, "stddev_samp", 1, SQLITE_ANY, 0, 0,
+			     fnct_math_stddev_step,
+			     fnct_math_stddev_samp_final);
+    sqlite3_create_function (db, "sqrt", 1, SQLITE_ANY, 0, fnct_math_sqrt, 0,
+			     0);
+    sqlite3_create_function (db, "tan", 1, SQLITE_ANY, 0, fnct_math_tan, 0, 0);
+    sqlite3_create_function (db, "var_pop", 1, SQLITE_ANY, 0, 0,
+			     fnct_math_stddev_step, fnct_math_var_pop_final);
+    sqlite3_create_function (db, "var_samp", 1, SQLITE_ANY, 0, 0,
+			     fnct_math_stddev_step, fnct_math_var_samp_final);
+
+#endif /* end supporting SQL math functions */
+
+#ifndef OMIT_PROJ		/* including PROJ.4 */
+
+    sqlite3_create_function (db, "Transform", 2, SQLITE_ANY, 0,
+			     fnct_Transform, 0, 0);
+    sqlite3_create_function (db, "ST_Transform", 2, SQLITE_ANY, 0,
+			     fnct_Transform, 0, 0);
+
+#endif /* end including PROJ.4 */
+
+#ifndef OMIT_GEOS		/* including GEOS */
+
+    initGEOS (geos_warning, geos_error);
+    sqlite3_create_function (db, "Boundary", 1, SQLITE_ANY, 0, fnct_Boundary,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Boundary", 1, SQLITE_ANY, 0,
+			     fnct_Boundary, 0, 0);
+    sqlite3_create_function (db, "IsClosed", 1, SQLITE_ANY, 0, fnct_IsClosed,
+			     0, 0);
+    sqlite3_create_function (db, "ST_IsClosed", 1, SQLITE_ANY, 0,
+			     fnct_IsClosed, 0, 0);
+    sqlite3_create_function (db, "IsSimple", 1, SQLITE_ANY, 0, fnct_IsSimple,
+			     0, 0);
+    sqlite3_create_function (db, "ST_IsSimple", 1, SQLITE_ANY, 0,
+			     fnct_IsSimple, 0, 0);
+    sqlite3_create_function (db, "IsRing", 1, SQLITE_ANY, 0, fnct_IsRing, 0, 0);
+    sqlite3_create_function (db, "ST_IsRing", 1, SQLITE_ANY, 0, fnct_IsRing,
+			     0, 0);
+    sqlite3_create_function (db, "IsValid", 1, SQLITE_ANY, 0, fnct_IsValid, 0,
+			     0);
+    sqlite3_create_function (db, "ST_IsValid", 1, SQLITE_ANY, 0, fnct_IsValid,
+			     0, 0);
+    sqlite3_create_function (db, "GLength", 1, SQLITE_ANY, 0, fnct_Length, 0,
+			     0);
+    sqlite3_create_function (db, "ST_Length", 1, SQLITE_ANY, 0, fnct_Length,
+			     0, 0);
+    sqlite3_create_function (db, "Area", 1, SQLITE_ANY, 0, fnct_Area, 0, 0);
+    sqlite3_create_function (db, "ST_Area", 1, SQLITE_ANY, 0, fnct_Area, 0, 0);
+    sqlite3_create_function (db, "Centroid", 1, SQLITE_ANY, 0, fnct_Centroid,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Centroid", 1, SQLITE_ANY, 0,
+			     fnct_Centroid, 0, 0);
+    sqlite3_create_function (db, "PointOnSurface", 1, SQLITE_ANY, 0,
+			     fnct_PointOnSurface, 0, 0);
+    sqlite3_create_function (db, "ST_PointOnSurface", 1, SQLITE_ANY, 0,
+			     fnct_PointOnSurface, 0, 0);
+    sqlite3_create_function (db, "Simplify", 2, SQLITE_ANY, 0, fnct_Simplify,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Generalize", 2, SQLITE_ANY, 0,
+			     fnct_Simplify, 0, 0);
+    sqlite3_create_function (db, "SimplifyPreserveTopology", 2, SQLITE_ANY, 0,
+			     fnct_SimplifyPreserveTopology, 0, 0);
+    sqlite3_create_function (db, "ConvexHull", 1, SQLITE_ANY, 0,
+			     fnct_ConvexHull, 0, 0);
+    sqlite3_create_function (db, "ST_ConvexHull", 1, SQLITE_ANY, 0,
+			     fnct_ConvexHull, 0, 0);
+    sqlite3_create_function (db, "Buffer", 2, SQLITE_ANY, 0, fnct_Buffer, 0, 0);
+    sqlite3_create_function (db, "ST_Buffer", 2, SQLITE_ANY, 0, fnct_Buffer,
+			     0, 0);
+    sqlite3_create_function (db, "Intersection", 2, SQLITE_ANY, 0,
+			     fnct_Intersection, 0, 0);
+    sqlite3_create_function (db, "ST_Intersection", 2, SQLITE_ANY, 0,
+			     fnct_Intersection, 0, 0);
+    sqlite3_create_function (db, "GUnion", 1, SQLITE_ANY, 0, 0,
+			     fnct_Union_step, fnct_Union_final);
+    sqlite3_create_function (db, "GUnion", 2, SQLITE_ANY, 0, fnct_Union, 0, 0);
+    sqlite3_create_function (db, "ST_Union", 1, SQLITE_ANY, 0, 0,
+			     fnct_Union_step, fnct_Union_final);
+    sqlite3_create_function (db, "ST_Union", 2, SQLITE_ANY, 0, fnct_Union, 0,
+			     0);
+    sqlite3_create_function (db, "Difference", 2, SQLITE_ANY, 0,
+			     fnct_Difference, 0, 0);
+    sqlite3_create_function (db, "ST_Difference", 2, SQLITE_ANY, 0,
+			     fnct_Difference, 0, 0);
+    sqlite3_create_function (db, "SymDifference", 2, SQLITE_ANY, 0,
+			     fnct_SymDifference, 0, 0);
+    sqlite3_create_function (db, "ST_SymDifference", 2, SQLITE_ANY, 0,
+			     fnct_SymDifference, 0, 0);
+    sqlite3_create_function (db, "Equals", 2, SQLITE_ANY, 0, fnct_Equals, 0, 0);
+    sqlite3_create_function (db, "ST_Equals", 2, SQLITE_ANY, 0, fnct_Equals,
+			     0, 0);
+    sqlite3_create_function (db, "Intersects", 2, SQLITE_ANY, 0,
+			     fnct_Intersects, 0, 0);
+    sqlite3_create_function (db, "ST_Intersects", 2, SQLITE_ANY, 0,
+			     fnct_Intersects, 0, 0);
+    sqlite3_create_function (db, "Disjoint", 2, SQLITE_ANY, 0, fnct_Disjoint,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Disjoint", 2, SQLITE_ANY, 0,
+			     fnct_Disjoint, 0, 0);
+    sqlite3_create_function (db, "Overlaps", 2, SQLITE_ANY, 0, fnct_Overlaps,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Overlaps", 2, SQLITE_ANY, 0,
+			     fnct_Overlaps, 0, 0);
+    sqlite3_create_function (db, "Crosses", 2, SQLITE_ANY, 0, fnct_Crosses, 0,
+			     0);
+    sqlite3_create_function (db, "ST_Crosses", 2, SQLITE_ANY, 0, fnct_Crosses,
+			     0, 0);
+    sqlite3_create_function (db, "Touches", 2, SQLITE_ANY, 0, fnct_Touches, 0,
+			     0);
+    sqlite3_create_function (db, "ST_Touches", 2, SQLITE_ANY, 0, fnct_Touches,
+			     0, 0);
+    sqlite3_create_function (db, "Within", 2, SQLITE_ANY, 0, fnct_Within, 0, 0);
+    sqlite3_create_function (db, "ST_Within", 2, SQLITE_ANY, 0, fnct_Within,
+			     0, 0);
+    sqlite3_create_function (db, "Contains", 2, SQLITE_ANY, 0, fnct_Contains,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Contains", 2, SQLITE_ANY, 0,
+			     fnct_Contains, 0, 0);
+    sqlite3_create_function (db, "Relate", 3, SQLITE_ANY, 0, fnct_Relate, 0, 0);
+    sqlite3_create_function (db, "ST_Relate", 3, SQLITE_ANY, 0, fnct_Relate,
+			     0, 0);
+    sqlite3_create_function (db, "Distance", 2, SQLITE_ANY, 0, fnct_Distance,
+			     0, 0);
+    sqlite3_create_function (db, "ST_Distance", 2, SQLITE_ANY, 0,
+			     fnct_Distance, 0, 0);
+    sqlite3_create_function (db, "PtDistWithin", 3, SQLITE_ANY, 0,
+			     fnct_PtDistWithin, 0, 0);
+    sqlite3_create_function (db, "PtDistWithin", 4, SQLITE_ANY, 0,
+			     fnct_PtDistWithin, 0, 0);
+    sqlite3_create_function (db, "BdPolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_BdPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "BdPolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_BdPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "BdMPolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "BdMPolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "BdPolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_BdPolyFromWKB1, 0, 0);
+    sqlite3_create_function (db, "BdPolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_BdPolyFromWKB2, 0, 0);
+    sqlite3_create_function (db, "BdMPolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromWKB1, 0, 0);
+    sqlite3_create_function (db, "BdMPolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromWKB2, 0, 0);
+    sqlite3_create_function (db, "ST_BdPolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_BdPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_BdPolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_BdPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_BdMPolyFromText", 1, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromText1, 0, 0);
+    sqlite3_create_function (db, "ST_BdMPolyFromText", 2, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromText2, 0, 0);
+    sqlite3_create_function (db, "ST_BdPolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_BdPolyFromWKB1, 0, 0);
+    sqlite3_create_function (db, "ST_BdPolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_BdPolyFromWKB2, 0, 0);
+    sqlite3_create_function (db, "ST_BdMPolyFromWKB", 1, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromWKB1, 0, 0);
+    sqlite3_create_function (db, "ST_BdMPolyFromWKB", 2, SQLITE_ANY, 0,
+			     fnct_BdMPolyFromWKB2, 0, 0);
+
+#ifdef GEOS_ADVANCED		/* GEOS advanced and experimental features */
+
+    sqlite3_create_function (db, "OffsetCurve", 3, SQLITE_ANY, 0,
+			     fnct_OffsetCurve, 0, 0);
+    sqlite3_create_function (db, "ST_OffsetCurve", 3, SQLITE_ANY, 0,
+			     fnct_OffsetCurve, 0, 0);
+    sqlite3_create_function (db, "SingleSidedBuffer", 3, SQLITE_ANY, 0,
+			     fnct_SingleSidedBuffer, 0, 0);
+    sqlite3_create_function (db, "ST_SingleSidedBuffer", 3, SQLITE_ANY, 0,
+			     fnct_SingleSidedBuffer, 0, 0);
+    sqlite3_create_function (db, "HausdorffDistance", 2, SQLITE_ANY, 0,
+			     fnct_HausdorffDistance, 0, 0);
+    sqlite3_create_function (db, "ST_HausdorffDistance", 2, SQLITE_ANY, 0,
+			     fnct_HausdorffDistance, 0, 0);
+    sqlite3_create_function (db, "SharedPaths", 2, SQLITE_ANY, 0,
+			     fnct_SharedPaths, 0, 0);
+    sqlite3_create_function (db, "ST_SharedPaths", 2, SQLITE_ANY, 0,
+			     fnct_SharedPaths, 0, 0);
+    sqlite3_create_function (db, "Covers", 2, SQLITE_ANY, 0, fnct_Covers, 0, 0);
+    sqlite3_create_function (db, "ST_Covers", 2, SQLITE_ANY, 0, fnct_Covers, 0,
+			     0);
+    sqlite3_create_function (db, "CoveredBy", 2, SQLITE_ANY, 0, fnct_CoveredBy,
+			     0, 0);
+    sqlite3_create_function (db, "ST_CoveredBy", 2, SQLITE_ANY, 0,
+			     fnct_CoveredBy, 0, 0);
+    sqlite3_create_function (db, "Line_Interpolate_Point", 2, SQLITE_ANY, 0,
+			     fnct_LineInterpolatePoint, 0, 0);
+    sqlite3_create_function (db, "ST_Line_Interpolate_Point", 2, SQLITE_ANY, 0,
+			     fnct_LineInterpolatePoint, 0, 0);
+    sqlite3_create_function (db, "Line_Locate_Point", 2, SQLITE_ANY, 0,
+			     fnct_LineLocatePoint, 0, 0);
+    sqlite3_create_function (db, "ST_Line_Locate_Point", 2, SQLITE_ANY, 0,
+			     fnct_LineLocatePoint, 0, 0);
+    sqlite3_create_function (db, "Line_Substring", 3, SQLITE_ANY, 0,
+			     fnct_LineSubstring, 0, 0);
+    sqlite3_create_function (db, "ST_Line_Substring", 3, SQLITE_ANY, 0,
+			     fnct_LineSubstring, 0, 0);
+    sqlite3_create_function (db, "ClosestPoint", 2, SQLITE_ANY, 0,
+			     fnct_ClosestPoint, 0, 0);
+    sqlite3_create_function (db, "ST_ClosestPoint", 2, SQLITE_ANY, 0,
+			     fnct_ClosestPoint, 0, 0);
+    sqlite3_create_function (db, "ShortestLine", 2, SQLITE_ANY, 0,
+			     fnct_ShortestLine, 0, 0);
+    sqlite3_create_function (db, "ST_ShortestLine", 2, SQLITE_ANY, 0,
+			     fnct_ShortestLine, 0, 0);
+    sqlite3_create_function (db, "Snap", 3, SQLITE_ANY, 0, fnct_Snap, 0, 0);
+    sqlite3_create_function (db, "ST_Snap", 3, SQLITE_ANY, 0, fnct_Snap, 0, 0);
+    sqlite3_create_function (db, "LineMerge", 1, SQLITE_ANY, 0,
+			     fnct_LineMerge, 0, 0);
+    sqlite3_create_function (db, "ST_LineMerge", 1, SQLITE_ANY, 0,
+			     fnct_LineMerge, 0, 0);
+    sqlite3_create_function (db, "UnaryUnion", 1, SQLITE_ANY, 0,
+			     fnct_UnaryUnion, 0, 0);
+    sqlite3_create_function (db, "ST_UnaryUnion", 1, SQLITE_ANY, 0,
+			     fnct_UnaryUnion, 0, 0);
+
+#endif /* end GEOS advanced and experimental features */
+
+#endif /* end including GEOS */
+}
+
+static void
+init_spatialite_virtualtables (sqlite3 * db)
+{
+#ifndef OMIT_ICONV		/* when ICONV is disabled SHP/DBF/TXT cannot be supported */
+/* initializing the VirtualShape  extension */
+    virtualshape_extension_init (db);
+/* initializing the VirtualDbf  extension */
+    virtualdbf_extension_init (db);
+/* initializing the VirtualText extension */
+    virtualtext_extension_init (db);
+#ifndef OMIT_FREEXL
+/* initializing the VirtualXL  extension */
+    virtualXL_extension_init (db);
+#endif /* FreeXL enabled/disable */
+#endif /* ICONV enabled/disabled */
+
+/* initializing the VirtualNetwork  extension */
+    virtualnetwork_extension_init (db);
+/* initializing the MbrCache  extension */
+    mbrcache_extension_init (db);
+/* initializing the VirtualFDO  extension */
+    virtualfdo_extension_init (db);
+/* initializing the VirtualSpatialIndex  extension */
+    virtual_spatialindex_extension_init (db);
+}
+
+static void
+init_static_spatialite (sqlite3 * db, char **pzErrMsg,
+			const sqlite3_api_routines * pApi)
+{
+    SQLITE_EXTENSION_INIT2 (pApi);
+/* setting the POSIX locale for numeric */
+    setlocale (LC_NUMERIC, "POSIX");
+    *pzErrMsg = NULL;
+
+    register_spatialite_sql_functions (db);
+
+    init_spatialite_virtualtables (db);
+
+/* setting a timeout handler */
+    sqlite3_busy_timeout (db, 5000);
+}
+
+void
+spatialite_init (int verbose)
+{
+/* used when SQLite initializes SpatiaLite via statically linked lib */
+    sqlite3_auto_extension ((void (*)(void)) init_static_spatialite);
+    if (isatty (1))
+      {
+	  /* printing "hello" message only when stdout is on console */
+	  if (verbose)
+	    {
+		printf ("SpatiaLite version ..: %s", spatialite_version ());
+		printf ("\tSupported Extensions:\n");
+#ifndef OMIT_ICONV		/* ICONV is required by SHP/DBF/TXT */
+		printf ("\t- 'VirtualShape'\t[direct Shapefile access]\n");
+		printf ("\t- 'VirtualDbf'\t\t[direct DBF access]\n");
+#ifndef OMIT_FREEXL
+		printf ("\t- 'VirtualXL'\t\t[direct XLS access]\n");
+#endif /* end FreeXL conditional */
+		printf ("\t- 'VirtualText'\t\t[direct CSV/TXT access]\n");
+#endif /* end ICONV conditional */
+		printf ("\t- 'VirtualNetwork'\t[Dijkstra shortest path]\n");
+		printf ("\t- 'RTree'\t\t[Spatial Index - R*Tree]\n");
+		printf ("\t- 'MbrCache'\t\t[Spatial Index - MBR cache]\n");
+		printf ("\t- 'VirtualSpatialIndex'\t[R*Tree metahandler]\n");
+		printf ("\t- 'VirtualFDO'\t\t[FDO-OGR interoperability]\n");
+		printf ("\t- 'SpatiaLite'\t\t[Spatial SQL - OGC]\n");
+	    }
+#ifndef OMIT_PROJ		/* PROJ.4 version */
+	  if (verbose)
+	      printf ("PROJ.4 version ......: %s\n", pj_get_release ());
+#endif /* end including PROJ.4 */
+#ifndef OMIT_GEOS		/* GEOS version */
+	  if (verbose)
+	      printf ("GEOS version ........: %s\n", GEOSversion ());
+#endif /* end GEOS version */
+      }
+}
+
+void
+spatialite_cleanup ()
+{
+#ifndef OMIT_GEOS
+    finishGEOS ();
+#endif
+}
+
+SPATIALITE_DECLARE int
+sqlite3_extension_init (sqlite3 * db, char **pzErrMsg,
+			const sqlite3_api_routines * pApi)
+{
+/* SQLite invokes this routine once when it dynamically loads the extension. */
+    SQLITE_EXTENSION_INIT2 (pApi);
+    setlocale (LC_NUMERIC, "POSIX");
+    *pzErrMsg = NULL;
+
+    register_spatialite_sql_functions (db);
+
+    init_spatialite_virtualtables (db);
+
+    /* setting a timeout handler */
+    sqlite3_busy_timeout (db, 5000);
+    return 0;
+}
+
+SPATIALITE_DECLARE sqlite3_int64
+math_llabs (sqlite3_int64 value)
+{
+/* replacing the C99 llabs() function */
+    return value < 0 ? -value : value;
+}
+
+SPATIALITE_DECLARE double
+math_round (double value)
+{
+/* replacing the C99 round() function */
+    double min = floor (value);
+    if (fabs (value - min) < 0.5)
+	return min;
+    return min + 1.0;
+}
+
+static int
+check_layer_statistics (sqlite3 * sqlite)
+{
+/*
+/ checks the LAYER_STATISTICS table for validity;
+/ if the table doesn't exist, attempts to create
+*/
+    char sql[8192];
+    char **results;
+    int rows;
+    int columns;
+    int ret;
+    int raster_layer = 0;
+    int table_name = 0;
+    int geometry_column = 0;
+    int row_count = 0;
+    int extent_min_x = 0;
+    int extent_min_y = 0;
+    int extent_max_x = 0;
+    int extent_max_y = 0;
+    int i;
+    const char *name;
+
+/* checking the LAYER_STATISTICS table */
+    strcpy (sql, "PRAGMA table_info(layer_statistics)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "raster_layer") == 0)
+		    raster_layer = 1;
+		if (strcasecmp (name, "table_name") == 0)
+		    table_name = 1;
+		if (strcasecmp (name, "geometry_column") == 0)
+		    geometry_column = 1;
+		if (strcasecmp (name, "row_count") == 0)
+		    row_count = 1;
+		if (strcasecmp (name, "extent_min_x") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_min_y") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_max_x") == 0)
+		    extent_max_x = 1;
+		if (strcasecmp (name, "extent_max_y") == 0)
+		    extent_max_y = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+
+/* LAYER_STATISTICS already exists and has a valid layout */
+    if (raster_layer && table_name && geometry_column && row_count
+	&& extent_min_x && extent_max_x && extent_max_y)
+	return 1;
+/* LAYER_STATISTICS already exists, but has an invalid layout */
+    if (raster_layer || table_name || geometry_column || row_count
+	|| extent_min_x || extent_max_x || extent_max_y)
+	return 0;
+
+/* attempting to create LAYER_STATISTICS */
+    strcpy (sql, "CREATE TABLE layer_statistics (\n");
+    strcat (sql, "raster_layer INTEGER NOT NULL,\n");
+    strcat (sql, "table_name TEXT NOT NULL,\n");
+    strcat (sql, "geometry_column TEXT NOT NULL,\n");
+    strcat (sql, "row_count INTEGER,\n");
+    strcat (sql, "extent_min_x DOUBLE,\n");
+    strcat (sql, "extent_min_y DOUBLE,\n");
+    strcat (sql, "extent_max_x DOUBLE,\n");
+    strcat (sql, "extent_max_y DOUBLE,\n");
+    strcat (sql, "CONSTRAINT pk_layer_statistics PRIMARY KEY ");
+    strcat (sql, "(raster_layer, table_name, geometry_column),\n");
+    strcat (sql, "CONSTRAINT fk_layer_statistics FOREIGN KEY ");
+    strcat (sql, "(table_name, geometry_column) REFERENCES ");
+    strcat (sql, "geometry_columns (f_table_name, f_geometry_column) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    return 1;
+}
+
+static int
+do_update_layer_statistics (sqlite3 * sqlite, const char *table,
+			    const char *column, int count, int has_coords,
+			    double min_x, double min_y, double max_x,
+			    double max_y)
+{
+/* update LAYER_STATISTICS [single table/geometry] */
+    char sql[8192];
+    int ret;
+    int error = 0;
+    sqlite3_stmt *stmt;
+
+    if (!check_layer_statistics (sqlite))
+	return 0;
+    strcpy (sql, "INSERT OR REPLACE INTO layer_statistics ");
+    strcat (sql, "(raster_layer, table_name, geometry_column, ");
+    strcat (sql, "row_count, extent_min_x, extent_min_y, ");
+    strcat (sql, "extent_max_x, extent_max_y) ");
+    strcat (sql, "VALUES (0, ?, ?, ?, ?, ?, ?, ?)");
+
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+
+/* binding INSERT params */
+    sqlite3_reset (stmt);
+    sqlite3_clear_bindings (stmt);
+    sqlite3_bind_text (stmt, 1, table, strlen (table), SQLITE_STATIC);
+    sqlite3_bind_text (stmt, 2, column, strlen (column), SQLITE_STATIC);
+    sqlite3_bind_int (stmt, 3, count);
+    if (has_coords)
+      {
+	  sqlite3_bind_double (stmt, 4, min_x);
+	  sqlite3_bind_double (stmt, 5, min_y);
+	  sqlite3_bind_double (stmt, 6, max_x);
+	  sqlite3_bind_double (stmt, 7, max_y);
+      }
+    else
+      {
+	  sqlite3_bind_null (stmt, 4);
+	  sqlite3_bind_null (stmt, 5);
+	  sqlite3_bind_null (stmt, 6);
+	  sqlite3_bind_null (stmt, 7);
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+	error = 1;
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
+
+static int
+check_views_layer_statistics (sqlite3 * sqlite)
+{
+/*
+/ checks the VIEWS_LAYER_STATISTICS table for validity;
+/ if the table doesn't exist, attempts to create
+*/
+    char sql[8192];
+    char **results;
+    int rows;
+    int columns;
+    int ret;
+    int view_name = 0;
+    int view_geometry = 0;
+    int row_count = 0;
+    int extent_min_x = 0;
+    int extent_min_y = 0;
+    int extent_max_x = 0;
+    int extent_max_y = 0;
+    int i;
+    const char *name;
+
+/* checking the VIEWS_LAYER_STATISTICS table */
+    strcpy (sql, "PRAGMA table_info(views_layer_statistics)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "view_name") == 0)
+		    view_name = 1;
+		if (strcasecmp (name, "view_geometry") == 0)
+		    view_geometry = 1;
+		if (strcasecmp (name, "row_count") == 0)
+		    row_count = 1;
+		if (strcasecmp (name, "extent_min_x") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_min_y") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_max_x") == 0)
+		    extent_max_x = 1;
+		if (strcasecmp (name, "extent_max_y") == 0)
+		    extent_max_y = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+
+/* VIEWS_LAYER_STATISTICS already exists and has a valid layout */
+    if (view_name && view_geometry && row_count && extent_min_x && extent_max_x
+	&& extent_max_y)
+	return 1;
+/* VIEWS_LAYER_STATISTICS already exists, but has an invalid layout */
+    if (view_name || view_geometry || row_count || extent_min_x || extent_max_x
+	|| extent_max_y)
+	return 0;
+
+/* attempting to create VIEWS_LAYER_STATISTICS */
+    strcpy (sql, "CREATE TABLE views_layer_statistics (\n");
+    strcat (sql, "view_name TEXT NOT NULL,\n");
+    strcat (sql, "view_geometry TEXT NOT NULL,\n");
+    strcat (sql, "row_count INTEGER,\n");
+    strcat (sql, "extent_min_x DOUBLE,\n");
+    strcat (sql, "extent_min_y DOUBLE,\n");
+    strcat (sql, "extent_max_x DOUBLE,\n");
+    strcat (sql, "extent_max_y DOUBLE,\n");
+    strcat (sql, "CONSTRAINT pk_views_layer_statistics PRIMARY KEY ");
+    strcat (sql, "(view_name, view_geometry),\n");
+    strcat (sql, "CONSTRAINT fk_views_layer_statistics FOREIGN KEY ");
+    strcat (sql, "(view_name, view_geometry) REFERENCES ");
+    strcat (sql, "views_geometry_columns (view_name, view_geometry) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    return 1;
+}
+
+static int
+do_update_views_layer_statistics (sqlite3 * sqlite, const char *table,
+				  const char *column, int count, int has_coords,
+				  double min_x, double min_y, double max_x,
+				  double max_y)
+{
+/* update VIEWS_LAYER_STATISTICS [single table/geometry] */
+    char sql[8192];
+    int ret;
+    int error = 0;
+    sqlite3_stmt *stmt;
+
+    if (!check_views_layer_statistics (sqlite))
+	return 0;
+    strcpy (sql, "INSERT OR REPLACE INTO views_layer_statistics ");
+    strcat (sql, "(view_name, view_geometry, ");
+    strcat (sql, "row_count, extent_min_x, extent_min_y, ");
+    strcat (sql, "extent_max_x, extent_max_y) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, ?)");
+
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+
+/* binding INSERT params */
+    sqlite3_reset (stmt);
+    sqlite3_clear_bindings (stmt);
+    sqlite3_bind_text (stmt, 1, table, strlen (table), SQLITE_STATIC);
+    sqlite3_bind_text (stmt, 2, column, strlen (column), SQLITE_STATIC);
+    sqlite3_bind_int (stmt, 3, count);
+    if (has_coords)
+      {
+	  sqlite3_bind_double (stmt, 4, min_x);
+	  sqlite3_bind_double (stmt, 5, min_y);
+	  sqlite3_bind_double (stmt, 6, max_x);
+	  sqlite3_bind_double (stmt, 7, max_y);
+      }
+    else
+      {
+	  sqlite3_bind_null (stmt, 4);
+	  sqlite3_bind_null (stmt, 5);
+	  sqlite3_bind_null (stmt, 6);
+	  sqlite3_bind_null (stmt, 7);
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+	error = 1;
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
+
+static int
+check_virts_layer_statistics (sqlite3 * sqlite)
+{
+/*
+/ checks the VIRTS_LAYER_STATISTICS table for validity;
+/ if the table doesn't exist, attempts to create
+*/
+    char sql[8192];
+    char **results;
+    int rows;
+    int columns;
+    int ret;
+    int virt_name = 0;
+    int virt_geometry = 0;
+    int row_count = 0;
+    int extent_min_x = 0;
+    int extent_min_y = 0;
+    int extent_max_x = 0;
+    int extent_max_y = 0;
+    int i;
+    const char *name;
+
+/* checking the VIRTS_LAYER_STATISTICS table */
+    strcpy (sql, "PRAGMA table_info(virts_layer_statistics)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "virt_name") == 0)
+		    virt_name = 1;
+		if (strcasecmp (name, "virt_geometry") == 0)
+		    virt_geometry = 1;
+		if (strcasecmp (name, "row_count") == 0)
+		    row_count = 1;
+		if (strcasecmp (name, "extent_min_x") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_min_y") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_max_x") == 0)
+		    extent_max_x = 1;
+		if (strcasecmp (name, "extent_max_y") == 0)
+		    extent_max_y = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+
+/* VIRTS_LAYER_STATISTICS already exists and has a valid layout */
+    if (virt_name && virt_geometry && row_count && extent_min_x && extent_max_x
+	&& extent_max_y)
+	return 1;
+/* VIRTS_LAYER_STATISTICS already exists, but has an invalid layout */
+    if (virt_name || virt_geometry || row_count || extent_min_x || extent_max_x
+	|| extent_max_y)
+	return 0;
+
+/* attempting to create VIRTS_LAYER_STATISTICS */
+    strcpy (sql, "CREATE TABLE virts_layer_statistics (\n");
+    strcat (sql, "virt_name TEXT NOT NULL,\n");
+    strcat (sql, "virt_geometry TEXT NOT NULL,\n");
+    strcat (sql, "row_count INTEGER,\n");
+    strcat (sql, "extent_min_x DOUBLE,\n");
+    strcat (sql, "extent_min_y DOUBLE,\n");
+    strcat (sql, "extent_max_x DOUBLE,\n");
+    strcat (sql, "extent_max_y DOUBLE,\n");
+    strcat (sql, "CONSTRAINT pk_virts_layer_statistics PRIMARY KEY ");
+    strcat (sql, "(virt_name, virt_geometry),\n");
+    strcat (sql, "CONSTRAINT fk_virts_layer_statistics FOREIGN KEY ");
+    strcat (sql, "(virt_name, virt_geometry) REFERENCES ");
+    strcat (sql, "virts_geometry_columns (virt_name, virt_geometry) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    return 1;
+}
+
+static int
+do_update_virts_layer_statistics (sqlite3 * sqlite, const char *table,
+				  const char *column, int count, int has_coords,
+				  double min_x, double min_y, double max_x,
+				  double max_y)
+{
+/* update VIRTS_LAYER_STATISTICS [single table/geometry] */
+    char sql[8192];
+    int ret;
+    int error = 0;
+    sqlite3_stmt *stmt;
+
+    if (!check_virts_layer_statistics (sqlite))
+	return 0;
+    strcpy (sql, "INSERT OR REPLACE INTO virts_layer_statistics ");
+    strcat (sql, "(virt_name, virt_geometry, ");
+    strcat (sql, "row_count, extent_min_x, extent_min_y, ");
+    strcat (sql, "extent_max_x, extent_max_y) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, ?)");
+
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+
+/* binding INSERT params */
+    sqlite3_reset (stmt);
+    sqlite3_clear_bindings (stmt);
+    sqlite3_bind_text (stmt, 1, table, strlen (table), SQLITE_STATIC);
+    sqlite3_bind_text (stmt, 2, column, strlen (column), SQLITE_STATIC);
+    sqlite3_bind_int (stmt, 3, count);
+    if (has_coords)
+      {
+	  sqlite3_bind_double (stmt, 4, min_x);
+	  sqlite3_bind_double (stmt, 5, min_y);
+	  sqlite3_bind_double (stmt, 6, max_x);
+	  sqlite3_bind_double (stmt, 7, max_y);
+      }
+    else
+      {
+	  sqlite3_bind_null (stmt, 4);
+	  sqlite3_bind_null (stmt, 5);
+	  sqlite3_bind_null (stmt, 6);
+	  sqlite3_bind_null (stmt, 7);
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+	error = 1;
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
+
+#define SPATIALITE_STATISTICS_GENUINE	1
+#define SPATIALITE_STATISTICS_VIEWS	2
+#define SPATIALITE_STATISTICS_VIRTS	3
+
+static int
+do_compute_layer_statistics (sqlite3 * sqlite, const char *table,
+			     const char *column, int stat_type)
+{
+/* computes LAYER_STATISTICS [single table/geometry] */
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    int error = 0;
+    int count;
+    double min_x;
+    double min_y;
+    double max_x;
+    double max_y;
+    int has_coords = 1;
+    sqlite3_stmt *stmt;
+
+    strcpy (xtable, table);
+    double_quoted_sql (xtable);
+    strcpy (xgeom, column);
+    double_quoted_sql (xgeom);
+    strcpy (sql, "SELECT Count(*), ");
+    sprintf (sql2, "Min(MbrMinX(%s)), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "Min(MbrMinY(%s)), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "Max(MbrMaxX(%s)), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "Max(MbrMaxY(%s)) ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "FROM %s", xtable);
+    strcat (sql, sql2);
+
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    while (1)
+      {
+	  /* scrolling the result set rows */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		count = sqlite3_column_int (stmt, 0);
+		if (sqlite3_column_type (stmt, 1) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    min_x = sqlite3_column_double (stmt, 1);
+		if (sqlite3_column_type (stmt, 2) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    min_y = sqlite3_column_double (stmt, 2);
+		if (sqlite3_column_type (stmt, 3) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    max_x = sqlite3_column_double (stmt, 3);
+		if (sqlite3_column_type (stmt, 4) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    max_y = sqlite3_column_double (stmt, 4);
+		switch (stat_type)
+		  {
+		  case SPATIALITE_STATISTICS_GENUINE:
+		      if (!do_update_layer_statistics
+			  (sqlite, table, column, count, has_coords, min_x,
+			   min_y, max_x, max_y))
+			  error = 1;
+		      break;
+		  case SPATIALITE_STATISTICS_VIEWS:
+		      if (!do_update_views_layer_statistics
+			  (sqlite, table, column, count, has_coords, min_x,
+			   min_y, max_x, max_y))
+			  error = 1;
+		      break;
+		  case SPATIALITE_STATISTICS_VIRTS:
+		      if (!do_update_virts_layer_statistics
+			  (sqlite, table, column, count, has_coords, min_x,
+			   min_y, max_x, max_y))
+			  error = 1;
+		      break;
+		  };
+	    }
+	  else
+	      error = 1;
+      }
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
+
+static int
+genuine_layer_statistics (sqlite3 * sqlite, const char *table,
+			  const char *column)
+{
+/* updating genuine LAYER_STATISTICS metadata */
+    int count = 0;
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    const char *f_table_name;
+    const char *f_geometry_column;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int error = 0;
+
+    if (table == NULL && column == NULL)
+      {
+	  /* processing any table/geometry found in GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT f_table_name, f_geometry_column ");
+	  strcat (sql, "FROM geometry_columns");
+      }
+    else if (column == NULL)
+      {
+	  /* processing any geometry belonging to this table */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (sql, "SELECT f_table_name, f_geometry_column ");
+	  strcat (sql, "FROM geometry_columns ");
+	  sprintf (sql2, "WHERE f_table_name LIKE '%s'", xtable);
+	  strcat (sql, sql2);
+      }
+    else
+      {
+	  /* processing a single table/geometry entry */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (xgeom, column);
+	  clean_sql_string (xgeom);
+	  strcpy (sql, "SELECT f_table_name, f_geometry_column ");
+	  strcat (sql, "FROM geometry_columns ");
+	  sprintf (sql2, "WHERE f_table_name LIKE '%s' ", xtable);
+	  strcat (sql, sql2);
+	  sprintf (sql2, "AND f_geometry_column LIKE '%s'", xgeom);
+	  strcat (sql2, sql);
+      }
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return -1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		f_table_name = results[(i * columns) + 0];
+		f_geometry_column = results[(i * columns) + 1];
+		if (!do_compute_layer_statistics
+		    (sqlite, f_table_name, f_geometry_column,
+		     SPATIALITE_STATISTICS_GENUINE))
+		  {
+		      error = 1;
+		      break;
+		  }
+		else
+		    count++;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (error)
+	return -1;
+    return count;
+}
+
+static int
+views_layer_statistics (sqlite3 * sqlite, const char *table, const char *column)
+{
+/* updating VIEWS_LAYER_STATISTICS metadata */
+    int count = 0;
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    const char *view_name;
+    const char *view_geometry;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int error = 0;
+
+    if (table == NULL && column == NULL)
+      {
+	  /* processing any table/geometry found in VIEWS_GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT view_name, view_geometry ");
+	  strcat (sql, "FROM views_geometry_columns");
+      }
+    else if (column == NULL)
+      {
+	  /* processing any geometry belonging to this table */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (sql, "SELECT view_name, view_geometry ");
+	  strcat (sql, "FROM views_geometry_columns ");
+	  sprintf (sql2, "WHERE view_name LIKE '%s'", xtable);
+	  strcat (sql, sql2);
+      }
+    else
+      {
+	  /* processing a single table/geometry entry */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (xgeom, column);
+	  clean_sql_string (xgeom);
+	  strcpy (sql, "SELECT view_name, view_geometry ");
+	  strcat (sql, "FROM views_geometry_columns ");
+	  sprintf (sql2, "WHERE view_name LIKE '%s' ", xtable);
+	  strcat (sql, sql2);
+	  sprintf (sql2, "AND view_geometry LIKE '%s'", xgeom);
+	  strcat (sql2, sql);
+      }
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return -1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		view_name = results[(i * columns) + 0];
+		view_geometry = results[(i * columns) + 1];
+		if (!do_compute_layer_statistics
+		    (sqlite, view_name, view_geometry,
+		     SPATIALITE_STATISTICS_VIEWS))
+		  {
+		      error = 1;
+		      break;
+		  }
+		else
+		    count++;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (error)
+	return -1;
+    return count;
+}
+
+static int
+virts_layer_statistics (sqlite3 * sqlite, const char *table, const char *column)
+{
+/* updating VIRTS_LAYER_STATISTICS metadata */
+    int count = 0;
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    const char *f_table_name;
+    const char *f_geometry_column;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int error = 0;
+
+    if (table == NULL && column == NULL)
+      {
+	  /* processing any table/geometry found in GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT virt_name, virt_geometry ");
+	  strcat (sql, "FROM virts_geometry_columns");
+      }
+    else if (column == NULL)
+      {
+	  /* processing any geometry belonging to this table */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (sql, "SELECT virt_name, virt_geometry ");
+	  strcat (sql, "FROM virts_geometry_columns ");
+	  sprintf (sql2, "WHERE virt_name LIKE '%s'", xtable);
+	  strcat (sql, sql2);
+      }
+    else
+      {
+	  /* processing a single table/geometry entry */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (xgeom, column);
+	  clean_sql_string (xgeom);
+	  strcpy (sql, "SELECT virt_name, virt_geometry ");
+	  strcat (sql, "FROM virts_geometry_columns ");
+	  sprintf (sql2, "WHERE virt_name LIKE '%s' ", xtable);
+	  strcat (sql, sql2);
+	  sprintf (sql2, "AND virt_geometry LIKE '%s'", xgeom);
+	  strcat (sql2, sql);
+      }
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return -1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		f_table_name = results[(i * columns) + 0];
+		f_geometry_column = results[(i * columns) + 1];
+		if (!do_compute_layer_statistics
+		    (sqlite, f_table_name, f_geometry_column,
+		     SPATIALITE_STATISTICS_VIRTS))
+		  {
+		      error = 1;
+		      break;
+		  }
+		else
+		    count++;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (error)
+	return -1;
+    return count;
+}
+
+SPATIALITE_DECLARE int
+update_layer_statistics (sqlite3 * sqlite, const char *table,
+			 const char *column)
+{
+/* updating LAYER_STATISTICS metadata [main] */
+    int ret;
+    int count = 0;
+    ret = genuine_layer_statistics (sqlite, table, column);
+    if (ret < 0)
+	return 0;
+    count += ret;
+    ret = views_layer_statistics (sqlite, table, column);
+    if (ret < 0)
+	return 0;
+    count += ret;
+    ret = virts_layer_statistics (sqlite, table, column);
+    if (ret < 0)
+	return 0;
+    count += ret;
+    return count;
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/virtualXL.c b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualXL.c
new file mode 100644
index 0000000..2f9b583
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualXL.c
@@ -0,0 +1,931 @@
+/*
+
+ virtualXLc -- SQLite3 extension [VIRTUAL TABLE accessing .XLS]
+
+ version 3.0, 2011 August 14
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+
+#ifndef OMIT_FREEXL
+#include <freexl.h>
+#endif
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+#ifndef OMIT_ICONV		/* if ICONV is disabled no XL support is available */
+#ifndef OMIT_FREEXL		/* FreeXL is disabled */
+
+static struct sqlite3_module my_XL_module;
+
+typedef struct VirtualXLStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USE INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+    const void *XL_handle;	/* the XL handle */
+    unsigned int rows;		/* Worksheet #rows */
+    unsigned short columns;	/* Worksheet #columns */
+    char firstLineTitles;	/* 'Y' or 'N' */
+} VirtualXL;
+typedef VirtualXL *VirtualXLPtr;
+
+typedef struct VirtualXLConstraintStruct
+{
+/* a constraint to be verified for xFilter */
+    int iColumn;		/* Column on left-hand side of constraint */
+    int op;			/* Constraint operator */
+    char valueType;		/* value Type ('I'=int,'D'=double,'T'=text) */
+    sqlite3_int64 intValue;	/* Int64 comparison value */
+    double dblValue;		/* Double comparison value */
+    char *txtValue;		/* Text comparison value */
+    struct VirtualXLConstraintStruct *next;
+} VirtualXLConstraint;
+typedef VirtualXLConstraint *VirtualXLConstraintPtr;
+
+typedef struct VirtualXLCursorStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    VirtualXLPtr pVtab;		/* Virtual table of this cursor */
+    unsigned int current_row;	/* the current row ID */
+    int eof;			/* the EOF marker */
+    VirtualXLConstraintPtr firstConstraint;
+    VirtualXLConstraintPtr lastConstraint;
+} VirtualXLCursor;
+typedef VirtualXLCursor *VirtualXLCursorPtr;
+
+static void
+vXL_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+static int
+vXL_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	    sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table connected to some XLS file */
+    char buf[4096];
+    VirtualXLPtr p_vt;
+    char path[2048];
+    char firstLineTitles = 'N';
+    unsigned int worksheet = 0;
+    unsigned int max_worksheet;
+    unsigned int info;
+    unsigned int rows;
+    unsigned short columns;
+    unsigned short col;
+    int len;
+    int ret;
+    const void *handle;
+    const char *pPath = NULL;
+    char dummyName[128];
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+/* checking for XLS PATH */
+    if (argc == 4 || argc == 5 || argc == 6)
+      {
+	  pPath = argv[3];
+	  len = strlen (pPath);
+	  if ((*(pPath + 0) == '\'' || *(pPath + 0) == '"')
+	      && (*(pPath + len - 1) == '\'' || *(pPath + len - 1) == '"'))
+	    {
+		/* the path is enclosed between quotes - we need to dequote it */
+		strcpy (path, pPath + 1);
+		len = strlen (path);
+		*(path + len - 1) = '\0';
+	    }
+	  else
+	      strcpy (path, pPath);
+	  if (argc == 5 || argc == 6)
+	      worksheet = atoi (argv[4]);
+	  if (argc == 6)
+	    {
+		if (atoi (argv[5]) == 1)
+		    firstLineTitles = 'Y';
+	    }
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualXL module] CREATE VIRTUAL: illegal arg list {xls_path [, worksheet_index [, first_line_titles(1/0)]]}");
+	  return SQLITE_ERROR;
+      }
+/* allocating the main XL module */
+    p_vt = (VirtualXLPtr) sqlite3_malloc (sizeof (VirtualXL));
+    if (!p_vt)
+	return SQLITE_NOMEM;
+    p_vt->pModule = &my_XL_module;
+    p_vt->nRef = 0;
+    p_vt->zErrMsg = NULL;
+    p_vt->db = db;
+    p_vt->XL_handle = NULL;
+    p_vt->rows = 0;
+    p_vt->columns = 0;
+    p_vt->firstLineTitles = firstLineTitles;
+/* opening the .XLS file [Workbook] */
+    ret = freexl_open (path, &handle);
+    if (ret != FREEXL_OK)
+      {
+	  /* free memory */
+	  freexl_close (handle);
+	  /* something is going the wrong way; creating a stupid default table */
+	  strcpy (dummyName, argv[2]);
+	  vXL_double_quoted_sql (dummyName);
+	  sprintf (buf, "CREATE TABLE %s (PKUID INTEGER)", dummyName);
+	  if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+	    {
+		*pzErr =
+		    sqlite3_mprintf
+		    ("[VirtualXL module] cannot build a table from XL\n");
+		return SQLITE_ERROR;
+	    }
+	  *ppVTab = (sqlite3_vtab *) p_vt;
+	  return SQLITE_OK;
+      }
+/* checking if Password Protected [obfuscated] */
+    freexl_get_info (handle, FREEXL_BIFF_PASSWORD, &info);
+    if (info != FREEXL_BIFF_PLAIN)
+      {
+	  /* free memory */
+	  freexl_close (handle);
+	  /* Obfuscated: creating a stupid default table */
+	  strcpy (dummyName, argv[2]);
+	  vXL_double_quoted_sql (dummyName);
+	  sprintf (buf, "CREATE TABLE %s (PKUID INTEGER)", dummyName);
+	  if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+	    {
+		*pzErr =
+		    sqlite3_mprintf
+		    ("[VirtualXL module] Password protected [obfuscated] .xls\n");
+		return SQLITE_ERROR;
+	    }
+	  *ppVTab = (sqlite3_vtab *) p_vt;
+	  return SQLITE_OK;
+      }
+/* querying how many Worksheets are there */
+    freexl_get_info (handle, FREEXL_BIFF_SHEET_COUNT, &max_worksheet);
+    if (worksheet >= max_worksheet)
+      {
+	  /* free memory */
+	  freexl_close (handle);
+	  /* no such Worksheet: creating a stupid default table */
+	  strcpy (dummyName, argv[2]);
+	  vXL_double_quoted_sql (dummyName);
+	  sprintf (buf, "CREATE TABLE %s (PKUID INTEGER)", dummyName);
+	  if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+	    {
+		*pzErr =
+		    sqlite3_mprintf
+		    ("[VirtualXL module] no such Worksheet [index=%u]\n",
+		     worksheet);
+		return SQLITE_ERROR;
+	    }
+	  *ppVTab = (sqlite3_vtab *) p_vt;
+	  return SQLITE_OK;
+      }
+/* selecting the currently active XL Worksheet */
+    freexl_select_active_worksheet (handle, worksheet);
+    freexl_worksheet_dimensions (handle, &rows, &columns);
+    p_vt->XL_handle = handle;
+    p_vt->rows = rows;
+    p_vt->columns = columns;
+/* preparing the COLUMNs for this VIRTUAL TABLE */
+    strcpy (buf, "CREATE TABLE ");
+    strcpy (dummyName, argv[2]);
+    vXL_double_quoted_sql (dummyName);
+    strcat (buf, dummyName);
+    strcat (buf, " (row_no INTEGER");
+    if (firstLineTitles == 'Y')
+      {
+	  /* fetching column names */
+	  for (col = 0; col < columns; col++)
+	    {
+		FreeXL_CellValue cell;
+		int ret = freexl_get_cell_value (handle, 0, col, &cell);
+		if (ret != FREEXL_OK)
+		    sprintf (dummyName, "col_%d", col);
+		else
+		  {
+		      if (cell.type == FREEXL_CELL_INT)
+			  sprintf (dummyName, "%d", cell.value.int_value);
+		      else if (cell.type == FREEXL_CELL_DOUBLE)
+			  sprintf (dummyName, "%1.2f", cell.value.double_value);
+		      else if (cell.type == FREEXL_CELL_TEXT
+			       || cell.type == FREEXL_CELL_SST_TEXT
+			       || cell.type == FREEXL_CELL_DATE
+			       || cell.type == FREEXL_CELL_DATETIME
+			       || cell.type == FREEXL_CELL_TIME)
+			{
+			    int len = strlen (cell.value.text_value);
+			    if (len < 256)
+				strcpy (dummyName, cell.value.text_value);
+			    else
+				sprintf (dummyName, "col_%d", col);
+			}
+		      else
+			  sprintf (dummyName, "col_%d", col);
+		  }
+		vXL_double_quoted_sql (dummyName);
+		strcat (buf, ", ");
+		strcat (buf, dummyName);
+	    }
+      }
+    else
+      {
+	  /* setting default column names */
+	  for (col = 0; col < columns; col++)
+	    {
+		sprintf (dummyName, "col_%d", col);
+		vXL_double_quoted_sql (dummyName);
+		strcat (buf, ", ");
+		strcat (buf, dummyName);
+	    }
+      }
+    strcat (buf, ")");
+    if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualXL module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       buf);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    return SQLITE_OK;
+}
+
+static int
+vXL_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	     sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table to a .xls file - simply aliases vXL_create() */
+    return vXL_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+vXL_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIndex)
+{
+/* best index selection */
+    int i;
+    int iArg = 0;
+    char str[2048];
+    char buf[64];
+
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+
+    *str = '\0';
+    for (i = 0; i < pIndex->nConstraint; i++)
+      {
+	  if (pIndex->aConstraint[i].usable)
+	    {
+		iArg++;
+		pIndex->aConstraintUsage[i].argvIndex = iArg;
+		pIndex->aConstraintUsage[i].omit = 1;
+		sprintf (buf, "%d:%d,", pIndex->aConstraint[i].iColumn,
+			 pIndex->aConstraint[i].op);
+		strcat (str, buf);
+	    }
+      }
+    if (*str != '\0')
+      {
+	  pIndex->idxStr = sqlite3_mprintf ("%s", str);
+	  pIndex->needToFreeIdxStr = 1;
+      }
+
+    return SQLITE_OK;
+}
+
+static int
+vXL_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    VirtualXLPtr p_vt = (VirtualXLPtr) pVTab;
+    if (p_vt->XL_handle)
+	freexl_close (p_vt->XL_handle);
+    sqlite3_free (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+vXL_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases vXL_disconnect() */
+    return vXL_disconnect (pVTab);
+}
+
+static void
+vXL_read_row (VirtualXLCursorPtr cursor)
+{
+/* trying to read a "row" from XL */
+    cursor->current_row++;
+    if (cursor->current_row > cursor->pVtab->rows)
+      {
+	  cursor->eof = 1;
+	  return;
+      }
+}
+
+static int
+vXL_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    VirtualXLCursorPtr cursor =
+	(VirtualXLCursorPtr) sqlite3_malloc (sizeof (VirtualXLCursor));
+    if (cursor == NULL)
+	return SQLITE_ERROR;
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+    cursor->pVtab = (VirtualXLPtr) pVTab;
+    if (cursor->pVtab->firstLineTitles == 'Y')
+	cursor->current_row = 1;
+    else
+	cursor->current_row = 0;
+    cursor->eof = 0;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    vXL_read_row (cursor);
+    return SQLITE_OK;
+}
+
+static void
+vXL_free_constraints (VirtualXLCursorPtr cursor)
+{
+/* memory cleanup - cursor constraints */
+    VirtualXLConstraintPtr pC;
+    VirtualXLConstraintPtr pCn;
+    pC = cursor->firstConstraint;
+    while (pC)
+      {
+	  pCn = pC->next;
+	  if (pC->txtValue)
+	      sqlite3_free (pC->txtValue);
+	  sqlite3_free (pC);
+	  pC = pCn;
+      }
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+}
+
+static int
+vXL_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    VirtualXLCursorPtr cursor = (VirtualXLCursorPtr) pCursor;
+    vXL_free_constraints (cursor);
+    sqlite3_free (pCursor);
+    return SQLITE_OK;
+}
+
+static int
+vXL_parse_constraint (const char *str, int index, int *iColumn, int *op)
+{
+/* parsing a constraint string */
+    char buf[64];
+    const char *in = str;
+    char *out = buf;
+    int i = 0;
+    int found = 0;
+
+    *out = '\0';
+    while (*in != '\0')
+      {
+	  if (*in == ',')
+	    {
+		if (index == i)
+		  {
+		      *out = '\0';
+		      found = 1;
+		      break;
+		  }
+		i++;
+		in++;
+		continue;
+	    }
+	  if (index == i)
+	      *out++ = *in;
+	  in++;
+      }
+    if (!found)
+	return 0;
+    in = buf;
+    for (i = 0; i < (int) strlen (buf); i++)
+      {
+	  if (buf[i] == ':')
+	    {
+		buf[i] = '\0';
+		*iColumn = atoi (buf);
+		*op = atoi (buf + i + 1);
+		return 1;
+	    }
+	  in++;
+      }
+    return 0;
+}
+
+static int
+vXL_eval_constraints (VirtualXLCursorPtr cursor)
+{
+/* evaluating Filter constraints */
+    FreeXL_CellValue cell;
+    VirtualXLConstraintPtr pC = cursor->firstConstraint;
+    if (pC == NULL)
+	return 1;
+    while (pC)
+      {
+	  int ok = 0;
+	  if (pC->iColumn == 0)
+	    {
+		/* the PRIMARY KEY column */
+		if (pC->valueType == 'I')
+		  {
+		      int cur_row = cursor->current_row;
+		      if (cursor->pVtab->firstLineTitles == 'Y')
+			  cur_row--;
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (cur_row == pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (cur_row > pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (cur_row <= pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (cur_row < pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (cur_row >= pC->intValue)
+				ok = 1;
+			    break;
+			};
+		  }
+		goto done;
+	    }
+	  if (cursor->pVtab->XL_handle != NULL
+	      && cursor->current_row <= cursor->pVtab->rows
+	      && pC->iColumn <= cursor->pVtab->columns)
+	      freexl_get_cell_value (cursor->pVtab->XL_handle,
+				     cursor->current_row - 1, pC->iColumn - 1,
+				     &cell);
+	  else
+	      cell.type = FREEXL_CELL_NULL;
+	  if (cell.type == FREEXL_CELL_INT)
+	    {
+		if (pC->valueType == 'I')
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (cell.value.int_value == pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (cell.value.int_value > pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (cell.value.int_value <= pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (cell.value.int_value < pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (cell.value.int_value >= pC->intValue)
+				ok = 1;
+			    break;
+			};
+		  }
+		if (pC->valueType == 'D')
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (cell.value.int_value == pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (cell.value.int_value > pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (cell.value.int_value <= pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (cell.value.int_value < pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (cell.value.int_value >= pC->dblValue)
+				ok = 1;
+			    break;
+			};
+		  }
+	    }
+	  if (cell.type == FREEXL_CELL_DOUBLE)
+	    {
+		if (pC->valueType == 'I')
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (cell.value.double_value == pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (cell.value.double_value > pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (cell.value.double_value <= pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (cell.value.double_value < pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (cell.value.double_value >= pC->intValue)
+				ok = 1;
+			    break;
+			};
+		  }
+		if (pC->valueType == 'D')
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (cell.value.double_value == pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (cell.value.double_value > pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (cell.value.double_value <= pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (cell.value.double_value < pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (cell.value.double_value >= pC->dblValue)
+				ok = 1;
+			    break;
+			};
+		  }
+	    }
+	  if ((cell.type == FREEXL_CELL_TEXT
+	       || cell.type == FREEXL_CELL_SST_TEXT
+	       || cell.type == FREEXL_CELL_DATE
+	       || cell.type == FREEXL_CELL_DATETIME
+	       || cell.type == FREEXL_CELL_TIME) && pC->valueType == 'T')
+	    {
+		int ret = strcmp (cell.value.text_value, pC->txtValue);
+		switch (pC->op)
+		  {
+		  case SQLITE_INDEX_CONSTRAINT_EQ:
+		      if (ret == 0)
+			  ok = 1;
+		      break;
+		  case SQLITE_INDEX_CONSTRAINT_GT:
+		      if (ret > 0)
+			  ok = 1;
+		      break;
+		  case SQLITE_INDEX_CONSTRAINT_LE:
+		      if (ret <= 0)
+			  ok = 1;
+		      break;
+		  case SQLITE_INDEX_CONSTRAINT_LT:
+		      if (ret < 0)
+			  ok = 1;
+		      break;
+		  case SQLITE_INDEX_CONSTRAINT_GE:
+		      if (ret >= 0)
+			  ok = 1;
+		      break;
+		  };
+	    }
+	done:
+	  if (!ok)
+	      return 0;
+	  pC = pC->next;
+      }
+    return 1;
+}
+
+static int
+vXL_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	    int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    int i;
+    int iColumn;
+    int op;
+    int len;
+    VirtualXLConstraintPtr pC;
+    VirtualXLCursorPtr cursor = (VirtualXLCursorPtr) pCursor;
+    if (idxNum)
+	idxNum = idxNum;	/* unused arg warning suppression */
+
+/* resetting any previously set filter constraint */
+    vXL_free_constraints (cursor);
+
+    for (i = 0; i < argc; i++)
+      {
+	  if (!vXL_parse_constraint (idxStr, i, &iColumn, &op))
+	      continue;
+	  pC = sqlite3_malloc (sizeof (VirtualXLConstraint));
+	  if (!pC)
+	      continue;
+	  pC->iColumn = iColumn;
+	  pC->op = op;
+	  pC->valueType = '\0';
+	  pC->txtValue = NULL;
+	  pC->next = NULL;
+
+	  if (sqlite3_value_type (argv[i]) == SQLITE_INTEGER)
+	    {
+		pC->valueType = 'I';
+		pC->intValue = sqlite3_value_int64 (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_FLOAT)
+	    {
+		pC->valueType = 'D';
+		pC->dblValue = sqlite3_value_double (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_TEXT)
+	    {
+		pC->valueType = 'T';
+		len = sqlite3_value_bytes (argv[i]) + 1;
+		pC->txtValue = (char *) sqlite3_malloc (len);
+		if (pC->txtValue)
+		    strcpy (pC->txtValue,
+			    (char *) sqlite3_value_text (argv[i]));
+	    }
+	  if (cursor->firstConstraint == NULL)
+	      cursor->firstConstraint = pC;
+	  if (cursor->lastConstraint != NULL)
+	      cursor->lastConstraint->next = pC;
+	  cursor->lastConstraint = pC;
+      }
+
+    if (cursor->pVtab->firstLineTitles == 'Y')
+	cursor->current_row = 1;
+    else
+	cursor->current_row = 0;
+    cursor->eof = 0;
+    while (1)
+      {
+	  vXL_read_row (cursor);
+	  if (cursor->eof)
+	      break;
+	  if (vXL_eval_constraints (cursor))
+	      break;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vXL_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching a next row from cursor */
+    VirtualXLCursorPtr cursor = (VirtualXLCursorPtr) pCursor;
+    while (1)
+      {
+	  vXL_read_row (cursor);
+	  if (cursor->eof)
+	      break;
+	  if (vXL_eval_constraints (cursor))
+	      break;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vXL_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    VirtualXLCursorPtr cursor = (VirtualXLCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+vXL_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	    int column)
+{
+/* fetching value for the Nth column */
+    FreeXL_CellValue cell;
+    VirtualXLCursorPtr cursor = (VirtualXLCursorPtr) pCursor;
+    if (column == 0)
+      {
+	  /* the PRIMARY KEY column */
+	  if (cursor->pVtab->firstLineTitles == 'Y')
+	      sqlite3_result_int (pContext, cursor->current_row - 1);
+	  else
+	      sqlite3_result_int (pContext, cursor->current_row);
+	  return SQLITE_OK;
+      }
+    if (cursor->pVtab->XL_handle != NULL
+	&& cursor->current_row <= cursor->pVtab->rows
+	&& column <= cursor->pVtab->columns)
+	freexl_get_cell_value (cursor->pVtab->XL_handle,
+			       cursor->current_row - 1, column - 1, &cell);
+    else
+	cell.type = FREEXL_CELL_NULL;
+    switch (cell.type)
+      {
+      case FREEXL_CELL_INT:
+	  sqlite3_result_int (pContext, cell.value.int_value);
+	  break;
+      case FREEXL_CELL_DOUBLE:
+	  sqlite3_result_double (pContext, cell.value.double_value);
+	  break;
+      case FREEXL_CELL_TEXT:
+      case FREEXL_CELL_SST_TEXT:
+      case FREEXL_CELL_DATE:
+      case FREEXL_CELL_DATETIME:
+      case FREEXL_CELL_TIME:
+	  sqlite3_result_text (pContext, cell.value.text_value,
+			       strlen (cell.value.text_value), SQLITE_STATIC);
+	  break;
+      default:
+	  sqlite3_result_null (pContext);
+	  break;
+      };
+    return SQLITE_OK;
+}
+
+static int
+vXL_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    VirtualXLCursorPtr cursor = (VirtualXLCursorPtr) pCursor;
+    if (cursor->pVtab->firstLineTitles == 'Y')
+	*pRowid = cursor->current_row - 1;
+    else
+	*pRowid = cursor->current_row;
+    return SQLITE_OK;
+}
+
+static int
+vXL_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	    sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    if (pVTab || argc || argv || pRowid)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_READONLY;
+}
+
+static int
+vXL_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vXL_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vXL_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vXL_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3VirtualXLInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    my_XL_module.iVersion = 1;
+    my_XL_module.xCreate = &vXL_create;
+    my_XL_module.xConnect = &vXL_connect;
+    my_XL_module.xBestIndex = &vXL_best_index;
+    my_XL_module.xDisconnect = &vXL_disconnect;
+    my_XL_module.xDestroy = &vXL_destroy;
+    my_XL_module.xOpen = &vXL_open;
+    my_XL_module.xClose = &vXL_close;
+    my_XL_module.xFilter = &vXL_filter;
+    my_XL_module.xNext = &vXL_next;
+    my_XL_module.xEof = &vXL_eof;
+    my_XL_module.xColumn = &vXL_column;
+    my_XL_module.xRowid = &vXL_rowid;
+    my_XL_module.xUpdate = &vXL_update;
+    my_XL_module.xBegin = &vXL_begin;
+    my_XL_module.xSync = &vXL_sync;
+    my_XL_module.xCommit = &vXL_commit;
+    my_XL_module.xRollback = &vXL_rollback;
+    my_XL_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "VirtualXL", &my_XL_module, NULL, 0);
+    return rc;
+}
+
+int
+virtualXL_extension_init (sqlite3 * db)
+{
+    return sqlite3VirtualXLInit (db);
+}
+
+#endif /* FreeXL enabled/disabled */
+#endif /* ICONV enabled/disabled */
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/virtualdbf.c b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualdbf.c
new file mode 100644
index 0000000..9851caa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualdbf.c
@@ -0,0 +1,914 @@
+/*
+
+ virtualdbf.c -- SQLite3 extension [VIRTUAL TABLE accessing DBF]
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+#ifndef OMIT_ICONV		/* if ICONV is disabled no DBF support is available */
+
+static struct sqlite3_module my_dbf_module;
+
+typedef struct VirtualDbfStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USE INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+    gaiaDbfPtr dbf;		/* the DBF struct */
+} VirtualDbf;
+typedef VirtualDbf *VirtualDbfPtr;
+
+typedef struct VirtualDbfConstraintStruct
+{
+/* a constraint to be verified for xFilter */
+    int iColumn;		/* Column on left-hand side of constraint */
+    int op;			/* Constraint operator */
+    char valueType;		/* value Type ('I'=int,'D'=double,'T'=text) */
+    sqlite3_int64 intValue;	/* Int64 comparison value */
+    double dblValue;		/* Double comparison value */
+    char *txtValue;		/* Text comparison value */
+    struct VirtualDbfConstraintStruct *next;
+} VirtualDbfConstraint;
+typedef VirtualDbfConstraint *VirtualDbfConstraintPtr;
+
+typedef struct VirtualDbfCursorStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    VirtualDbfPtr pVtab;	/* Virtual table of this cursor */
+    long current_row;		/* the current row ID */
+    int eof;			/* the EOF marker */
+    VirtualDbfConstraintPtr firstConstraint;
+    VirtualDbfConstraintPtr lastConstraint;
+} VirtualDbfCursor;
+
+typedef VirtualDbfCursor *VirtualDbfCursorPtr;
+
+static void
+vdbf_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+static int
+vdbf_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	     sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table connected to some DBF */
+    char buf[4096];
+    char field[128];
+    VirtualDbfPtr p_vt;
+    char path[2048];
+    char encoding[128];
+    const char *pEncoding = NULL;
+    int len;
+    const char *pPath = NULL;
+    gaiaDbfFieldPtr pFld;
+    int cnt;
+    int col_cnt;
+    int seed;
+    int dup;
+    int idup;
+    char dummyName[4096];
+    char **col_name = NULL;
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+/* checking for DBF PATH */
+    if (argc == 5)
+      {
+	  pPath = argv[3];
+	  len = strlen (pPath);
+	  if ((*(pPath + 0) == '\'' || *(pPath + 0) == '"')
+	      && (*(pPath + len - 1) == '\'' || *(pPath + len - 1) == '"'))
+	    {
+		/* the path is enclosed between quotes - we need to dequote it */
+		strcpy (path, pPath + 1);
+		len = strlen (path);
+		*(path + len - 1) = '\0';
+	    }
+	  else
+	      strcpy (path, pPath);
+	  pEncoding = argv[4];
+	  len = strlen (pEncoding);
+	  if ((*(pEncoding + 0) == '\'' || *(pEncoding + 0) == '"')
+	      && (*(pEncoding + len - 1) == '\''
+		  || *(pEncoding + len - 1) == '"'))
+	    {
+		/* the charset-name is enclosed between quotes - we need to dequote it */
+		strcpy (encoding, pEncoding + 1);
+		len = strlen (encoding);
+		*(encoding + len - 1) = '\0';
+	    }
+	  else
+	      strcpy (encoding, pEncoding);
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualDbf module] CREATE VIRTUAL: illegal arg list {dbf_path, encoding}");
+	  return SQLITE_ERROR;
+      }
+    p_vt = (VirtualDbfPtr) sqlite3_malloc (sizeof (VirtualDbf));
+    if (!p_vt)
+	return SQLITE_NOMEM;
+    p_vt->pModule = &my_dbf_module;
+    p_vt->nRef = 0;
+    p_vt->zErrMsg = NULL;
+    p_vt->db = db;
+    p_vt->dbf = gaiaAllocDbf ();
+/* trying to open file */
+    gaiaOpenDbfRead (p_vt->dbf, path, encoding, "UTF-8");
+    if (!(p_vt->dbf->Valid))
+      {
+	  /* something is going the wrong way; creating a stupid default table */
+	  strcpy (dummyName, argv[2]);
+	  vdbf_double_quoted_sql (dummyName);
+	  sprintf (buf, "CREATE TABLE %s (PKUID INTEGER)", dummyName);
+	  if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+	    {
+		*pzErr =
+		    sqlite3_mprintf
+		    ("[VirtualDbf module] cannot build a table from DBF\n");
+		return SQLITE_ERROR;
+	    }
+	  *ppVTab = (sqlite3_vtab *) p_vt;
+	  return SQLITE_OK;
+      }
+/* preparing the COLUMNs for this VIRTUAL TABLE */
+    strcpy (buf, "CREATE TABLE ");
+    strcpy (dummyName, argv[2]);
+    vdbf_double_quoted_sql (dummyName);
+    strcat (buf, dummyName);
+    strcat (buf, " (PKUID INTEGER");
+/* checking for duplicate / illegal column names and antialising them */
+    col_cnt = 0;
+    pFld = p_vt->dbf->Dbf->First;
+    while (pFld)
+      {
+	  /* counting DBF fields */
+	  col_cnt++;
+	  pFld = pFld->Next;
+      }
+    col_name = malloc (sizeof (char *) * col_cnt);
+    cnt = 0;
+    seed = 0;
+    pFld = p_vt->dbf->Dbf->First;
+    while (pFld)
+      {
+	  sprintf (dummyName, "%s", pFld->Name);
+	  vdbf_double_quoted_sql (dummyName);
+	  dup = 0;
+	  for (idup = 0; idup < cnt; idup++)
+	    {
+		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
+		    dup = 1;
+	    }
+	  if (strcasecmp (dummyName, "PKUID") == 0)
+	      dup = 1;
+	  if (dup)
+	    {
+		sprintf (dummyName, "COL_%d", seed++);
+		vdbf_double_quoted_sql (dummyName);
+	    }
+	  if (pFld->Type == 'N')
+	    {
+		if (pFld->Decimals > 0 || pFld->Length > 18)
+		    sprintf (field, "%s DOUBLE", dummyName);
+		else
+		    sprintf (field, "%s INTEGER", dummyName);
+	    }
+	  else if (pFld->Type == 'F')
+	      sprintf (field, "%s DOUBLE", dummyName);
+	  else
+	      sprintf (field, "%s VARCHAR(%d)", dummyName, pFld->Length);
+	  strcat (buf, ", ");
+	  strcat (buf, field);
+	  len = strlen (dummyName);
+	  *(col_name + cnt) = malloc (len + 1);
+	  strcpy (*(col_name + cnt), dummyName);
+	  cnt++;
+	  pFld = pFld->Next;
+      }
+    strcat (buf, ")");
+    if (col_name)
+      {
+	  /* releasing memory allocation for column names */
+	  for (cnt = 0; cnt < col_cnt; cnt++)
+	      free (*(col_name + cnt));
+	  free (col_name);
+      }
+    if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualDbf module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       buf);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    return SQLITE_OK;
+}
+
+static int
+vdbf_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	      sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table to some DBF - simply aliases vdbf_create() */
+    return vdbf_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+vdbf_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIndex)
+{
+/* best index selection */
+    int i;
+    int iArg = 0;
+    char str[2048];
+    char buf[64];
+
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+
+    *str = '\0';
+    for (i = 0; i < pIndex->nConstraint; i++)
+      {
+	  if (pIndex->aConstraint[i].usable)
+	    {
+		iArg++;
+		pIndex->aConstraintUsage[i].argvIndex = iArg;
+		pIndex->aConstraintUsage[i].omit = 1;
+		sprintf (buf, "%d:%d,", pIndex->aConstraint[i].iColumn,
+			 pIndex->aConstraint[i].op);
+		strcat (str, buf);
+	    }
+      }
+    if (*str != '\0')
+      {
+	  pIndex->idxStr = sqlite3_mprintf ("%s", str);
+	  pIndex->needToFreeIdxStr = 1;
+      }
+
+    return SQLITE_OK;
+}
+
+static int
+vdbf_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    VirtualDbfPtr p_vt = (VirtualDbfPtr) pVTab;
+    if (p_vt->dbf)
+	gaiaFreeDbf (p_vt->dbf);
+    sqlite3_free (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+vdbf_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases vdbf_disconnect() */
+    return vdbf_disconnect (pVTab);
+}
+
+static void
+vdbf_read_row (VirtualDbfCursorPtr cursor, int *deleted_row)
+{
+/* trying to read a "row" from DBF */
+    int ret;
+    int deleted;
+    if (!(cursor->pVtab->dbf->Valid))
+      {
+	  cursor->eof = 1;
+	  return;
+      }
+    ret = gaiaReadDbfEntity (cursor->pVtab->dbf, cursor->current_row, &deleted);
+    if (!ret)
+      {
+	  if (!(cursor->pVtab->dbf->LastError))	/* normal DBF EOF */
+	    {
+		cursor->eof = 1;
+		return;
+	    }
+	  /* an error occurred */
+	  fprintf (stderr, "%s\n", cursor->pVtab->dbf->LastError);
+	  cursor->eof = 1;
+	  return;
+      }
+    cursor->current_row++;
+    *deleted_row = deleted;
+}
+
+static int
+vdbf_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    int deleted;
+    VirtualDbfCursorPtr cursor =
+	(VirtualDbfCursorPtr) sqlite3_malloc (sizeof (VirtualDbfCursor));
+    if (cursor == NULL)
+	return SQLITE_ERROR;
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+    cursor->pVtab = (VirtualDbfPtr) pVTab;
+    cursor->current_row = 0;
+    cursor->eof = 0;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    while (1)
+      {
+	  vdbf_read_row (cursor, &deleted);
+	  if (cursor->eof)
+	      break;
+	  if (!deleted)
+	      break;
+      }
+    return SQLITE_OK;
+}
+
+static void
+vdbf_free_constraints (VirtualDbfCursorPtr cursor)
+{
+/* memory cleanup - cursor constraints */
+    VirtualDbfConstraintPtr pC;
+    VirtualDbfConstraintPtr pCn;
+    pC = cursor->firstConstraint;
+    while (pC)
+      {
+	  pCn = pC->next;
+	  if (pC->txtValue)
+	      sqlite3_free (pC->txtValue);
+	  sqlite3_free (pC);
+	  pC = pCn;
+      }
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+}
+
+static int
+vdbf_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    VirtualDbfCursorPtr cursor = (VirtualDbfCursorPtr) pCursor;
+    vdbf_free_constraints (cursor);
+    sqlite3_free (pCursor);
+    return SQLITE_OK;
+}
+
+static int
+vdbf_parse_constraint (const char *str, int index, int *iColumn, int *op)
+{
+/* parsing a constraint string */
+    char buf[64];
+    const char *in = str;
+    char *out = buf;
+    int i = 0;
+    int found = 0;
+
+    *out = '\0';
+    while (*in != '\0')
+      {
+	  if (*in == ',')
+	    {
+		if (index == i)
+		  {
+		      *out = '\0';
+		      found = 1;
+		      break;
+		  }
+		i++;
+		in++;
+		continue;
+	    }
+	  if (index == i)
+	      *out++ = *in;
+	  in++;
+      }
+    if (!found)
+	return 0;
+    in = buf;
+    for (i = 0; i < (int) strlen (buf); i++)
+      {
+	  if (buf[i] == ':')
+	    {
+		buf[i] = '\0';
+		*iColumn = atoi (buf);
+		*op = atoi (buf + i + 1);
+		return 1;
+	    }
+	  in++;
+      }
+    return 0;
+}
+
+static int
+vdbf_eval_constraints (VirtualDbfCursorPtr cursor)
+{
+/* evaluating Filter constraints */
+    int nCol;
+    gaiaDbfFieldPtr pFld;
+    VirtualDbfConstraintPtr pC = cursor->firstConstraint;
+    if (pC == NULL)
+	return 1;
+    while (pC)
+      {
+	  int ok = 0;
+	  if (pC->iColumn == 0)
+	    {
+		/* the PRIMARY KEY column */
+		if (pC->valueType == 'I')
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (cursor->current_row == pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (cursor->current_row > pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (cursor->current_row <= pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (cursor->current_row < pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (cursor->current_row >= pC->intValue)
+				ok = 1;
+			    break;
+			};
+		  }
+		goto done;
+	    }
+	  nCol = 1;
+	  pFld = cursor->pVtab->dbf->Dbf->First;
+	  while (pFld)
+	    {
+		if (nCol == pC->iColumn)
+		  {
+		      if ((pFld->Value))
+			{
+			    switch (pFld->Value->Type)
+			      {
+			      case GAIA_INT_VALUE:
+				  if (pC->valueType == 'I')
+				    {
+
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (pFld->Value->IntValue ==
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (pFld->Value->IntValue >
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (pFld->Value->IntValue <=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (pFld->Value->IntValue <
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (pFld->Value->IntValue >=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  };
+				    }
+				  break;
+			      case GAIA_DOUBLE_VALUE:
+				  if (pC->valueType == 'I')
+				    {
+
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (pFld->Value->DblValue ==
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (pFld->Value->DblValue >
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (pFld->Value->DblValue <=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (pFld->Value->DblValue <
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (pFld->Value->DblValue >=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  };
+				    }
+				  if (pC->valueType == 'D')
+				    {
+
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (pFld->Value->DblValue ==
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (pFld->Value->DblValue >
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (pFld->Value->DblValue <=
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (pFld->Value->DblValue <
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (pFld->Value->DblValue >=
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  }
+				    }
+				  break;
+			      case GAIA_TEXT_VALUE:
+				  if (pC->valueType == 'T' && pC->txtValue)
+				    {
+
+					int ret;
+					ret =
+					    strcmp (pFld->Value->TxtValue,
+						    pC->txtValue);
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (ret == 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (ret > 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (ret <= 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (ret < 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (ret >= 0)
+						  ok = 1;
+					      break;
+					  };
+				    }
+				  break;
+			      };
+			}
+		      goto done;
+		  }
+		nCol++;
+		pFld = pFld->Next;
+	    }
+	done:
+	  if (!ok)
+	      return 0;
+	  pC = pC->next;
+      }
+    return 1;
+}
+
+static int
+vdbf_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	     int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    int i;
+    int iColumn;
+    int op;
+    int len;
+    int deleted;
+    VirtualDbfConstraintPtr pC;
+    VirtualDbfCursorPtr cursor = (VirtualDbfCursorPtr) pCursor;
+    if (idxNum)
+	idxNum = idxNum;	/* unused arg warning suppression */
+
+/* resetting any previously set filter constraint */
+    vdbf_free_constraints (cursor);
+
+    for (i = 0; i < argc; i++)
+      {
+	  if (!vdbf_parse_constraint (idxStr, i, &iColumn, &op))
+	      continue;
+	  pC = sqlite3_malloc (sizeof (VirtualDbfConstraint));
+	  if (!pC)
+	      continue;
+	  pC->iColumn = iColumn;
+	  pC->op = op;
+	  pC->valueType = '\0';
+	  pC->txtValue = NULL;
+	  pC->next = NULL;
+
+	  if (sqlite3_value_type (argv[i]) == SQLITE_INTEGER)
+	    {
+		pC->valueType = 'I';
+		pC->intValue = sqlite3_value_int64 (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_FLOAT)
+	    {
+		pC->valueType = 'D';
+		pC->dblValue = sqlite3_value_double (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_TEXT)
+	    {
+		pC->valueType = 'T';
+		len = sqlite3_value_bytes (argv[i]) + 1;
+		pC->txtValue = (char *) sqlite3_malloc (len);
+		if (pC->txtValue)
+		    strcpy (pC->txtValue,
+			    (char *) sqlite3_value_text (argv[i]));
+	    }
+	  if (cursor->firstConstraint == NULL)
+	      cursor->firstConstraint = pC;
+	  if (cursor->lastConstraint != NULL)
+	      cursor->lastConstraint->next = pC;
+	  cursor->lastConstraint = pC;
+      }
+
+    cursor->current_row = 0;
+    cursor->eof = 0;
+    while (1)
+      {
+	  vdbf_read_row (cursor, &deleted);
+	  if (cursor->eof)
+	      break;
+	  if (deleted)
+	      continue;
+	  if (vdbf_eval_constraints (cursor))
+	      break;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vdbf_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching a next row from cursor */
+    int deleted;
+    VirtualDbfCursorPtr cursor = (VirtualDbfCursorPtr) pCursor;
+    while (1)
+      {
+	  vdbf_read_row (cursor, &deleted);
+	  if (cursor->eof)
+	      break;
+	  if (deleted)
+	      continue;
+	  if (vdbf_eval_constraints (cursor))
+	      break;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vdbf_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    VirtualDbfCursorPtr cursor = (VirtualDbfCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+vdbf_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	     int column)
+{
+/* fetching value for the Nth column */
+    int nCol = 1;
+    gaiaDbfFieldPtr pFld;
+    VirtualDbfCursorPtr cursor = (VirtualDbfCursorPtr) pCursor;
+    if (column == 0)
+      {
+	  /* the PRIMARY KEY column */
+	  sqlite3_result_int (pContext, cursor->current_row);
+	  return SQLITE_OK;
+      }
+    pFld = cursor->pVtab->dbf->Dbf->First;
+    while (pFld)
+      {
+	  /* column values */
+	  if (nCol == column)
+	    {
+		if (!(pFld->Value))
+		    sqlite3_result_null (pContext);
+		else
+		  {
+		      switch (pFld->Value->Type)
+			{
+			case GAIA_INT_VALUE:
+			    sqlite3_result_int64 (pContext,
+						  pFld->Value->IntValue);
+			    break;
+			case GAIA_DOUBLE_VALUE:
+			    sqlite3_result_double (pContext,
+						   pFld->Value->DblValue);
+			    break;
+			case GAIA_TEXT_VALUE:
+			    sqlite3_result_text (pContext,
+						 pFld->Value->TxtValue,
+						 strlen (pFld->Value->TxtValue),
+						 SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_result_null (pContext);
+			    break;
+			}
+		  }
+		break;
+	    }
+	  nCol++;
+	  pFld = pFld->Next;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vdbf_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    VirtualDbfCursorPtr cursor = (VirtualDbfCursorPtr) pCursor;
+    *pRowid = cursor->current_row;
+    return SQLITE_OK;
+}
+
+static int
+vdbf_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	     sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    if (pVTab || argc || argv || pRowid)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_READONLY;
+}
+
+static int
+vdbf_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vdbf_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vdbf_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vdbf_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3VirtualDbfInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    my_dbf_module.iVersion = 1;
+    my_dbf_module.xCreate = &vdbf_create;
+    my_dbf_module.xConnect = &vdbf_connect;
+    my_dbf_module.xBestIndex = &vdbf_best_index;
+    my_dbf_module.xDisconnect = &vdbf_disconnect;
+    my_dbf_module.xDestroy = &vdbf_destroy;
+    my_dbf_module.xOpen = &vdbf_open;
+    my_dbf_module.xClose = &vdbf_close;
+    my_dbf_module.xFilter = &vdbf_filter;
+    my_dbf_module.xNext = &vdbf_next;
+    my_dbf_module.xEof = &vdbf_eof;
+    my_dbf_module.xColumn = &vdbf_column;
+    my_dbf_module.xRowid = &vdbf_rowid;
+    my_dbf_module.xUpdate = &vdbf_update;
+    my_dbf_module.xBegin = &vdbf_begin;
+    my_dbf_module.xSync = &vdbf_sync;
+    my_dbf_module.xCommit = &vdbf_commit;
+    my_dbf_module.xRollback = &vdbf_rollback;
+    my_dbf_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "VirtualDbf", &my_dbf_module, NULL, 0);
+    return rc;
+}
+
+int
+virtualdbf_extension_init (sqlite3 * db)
+{
+    return sqlite3VirtualDbfInit (db);
+}
+
+#endif /* ICONV enabled/disabled */
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/virtualfdo.c b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualfdo.c
new file mode 100644
index 0000000..12ae989
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualfdo.c
@@ -0,0 +1,2200 @@
+/*
+
+ virtualfdo.c -- SQLite3 extension [VIRTUAL TABLE accessing FDO-OGR tables]
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+
+/* constants definining FDO-OGR Geometry formats */
+#define FDO_OGR_NONE	0
+#define FDO_OGR_WKT	1
+#define FDO_OGR_WKB	2
+#define FDO_OGR_FGF	3
+#define FDO_OGR_SPLITE	4
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#define strncasecmp	_strnicmp
+#endif /* not WIN32 */
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+#define LONG64_MAX	_I64_MAX
+#define LONG64_MIN	_I64_MIN
+#else
+#define LONG64_MAX	9223372036854775807LL
+#define LONG64_MIN	(-LONG64_MAX + 1)
+#endif
+
+struct sqlite3_module my_fdo_module;
+
+typedef struct SqliteValue
+{
+/* a multitype storing a column value */
+    int Type;
+    sqlite3_int64 IntValue;
+    double DoubleValue;
+    char *Text;
+    unsigned char *Blob;
+    int Size;
+} SqliteValue;
+typedef SqliteValue *SqliteValuePtr;
+
+typedef struct VirtualFDOStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USE INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+    char *table;		/* the real-table name */
+    int nColumns;		/* the # columns into the table */
+    char **Column;		/* the name for each column */
+    char **Type;		/* the type for each column */
+    int *NotNull;		/* NotNull clause for each column */
+    SqliteValuePtr *Value;	/* the current-row value for each column */
+    int nGeometries;		/* # Geometry columns into the table */
+    char **GeoColumn;		/* the name for each Geometry column */
+    int *Srid;			/* the SRID for each Geometry column */
+    int *GeoType;		/* the Type for each Geometry column */
+    int *Format;		/* the Format for each Geometry column */
+    int *CoordDimensions;	/* # Dimensions for each Geometry column */
+} VirtualFDO;
+typedef VirtualFDO *VirtualFDOPtr;
+
+typedef struct VirtualFDOCursorStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    VirtualFDOPtr pVtab;	/* Virtual table of this cursor */
+    sqlite3_int64 current_row;	/* the current row ID */
+    int eof;			/* the EOF marker */
+} VirtualFDOCursor;
+typedef VirtualFDOCursor *VirtualFDOCursorPtr;
+
+static void
+vfdo_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+
+static void
+vfdo_clean_sql_string (char *buf)
+{
+/* returns a well formatted TEXT value for SQL */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    while (*in != '\0')
+      {
+	  if (*in == '\'')
+	      *out++ = '\'';
+	  *out++ = *in++;
+      }
+    *out = '\0';
+}
+
+static void
+vfdo_dequote (char *buf)
+{
+/* dequoting an SQL string */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    char strip = '\0';
+    int first = 0;
+    int len = strlen (buf);
+    if (buf[0] == '\'' && buf[len - 1] == '\'')
+	strip = '\'';
+    if (buf[0] == '"' && buf[len - 1] == '"')
+	strip = '"';
+    if (strip == '\0')
+	return;
+    strcpy (tmp, buf + 1);
+    len = strlen (tmp);
+    tmp[len - 1] = '\0';
+    while (*in != '\0')
+      {
+	  if (*in == strip)
+	    {
+		if (first)
+		  {
+		      first = 0;
+		      in++;
+		      continue;
+		  }
+		else
+		  {
+		      first = 1;
+		      *out++ = *in++;
+		      continue;
+		  }
+	    }
+	  first = 0;
+	  *out++ = *in++;
+      }
+    *out = '\0';
+}
+
+static SqliteValuePtr
+value_alloc (void)
+{
+/* allocates and initialites a Value multitype */
+    SqliteValuePtr p = malloc (sizeof (SqliteValue));
+    p->Type = SQLITE_NULL;
+    p->Text = NULL;
+    p->Blob = NULL;
+    return p;
+}
+
+static void
+value_free (SqliteValuePtr p)
+{
+/* freeing a Value multitype */
+    if (!p)
+	return;
+    if (p->Text)
+	free (p->Text);
+    if (p->Blob)
+	free (p->Blob);
+    free (p);
+}
+
+static void
+value_set_null (SqliteValuePtr p)
+{
+/* setting a NULL value to the multitype */
+    if (!p)
+	return;
+    p->Type = SQLITE_NULL;
+    if (p->Text)
+	free (p->Text);
+    if (p->Blob)
+	free (p->Blob);
+    p->Text = NULL;
+    p->Blob = NULL;
+}
+
+static void
+value_set_int (SqliteValuePtr p, sqlite3_int64 value)
+{
+/* setting an INT value to the multitype */
+    if (!p)
+	return;
+    p->Type = SQLITE_INTEGER;
+    if (p->Text)
+	free (p->Text);
+    if (p->Blob)
+	free (p->Blob);
+    p->Text = NULL;
+    p->Blob = NULL;
+    p->IntValue = value;
+}
+
+static void
+value_set_double (SqliteValuePtr p, double value)
+{
+/* setting a DOUBLE value to the multitype */
+    if (!p)
+	return;
+    p->Type = SQLITE_FLOAT;
+    if (p->Text)
+	free (p->Text);
+    if (p->Blob)
+	free (p->Blob);
+    p->Text = NULL;
+    p->Blob = NULL;
+    p->DoubleValue = value;
+}
+
+static void
+value_set_text (SqliteValuePtr p, const char *value, int size)
+{
+/* setting a TEXT value to the multitype */
+    if (!p)
+	return;
+    p->Type = SQLITE_TEXT;
+    if (p->Text)
+	free (p->Text);
+    if (p->Blob)
+	free (p->Blob);
+    p->Blob = NULL;
+    p->Text = malloc (size);
+    memcpy (p->Text, value, size);
+    p->Size = size;
+}
+
+static void
+value_set_blob (SqliteValuePtr p, const unsigned char *value, int size)
+{
+/* setting a BLOB value to the multitype */
+    if (!p)
+	return;
+    p->Type = SQLITE_BLOB;
+    if (p->Text)
+	free (p->Text);
+    if (p->Blob)
+	free (p->Blob);
+    p->Text = NULL;
+    p->Blob = malloc (size);
+    memcpy (p->Blob, value, size);
+    p->Size = size;
+}
+
+static void
+free_table (VirtualFDOPtr p_vt)
+{
+/* memory cleanup; freeing the virtual table struct */
+    int i;
+    if (!p_vt)
+	return;
+    if (p_vt->Column)
+      {
+	  for (i = 0; i < p_vt->nColumns; i++)
+	    {
+		if (*(p_vt->Column + i))
+		    sqlite3_free (*(p_vt->Column + i));
+	    }
+	  sqlite3_free (p_vt->Column);
+      }
+    if (p_vt->Type)
+      {
+	  for (i = 0; i < p_vt->nColumns; i++)
+	    {
+		if (*(p_vt->Type + i))
+		    sqlite3_free (*(p_vt->Type + i));
+	    }
+	  sqlite3_free (p_vt->Type);
+      }
+    if (p_vt->NotNull)
+	sqlite3_free (p_vt->NotNull);
+    if (p_vt->Value)
+      {
+	  for (i = 0; i < p_vt->nColumns; i++)
+	    {
+		if (*(p_vt->Value + i))
+		    value_free (*(p_vt->Value + i));
+	    }
+	  sqlite3_free (p_vt->Value);
+      }
+    if (p_vt->GeoColumn)
+      {
+	  for (i = 0; i < p_vt->nGeometries; i++)
+	    {
+		if (*(p_vt->GeoColumn + i))
+		    sqlite3_free (*(p_vt->GeoColumn + i));
+	    }
+	  sqlite3_free (p_vt->GeoColumn);
+      }
+    if (p_vt->Srid)
+	sqlite3_free (p_vt->Srid);
+    if (p_vt->GeoType)
+	sqlite3_free (p_vt->GeoType);
+    if (p_vt->Format)
+	sqlite3_free (p_vt->Format);
+    if (p_vt->CoordDimensions)
+	sqlite3_free (p_vt->CoordDimensions);
+    sqlite3_free (p_vt);
+}
+
+
+static void
+vfdoOutWkt3D (gaiaOutBufferPtr out_buf, gaiaGeomCollPtr geom)
+{
+/* prints the GEOS-WKT-3D representation of current geometry */
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    if (!geom)
+	return;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* counting how many POINTs are there */
+	  pts++;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* counting how many LINESTRINGs are there */
+	  lns++;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* counting how many POLYGONs are there */
+	  pgs++;
+	  polyg = polyg->Next;
+      }
+    if ((pts + lns + pgs) == 1
+	&& (geom->DeclaredType == GAIA_POINT
+	    || geom->DeclaredType == GAIA_LINESTRING
+	    || geom->DeclaredType == GAIA_POLYGON))
+      {
+	  /* we have only one elementary geometry */
+	  point = geom->FirstPoint;
+	  while (point)
+	    {
+		/* processing POINT */
+		gaiaAppendToOutBuffer (out_buf, "POINT (");
+		gaiaOutPointZ (out_buf, point);
+		gaiaAppendToOutBuffer (out_buf, ")");
+		point = point->Next;
+	    }
+	  line = geom->FirstLinestring;
+	  while (line)
+	    {
+		/* processing LINESTRING */
+		gaiaAppendToOutBuffer (out_buf, "LINESTRING (");
+		gaiaOutLinestringZ (out_buf, line);
+		gaiaAppendToOutBuffer (out_buf, ")");
+		line = line->Next;
+	    }
+	  polyg = geom->FirstPolygon;
+	  while (polyg)
+	    {
+		/* processing POLYGONZ */
+		gaiaAppendToOutBuffer (out_buf, "POLYGON (");
+		gaiaOutPolygonZ (out_buf, polyg);
+		gaiaAppendToOutBuffer (out_buf, ")");
+		polyg = polyg->Next;
+	    }
+      }
+    else
+      {
+	  /* we have some kind of complex geometry */
+	  if (pts > 0 && lns == 0 && pgs == 0
+	      && geom->DeclaredType == GAIA_MULTIPOINT)
+	    {
+		/* some kind of MULTIPOINT */
+		gaiaAppendToOutBuffer (out_buf, "MULTIPOINT (");
+		point = geom->FirstPoint;
+		while (point)
+		  {
+		      if (point != geom->FirstPoint)
+			  gaiaAppendToOutBuffer (out_buf, ", ");
+		      gaiaOutPointZ (out_buf, point);
+		      point = point->Next;
+		  }
+		gaiaAppendToOutBuffer (out_buf, ")");
+	    }
+	  else if (pts == 0 && lns > 0 && pgs == 0
+		   && geom->DeclaredType == GAIA_MULTILINESTRING)
+	    {
+		/* some kind of MULTILINESTRING */
+		gaiaAppendToOutBuffer (out_buf, "MULTILINESTRING (");
+		line = geom->FirstLinestring;
+		while (line)
+		  {
+		      if (line != geom->FirstLinestring)
+			  gaiaAppendToOutBuffer (out_buf, ", (");
+		      else
+			  gaiaAppendToOutBuffer (out_buf, "(");
+		      gaiaOutLinestringZ (out_buf, line);
+		      gaiaAppendToOutBuffer (out_buf, ")");
+		      line = line->Next;
+		  }
+		gaiaAppendToOutBuffer (out_buf, ")");
+	    }
+	  else if (pts == 0 && lns == 0 && pgs > 0
+		   && geom->DeclaredType == GAIA_MULTIPOLYGON)
+	    {
+		/* some kind of MULTIPOLYGON */
+		gaiaAppendToOutBuffer (out_buf, "MULTIPOLYGON (");
+		polyg = geom->FirstPolygon;
+		while (polyg)
+		  {
+		      if (polyg != geom->FirstPolygon)
+			  gaiaAppendToOutBuffer (out_buf, ", (");
+		      else
+			  gaiaAppendToOutBuffer (out_buf, "(");
+		      gaiaOutPolygonZ (out_buf, polyg);
+		      gaiaAppendToOutBuffer (out_buf, ")");
+		      polyg = polyg->Next;
+		  }
+		gaiaAppendToOutBuffer (out_buf, ")");
+	    }
+	  else
+	    {
+		/* some kind of GEOMETRYCOLLECTION */
+		int ie = 0;
+		gaiaAppendToOutBuffer (out_buf, "GEOMETRYCOLLECTION (");
+		point = geom->FirstPoint;
+		while (point)
+		  {
+		      /* processing POINTs */
+		      if (ie > 0)
+			  gaiaAppendToOutBuffer (out_buf, ", ");
+		      ie++;
+		      gaiaAppendToOutBuffer (out_buf, "POINT (");
+		      gaiaOutPointZ (out_buf, point);
+		      gaiaAppendToOutBuffer (out_buf, ")");
+		      point = point->Next;
+		  }
+		line = geom->FirstLinestring;
+		while (line)
+		  {
+		      /* processing LINESTRINGs */
+		      if (ie > 0)
+			  gaiaAppendToOutBuffer (out_buf, ", ");
+		      ie++;
+		      gaiaAppendToOutBuffer (out_buf, "LINESTRING (");
+		      gaiaOutLinestringZ (out_buf, line);
+		      gaiaAppendToOutBuffer (out_buf, ")");
+		      line = line->Next;
+		  }
+		polyg = geom->FirstPolygon;
+		while (polyg)
+		  {
+		      /* processing POLYGONs */
+		      if (ie > 0)
+			  gaiaAppendToOutBuffer (out_buf, ", ");
+		      ie++;
+		      gaiaAppendToOutBuffer (out_buf, "POLYGON (");
+		      gaiaOutPolygonZ (out_buf, polyg);
+		      gaiaAppendToOutBuffer (out_buf, ")");
+		      polyg = polyg->Next;
+		  }
+		gaiaAppendToOutBuffer (out_buf, ")");
+	    }
+      }
+}
+
+static void
+vfdoToWkb3D (gaiaGeomCollPtr geom, unsigned char **result, int *size)
+{
+/* builds the GEOS-WKB-3D representation for this GEOMETRY */
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z = 0.0;
+    double m = 0.0;
+    int entities = 0;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    int type;
+    unsigned char *ptr;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    gaiaRingPtr rng;
+    gaiaPointPtr point = NULL;
+    gaiaLinestringPtr line = NULL;
+    gaiaPolygonPtr polyg = NULL;
+    int endian_arch = gaiaEndianArch ();
+    gaiaMbrGeometry (geom);
+/* how many entities, and of what kind, do we have ? */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  point = pt;
+	  entities++;
+	  n_points++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  line = ln;
+	  entities++;
+	  n_linestrings++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  polyg = pg;
+	  entities++;
+	  n_polygons++;
+	  pg = pg->Next;
+      }
+    *size = 0;
+    *result = NULL;
+    if (n_points == 0 && n_polygons == 0 && n_linestrings == 0)
+	return;
+/* ok, we can determine the geometry class */
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	      type = GAIA_GEOSWKB_MULTIPOINTZ;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ;
+	  else
+	      type = GAIA_GEOSWKB_POINTZ;
+      }
+    else if (n_points > 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ;
+	  else
+	      type = GAIA_GEOSWKB_MULTIPOINTZ;
+      }
+    else if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	      type = GAIA_GEOSWKB_MULTILINESTRINGZ;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ;
+	  else
+	      type = GAIA_GEOSWKB_LINESTRINGZ;
+      }
+    else if (n_points == 0 && n_linestrings > 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ;
+	  else
+	      type = GAIA_GEOSWKB_MULTILINESTRINGZ;
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	      type = GAIA_GEOSWKB_MULTIPOLYGONZ;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ;
+	  else
+	      type = GAIA_GEOSWKB_POLYGONZ;
+      }
+    else if (n_points == 0 && n_linestrings == 0 && n_polygons > 1)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      type = GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ;
+	  else
+	      type = GAIA_GEOSWKB_MULTIPOLYGONZ;
+      }
+    else
+	type = GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ;
+/* and now we compute the size of WKB */
+    *size = 5;			/* header size */
+    if (type == GAIA_GEOSWKB_MULTIPOINTZ
+	|| type == GAIA_GEOSWKB_MULTILINESTRINGZ
+	|| type == GAIA_GEOSWKB_MULTIPOLYGONZ
+	|| type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+	*size += 4;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  if (type == GAIA_GEOSWKB_MULTIPOINTZ
+	      || type == GAIA_GEOSWKB_MULTILINESTRINGZ
+	      || type == GAIA_GEOSWKB_MULTIPOLYGONZ
+	      || type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+	      *size += 5;
+	  *size += (sizeof (double) * 3);	/* three doubles for each POINT */
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  if (type == GAIA_GEOSWKB_MULTIPOINTZ
+	      || type == GAIA_GEOSWKB_MULTILINESTRINGZ
+	      || type == GAIA_GEOSWKB_MULTIPOLYGONZ
+	      || type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+	      *size += 5;
+	  *size += (4 + ((sizeof (double) * 3) * line->Points));	/* # points + [x,y,z] for each vertex */
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  if (type == GAIA_GEOSWKB_MULTIPOINTZ
+	      || type == GAIA_GEOSWKB_MULTILINESTRINGZ
+	      || type == GAIA_GEOSWKB_MULTIPOLYGONZ
+	      || type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+	      *size += 5;
+	  rng = polyg->Exterior;
+	  *size += (8 + ((sizeof (double) * 3) * rng->Points));	/* # rings + # points + [x,y,z] array - exterior ring */
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		*size += (4 + ((sizeof (double) * 3) * rng->Points));	/* # points + [x,y,z] array - interior ring */
+	    }
+	  polyg = polyg->Next;
+      }
+    *result = malloc (*size);
+    ptr = *result;
+/* and finally we build the WKB */
+    *ptr = 0x01;		/* little endian byte order */
+    gaiaExport32 (ptr + 1, type, 1, endian_arch);	/* the main CLASS TYPE */
+    ptr += 5;
+    if (type == GAIA_GEOSWKB_MULTIPOINTZ
+	|| type == GAIA_GEOSWKB_MULTILINESTRINGZ
+	|| type == GAIA_GEOSWKB_MULTIPOLYGONZ
+	|| type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+      {
+	  gaiaExport32 (ptr, entities, 1, endian_arch);	/* it's a collection; # entities */
+	  ptr += 4;
+      }
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  if (type == GAIA_GEOSWKB_MULTIPOINTZ
+	      || type == GAIA_GEOMETRYCOLLECTIONZ)
+	    {
+		*ptr = 0x01;
+		/* it's a collection: the CLASS TYPE for this element */
+		gaiaExport32 (ptr + 1, GAIA_GEOSWKB_POINTZ, 1, endian_arch);
+		ptr += 5;
+	    }
+	  gaiaExport64 (ptr, point->X, 1, endian_arch);	/* X */
+	  gaiaExport64 (ptr + 8, point->Y, 1, endian_arch);	/* Y */
+	  gaiaExport64 (ptr + 16, point->Z, 1, endian_arch);	/* Z */
+	  ptr += 24;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  if (type == GAIA_GEOSWKB_MULTILINESTRINGZ
+	      || type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+	    {
+		*ptr = 0x01;
+		/* it's a collection: the CLASS TYPE for this element */
+		gaiaExport32 (ptr + 1, GAIA_GEOSWKB_LINESTRINGZ, 1,
+			      endian_arch);
+		ptr += 5;
+	    }
+	  gaiaExport32 (ptr, line->Points, 1, endian_arch);	/* # points */
+	  ptr += 4;
+	  for (iv = 0; iv < line->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		if (line->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (line->Coords, iv, &x, &y, &z);
+		  }
+		else if (line->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (line->Coords, iv, &x, &y, &m);
+		  }
+		else if (line->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (line->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (line->Coords, iv, &x, &y);
+		  }
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y */
+		gaiaExport64 (ptr + 16, z, 1, endian_arch);	/* Z */
+		ptr += 24;
+	    }
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  if (type == GAIA_GEOSWKB_MULTIPOLYGONZ
+	      || type == GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ)
+	    {
+		*ptr = 0x01;
+		/* it's a collection: the CLASS TYPE for this element */
+		gaiaExport32 (ptr + 1, GAIA_GEOSWKB_POLYGONZ, 1, endian_arch);
+		ptr += 5;
+	    }
+	  gaiaExport32 (ptr, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
+	  rng = polyg->Exterior;
+	  gaiaExport32 (ptr + 4, rng->Points, 1, endian_arch);	/* # points - exterior ring */
+	  ptr += 8;
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		z = 0.0;
+		m = 0.0;
+		if (rng->DimensionModel == GAIA_XY_Z)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_M)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		  }
+		else if (rng->DimensionModel == GAIA_XY_Z_M)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		  }
+		else
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		  }
+		gaiaExport64 (ptr, x, 1, endian_arch);	/* X - exterior ring */
+		gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - exterior ring */
+		gaiaExport64 (ptr + 16, z, 1, endian_arch);	/* Z - exterior ring */
+		ptr += 24;
+	    }
+	  for (ib = 0; ib < polyg->NumInteriors; ib++)
+	    {
+		rng = polyg->Interiors + ib;
+		gaiaExport32 (ptr, rng->Points, 1, endian_arch);	/* # points - interior ring */
+		ptr += 4;
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      z = 0.0;
+		      m = 0.0;
+		      if (rng->DimensionModel == GAIA_XY_Z)
+			{
+			    gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_M)
+			{
+			    gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+			}
+		      else if (rng->DimensionModel == GAIA_XY_Z_M)
+			{
+			    gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+			}
+		      else
+			{
+			    gaiaGetPoint (rng->Coords, iv, &x, &y);
+			}
+		      gaiaExport64 (ptr, x, 1, endian_arch);	/* X - interior ring */
+		      gaiaExport64 (ptr + 8, y, 1, endian_arch);	/* Y - interior ring */
+		      gaiaExport64 (ptr + 16, z, 1, endian_arch);	/* Z - exterior ring */
+		      ptr += 24;
+		  }
+	    }
+	  polyg = polyg->Next;
+      }
+}
+
+static int
+vfdoGeometryType (gaiaGeomCollPtr geom)
+{
+/* determinates the Class for this geometry */
+    gaiaPointPtr point;
+    gaiaLinestringPtr line;
+    gaiaPolygonPtr polyg;
+    int n_points = 0;
+    int n_linestrings = 0;
+    int n_polygons = 0;
+    if (!geom)
+	return GAIA_UNKNOWN;
+    point = geom->FirstPoint;
+    while (point)
+      {
+	  /* counts how many points are there */
+	  n_points++;
+	  point = point->Next;
+      }
+    line = geom->FirstLinestring;
+    while (line)
+      {
+	  /* counts how many linestrings are there */
+	  n_linestrings++;
+	  line = line->Next;
+      }
+    polyg = geom->FirstPolygon;
+    while (polyg)
+      {
+	  /* counts how many polygons are there */
+	  n_polygons++;
+	  polyg = polyg->Next;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons == 0)
+	return GAIA_UNKNOWN;
+    if (n_points == 1 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOINT)
+	      return GAIA_MULTIPOINT;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_POINT;
+      }
+    if (n_points > 0 && n_linestrings == 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_MULTIPOINT;
+      }
+    if (n_points == 0 && n_linestrings == 1 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_MULTILINESTRING)
+	      return GAIA_MULTILINESTRING;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_LINESTRING;
+      }
+    if (n_points == 0 && n_linestrings > 0 && n_polygons == 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_MULTILINESTRING;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons == 1)
+      {
+	  if (geom->DeclaredType == GAIA_MULTIPOLYGON)
+	      return GAIA_MULTIPOLYGON;
+	  else if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_POLYGON;
+      }
+    if (n_points == 0 && n_linestrings == 0 && n_polygons > 0)
+      {
+	  if (geom->DeclaredType == GAIA_GEOMETRYCOLLECTION)
+	      return GAIA_GEOMETRYCOLLECTION;
+	  else
+	      return GAIA_MULTIPOLYGON;
+      }
+    return GAIA_GEOMETRYCOLLECTION;
+}
+
+static int
+vfdo_insert_row (VirtualFDOPtr p_vt, sqlite3_int64 * rowid, int argc,
+		 sqlite3_value ** argv)
+{
+/* trying to insert a row into FDO-OGR real-table */
+    sqlite3_stmt *stmt;
+    int ret;
+    int i;
+    int ic;
+    int ig;
+    int geom_done;
+    int err_geom = 0;
+    int geom_constraint_err = 0;
+    char prefix[16];
+    const char *text;
+    const unsigned char *blob;
+    gaiaOutBuffer out_buf;
+    unsigned char *blob_wkb;
+    int size;
+    char sql[4096];
+    char buf[256];
+    char xname[1024];
+    gaiaGeomCollPtr geom = NULL;
+    strcpy (xname, p_vt->table);
+    vfdo_double_quoted_sql (xname);
+    sprintf (sql, "INSERT INTO %s ", xname);
+    for (ic = 0; ic < p_vt->nColumns; ic++)
+      {
+	  if (ic == 0)
+	      strcpy (prefix, "(");
+	  else
+	      strcpy (prefix, ", ");
+	  strcpy (xname, *(p_vt->Column + ic));
+	  vfdo_double_quoted_sql (xname);
+	  sprintf (buf, "%s%s", prefix, xname);
+	  strcat (sql, buf);
+      }
+    strcat (sql, ") VALUES ");
+    for (ic = 0; ic < p_vt->nColumns; ic++)
+      {
+	  if (ic == 0)
+	      strcpy (prefix, "(");
+	  else
+	      strcpy (prefix, ", ");
+	  sprintf (buf, "%s?", prefix);
+	  strcat (sql, buf);
+      }
+    strcat (sql, ")");
+    ret = sqlite3_prepare_v2 (p_vt->db, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return SQLITE_ERROR;
+    for (i = 2; i < argc; i++)
+      {
+	  geom_done = 0;
+	  for (ig = 0; ig < p_vt->nGeometries; ig++)
+	    {
+		if (strcasecmp
+		    (*(p_vt->Column + i - 2), *(p_vt->GeoColumn + ig)) == 0)
+		  {
+		      /* this one is a Geometry column */
+		      if (sqlite3_value_type (argv[i]) == SQLITE_BLOB)
+			{
+			    blob = sqlite3_value_blob (argv[i]);
+			    size = sqlite3_value_bytes (argv[i]);
+			    geom = gaiaFromSpatiaLiteBlobWkb (blob, size);
+			    if (geom)
+			      {
+				  if (geom->Srid != *(p_vt->Srid + ig))
+				    {
+					/* SRID constraint violation */
+					geom_constraint_err = 1;
+					goto error;
+				    }
+				  /* checking for TYPE constraint violation */
+				  if (vfdoGeometryType (geom) !=
+				      *(p_vt->GeoType + ig))
+				    {
+					/* Geometry TYPE constraint violation */
+					geom_constraint_err = 1;
+					goto error;
+				    }
+				  switch (*(p_vt->Format + ig))
+				    {
+				    case FDO_OGR_WKT:
+					gaiaOutBufferInitialize (&out_buf);
+					if (*(p_vt->CoordDimensions + ig) ==
+					    GAIA_XY_Z)
+					    vfdoOutWkt3D (&out_buf, geom);
+					else
+					    gaiaOutWkt (&out_buf, geom);
+					if (out_buf.Error == 0
+					    && out_buf.Buffer != NULL)
+					  {
+					      sqlite3_bind_text (stmt, i - 1,
+								 out_buf.Buffer,
+								 out_buf.WriteOffset,
+								 free);
+					      out_buf.Buffer = NULL;
+					      gaiaOutBufferReset (&out_buf);
+					  }
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    case FDO_OGR_WKB:
+					if (*(p_vt->CoordDimensions + ig) ==
+					    GAIA_XY_Z)
+					    vfdoToWkb3D (geom, &blob_wkb,
+							 &size);
+					else
+					    gaiaToWkb (geom, &blob_wkb, &size);
+					if (blob_wkb)
+					    sqlite3_bind_blob (stmt, i - 1,
+							       blob_wkb, size,
+							       free);
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    case FDO_OGR_FGF:
+					gaiaToFgf (geom, &blob_wkb, &size,
+						   *(p_vt->CoordDimensions +
+						     ig));
+					if (blob_wkb)
+					    sqlite3_bind_blob (stmt, i - 1,
+							       blob_wkb, size,
+							       free);
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    case FDO_OGR_SPLITE:
+					gaiaToSpatiaLiteBlobWkb (geom,
+								 &blob_wkb,
+								 &size);
+					if (blob_wkb)
+					    sqlite3_bind_blob (stmt, i - 1,
+							       blob_wkb, size,
+							       free);
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    default:
+					err_geom = 1;
+					goto error;
+					break;
+				    };
+			      }
+			    else
+			      {
+				  err_geom = 1;
+				  goto error;
+			      }
+			}
+		      else if (sqlite3_value_type (argv[i]) == SQLITE_NULL)
+			  sqlite3_bind_null (stmt, i - 1);
+		      else
+			{
+			    err_geom = 1;
+			    goto error;
+			}
+		      geom_done = 1;
+		  }
+	    }
+	  if (geom_done)
+	    {
+		if (geom)
+		  {
+		      /* memory cleanup: Kashif Rasul 14 Jan 2010 */
+		      gaiaFreeGeomColl (geom);
+		      geom = NULL;
+		  }
+		continue;
+	    }
+	  switch (sqlite3_value_type (argv[i]))
+	    {
+	    case SQLITE_INTEGER:
+		sqlite3_bind_int64 (stmt, i - 1, sqlite3_value_int64 (argv[i]));
+		break;
+	    case SQLITE_FLOAT:
+		sqlite3_bind_double (stmt, i - 1,
+				     sqlite3_value_double (argv[i]));
+		break;
+	    case SQLITE_TEXT:
+		text = (char *) sqlite3_value_text (argv[i]);
+		size = sqlite3_value_bytes (argv[i]);
+		sqlite3_bind_text (stmt, i - 1, text, size, SQLITE_STATIC);
+		break;
+	    case SQLITE_BLOB:
+		blob = sqlite3_value_blob (argv[i]);
+		size = sqlite3_value_bytes (argv[i]);
+		sqlite3_bind_blob (stmt, i - 1, blob, size, SQLITE_STATIC);
+		break;
+	    case SQLITE_NULL:
+	    default:
+		sqlite3_bind_null (stmt, i - 1);
+		break;
+	    };
+      }
+  error:
+    if (geom)
+      {
+	  /* memory cleanup: Kashif Rasul 14 Jan 2010 */
+	  gaiaFreeGeomColl (geom);
+      }
+    if (err_geom || geom_constraint_err)
+      {
+	  sqlite3_finalize (stmt);
+	  return SQLITE_CONSTRAINT;
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+      {
+	  sqlite3_finalize (stmt);
+	  return ret;
+      }
+    sqlite3_finalize (stmt);
+    *rowid = sqlite3_last_insert_rowid (p_vt->db);
+    return SQLITE_OK;
+}
+
+static int
+vfdo_update_row (VirtualFDOPtr p_vt, sqlite3_int64 rowid, int argc,
+		 sqlite3_value ** argv)
+{
+/* trying to update a row in FDO-OGR real-table */
+    sqlite3_stmt *stmt;
+    int ret;
+    int i;
+    int ic;
+    int ig;
+    int geom_done;
+    int err_geom = 0;
+    int geom_constraint_err = 0;
+    char prefix[16];
+    const char *text;
+    const unsigned char *blob;
+    gaiaOutBuffer out_buf;
+    unsigned char *blob_wkb;
+    int size;
+    char sql[4096];
+    char buf[256];
+    char xname[1024];
+    gaiaGeomCollPtr geom;
+    strcpy (xname, p_vt->table);
+    vfdo_double_quoted_sql (xname);
+    sprintf (sql, "UPDATE %s SET", xname);
+    for (ic = 0; ic < p_vt->nColumns; ic++)
+      {
+	  if (ic == 0)
+	      strcpy (prefix, " ");
+	  else
+	      strcpy (prefix, ", ");
+	  strcpy (xname, *(p_vt->Column + ic));
+	  vfdo_double_quoted_sql (xname);
+	  sprintf (buf, "%s%s = ?", prefix, xname);
+	  strcat (sql, buf);
+      }
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT: M$ rutime doesn't supports %lld for 64 bits */
+    sprintf (buf, " WHERE ROWID = %I64d", rowid);
+#else
+    sprintf (buf, " WHERE ROWID = %lld", rowid);
+#endif
+    strcat (sql, buf);
+    ret = sqlite3_prepare_v2 (p_vt->db, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return SQLITE_ERROR;
+    for (i = 2; i < argc; i++)
+      {
+	  geom_done = 0;
+	  for (ig = 0; ig < p_vt->nGeometries; ig++)
+	    {
+		if (strcasecmp
+		    (*(p_vt->Column + i - 2), *(p_vt->GeoColumn + ig)) == 0)
+		  {
+		      /* this one is a Geometry column */
+		      if (sqlite3_value_type (argv[i]) == SQLITE_BLOB)
+			{
+			    blob = sqlite3_value_blob (argv[i]);
+			    size = sqlite3_value_bytes (argv[i]);
+			    geom = gaiaFromSpatiaLiteBlobWkb (blob, size);
+			    if (geom)
+			      {
+				  if (geom->Srid != *(p_vt->Srid + ig))
+				    {
+					/* SRID constraint violation */
+					geom_constraint_err = 1;
+					goto error;
+				    }
+				  /* checking for TYPE constraint violation */
+				  if (vfdoGeometryType (geom) !=
+				      *(p_vt->GeoType + ig))
+				    {
+					/* Geometry TYPE constraint violation */
+					geom_constraint_err = 1;
+					goto error;
+				    }
+				  switch (*(p_vt->Format + ig))
+				    {
+				    case FDO_OGR_WKT:
+					gaiaOutBufferInitialize (&out_buf);
+					if (*(p_vt->CoordDimensions + ig) ==
+					    GAIA_XY_Z)
+					    vfdoOutWkt3D (&out_buf, geom);
+					else
+					    gaiaOutWkt (&out_buf, geom);
+					if (out_buf.Error == 0
+					    && out_buf.Buffer != NULL)
+					  {
+					      sqlite3_bind_text (stmt, i - 1,
+								 out_buf.Buffer,
+								 out_buf.WriteOffset,
+								 free);
+					      out_buf.Buffer = NULL;
+					      gaiaOutBufferReset (&out_buf);
+					  }
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    case FDO_OGR_WKB:
+					if (*(p_vt->CoordDimensions + ig) ==
+					    GAIA_XY_Z)
+					    vfdoToWkb3D (geom, &blob_wkb,
+							 &size);
+					else
+					    gaiaToWkb (geom, &blob_wkb, &size);
+					if (blob_wkb)
+					    sqlite3_bind_blob (stmt, i - 1,
+							       blob_wkb, size,
+							       free);
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    case FDO_OGR_FGF:
+					gaiaToFgf (geom, &blob_wkb, &size,
+						   *(p_vt->CoordDimensions +
+						     ig));
+					if (blob_wkb)
+					    sqlite3_bind_blob (stmt, i - 1,
+							       blob_wkb, size,
+							       free);
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    case FDO_OGR_SPLITE:
+					gaiaToSpatiaLiteBlobWkb (geom,
+								 &blob_wkb,
+								 &size);
+					if (blob_wkb)
+					    sqlite3_bind_blob (stmt, i - 1,
+							       blob_wkb, size,
+							       free);
+					else
+					  {
+					      err_geom = 1;
+					      goto error;
+					  }
+					break;
+				    default:
+					err_geom = 1;
+					goto error;
+					break;
+				    };
+			      }
+			    else
+			      {
+				  err_geom = 1;
+				  goto error;
+			      }
+			}
+		      else if (sqlite3_value_type (argv[i]) == SQLITE_NULL)
+			  sqlite3_bind_null (stmt, i - 1);
+		      else
+			{
+			    err_geom = 1;
+			    goto error;
+			}
+		      geom_done = 1;
+		  }
+	    }
+	  if (geom_done)
+	      continue;
+	  switch (sqlite3_value_type (argv[i]))
+	    {
+	    case SQLITE_INTEGER:
+		sqlite3_bind_int64 (stmt, i - 1, sqlite3_value_int64 (argv[i]));
+		break;
+	    case SQLITE_FLOAT:
+		sqlite3_bind_double (stmt, i - 1,
+				     sqlite3_value_double (argv[i]));
+		break;
+	    case SQLITE_TEXT:
+		text = (char *) sqlite3_value_text (argv[i]);
+		size = sqlite3_value_bytes (argv[i]);
+		sqlite3_bind_text (stmt, i - 1, text, size, SQLITE_STATIC);
+		break;
+	    case SQLITE_BLOB:
+		blob = sqlite3_value_blob (argv[i]);
+		size = sqlite3_value_bytes (argv[i]);
+		sqlite3_bind_blob (stmt, i - 1, blob, size, SQLITE_STATIC);
+		break;
+	    case SQLITE_NULL:
+	    default:
+		sqlite3_bind_null (stmt, i - 1);
+		break;
+	    };
+      }
+  error:
+    if (err_geom || geom_constraint_err)
+      {
+	  sqlite3_finalize (stmt);
+	  return SQLITE_CONSTRAINT;
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+      {
+	  sqlite3_finalize (stmt);
+	  return ret;
+      }
+    sqlite3_finalize (stmt);
+    return SQLITE_OK;
+}
+
+static int
+vfdo_delete_row (VirtualFDOPtr p_vt, sqlite3_int64 rowid)
+{
+/* trying to delete a row from FDO-OGR real-table */
+    char sql[1024];
+    int ret;
+    char xname[1024];
+    strcpy (xname, p_vt->table);
+    vfdo_double_quoted_sql (xname);
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
+    sprintf (sql, "DELETE FROM %s WHERE ROWID = %I64d", xname, rowid);
+#else
+    sprintf (sql, "DELETE FROM %s WHERE ROWID = %lld", xname, rowid);
+#endif
+    ret = sqlite3_exec (p_vt->db, sql, NULL, NULL, NULL);
+    return ret;
+}
+
+char *
+vfdo_convertWKT3D (const char *wkt)
+{
+/* converting WKT 3D */
+    char *out;
+    char *o;
+    const char *p = wkt;
+    int len = strlen (wkt);
+    int extra = 0;
+    while (*p != '\0')
+      {
+	  if (strncasecmp (p, "POINT", 5) == 0)
+	    {
+		p += 5;
+		extra++;
+		continue;
+	    }
+	  if (strncasecmp (p, "LINESTRING", 10) == 0)
+	    {
+		p += 10;
+		extra++;
+		continue;
+	    }
+	  if (strncasecmp (p, "POLYGON", 7) == 0)
+	    {
+		p += 7;
+		extra++;
+		continue;
+	    }
+	  if (strncasecmp (p, "MULTIPOINT", 10) == 0)
+	    {
+		p += 10;
+		extra++;
+		continue;
+	    }
+	  if (strncasecmp (p, "MULTILINESTRING", 15) == 0)
+	    {
+		p += 15;
+		extra++;
+		continue;
+	    }
+	  if (strncasecmp (p, "MULTIPOLYGON", 12) == 0)
+	    {
+		p += 12;
+		extra++;
+		continue;
+	    }
+	  if (strncasecmp (p, "GEOMETRYCOLLECTION", 18) == 0)
+	    {
+		p += 18;
+		extra++;
+		continue;
+	    }
+	  p++;
+      }
+    out = malloc (len + extra + 1);
+    o = out;
+    p = wkt;
+    while (*p != '\0')
+      {
+	  if (strncasecmp (p, "POINT", 5) == 0)
+	    {
+		strcpy (o, "POINTZ");
+		o += 6;
+		p += 5;
+		continue;
+	    }
+	  if (strncasecmp (p, "LINESTRING", 10) == 0)
+	    {
+		strcpy (o, "LINESTRINGZ");
+		o += 11;
+		p += 10;
+		continue;
+	    }
+	  if (strncasecmp (p, "POLYGON", 7) == 0)
+	    {
+		strcpy (o, "POLYGONZ");
+		o += 8;
+		p += 7;
+		continue;
+	    }
+	  if (strncasecmp (p, "MULTIPOINT", 10) == 0)
+	    {
+		strcpy (o, "MULTIPOINTZ");
+		o += 11;
+		p += 10;
+		continue;
+	    }
+	  if (strncasecmp (p, "MULTILINESTRING", 15) == 0)
+	    {
+		strcpy (o, "MULTILINESTRINGZ");
+		o += 16;
+		p += 15;
+		continue;
+	    }
+	  if (strncasecmp (p, "MULTIPOLYGON", 12) == 0)
+	    {
+		strcpy (o, "MULTIPOLYGONZ");
+		o += 13;
+		p += 12;
+		continue;
+	    }
+	  if (strncasecmp (p, "GEOMETRYCOLLECTION", 18) == 0)
+	    {
+		strcpy (o, "GEOMETRYCOLLECTIONZ");
+		o += 19;
+		p += 18;
+		continue;
+	    }
+	  *o++ = *p++;
+      }
+    *o = '\0';
+    return out;
+}
+
+static void
+vfdo_read_row (VirtualFDOCursorPtr cursor)
+{
+/* trying to read a row from FDO-OGR real-table */
+    sqlite3_stmt *stmt;
+    int ret;
+    char sql[4096];
+    char buf[256];
+    int ic;
+    int ig;
+    unsigned char *wkt;
+    const char *text;
+    const unsigned char *blob;
+    unsigned char *xblob;
+    int size;
+    sqlite3_int64 pk;
+    int geom_done;
+    gaiaGeomCollPtr geom;
+    char xname[1024];
+    strcpy (sql, "SELECT ROWID");
+    for (ic = 0; ic < cursor->pVtab->nColumns; ic++)
+      {
+	  strcpy (xname, *(cursor->pVtab->Column + ic));
+	  vfdo_double_quoted_sql (xname);
+	  sprintf (buf, ",%s", xname);
+	  strcat (sql, buf);
+      }
+    strcpy (xname, cursor->pVtab->table);
+    vfdo_double_quoted_sql (xname);
+    sprintf (buf,
+#if defined(_WIN32) || defined (__MINGW32__)
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
+	     " FROM %s WHERE ROWID >= %I64d",
+#else
+	     " FROM %s WHERE ROWID >= %lld",
+#endif
+	     xname, cursor->current_row);
+    strcat (sql, buf);
+    ret =
+	sqlite3_prepare_v2 (cursor->pVtab->db, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  /* an error occurred */
+	  cursor->eof = 1;
+	  return;
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_ROW)
+      {
+	  pk = sqlite3_column_int64 (stmt, 0);
+	  for (ic = 0; ic < cursor->pVtab->nColumns; ic++)
+	    {
+		/* fetching column values */
+		geom_done = 0;
+		for (ig = 0; ig < cursor->pVtab->nGeometries; ig++)
+		  {
+		      if (strcasecmp
+			  (*(cursor->pVtab->Column + ic),
+			   *(cursor->pVtab->GeoColumn + ig)) == 0)
+			{
+			    /* this one is a Geometry column */
+			    switch (*(cursor->pVtab->Format + ig))
+			      {
+			      case FDO_OGR_WKT:
+				  if (sqlite3_column_type (stmt, ic + 1) ==
+				      SQLITE_TEXT)
+				    {
+					/* trying to parse a WKT Geometry */
+					char delete_wkt = 0;
+					wkt = (unsigned char *)
+					    sqlite3_column_text (stmt, ic + 1);
+					if (*
+					    (cursor->pVtab->CoordDimensions +
+					     ig) == GAIA_XY_Z)
+					  {
+					      wkt = (unsigned char *)
+						  vfdo_convertWKT3D ((char *)
+								     wkt);
+					      if (wkt == NULL)
+						{
+						    value_set_null (*
+								    (cursor->
+								     pVtab->
+								     Value +
+								     ic));
+						    continue;
+						}
+					      delete_wkt = 1;
+					  }
+					geom = gaiaParseWkt (wkt, -1);
+					if (delete_wkt)
+					    free ((void *) wkt);
+					if (!geom)
+					    value_set_null (*
+							    (cursor->pVtab->
+							     Value + ic));
+					else
+					  {
+					      geom->Srid =
+						  *(cursor->pVtab->Srid + ig);
+					      gaiaToSpatiaLiteBlobWkb (geom,
+								       &xblob,
+								       &size);
+					      if (xblob)
+						  value_set_blob (*
+								  (cursor->
+								   pVtab->
+								   Value + ic),
+								  xblob, size);
+					      else
+						  value_set_null (*
+								  (cursor->
+								   pVtab->
+								   Value + ic));
+					      gaiaFreeGeomColl (geom);
+					  }
+				    }
+				  else
+				      value_set_null (*
+						      (cursor->pVtab->Value +
+						       ic));
+				  break;
+			      case FDO_OGR_WKB:
+				  if (sqlite3_column_type (stmt, ic + 1) ==
+				      SQLITE_BLOB)
+				    {
+					/* trying to parse a WKB Geometry */
+					blob =
+					    sqlite3_column_blob (stmt, ic + 1);
+					size =
+					    sqlite3_column_bytes (stmt, ic + 1);
+					geom = gaiaFromWkb (blob, size);
+					if (!geom)
+					    value_set_null (*
+							    (cursor->pVtab->
+							     Value + ic));
+					else
+					  {
+					      geom->Srid =
+						  *(cursor->pVtab->Srid + ig);
+					      gaiaToSpatiaLiteBlobWkb (geom,
+								       &xblob,
+								       &size);
+					      if (xblob)
+						  value_set_blob (*
+								  (cursor->
+								   pVtab->
+								   Value + ic),
+								  xblob, size);
+					      else
+						  value_set_null (*
+								  (cursor->
+								   pVtab->
+								   Value + ic));
+					      gaiaFreeGeomColl (geom);
+					  }
+				    }
+				  else
+				      value_set_null (*
+						      (cursor->pVtab->Value +
+						       ic));
+				  break;
+			      case FDO_OGR_FGF:
+				  if (sqlite3_column_type (stmt, ic + 1) ==
+				      SQLITE_BLOB)
+				    {
+					/* trying to parse an FGF Geometry */
+					blob =
+					    sqlite3_column_blob (stmt, ic + 1);
+					size =
+					    sqlite3_column_bytes (stmt, ic + 1);
+					geom = gaiaFromFgf (blob, size);
+					if (!geom)
+					    value_set_null (*
+							    (cursor->pVtab->
+							     Value + ic));
+					else
+					  {
+					      geom->Srid =
+						  *(cursor->pVtab->Srid + ig);
+					      gaiaToSpatiaLiteBlobWkb (geom,
+								       &xblob,
+								       &size);
+					      if (xblob)
+						  value_set_blob (*
+								  (cursor->
+								   pVtab->
+								   Value + ic),
+								  xblob, size);
+					      else
+						  value_set_null (*
+								  (cursor->
+								   pVtab->
+								   Value + ic));
+					      gaiaFreeGeomColl (geom);
+					  }
+				    }
+				  else
+				      value_set_null (*
+						      (cursor->pVtab->Value +
+						       ic));
+				  break;
+			      case FDO_OGR_SPLITE:
+				  if (sqlite3_column_type (stmt, ic + 1) ==
+				      SQLITE_BLOB)
+				    {
+					/* trying to parse a SPATIALITE Geometry */
+					blob =
+					    sqlite3_column_blob (stmt, ic + 1);
+					size =
+					    sqlite3_column_bytes (stmt, ic + 1);
+					value_set_blob (*
+							(cursor->pVtab->Value +
+							 ic), blob, size);
+				    }
+				  else
+				      value_set_null (*
+						      (cursor->pVtab->Value +
+						       ic));
+				  break;
+			      default:
+				  value_set_null (*(cursor->pVtab->Value + ic));
+				  break;
+			      };
+			    geom_done = 1;
+			}
+		  }
+		if (geom_done)
+		    continue;
+		switch (sqlite3_column_type (stmt, ic + 1))
+		  {
+		  case SQLITE_INTEGER:
+		      value_set_int (*(cursor->pVtab->Value + ic),
+				     sqlite3_column_int64 (stmt, ic + 1));
+		      break;
+		  case SQLITE_FLOAT:
+		      value_set_double (*(cursor->pVtab->Value + ic),
+					sqlite3_column_double (stmt, ic + 1));
+		      break;
+		  case SQLITE_TEXT:
+		      text = (char *) sqlite3_column_text (stmt, ic + 1);
+		      size = sqlite3_column_bytes (stmt, ic + 1);
+		      value_set_text (*(cursor->pVtab->Value + ic), text, size);
+		      break;
+		  case SQLITE_BLOB:
+		      blob = sqlite3_column_blob (stmt, ic + 1);
+		      size = sqlite3_column_bytes (stmt, ic + 1);
+		      value_set_blob (*(cursor->pVtab->Value + ic), blob, size);
+		      break;
+		  case SQLITE_NULL:
+		  default:
+		      value_set_null (*(cursor->pVtab->Value + ic));
+		      break;
+		  };
+	    }
+      }
+    else
+      {
+	  /* an error occurred */
+	  sqlite3_finalize (stmt);
+	  cursor->eof = 1;
+	  return;
+      }
+    sqlite3_finalize (stmt);
+    cursor->eof = 0;
+    cursor->current_row = pk;
+}
+
+
+static int
+vfdo_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	     sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table connected to some FDO-OGR table */
+    char vtable[1024];
+    char table[1024];
+    int ret;
+    int i;
+    int len;
+    int n_rows;
+    int n_columns;
+    const char *col_name;
+    const char *col_type;
+    const char *format;
+    int coord_dimension;
+    int not_null;
+    int srid;
+    int type;
+    char **results;
+    char sql[4096];
+    char buf[256];
+    char prefix[16];
+    char xname[1024];
+    VirtualFDOPtr p_vt = NULL;
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+/* checking for table_name */
+    if (argc == 4)
+      {
+	  strcpy (vtable, argv[2]);
+	  vfdo_dequote (vtable);
+	  strcpy (table, argv[3]);
+	  vfdo_dequote (table);
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualFDO module] CREATE VIRTUAL: illegal arg list {table_name}\n");
+	  return SQLITE_ERROR;
+      }
+/* retrieving the base table columns */
+    strcpy (xname, table);
+    vfdo_double_quoted_sql (xname);
+    sprintf (sql, "PRAGMA table_info(%s)", xname);
+    ret = sqlite3_get_table (db, sql, &results, &n_rows, &n_columns, NULL);
+    if (ret != SQLITE_OK)
+	goto illegal;
+    if (n_rows >= 1)
+      {
+	  p_vt = (VirtualFDOPtr) sqlite3_malloc (sizeof (VirtualFDO));
+	  if (!p_vt)
+	      return SQLITE_NOMEM;
+	  p_vt->db = db;
+	  p_vt->nRef = 0;
+	  p_vt->zErrMsg = NULL;
+	  len = strlen (table);
+	  p_vt->table = sqlite3_malloc (len + 1);
+	  strcpy (p_vt->table, table);
+	  p_vt->nColumns = n_rows;
+	  p_vt->Column = sqlite3_malloc (sizeof (char *) * n_rows);
+	  p_vt->Type = sqlite3_malloc (sizeof (char *) * n_rows);
+	  p_vt->NotNull = sqlite3_malloc (sizeof (int) * n_rows);
+	  p_vt->Value = sqlite3_malloc (sizeof (SqliteValuePtr) * n_rows);
+	  for (i = 0; i < n_rows; i++)
+	    {
+		*(p_vt->Column + i) = NULL;
+		*(p_vt->Type + i) = NULL;
+		*(p_vt->NotNull + i) = -1;
+		*(p_vt->Value + i) = value_alloc ();
+	    }
+	  p_vt->nGeometries = 0;
+	  p_vt->GeoColumn = NULL;
+	  p_vt->Srid = NULL;
+	  p_vt->GeoType = NULL;
+	  p_vt->Format = NULL;
+	  p_vt->CoordDimensions = NULL;
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		col_name = results[(i * n_columns) + 1];
+		col_type = results[(i * n_columns) + 2];
+		if (atoi (results[(i * n_columns) + 3]) == 0)
+		    not_null = 0;
+		else
+		    not_null = 1;
+		len = strlen (col_name);
+		*(p_vt->Column + (i - 1)) = sqlite3_malloc (len + 1);
+		strcpy (*(p_vt->Column + (i - 1)), col_name);
+		len = strlen (col_type);
+		*(p_vt->Type + (i - 1)) = sqlite3_malloc (len + 1);
+		strcpy (*(p_vt->Type + (i - 1)), col_type);
+		*(p_vt->NotNull + (i - 1)) = not_null;
+	    }
+	  sqlite3_free_table (results);
+      }
+    else
+	goto illegal;
+/* retrieving the base table columns */
+    strcpy (sql,
+	    "SELECT f_geometry_column, geometry_type, srid, geometry_format, coord_dimension\n");
+    strcat (sql, "FROM geometry_columns WHERE f_table_name LIKE '");
+    strcpy (xname, table);
+    vfdo_clean_sql_string (xname);
+    strcat (sql, xname);
+    strcat (sql, "'");
+    ret = sqlite3_get_table (db, sql, &results, &n_rows, &n_columns, NULL);
+    if (ret != SQLITE_OK)
+	goto illegal;
+    if (n_rows >= 1)
+      {
+	  p_vt->nGeometries = n_rows;
+	  p_vt->GeoColumn = sqlite3_malloc (sizeof (char *) * n_rows);
+	  p_vt->Srid = sqlite3_malloc (sizeof (char *) * n_rows);
+	  p_vt->GeoType = sqlite3_malloc (sizeof (int) * n_rows);
+	  p_vt->Format = sqlite3_malloc (sizeof (int) * n_rows);
+	  p_vt->CoordDimensions = sqlite3_malloc (sizeof (int) * n_rows);
+	  for (i = 0; i < n_rows; i++)
+	    {
+		*(p_vt->GeoColumn + i) = NULL;
+		*(p_vt->Srid + i) = -1;
+		*(p_vt->GeoType + i) = -1;
+		*(p_vt->Format + i) = FDO_OGR_NONE;
+		*(p_vt->CoordDimensions + i) = GAIA_XY;
+	    }
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		col_name = results[(i * n_columns) + 0];
+		type = atoi (results[(i * n_columns) + 1]);
+		srid = atoi (results[(i * n_columns) + 2]);
+		format = results[(i * n_columns) + 3];
+		coord_dimension = atoi (results[(i * n_columns) + 4]);
+		len = strlen (col_name);
+		*(p_vt->GeoColumn + (i - 1)) = sqlite3_malloc (len + 1);
+		strcpy (*(p_vt->GeoColumn + (i - 1)), col_name);
+		*(p_vt->GeoType + (i - 1)) = type;
+		*(p_vt->Srid + (i - 1)) = srid;
+		if (strcasecmp (format, "WKT") == 0)
+		    *(p_vt->Format + (i - 1)) = FDO_OGR_WKT;
+		if (strcasecmp (format, "WKB") == 0)
+		    *(p_vt->Format + (i - 1)) = FDO_OGR_WKB;
+		if (strcasecmp (format, "FGF") == 0)
+		    *(p_vt->Format + (i - 1)) = FDO_OGR_FGF;
+		if (strcasecmp (format, "SPATIALITE") == 0)
+		    *(p_vt->Format + (i - 1)) = FDO_OGR_SPLITE;
+		if (coord_dimension == 3)
+		    *(p_vt->CoordDimensions + (i - 1)) = GAIA_XY_Z;
+		else if (coord_dimension == 4)
+		    *(p_vt->CoordDimensions + (i - 1)) = GAIA_XY_Z_M;
+		else
+		    *(p_vt->CoordDimensions + (i - 1)) = GAIA_XY;
+	    }
+	  sqlite3_free_table (results);
+      }
+    else
+	goto illegal;
+/* preparing the COLUMNs for this VIRTUAL TABLE */
+    strcpy (sql, "CREATE TABLE ");
+    strcpy (xname, vtable);
+    vfdo_double_quoted_sql (xname);
+    strcat (sql, xname);
+    strcat (sql, " ");
+    for (i = 0; i < p_vt->nColumns; i++)
+      {
+	  if (i == 0)
+	      strcpy (prefix, "(");
+	  else
+	      strcpy (prefix, ", ");
+	  strcpy (xname, *(p_vt->Column + i));
+	  vfdo_double_quoted_sql (xname);
+	  sprintf (buf, "%s%s %s", prefix, xname, *(p_vt->Type + i));
+	  if (*(p_vt->NotNull + i))
+	      strcat (buf, " NOT NULL");
+	  strcat (sql, buf);
+      }
+    strcat (sql, ")");
+    if (sqlite3_declare_vtab (db, sql) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualFDO module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       sql);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    return SQLITE_OK;
+  illegal:
+/* something is going the wrong way */
+    if (p_vt)
+	free_table (p_vt);
+    *pzErr =
+	sqlite3_mprintf
+	("[VirtualFDO module] '%s' isn't a valid FDO-OGR Geometry table\n",
+	 table);
+    return SQLITE_ERROR;
+}
+
+static int
+vfdo_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	      sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table to some shapefile - simply aliases vfdo_create() */
+    return vfdo_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+vfdo_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIndex)
+{
+/* best index selection */
+    if (pVTab || pIndex)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vfdo_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    VirtualFDOPtr p_vt = (VirtualFDOPtr) pVTab;
+    free_table (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+vfdo_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases vfdo_disconnect() */
+    return vfdo_disconnect (pVTab);
+}
+
+static int
+vfdo_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    VirtualFDOCursorPtr cursor =
+	(VirtualFDOCursorPtr) sqlite3_malloc (sizeof (VirtualFDOCursor));
+    if (cursor == NULL)
+	return SQLITE_ERROR;
+    cursor->pVtab = (VirtualFDOPtr) pVTab;
+    cursor->current_row = LONG64_MIN;
+    cursor->eof = 0;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    vfdo_read_row (cursor);
+    return SQLITE_OK;
+}
+
+static int
+vfdo_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    sqlite3_free (pCursor);
+    return SQLITE_OK;
+}
+
+static int
+vfdo_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	     int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    if (pCursor || idxNum || idxStr || argc || argv)
+	pCursor = pCursor;	/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vfdo_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching next row from cursor */
+    VirtualFDOCursorPtr cursor = (VirtualFDOCursorPtr) pCursor;
+    (cursor->current_row)++;
+    vfdo_read_row (cursor);
+    return SQLITE_OK;
+}
+
+static int
+vfdo_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    VirtualFDOCursorPtr cursor = (VirtualFDOCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+vfdo_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	     int column)
+{
+/* fetching value for the Nth column */
+    VirtualFDOCursorPtr cursor = (VirtualFDOCursorPtr) pCursor;
+    SqliteValuePtr value;
+    if (column >= 0 && column < cursor->pVtab->nColumns)
+      {
+	  value = *(cursor->pVtab->Value + column);
+	  switch (value->Type)
+	    {
+	    case SQLITE_INTEGER:
+		sqlite3_result_int64 (pContext, value->IntValue);
+		break;
+	    case SQLITE_FLOAT:
+		sqlite3_result_double (pContext, value->DoubleValue);
+		break;
+	    case SQLITE_TEXT:
+		sqlite3_result_text (pContext, value->Text, value->Size,
+				     SQLITE_STATIC);
+		break;
+	    case SQLITE_BLOB:
+		sqlite3_result_blob (pContext, value->Blob, value->Size,
+				     SQLITE_STATIC);
+		break;
+	    default:
+		sqlite3_result_null (pContext);
+		break;
+	    };
+      }
+    else
+	sqlite3_result_null (pContext);
+    return SQLITE_OK;
+}
+
+static int
+vfdo_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    VirtualFDOCursorPtr cursor = (VirtualFDOCursorPtr) pCursor;
+    *pRowid = cursor->current_row;
+    return SQLITE_OK;
+}
+
+static int
+vfdo_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	     sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    sqlite3_int64 rowid = 0;
+    int ret;
+    VirtualFDOPtr p_vt = (VirtualFDOPtr) pVTab;
+    if (argc == 1)
+      {
+	  /* performing a DELETE */
+	  if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+	    {
+		rowid = sqlite3_value_int64 (argv[0]);
+		ret = vfdo_delete_row (p_vt, rowid);
+	    }
+	  else
+	      ret = SQLITE_MISMATCH;
+      }
+    else
+      {
+	  if (sqlite3_value_type (argv[0]) == SQLITE_NULL)
+	    {
+		/* performing an INSERT */
+		ret = vfdo_insert_row (p_vt, &rowid, argc, argv);
+		if (ret == SQLITE_OK)
+		    *pRowid = rowid;
+	    }
+	  else
+	    {
+		/* performing an UPDATE */
+		rowid = sqlite3_value_int64 (argv[0]);
+		ret = vfdo_update_row (p_vt, rowid, argc, argv);
+	    }
+      }
+    return ret;
+}
+
+static int
+vfdo_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vfdo_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vfdo_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vfdo_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3VirtualFDOInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    my_fdo_module.iVersion = 1;
+    my_fdo_module.xCreate = &vfdo_create;
+    my_fdo_module.xConnect = &vfdo_connect;
+    my_fdo_module.xBestIndex = &vfdo_best_index;
+    my_fdo_module.xDisconnect = &vfdo_disconnect;
+    my_fdo_module.xDestroy = &vfdo_destroy;
+    my_fdo_module.xOpen = &vfdo_open;
+    my_fdo_module.xClose = &vfdo_close;
+    my_fdo_module.xFilter = &vfdo_filter;
+    my_fdo_module.xNext = &vfdo_next;
+    my_fdo_module.xEof = &vfdo_eof;
+    my_fdo_module.xColumn = &vfdo_column;
+    my_fdo_module.xRowid = &vfdo_rowid;
+    my_fdo_module.xUpdate = &vfdo_update;
+    my_fdo_module.xBegin = &vfdo_begin;
+    my_fdo_module.xSync = &vfdo_sync;
+    my_fdo_module.xCommit = &vfdo_commit;
+    my_fdo_module.xRollback = &vfdo_rollback;
+    my_fdo_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "VirtualFDO", &my_fdo_module, NULL, 0);
+    return rc;
+}
+
+int
+virtualfdo_extension_init (sqlite3 * db)
+{
+    return sqlite3VirtualFDOInit (db);
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/virtualnetwork.c b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualnetwork.c
new file mode 100644
index 0000000..402d32b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualnetwork.c
@@ -0,0 +1,2271 @@
+/*
+
+ virtualnetwork.c -- SQLite3 extension [VIRTUAL TABLE Routing - shortest path]
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Luigi Costalli luigi.costalli at gmail.com
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+
+static struct sqlite3_module my_net_module;
+
+#define VNET_DIJKSTRA_ALGORITHM	1
+#define VNET_A_STAR_ALGORITHM	2
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+/******************************************************************************
+/
+/ VirtualNetwork structs
+/
+******************************************************************************/
+
+typedef struct NetworkArcStruct
+{
+/* an ARC */
+    const struct NetworkNodeStruct *NodeFrom;
+    const struct NetworkNodeStruct *NodeTo;
+    sqlite3_int64 ArcRowid;
+    double Cost;
+} NetworkArc;
+typedef NetworkArc *NetworkArcPtr;
+
+typedef struct NetworkNodeStruct
+{
+/* a NODE */
+    int InternalIndex;
+    sqlite3_int64 Id;
+    char *Code;
+    double CoordX;
+    double CoordY;
+    int NumArcs;
+    NetworkArcPtr Arcs;
+} NetworkNode;
+typedef NetworkNode *NetworkNodePtr;
+
+typedef struct NetworkStruct
+{
+/* the main NETWORK structure */
+    int Net64;
+    int AStar;
+    int EndianArch;
+    int MaxCodeLength;
+    int CurrentIndex;
+    int NodeCode;
+    int NumNodes;
+    char *TableName;
+    char *FromColumn;
+    char *ToColumn;
+    char *GeometryColumn;
+    char *NameColumn;
+    double AStarHeuristicCoeff;
+    NetworkNodePtr Nodes;
+} Network;
+typedef Network *NetworkPtr;
+
+typedef struct ArcSolutionStruct
+{
+/* Geometry corresponding to an Arc used by Dijkstra shortest path solution */
+    sqlite3_int64 ArcRowid;
+    char *FromCode;
+    char *ToCode;
+    sqlite3_int64 FromId;
+    sqlite3_int64 ToId;
+    int Points;
+    double *Coords;
+    int Srid;
+    char *Name;
+    struct ArcSolutionStruct *Next;
+
+} ArcSolution;
+typedef ArcSolution *ArcSolutionPtr;
+
+typedef struct RowSolutionStruct
+{
+/* a row into the shortest path solution */
+    NetworkArcPtr Arc;
+    char *Name;
+    struct RowSolutionStruct *Next;
+
+} RowSolution;
+typedef RowSolution *RowSolutionPtr;
+
+typedef struct SolutionStruct
+{
+/* the shortest path solution */
+    ArcSolutionPtr FirstArc;
+    ArcSolutionPtr LastArc;
+    NetworkNodePtr From;
+    NetworkNodePtr To;
+    RowSolutionPtr First;
+    RowSolutionPtr Last;
+    RowSolutionPtr CurrentRow;
+    sqlite3_int64 CurrentRowId;
+    double TotalCost;
+    gaiaGeomCollPtr Geometry;
+} Solution;
+typedef Solution *SolutionPtr;
+
+/******************************************************************************
+/
+/ Dijkstra and A* common structs
+/
+******************************************************************************/
+
+typedef struct RoutingNode
+{
+    int Id;
+    struct RoutingNode **To;
+    NetworkArcPtr *Link;
+    int DimTo;
+    struct RoutingNode *PreviousNode;
+    NetworkArcPtr Arc;
+    double Distance;
+    double HeuristicDistance;
+    int Inspected;
+} RoutingNode;
+typedef RoutingNode *RoutingNodePtr;
+
+typedef struct RoutingNodes
+{
+    RoutingNodePtr Nodes;
+    NetworkArcPtr *ArcsBuffer;
+    RoutingNodePtr *NodesBuffer;
+    int Dim;
+    int DimLink;
+} RoutingNodes;
+typedef RoutingNodes *RoutingNodesPtr;
+
+typedef struct RoutingHeapStruct
+{
+    RoutingNodePtr *Values;
+    int Head;
+    int Tail;
+} RoutingHeap;
+typedef RoutingHeap *RoutingHeapPtr;
+
+/******************************************************************************
+/
+/ VirtualTable structs
+/
+******************************************************************************/
+
+typedef struct VirtualNetworkStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USE INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+    NetworkPtr graph;		/* the NETWORK structure */
+    RoutingNodesPtr routing;	/* the ROUTING structure */
+    int currentAlgorithm;	/* the currently selected Shortest Path Algorithm */
+} VirtualNetwork;
+typedef VirtualNetwork *VirtualNetworkPtr;
+
+typedef struct VirtualNetworkCursortStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    VirtualNetworkPtr pVtab;	/* Virtual table of this cursor */
+    SolutionPtr solution;	/* the current solution */
+    int eof;			/* the EOF marker */
+} VirtualNetworkCursor;
+typedef VirtualNetworkCursor *VirtualNetworkCursorPtr;
+
+/*
+/
+/  implementation of the Dijkstra Shortest Path algorithm
+/
+////////////////////////////////////////////////////////////
+/
+/ Author: Luigi Costalli luigi.costalli at gmail.com
+/ version 1.0. 2008 October 21
+/
+*/
+
+static RoutingNodesPtr
+routing_init (NetworkPtr graph)
+{
+/* allocating and initializing the ROUTING struct */
+    int i;
+    int j;
+    int cnt = 0;
+    RoutingNodesPtr nd;
+    RoutingNodePtr ndn;
+    NetworkNodePtr nn;
+/* allocating the main Nodes struct */
+    nd = malloc (sizeof (RoutingNodes));
+/* allocating and initializing  Nodes array */
+    nd->Nodes = malloc (sizeof (RoutingNode) * graph->NumNodes);
+    nd->Dim = graph->NumNodes;
+    nd->DimLink = 0;
+
+/* pre-alloc buffer strategy - GENSCHER 2010-01-05 */
+    for (i = 0; i < graph->NumNodes; cnt += graph->Nodes[i].NumArcs, i++);
+    nd->NodesBuffer = malloc (sizeof (RoutingNodePtr) * cnt);
+    nd->ArcsBuffer = malloc (sizeof (NetworkArcPtr) * cnt);
+
+    cnt = 0;
+    for (i = 0; i < graph->NumNodes; i++)
+      {
+	  /* initializing the Nodes array */
+	  nn = graph->Nodes + i;
+	  ndn = nd->Nodes + i;
+	  ndn->Id = nn->InternalIndex;
+	  ndn->DimTo = nn->NumArcs;
+	  ndn->To = &(nd->NodesBuffer[cnt]);
+	  ndn->Link = &(nd->ArcsBuffer[cnt]);
+	  cnt += nn->NumArcs;
+
+	  for (j = 0; j < nn->NumArcs; j++)
+	    {
+		/*  setting the outcoming Arcs for the current Node */
+		nd->DimLink++;
+		ndn->To[j] = nd->Nodes + nn->Arcs[j].NodeTo->InternalIndex;
+		ndn->Link[j] = nn->Arcs + j;
+	    }
+      }
+    return (nd);
+}
+
+static void
+routing_free (RoutingNodes * e)
+{
+/* memory cleanup; freeing the ROUTING struct */
+    free (e->ArcsBuffer);
+    free (e->NodesBuffer);
+    free (e->Nodes);
+    free (e);
+}
+
+static RoutingHeapPtr
+routing_heap_init (int dim)
+{
+/* allocating the Nodes ordered list */
+    RoutingHeapPtr h;
+    h = malloc (sizeof (RoutingHeap));
+    h->Values = malloc (sizeof (RoutingNodePtr) * dim);
+    h->Head = 0;
+    h->Tail = 0;
+    return (h);
+}
+
+static void
+routing_heap_free (RoutingHeapPtr h)
+{
+/* freeing the Nodes ordered list */
+    free (h->Values);
+    free (h);
+}
+
+static void
+routing_push (RoutingHeapPtr h, RoutingNodePtr n)
+{
+/* inserting a Node into the list */
+    h->Values[h->Tail] = n;
+    h->Tail++;
+}
+
+static RoutingNodePtr
+dijkstra_pop (RoutingHeapPtr h)
+{
+/* fetching the minimum value */
+    int i;
+    RoutingNodePtr n;
+    double min = DBL_MAX;
+    int i_min = h->Head;
+    for (i = h->Head; i < h->Tail; i++)
+      {
+	  n = h->Values[i];
+	  if (n->Distance < min)
+	    {
+		min = n->Distance;
+		i_min = i;
+	    }
+      }
+    if (i_min > h->Head)
+      {
+	  n = h->Values[i_min];
+	  h->Values[i_min] = h->Values[h->Head];
+	  h->Values[h->Head] = n;
+      }
+    n = h->Values[h->Head];
+    h->Head++;
+    return (n);
+}
+
+static NetworkArcPtr *
+dijkstra_shortest_path (RoutingNodesPtr e, NetworkNodePtr pfrom,
+			NetworkNodePtr pto, int *ll)
+{
+/* identifying the Shortest Path - Dijkstra's algorithm */
+    int from;
+    int to;
+    int i;
+    int k;
+    RoutingNodePtr n;
+    RoutingNodePtr p_to;
+    NetworkArcPtr p_link;
+    int cnt;
+    NetworkArcPtr *result;
+    RoutingHeapPtr h;
+/* setting From/To */
+    from = pfrom->InternalIndex;
+    to = pto->InternalIndex;
+/* initializing the heap */
+    h = routing_heap_init (e->DimLink);
+/* initializing the graph */
+    for (i = 0; i < e->Dim; i++)
+      {
+	  n = e->Nodes + i;
+	  n->PreviousNode = NULL;
+	  n->Arc = NULL;
+	  n->Inspected = 0;
+	  n->Distance = DBL_MAX;
+      }
+/* pushes the From node into the Nodes list */
+    e->Nodes[from].Distance = 0.0;
+    routing_push (h, e->Nodes + from);
+    while (h->Tail != h->Head)
+      {
+	  /* Dijsktra loop */
+	  n = dijkstra_pop (h);
+	  if (n->Id == to)
+	    {
+		/* destination reached */
+		break;
+	    }
+	  n->Inspected = 1;
+	  for (i = 0; i < n->DimTo; i++)
+	    {
+		p_to = *(n->To + i);
+		p_link = *(n->Link + i);
+		if (p_to->Inspected == 0)
+		  {
+		      if (p_to->Distance == DBL_MAX)
+			{
+			    /* inserting a new node into the list */
+			    p_to->Distance = n->Distance + p_link->Cost;
+			    p_to->PreviousNode = n;
+			    p_to->Arc = p_link;
+			    routing_push (h, p_to);
+			}
+		      else if (p_to->Distance > n->Distance + p_link->Cost)
+			{
+			    /* updating an already inserted node */
+			    p_to->Distance = n->Distance + p_link->Cost;
+			    p_to->PreviousNode = n;
+			    p_to->Arc = p_link;
+			}
+		  }
+	    }
+      }
+    routing_heap_free (h);
+    cnt = 0;
+    n = e->Nodes + to;
+    while (n->PreviousNode != NULL)
+      {
+	  /* counting how many Arcs are into the Shortest Path solution */
+	  cnt++;
+	  n = n->PreviousNode;
+      }
+/* allocating the solution */
+    result = malloc (sizeof (NetworkArcPtr) * cnt);
+    k = cnt - 1;
+    n = e->Nodes + to;
+    while (n->PreviousNode != NULL)
+      {
+	  /* inserting an Arc  into the solution */
+	  result[k] = n->Arc;
+	  n = n->PreviousNode;
+	  k--;
+      }
+    *ll = cnt;
+    return (result);
+}
+
+/* END of Luigi Costalli Dijkstra Shortest Path implementation */
+
+/*
+/
+/  implementation of the A* Shortest Path algorithm
+/
+*/
+
+static RoutingNodePtr
+a_star_pop (RoutingHeapPtr h)
+{
+/* fetching the minimum value */
+    int i;
+    RoutingNodePtr n;
+    double min = DBL_MAX;
+    int i_min = h->Head;
+    for (i = h->Head; i < h->Tail; i++)
+      {
+	  n = h->Values[i];
+	  if (n->HeuristicDistance < min)
+	    {
+		min = n->HeuristicDistance;
+		i_min = i;
+	    }
+      }
+    if (i_min > h->Head)
+      {
+	  n = h->Values[i_min];
+	  h->Values[i_min] = h->Values[h->Head];
+	  h->Values[h->Head] = n;
+      }
+    n = h->Values[h->Head];
+    h->Head++;
+    return (n);
+}
+
+static double
+a_star_heuristic_distance (NetworkNodePtr n1, NetworkNodePtr n2, double coeff)
+{
+/* computing the euclidean distance intercurring between two nodes */
+    double dx = n1->CoordX - n2->CoordX;
+    double dy = n1->CoordY - n2->CoordY;
+    double dist = sqrt ((dx * dx) + (dy * dy)) * coeff;
+    return dist;
+}
+
+static NetworkArcPtr *
+a_star_shortest_path (RoutingNodesPtr e, NetworkNodePtr nodes,
+		      NetworkNodePtr pfrom, NetworkNodePtr pto,
+		      double heuristic_coeff, int *ll)
+{
+/* identifying the Shortest Path - A* algorithm */
+    int from;
+    int to;
+    int i;
+    int k;
+    RoutingNodePtr pAux;
+    RoutingNodePtr n;
+    RoutingNodePtr p_to;
+    NetworkNodePtr pOrg;
+    NetworkNodePtr pDest;
+    NetworkArcPtr p_link;
+    int cnt;
+    NetworkArcPtr *result;
+    RoutingHeapPtr h;
+/* setting From/To */
+    from = pfrom->InternalIndex;
+    to = pto->InternalIndex;
+    pAux = e->Nodes + from;
+    pOrg = nodes + pAux->Id;
+    pAux = e->Nodes + to;
+    pDest = nodes + pAux->Id;
+/* initializing the heap */
+    h = routing_heap_init (e->DimLink);
+/* initializing the graph */
+    for (i = 0; i < e->Dim; i++)
+      {
+	  n = e->Nodes + i;
+	  n->PreviousNode = NULL;
+	  n->Arc = NULL;
+	  n->Inspected = 0;
+	  n->Distance = DBL_MAX;
+	  n->HeuristicDistance = DBL_MAX;
+      }
+/* pushes the From node into the Nodes list */
+    e->Nodes[from].Distance = 0.0;
+    e->Nodes[from].HeuristicDistance =
+	a_star_heuristic_distance (pOrg, pDest, heuristic_coeff);
+    routing_push (h, e->Nodes + from);
+    while (h->Tail != h->Head)
+      {
+	  /* A* loop */
+	  n = a_star_pop (h);
+	  if (n->Id == to)
+	    {
+		/* destination reached */
+		break;
+	    }
+	  n->Inspected = 1;
+	  for (i = 0; i < n->DimTo; i++)
+	    {
+		p_to = *(n->To + i);
+		p_link = *(n->Link + i);
+		if (p_to->Inspected == 0)
+		  {
+		      if (p_to->Distance == DBL_MAX)
+			{
+			    /* inserting a new node into the list */
+			    p_to->Distance = n->Distance + p_link->Cost;
+			    pOrg = nodes + p_to->Id;
+			    p_to->HeuristicDistance =
+				p_to->Distance +
+				a_star_heuristic_distance (pOrg, pDest,
+							   heuristic_coeff);
+			    p_to->PreviousNode = n;
+			    p_to->Arc = p_link;
+			    routing_push (h, p_to);
+			}
+		      else if (p_to->Distance > n->Distance + p_link->Cost)
+			{
+			    /* updating an already inserted node */
+			    p_to->Distance = n->Distance + p_link->Cost;
+			    pOrg = nodes + p_to->Id;
+			    p_to->HeuristicDistance =
+				p_to->Distance +
+				a_star_heuristic_distance (pOrg, pDest,
+							   heuristic_coeff);
+			    p_to->PreviousNode = n;
+			    p_to->Arc = p_link;
+			}
+		  }
+	    }
+      }
+    routing_heap_free (h);
+    cnt = 0;
+    n = e->Nodes + to;
+    while (n->PreviousNode != NULL)
+      {
+	  /* counting how many Arcs are into the Shortest Path solution */
+	  cnt++;
+	  n = n->PreviousNode;
+      }
+/* allocating the solution */
+    result = malloc (sizeof (NetworkArcPtr) * cnt);
+    k = cnt - 1;
+    n = e->Nodes + to;
+    while (n->PreviousNode != NULL)
+      {
+	  /* inserting an Arc  into the solution */
+	  result[k] = n->Arc;
+	  n = n->PreviousNode;
+	  k--;
+      }
+    *ll = cnt;
+    return (result);
+}
+
+/* END of A* Shortest Path implementation */
+
+static void
+vnet_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+static void
+vnet_dequote (char *buf)
+{
+/* dequoting an SQL string */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    char strip = '\0';
+    int first = 0;
+    int len = strlen (buf);
+    if (buf[0] == '\'' && buf[len - 1] == '\'')
+	strip = '\'';
+    if (buf[0] == '"' && buf[len - 1] == '"')
+	strip = '"';
+    if (strip == '\0')
+	return;
+    strcpy (tmp, buf + 1);
+    len = strlen (tmp);
+    tmp[len - 1] = '\0';
+    while (*in != '\0')
+      {
+	  if (*in == strip)
+	    {
+		if (first)
+		  {
+		      first = 0;
+		      in++;
+		      continue;
+		  }
+		else
+		  {
+		      first = 1;
+		      *out++ = *in++;
+		      continue;
+		  }
+	    }
+	  first = 0;
+	  *out++ = *in++;
+      }
+    *out = '\0';
+}
+
+static int
+cmp_nodes_code (const void *p1, const void *p2)
+{
+/* compares two nodes  by CODE [for BSEARCH] */
+    NetworkNodePtr pN1 = (NetworkNodePtr) p1;
+    NetworkNodePtr pN2 = (NetworkNodePtr) p2;
+    return strcmp (pN1->Code, pN2->Code);
+}
+
+static int
+cmp_nodes_id (const void *p1, const void *p2)
+{
+/* compares two nodes  by ID [for BSEARCH] */
+    NetworkNodePtr pN1 = (NetworkNodePtr) p1;
+    NetworkNodePtr pN2 = (NetworkNodePtr) p2;
+    if (pN1->Id == pN2->Id)
+	return 0;
+    if (pN1->Id > pN2->Id)
+	return 1;
+    return -1;
+}
+
+static NetworkNodePtr
+find_node_by_code (NetworkPtr graph, const char *code)
+{
+/* searching a Node (by Code) into the sorted list */
+    NetworkNodePtr ret;
+    NetworkNode pN;
+    pN.Code = (char *) code;
+    ret =
+	bsearch (&pN, graph->Nodes, graph->NumNodes, sizeof (NetworkNode),
+		 cmp_nodes_code);
+    return ret;
+}
+
+static NetworkNodePtr
+find_node_by_id (NetworkPtr graph, const sqlite3_int64 id)
+{
+/* searching a Node (by Id) into the sorted list */
+    NetworkNodePtr ret;
+    NetworkNode pN;
+    pN.Id = id;
+    ret =
+	bsearch (&pN, graph->Nodes, graph->NumNodes, sizeof (NetworkNode),
+		 cmp_nodes_id);
+    return ret;
+}
+
+static void
+delete_solution (SolutionPtr solution)
+{
+/* deleting the current solution */
+    ArcSolutionPtr pA;
+    ArcSolutionPtr pAn;
+    RowSolutionPtr pR;
+    RowSolutionPtr pRn;
+    if (!solution)
+	return;
+    pA = solution->FirstArc;
+    while (pA)
+      {
+	  pAn = pA->Next;
+	  if (pA->FromCode)
+	      free (pA->FromCode);
+	  if (pA->ToCode)
+	      free (pA->ToCode);
+	  if (pA->Coords)
+	      free (pA->Coords);
+	  if (pA->Name)
+	      free (pA->Name);
+	  free (pA);
+	  pA = pAn;
+      }
+    pR = solution->First;
+    while (pR)
+      {
+	  pRn = pR->Next;
+	  if (pR->Name)
+	      free (pR->Name);
+	  free (pR);
+	  pR = pRn;
+      }
+    if (solution->Geometry)
+	gaiaFreeGeomColl (solution->Geometry);
+    free (solution);
+}
+
+static void
+reset_solution (SolutionPtr solution)
+{
+/* resetting the current solution */
+    ArcSolutionPtr pA;
+    ArcSolutionPtr pAn;
+    RowSolutionPtr pR;
+    RowSolutionPtr pRn;
+    if (!solution)
+	return;
+    pA = solution->FirstArc;
+    while (pA)
+      {
+	  pAn = pA->Next;
+	  if (pA->FromCode)
+	      free (pA->FromCode);
+	  if (pA->ToCode)
+	      free (pA->ToCode);
+	  if (pA->Coords)
+	      free (pA->Coords);
+	  free (pA);
+	  pA = pAn;
+      }
+    pR = solution->First;
+    while (pR)
+      {
+	  pRn = pR->Next;
+	  if (pR->Name)
+	      free (pR->Name);
+	  free (pR);
+	  pR = pRn;
+      }
+    if (solution->Geometry)
+	gaiaFreeGeomColl (solution->Geometry);
+    solution->FirstArc = NULL;
+    solution->LastArc = NULL;
+    solution->From = NULL;
+    solution->To = NULL;
+    solution->First = NULL;
+    solution->Last = NULL;
+    solution->CurrentRow = NULL;
+    solution->CurrentRowId = 0;
+    solution->TotalCost = 0.0;
+    solution->Geometry = NULL;
+}
+
+static SolutionPtr
+alloc_solution (void)
+{
+/* allocates and initializes the current solution */
+    SolutionPtr p = malloc (sizeof (Solution));
+    p->FirstArc = NULL;
+    p->LastArc = NULL;
+    p->From = NULL;
+    p->To = NULL;
+    p->First = NULL;
+    p->Last = NULL;
+    p->CurrentRow = NULL;
+    p->CurrentRowId = 0;
+    p->TotalCost = 0.0;
+    p->Geometry = NULL;
+    return p;
+}
+
+static void
+add_arc_to_solution (SolutionPtr solution, NetworkArcPtr arc)
+{
+/* inserts an Arc into the Shortest Path solution */
+    RowSolutionPtr p = malloc (sizeof (RowSolution));
+    p->Arc = arc;
+    p->Name = NULL;
+    p->Next = NULL;
+    solution->TotalCost += arc->Cost;
+    if (!(solution->First))
+	solution->First = p;
+    if (solution->Last)
+	solution->Last->Next = p;
+    solution->Last = p;
+}
+
+static void
+add_arc_geometry_to_solution (SolutionPtr solution, sqlite3_int64 arc_id,
+			      const char *from_code, const char *to_code,
+			      sqlite3_int64 from_id, sqlite3_int64 to_id,
+			      int points, double *coords, int srid,
+			      const char *name)
+{
+/* inserts an Arc Geometry into the Shortest Path solution */
+    int len;
+    ArcSolutionPtr p = malloc (sizeof (ArcSolution));
+    p->ArcRowid = arc_id;
+    p->FromCode = NULL;
+    len = strlen (from_code);
+    if (len > 0)
+      {
+	  p->FromCode = malloc (len + 1);
+	  strcpy (p->FromCode, from_code);
+      }
+    p->ToCode = NULL;
+    len = strlen (to_code);
+    if (len > 0)
+      {
+	  p->ToCode = malloc (len + 1);
+	  strcpy (p->ToCode, to_code);
+      }
+    p->FromId = from_id;
+    p->ToId = to_id;
+    p->Points = points;
+    p->Coords = coords;
+    p->Srid = srid;
+    if (!name)
+	p->Name = NULL;
+    else
+      {
+	  len = strlen (name);
+	  p->Name = malloc (len + 1);
+	  strcpy (p->Name, name);
+      }
+    p->Next = NULL;
+    if (!(solution->FirstArc))
+	solution->FirstArc = p;
+    if (solution->LastArc)
+	solution->LastArc->Next = p;
+    solution->LastArc = p;
+}
+
+static void
+build_solution (sqlite3 * handle, NetworkPtr graph, SolutionPtr solution,
+		NetworkArcPtr * shortest_path, int cnt)
+{
+/* formatting the Shortest Path solution */
+    int i;
+    char sql[8192];
+    int err;
+    int error = 0;
+    int ret;
+    sqlite3_int64 arc_id;
+    const unsigned char *blob;
+    int size;
+    sqlite3_int64 from_id;
+    sqlite3_int64 to_id;
+    char from_code[128];
+    char to_code[128];
+    char name[2048];
+    int tbd;
+    int ind;
+    int base = 0;
+    int block = 128;
+    int how_many;
+    sqlite3_stmt *stmt;
+    char xfrom[1024];
+    char xto[1024];
+    char xgeom[1024];
+    char xname[1024];
+    char xtable[1024];
+    if (cnt > 0)
+      {
+	  /* building the solution */
+	  for (i = 0; i < cnt; i++)
+	    {
+		add_arc_to_solution (solution, shortest_path[i]);
+	    }
+      }
+    tbd = cnt;
+    while (tbd > 0)
+      {
+	  /* requesting max 128 arcs at each time */
+	  if (tbd < block)
+	      how_many = tbd;
+	  else
+	      how_many = block;
+/* preparing the Geometry representing this solution [reading arcs] */
+	  if (graph->NameColumn)
+	    {
+		/* a Name column is defined */
+		strcpy (xfrom, graph->FromColumn);
+		vnet_double_quoted_sql (xfrom);
+		strcpy (xto, graph->ToColumn);
+		vnet_double_quoted_sql (xto);
+		strcpy (xgeom, graph->GeometryColumn);
+		vnet_double_quoted_sql (xgeom);
+		strcpy (xname, graph->NameColumn);
+		vnet_double_quoted_sql (xname);
+		strcpy (xtable, graph->TableName);
+		vnet_double_quoted_sql (xtable);
+		sprintf (sql,
+			 "SELECT ROWID, %s, %s, %s, %s FROM %s WHERE ROWID IN (",
+			 xfrom, xto, xgeom, xname, xtable);
+	    }
+	  else
+	    {
+		/* no Name column is defined */
+		strcpy (xfrom, graph->FromColumn);
+		vnet_double_quoted_sql (xfrom);
+		strcpy (xto, graph->ToColumn);
+		vnet_double_quoted_sql (xto);
+		strcpy (xgeom, graph->GeometryColumn);
+		vnet_double_quoted_sql (xgeom);
+		strcpy (xtable, graph->TableName);
+		vnet_double_quoted_sql (xtable);
+		sprintf (sql,
+			 "SELECT ROWID, %s, %s, %s FROM %s WHERE ROWID IN (",
+			 xfrom, xto, xgeom, xtable);
+	    }
+	  for (i = 0; i < how_many; i++)
+	    {
+		if (i == 0)
+		    strcat (sql, "?");
+		else
+		    strcat (sql, ",?");
+	    }
+	  strcat (sql, ")");
+	  ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+	  if (ret != SQLITE_OK)
+	    {
+		error = 1;
+		goto abort;
+	    }
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  ind = 1;
+	  for (i = 0; i < cnt; i++)
+	    {
+		if (i < base)
+		    continue;
+		if (i >= (base + how_many))
+		    break;
+		sqlite3_bind_int64 (stmt, ind, shortest_path[i]->ArcRowid);
+		ind++;
+	    }
+	  while (1)
+	    {
+		ret = sqlite3_step (stmt);
+		if (ret == SQLITE_DONE)
+		    break;
+		if (ret == SQLITE_ROW)
+		  {
+		      arc_id = -1;
+		      from_id = -1;
+		      to_id = -1;
+		      *from_code = '\0';
+		      *to_code = '\0';
+		      blob = NULL;
+		      size = 0;
+		      *name = '\0';
+		      err = 0;
+		      if (sqlite3_column_type (stmt, 0) == SQLITE_INTEGER)
+			  arc_id = sqlite3_column_int64 (stmt, 0);
+		      else
+			  err = 1;
+		      if (graph->NodeCode)
+			{
+			    /* nodes are identified by TEXT codes */
+			    if (sqlite3_column_type (stmt, 1) == SQLITE_TEXT)
+				strcpy (from_code,
+					(char *) sqlite3_column_text (stmt, 1));
+			    else
+				err = 1;
+			    if (sqlite3_column_type (stmt, 2) == SQLITE_TEXT)
+				strcpy (to_code,
+					(char *) sqlite3_column_text (stmt, 2));
+			    else
+				err = 1;
+			}
+		      else
+			{
+			    /* nodes are identified by INTEGER ids */
+			    if (sqlite3_column_type (stmt, 1) == SQLITE_INTEGER)
+				from_id = sqlite3_column_int64 (stmt, 1);
+			    else
+				err = 1;
+			    if (sqlite3_column_type (stmt, 2) == SQLITE_INTEGER)
+				to_id = sqlite3_column_int64 (stmt, 2);
+			    else
+				err = 1;
+			}
+		      if (sqlite3_column_type (stmt, 3) == SQLITE_BLOB)
+			{
+			    blob =
+				(const unsigned char *)
+				sqlite3_column_blob (stmt, 3);
+			    size = sqlite3_column_bytes (stmt, 3);
+			}
+		      else
+			  err = 1;
+		      if (graph->NameColumn)
+			{
+			    if (sqlite3_column_type (stmt, 4) == SQLITE_TEXT)
+				strcpy (name,
+					(char *) sqlite3_column_text (stmt, 4));
+			}
+		      if (err)
+			  error = 1;
+		      else
+			{
+			    /* saving the Arc geometry into the temporary struct */
+			    gaiaGeomCollPtr geom =
+				gaiaFromSpatiaLiteBlobWkb (blob, size);
+			    if (geom)
+			      {
+				  /* OK, we have fetched a valid Geometry */
+				  if (geom->FirstPoint == NULL
+				      && geom->FirstPolygon == NULL
+				      && geom->FirstLinestring != NULL
+				      && geom->FirstLinestring ==
+				      geom->LastLinestring)
+				    {
+					/* Geometry is LINESTRING as expected */
+					int iv;
+					int points =
+					    geom->FirstLinestring->Points;
+					double *coords =
+					    malloc (sizeof (double) *
+						    (points * 2));
+					for (iv = 0; iv < points; iv++)
+					  {
+					      double x;
+					      double y;
+					      gaiaGetPoint
+						  (geom->FirstLinestring->Coords,
+						   iv, &x, &y);
+					      *(coords + ((iv * 2) + 0)) = x;
+					      *(coords + ((iv * 2) + 1)) = y;
+					  }
+					add_arc_geometry_to_solution (solution,
+								      arc_id,
+								      from_code,
+								      to_code,
+								      from_id,
+								      to_id,
+								      points,
+								      coords,
+								      geom->Srid,
+								      name);
+				    }
+				  else
+				      error = 1;
+				  gaiaFreeGeomColl (geom);
+			      }
+			    else
+				error = 1;
+			}
+		  }
+	    }
+	  sqlite3_finalize (stmt);
+	  tbd -= how_many;
+	  base += how_many;
+      }
+  abort:
+    if (shortest_path)
+	free (shortest_path);
+    if (!error)
+      {
+	  /* building the Geometry representing the Shortest Path Solution */
+	  gaiaLinestringPtr ln;
+	  int tot_pts = 0;
+	  RowSolutionPtr pR;
+	  ArcSolutionPtr pA;
+	  int srid = -1;
+	  if (solution->FirstArc)
+	      srid = (solution->FirstArc)->Srid;
+	  pR = solution->First;
+	  while (pR)
+	    {
+		pA = solution->FirstArc;
+		while (pA)
+		  {
+		      /* computing how many vertices do we need to build the LINESTRING */
+		      if (pR->Arc->ArcRowid == pA->ArcRowid)
+			{
+			    if (pR == solution->First)
+				tot_pts += pA->Points;
+			    else
+				tot_pts += (pA->Points - 1);
+			    if (pA->Srid != srid)
+				srid = -1;
+			}
+		      pA = pA->Next;
+		  }
+		pR = pR->Next;
+	    }
+	  /* creating the Shortest Path Geometry - LINESTRING */
+	  ln = gaiaAllocLinestring (tot_pts);
+	  solution->Geometry = gaiaAllocGeomColl ();
+	  solution->Geometry->Srid = srid;
+	  gaiaInsertLinestringInGeomColl (solution->Geometry, ln);
+	  tot_pts = 0;
+	  pR = solution->First;
+	  while (pR)
+	    {
+		/* building the LINESTRING */
+		int skip;
+		if (pR == solution->First)
+		    skip = 0;	/* for first arc we must copy any vertex */
+		else
+		    skip = 1;	/* for subsequent arcs we must skip first vertex [already inserted from previous arc] */
+		pA = solution->FirstArc;
+		while (pA)
+		  {
+		      if (pR->Arc->ArcRowid == pA->ArcRowid)
+			{
+			    /* copying vertices from correspoinding Arc Geometry */
+			    int ini;
+			    int iv;
+			    int rev;
+			    double x;
+			    double y;
+			    if (graph->NodeCode)
+			      {
+				  /* nodes are identified by TEXT codes */
+				  if (strcmp
+				      (pR->Arc->NodeFrom->Code,
+				       pA->ToCode) == 0)
+				      rev = 1;
+				  else
+				      rev = 0;
+			      }
+			    else
+			      {
+				  /* nodes are identified by INTEGER ids */
+				  if (pR->Arc->NodeFrom->Id == pA->ToId)
+				      rev = 1;
+				  else
+				      rev = 0;
+			      }
+			    if (rev)
+			      {
+				  /* copying Arc vertices in reverse order */
+				  if (skip)
+				      ini = pA->Points - 2;
+				  else
+				      ini = pA->Points - 1;
+				  for (iv = ini; iv >= 0; iv--)
+				    {
+					x = *(pA->Coords + ((iv * 2) + 0));
+					y = *(pA->Coords + ((iv * 2) + 1));
+					gaiaSetPoint (ln->Coords, tot_pts, x,
+						      y);
+					tot_pts++;
+				    }
+			      }
+			    else
+			      {
+				  /* copying Arc vertices in normal order */
+				  if (skip)
+				      ini = 1;
+				  else
+				      ini = 0;
+				  for (iv = ini; iv < pA->Points; iv++)
+				    {
+					x = *(pA->Coords + ((iv * 2) + 0));
+					y = *(pA->Coords + ((iv * 2) + 1));
+					gaiaSetPoint (ln->Coords, tot_pts, x,
+						      y);
+					tot_pts++;
+				    }
+			      }
+			    if (pA->Name)
+			      {
+				  int len = strlen (pA->Name);
+				  pR->Name = malloc (len + 1);
+				  strcpy (pR->Name, pA->Name);
+			      }
+			    break;
+			}
+		      pA = pA->Next;
+		  }
+		pR = pR->Next;
+	    }
+      }
+}
+
+static void
+dijkstra_solve (sqlite3 * handle, NetworkPtr graph, RoutingNodesPtr routing,
+		SolutionPtr solution)
+{
+/* computing a Dijkstra Shortest Path solution */
+    int cnt;
+    NetworkArcPtr *shortest_path =
+	dijkstra_shortest_path (routing, solution->From, solution->To, &cnt);
+    build_solution (handle, graph, solution, shortest_path, cnt);
+}
+
+static void
+a_star_solve (sqlite3 * handle, NetworkPtr graph, RoutingNodesPtr routing,
+	      SolutionPtr solution)
+{
+/* computing an A* Shortest Path solution */
+    int cnt;
+    NetworkArcPtr *shortest_path =
+	a_star_shortest_path (routing, graph->Nodes, solution->From,
+			      solution->To, graph->AStarHeuristicCoeff, &cnt);
+    build_solution (handle, graph, solution, shortest_path, cnt);
+}
+
+static void
+network_free (NetworkPtr p)
+{
+/* memory cleanup; freeing any allocation for the network struct */
+    NetworkNodePtr pN;
+    int i;
+    if (!p)
+	return;
+    for (i = 0; i < p->NumNodes; i++)
+      {
+	  pN = p->Nodes + i;
+	  if (pN->Code)
+	      free (pN->Code);
+	  if (pN->Arcs)
+	      free (pN->Arcs);
+      }
+    if (p->TableName)
+	free (p->TableName);
+    if (p->FromColumn)
+	free (p->FromColumn);
+    if (p->ToColumn)
+	free (p->ToColumn);
+    if (p->GeometryColumn)
+	free (p->GeometryColumn);
+    if (p->NameColumn)
+	free (p->NameColumn);
+    free (p);
+}
+
+static NetworkPtr
+network_init (const unsigned char *blob, int size)
+{
+/* parsing the HEADER block */
+    NetworkPtr graph;
+    int net64;
+    int aStar = 0;
+    int nodes;
+    int node_code;
+    int max_code_length;
+    int endian_arch = gaiaEndianArch ();
+    const char *table;
+    const char *from;
+    const char *to;
+    const char *geom;
+    const char *name = NULL;
+    double a_star_coeff = 1.0;
+    int len;
+    const unsigned char *ptr;
+    if (size < 9)
+	return NULL;
+    if (*(blob + 0) == GAIA_NET_START)	/* signature - legacy format using 32bit ints */
+	net64 = 0;
+    else if (*(blob + 0) == GAIA_NET64_START)	/* signature - format using 64bit ints */
+	net64 = 1;
+    else if (*(blob + 0) == GAIA_NET64_A_STAR_START)	/* signature - format using 64bit ints AND supporting A* */
+      {
+	  net64 = 1;
+	  aStar = 1;
+      }
+    else
+	return NULL;
+    if (*(blob + 1) != GAIA_NET_HEADER)	/* signature */
+	return NULL;
+    nodes = gaiaImport32 (blob + 2, 1, endian_arch);	/* # nodes */
+    if (nodes <= 0)
+	return NULL;
+    if (*(blob + 6) == GAIA_NET_CODE)	/* Nodes identified by a TEXT code */
+	node_code = 1;
+    else if (*(blob + 6) == GAIA_NET_ID)	/* Nodes indentified by an INTEGER id */
+	node_code = 0;
+    else
+	return NULL;
+    max_code_length = *(blob + 7);	/* Max TEXT Code length */
+    if (*(blob + 8) != GAIA_NET_TABLE)	/* signature for TABLE NAME */
+	return NULL;
+    ptr = blob + 9;
+    len = gaiaImport16 (ptr, 1, endian_arch);	/* TABLE NAME is varlen */
+    ptr += 2;
+    table = (char *) ptr;
+    ptr += len;
+    if (*ptr != GAIA_NET_FROM)	/* signature for FromNode COLUMN */
+	return NULL;
+    ptr++;
+    len = gaiaImport16 (ptr, 1, endian_arch);	/* FromNode COLUMN is varlen */
+    ptr += 2;
+    from = (char *) ptr;
+    ptr += len;
+    if (*ptr != GAIA_NET_TO)	/* signature for ToNode COLUMN */
+	return NULL;
+    ptr++;
+    len = gaiaImport16 (ptr, 1, endian_arch);	/* ToNode COLUMN is varlen */
+    ptr += 2;
+    to = (char *) ptr;
+    ptr += len;
+    if (*ptr != GAIA_NET_GEOM)	/* signature for Geometry COLUMN */
+	return NULL;
+    ptr++;
+    len = gaiaImport16 (ptr, 1, endian_arch);	/* Geometry COLUMN is varlen */
+    ptr += 2;
+    geom = (char *) ptr;
+    ptr += len;
+    if (net64)
+      {
+	  if (*ptr != GAIA_NET_NAME)	/* signature for Name COLUMN - may be empty */
+	      return NULL;
+	  ptr++;
+	  len = gaiaImport16 (ptr, 1, endian_arch);	/* Name COLUMN is varlen */
+	  ptr += 2;
+	  name = (char *) ptr;
+	  ptr += len;
+      }
+    if (net64 && aStar)
+      {
+	  if (*ptr != GAIA_NET_A_STAR_COEFF)	/* signature for A* Heuristic Coeff */
+	      return NULL;
+	  ptr++;
+	  a_star_coeff = gaiaImport64 (ptr, 1, endian_arch);
+	  ptr += 8;
+      }
+    if (*ptr != GAIA_NET_END)	/* signature */
+	return NULL;
+    graph = malloc (sizeof (Network));
+    graph->Net64 = net64;
+    graph->AStar = aStar;
+    graph->EndianArch = endian_arch;
+    graph->CurrentIndex = 0;
+    graph->NodeCode = node_code;
+    graph->MaxCodeLength = max_code_length;
+    graph->NumNodes = nodes;
+    graph->Nodes = malloc (sizeof (NetworkNode) * nodes);
+    len = strlen (table);
+    graph->TableName = malloc (len + 1);
+    strcpy (graph->TableName, table);
+    len = strlen (from);
+    graph->FromColumn = malloc (len + 1);
+    strcpy (graph->FromColumn, from);
+    len = strlen (to);
+    graph->ToColumn = malloc (len + 1);
+    strcpy (graph->ToColumn, to);
+    len = strlen (geom);
+    graph->GeometryColumn = malloc (len + 1);
+    strcpy (graph->GeometryColumn, geom);
+    if (!net64)
+      {
+	  /* Name column is not supported */
+	  graph->NameColumn = NULL;
+      }
+    else
+      {
+	  len = strlen (name);
+	  if (len <= 1)
+	      graph->NameColumn = NULL;
+	  else
+	    {
+		graph->NameColumn = malloc (len + 1);
+		strcpy (graph->NameColumn, name);
+	    }
+      }
+    graph->AStarHeuristicCoeff = a_star_coeff;
+    return graph;
+}
+
+static int
+network_block (NetworkPtr graph, const unsigned char *blob, int size)
+{
+/* parsing a NETWORK Block */
+    const unsigned char *in = blob;
+    int nodes;
+    int i;
+    int ia;
+    int index;
+    char code[256];
+    double x;
+    double y;
+    sqlite3_int64 nodeId = -1;
+    int arcs;
+    NetworkNodePtr pN;
+    NetworkArcPtr pA;
+    int len;
+    sqlite3_int64 arcId;
+    int nodeToIdx;
+    double cost;
+    if (size < 3)
+	goto error;
+    if (*in++ != GAIA_NET_BLOCK)	/* signature */
+	goto error;
+    nodes = gaiaImport16 (in, 1, graph->EndianArch);	/* # Nodes */
+    in += 2;
+    for (i = 0; i < nodes; i++)
+      {
+	  /* parsing each node */
+	  if ((size - (in - blob)) < 5)
+	      goto error;
+	  if (*in++ != GAIA_NET_NODE)	/* signature */
+	      goto error;
+	  index = gaiaImport32 (in, 1, graph->EndianArch);	/* node internal index */
+	  in += 4;
+	  if (index < 0 || index >= graph->NumNodes)
+	      goto error;
+	  if (graph->NodeCode)
+	    {
+		/* Nodes are identified by a TEXT Code */
+		if ((size - (in - blob)) < graph->MaxCodeLength)
+		    goto error;
+		memcpy (code, in, graph->MaxCodeLength);
+		in += graph->MaxCodeLength;
+	    }
+	  else
+	    {
+		/* Nodes are identified by an INTEGER Id */
+		if (graph->Net64)
+		  {
+		      if ((size - (in - blob)) < 8)
+			  goto error;
+		      nodeId = gaiaImportI64 (in, 1, graph->EndianArch);	/* the Node ID: 64bit */
+		      in += 8;
+		  }
+		else
+		  {
+		      if ((size - (in - blob)) < 4)
+			  goto error;
+		      nodeId = gaiaImport32 (in, 1, graph->EndianArch);	/* the Node ID: 32bit */
+		      in += 4;
+		  }
+	    }
+	  if (graph->AStar)
+	    {
+		/* fetching node's X,Y coords */
+		if ((size - (in - blob)) < 8)
+		    goto error;
+		x = gaiaImport64 (in, 1, graph->EndianArch);	/* X coord */
+		in += 8;
+		if ((size - (in - blob)) < 8)
+		    goto error;
+		y = gaiaImport64 (in, 1, graph->EndianArch);	/* Y coord */
+		in += 8;
+	    }
+	  else
+	    {
+		x = DBL_MAX;
+		y = DBL_MAX;
+	    }
+	  if ((size - (in - blob)) < 2)
+	      goto error;
+	  arcs = gaiaImport16 (in, 1, graph->EndianArch);	/* # Arcs */
+	  in += 2;
+	  if (arcs < 0)
+	      goto error;
+	  /* initializing the Node */
+	  pN = graph->Nodes + index;
+	  pN->InternalIndex = index;
+	  if (graph->NodeCode)
+	    {
+		/* Nodes are identified by a TEXT Code */
+		pN->Id = -1;
+		len = strlen (code);
+		pN->Code = malloc (len + 1);
+		strcpy (pN->Code, code);
+	    }
+	  else
+	    {
+		/* Nodes are identified by an INTEGER Id */
+		pN->Id = nodeId;
+		pN->Code = NULL;
+	    }
+	  pN->CoordX = x;
+	  pN->CoordY = y;
+	  pN->NumArcs = arcs;
+	  if (arcs)
+	    {
+		/* parsing the Arcs */
+		pN->Arcs = malloc (sizeof (NetworkArc) * arcs);
+		for (ia = 0; ia < arcs; ia++)
+		  {
+		      /* parsing each Arc */
+		      if (graph->Net64)
+			{
+			    if ((size - (in - blob)) < 22)
+				goto error;
+			}
+		      else
+			{
+			    if ((size - (in - blob)) < 18)
+				goto error;
+			}
+		      if (*in++ != GAIA_NET_ARC)	/* signature */
+			  goto error;
+		      if (graph->Net64)
+			{
+			    arcId = gaiaImportI64 (in, 1, graph->EndianArch);	/* # Arc ROWID: 64bit */
+			    in += 8;
+			}
+		      else
+			{
+			    arcId = gaiaImport32 (in, 1, graph->EndianArch);	/* # Arc ROWID: 32bit */
+			    in += 4;
+			}
+		      nodeToIdx = gaiaImport32 (in, 1, graph->EndianArch);	/* # NodeTo internal index */
+		      in += 4;
+		      cost = gaiaImport64 (in, 1, graph->EndianArch);	/* # Cost */
+		      in += 8;
+		      if (*in++ != GAIA_NET_END)	/* signature */
+			  goto error;
+		      pA = pN->Arcs + ia;
+		      /* initializing the Arc */
+		      if (nodeToIdx < 0 || nodeToIdx >= graph->NumNodes)
+			  goto error;
+		      pA->NodeFrom = pN;
+		      pA->NodeTo = graph->Nodes + nodeToIdx;
+		      pA->ArcRowid = arcId;
+		      pA->Cost = cost;
+		  }
+	    }
+	  else
+	      pN->Arcs = NULL;
+	  if ((size - (in - blob)) < 1)
+	      goto error;
+	  if (*in++ != GAIA_NET_END)	/* signature */
+	      goto error;
+      }
+    return 1;
+  error:
+    return 0;
+}
+
+static NetworkPtr
+load_network (sqlite3 * handle, const char *table)
+{
+/* loads the NETWORK struct */
+    NetworkPtr graph = NULL;
+    sqlite3_stmt *stmt;
+    char sql[1024];
+    int ret;
+    int header = 1;
+    const unsigned char *blob;
+    int size;
+    char xname[1024];
+    strcpy (xname, table);
+    vnet_double_quoted_sql (xname);
+    sprintf (sql, "SELECT NetworkData FROM %s ORDER BY Id", xname);
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto abort;
+    while (1)
+      {
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		if (sqlite3_column_type (stmt, 0) == SQLITE_BLOB)
+		  {
+		      blob =
+			  (const unsigned char *) sqlite3_column_blob (stmt, 0);
+		      size = sqlite3_column_bytes (stmt, 0);
+		      if (header)
+			{
+			    /* parsing the HEADER block */
+			    graph = network_init (blob, size);
+			    header = 0;
+			}
+		      else
+			{
+			    /* parsing ordinary Blocks */
+			    if (!graph)
+			      {
+				  sqlite3_finalize (stmt);
+				  goto abort;
+			      }
+			    if (!network_block (graph, blob, size))
+			      {
+				  sqlite3_finalize (stmt);
+				  goto abort;
+			      }
+			}
+		  }
+		else
+		  {
+		      sqlite3_finalize (stmt);
+		      goto abort;
+		  }
+	    }
+	  else
+	    {
+		sqlite3_finalize (stmt);
+		goto abort;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    return graph;
+  abort:
+    network_free (graph);
+    return NULL;
+}
+
+static int
+vnet_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	     sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table connected to some shapefile */
+    VirtualNetworkPtr p_vt;
+    char buf[1024];
+    int err;
+    int ret;
+    int i;
+    int n_rows;
+    int n_columns;
+    char vtable[1024];
+    char table[1024];
+    const char *col_name = NULL;
+    char **results;
+    char *err_msg = NULL;
+    char sql[4096];
+    int ok_id;
+    int ok_data;
+    char xname[1024];
+    NetworkPtr graph = NULL;
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+/* checking for table_name and geo_column_name */
+    if (argc == 4)
+      {
+	  strcpy (vtable, argv[2]);
+	  vnet_dequote (vtable);
+	  strcpy (table, argv[3]);
+	  vnet_dequote (table);
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualNetwork module] CREATE VIRTUAL: illegal arg list {NETWORK-DATAtable}\n");
+	  return SQLITE_ERROR;
+      }
+/* retrieving the base table columns */
+    err = 0;
+    ok_id = 0;
+    ok_data = 0;
+    strcpy (xname, table);
+    vnet_double_quoted_sql (xname);
+    sprintf (sql, "PRAGMA table_info(%s)", xname);
+    ret = sqlite3_get_table (db, sql, &results, &n_rows, &n_columns, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  err = 1;
+	  goto illegal;
+      }
+    if (n_rows > 1)
+      {
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		col_name = results[(i * n_columns) + 1];
+		if (strcasecmp (col_name, "id") == 0)
+		    ok_id = 1;
+		if (strcasecmp (col_name, "networkdata") == 0)
+		    ok_data = 1;
+	    }
+	  sqlite3_free_table (results);
+	  if (!ok_id)
+	      err = 1;
+	  if (!ok_data)
+	      err = 1;
+      }
+    else
+	err = 1;
+  illegal:
+    if (err)
+      {
+	  /* something is going the wrong way */
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualNetwork module] cannot build a valid NETWORK\n");
+	  return SQLITE_ERROR;
+      }
+    p_vt = (VirtualNetworkPtr) sqlite3_malloc (sizeof (VirtualNetwork));
+    if (!p_vt)
+	return SQLITE_NOMEM;
+    graph = load_network (db, table);
+    if (!graph)
+      {
+	  /* something is going the wrong way */
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualNetwork module] cannot build a valid NETWORK\n");
+	  return SQLITE_ERROR;
+      }
+    p_vt->db = db;
+    p_vt->graph = graph;
+    p_vt->currentAlgorithm = VNET_DIJKSTRA_ALGORITHM;
+    p_vt->routing = NULL;
+    p_vt->pModule = &my_net_module;
+    p_vt->nRef = 0;
+    p_vt->zErrMsg = NULL;
+/* preparing the COLUMNs for this VIRTUAL TABLE */
+    strcpy (buf, "CREATE TABLE ");
+    strcpy (xname, vtable);
+    vnet_double_quoted_sql (xname);
+    strcat (buf, xname);
+    strcat (buf, " (Algorithm TEXT, ArcRowid INTEGER, ");
+    if (p_vt->graph->NodeCode)
+	strcat (buf, "NodeFrom TEXT, NodeTo TEXT,");
+    else
+	strcat (buf, "NodeFrom INTEGER, NodeTo INTEGER,");
+    strcat (buf, " Cost DOUBLE, Geometry BLOB");
+    if (p_vt->graph->NameColumn)
+	strcat (buf, ", Name TEXT)");
+    else
+	strcat (buf, ")");
+    if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualNetwork module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       buf);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    p_vt->routing = routing_init (p_vt->graph);
+    return SQLITE_OK;
+}
+
+static int
+vnet_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	      sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table to some shapefile - simply aliases vshp_create() */
+    return vnet_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+vnet_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIdxInfo)
+{
+/* best index selection */
+    int i;
+    int errors = 0;
+    int err = 1;
+    int from = 0;
+    int to = 0;
+    int i_from = -1;
+    int i_to = -1;
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    for (i = 0; i < pIdxInfo->nConstraint; i++)
+      {
+	  /* verifying the constraints */
+	  struct sqlite3_index_constraint *p = &(pIdxInfo->aConstraint[i]);
+	  if (p->usable)
+	    {
+		if (p->iColumn == 2 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
+		  {
+		      from++;
+		      i_from = i;
+		  }
+		else if (p->iColumn == 3 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
+		  {
+		      to++;
+		      i_to = i;
+		  }
+		else
+		    errors++;
+	    }
+      }
+    if (from == 1 && to == 1 && errors == 0)
+      {
+	  /* this one is a valid Shortest Path query */
+	  if (i_from < i_to)
+	      pIdxInfo->idxNum = 1;	/* first arg is FROM */
+	  else
+	      pIdxInfo->idxNum = 2;	/* first arg is TO */
+	  pIdxInfo->estimatedCost = 1.0;
+	  for (i = 0; i < pIdxInfo->nConstraint; i++)
+	    {
+		if (pIdxInfo->aConstraint[i].usable)
+		  {
+		      pIdxInfo->aConstraintUsage[i].argvIndex = i + 1;
+		      pIdxInfo->aConstraintUsage[i].omit = 1;
+		  }
+	    }
+	  err = 0;
+      }
+    if (err)
+      {
+	  /* illegal query */
+	  pIdxInfo->idxNum = 0;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vnet_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    VirtualNetworkPtr p_vt = (VirtualNetworkPtr) pVTab;
+    if (p_vt->routing)
+	routing_free (p_vt->routing);
+    if (p_vt->graph)
+	network_free (p_vt->graph);
+    sqlite3_free (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+vnet_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases vshp_disconnect() */
+    return vnet_disconnect (pVTab);
+}
+
+static void
+vnet_read_row (VirtualNetworkCursorPtr cursor)
+{
+/* trying to read a "row" from Shortest Path solution */
+    if (cursor->solution->CurrentRow == NULL)
+	cursor->eof = 1;
+    else
+	cursor->eof = 0;
+    return;
+}
+
+static int
+vnet_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    VirtualNetworkCursorPtr cursor =
+	(VirtualNetworkCursorPtr)
+	sqlite3_malloc (sizeof (VirtualNetworkCursor));
+    if (cursor == NULL)
+	return SQLITE_ERROR;
+    cursor->pVtab = (VirtualNetworkPtr) pVTab;
+    cursor->solution = alloc_solution ();
+    cursor->eof = 0;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    return SQLITE_OK;
+}
+
+static int
+vnet_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    VirtualNetworkCursorPtr cursor = (VirtualNetworkCursorPtr) pCursor;
+    delete_solution (cursor->solution);
+    sqlite3_free (pCursor);
+    return SQLITE_OK;
+}
+
+static int
+vnet_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	     int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    int node_code = 0;
+    VirtualNetworkCursorPtr cursor = (VirtualNetworkCursorPtr) pCursor;
+    VirtualNetworkPtr net = (VirtualNetworkPtr) cursor->pVtab;
+    if (idxStr)
+	idxStr = idxStr;	/* unused arg warning suppression */
+    node_code = net->graph->NodeCode;
+    reset_solution (cursor->solution);
+    cursor->eof = 1;
+    if (idxNum == 1 && argc == 2)
+      {
+	  /* retrieving the Shortest Path From/To params */
+	  if (node_code)
+	    {
+		/* Nodes are identified by TEXT Codes */
+		if (sqlite3_value_type (argv[0]) == SQLITE_TEXT)
+		    cursor->solution->From =
+			find_node_by_code (net->graph,
+					   (char *)
+					   sqlite3_value_text (argv[0]));
+		if (sqlite3_value_type (argv[1]) == SQLITE_TEXT)
+		    cursor->solution->To =
+			find_node_by_code (net->graph,
+					   (char *)
+					   sqlite3_value_text (argv[1]));
+	    }
+	  else
+	    {
+		/* Nodes are identified by INT Ids */
+		if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+		    cursor->solution->From =
+			find_node_by_id (net->graph,
+					 sqlite3_value_int (argv[0]));
+		if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+		    cursor->solution->To =
+			find_node_by_id (net->graph,
+					 sqlite3_value_int (argv[1]));
+	    }
+      }
+    if (idxNum == 2 && argc == 2)
+      {
+	  /* retrieving the Shortest Path To/From params */
+	  if (node_code)
+	    {
+		/* Nodes are identified by TEXT Codes */
+		if (sqlite3_value_type (argv[0]) == SQLITE_TEXT)
+		    cursor->solution->To =
+			find_node_by_code (net->graph,
+					   (char *)
+					   sqlite3_value_text (argv[0]));
+		if (sqlite3_value_type (argv[1]) == SQLITE_TEXT)
+		    cursor->solution->From =
+			find_node_by_code (net->graph,
+					   (char *)
+					   sqlite3_value_text (argv[1]));
+	    }
+	  else
+	    {
+		/* Nodes are identified by INT Ids */
+		if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
+		    cursor->solution->To =
+			find_node_by_id (net->graph,
+					 sqlite3_value_int (argv[0]));
+		if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+		    cursor->solution->From =
+			find_node_by_id (net->graph,
+					 sqlite3_value_int (argv[1]));
+	    }
+      }
+    if (cursor->solution->From && cursor->solution->To)
+      {
+	  cursor->eof = 0;
+	  if (net->currentAlgorithm == VNET_A_STAR_ALGORITHM)
+	      a_star_solve (net->db, net->graph, net->routing,
+			    cursor->solution);
+	  else
+	      dijkstra_solve (net->db, net->graph, net->routing,
+			      cursor->solution);
+	  return SQLITE_OK;
+      }
+    cursor->eof = 0;
+    return SQLITE_OK;
+}
+
+static int
+vnet_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching a next row from cursor */
+    VirtualNetworkCursorPtr cursor = (VirtualNetworkCursorPtr) pCursor;
+    if (cursor->solution->CurrentRowId == 0)
+	cursor->solution->CurrentRow = cursor->solution->First;
+    else
+	cursor->solution->CurrentRow = cursor->solution->CurrentRow->Next;
+    if (!(cursor->solution->CurrentRow))
+      {
+	  cursor->eof = 1;
+	  return SQLITE_OK;
+      }
+    (cursor->solution->CurrentRowId)++;
+    vnet_read_row (cursor);
+    return SQLITE_OK;
+}
+
+static int
+vnet_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    VirtualNetworkCursorPtr cursor = (VirtualNetworkCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+vnet_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	     int column)
+{
+/* fetching value for the Nth column */
+    RowSolutionPtr row;
+    int node_code = 0;
+    const char *algorithm;
+    VirtualNetworkCursorPtr cursor = (VirtualNetworkCursorPtr) pCursor;
+    VirtualNetworkPtr net = (VirtualNetworkPtr) cursor->pVtab;
+    node_code = net->graph->NodeCode;
+    if (cursor->solution->CurrentRow == 0)
+      {
+	  /* special case: this one is the solution summary */
+	  if (column == 0)
+	    {
+		/* the currently used Algorithm */
+		if (net->currentAlgorithm == VNET_A_STAR_ALGORITHM)
+		    algorithm = "A*";
+		else
+		    algorithm = "Dijkstra";
+		sqlite3_result_text (pContext, algorithm, strlen (algorithm),
+				     SQLITE_STATIC);
+	    }
+	  if (cursor->solution->From == NULL || cursor->solution->To == NULL)
+	    {
+		/* empty [uninitialized] solution */
+		if (column > 0)
+		    sqlite3_result_null (pContext);
+		return SQLITE_OK;
+	    }
+	  if (column == 1)
+	    {
+		/* the ArcRowId column */
+		sqlite3_result_null (pContext);
+	    }
+	  if (column == 2)
+	    {
+		/* the NodeFrom column */
+		if (node_code)
+		    sqlite3_result_text (pContext, cursor->solution->From->Code,
+					 strlen (cursor->solution->From->Code),
+					 SQLITE_STATIC);
+		else
+		    sqlite3_result_int64 (pContext, cursor->solution->From->Id);
+	    }
+	  if (column == 3)
+	    {
+		/* the NodeTo column */
+		if (node_code)
+		    sqlite3_result_text (pContext, cursor->solution->To->Code,
+					 strlen (cursor->solution->To->Code),
+					 SQLITE_STATIC);
+		else
+		    sqlite3_result_int64 (pContext, cursor->solution->To->Id);
+	    }
+	  if (column == 4)
+	    {
+		/* the Cost column */
+		sqlite3_result_double (pContext, cursor->solution->TotalCost);
+	    }
+	  if (column == 5)
+	    {
+		/* the Geometry column */
+		if (!(cursor->solution->Geometry))
+		    sqlite3_result_null (pContext);
+		else
+		  {
+		      /* builds the BLOB geometry to be returned */
+		      int len;
+		      unsigned char *p_result = NULL;
+		      gaiaToSpatiaLiteBlobWkb (cursor->solution->Geometry,
+					       &p_result, &len);
+		      sqlite3_result_blob (pContext, p_result, len, free);
+		  }
+	    }
+	  if (column == 6)
+	    {
+		/* the [optional] Name column */
+		sqlite3_result_null (pContext);
+	    }
+      }
+    else
+      {
+	  /* ordinary case: this one is an Arc used by the solution */
+	  row = cursor->solution->CurrentRow;
+	  if (column == 0)
+	    {
+		/* the currently used Algorithm */
+		if (net->currentAlgorithm == VNET_A_STAR_ALGORITHM)
+		    algorithm = "A*";
+		else
+		    algorithm = "Dijkstra";
+		sqlite3_result_text (pContext, algorithm, strlen (algorithm),
+				     SQLITE_STATIC);
+	    }
+	  if (column == 1)
+	    {
+		/* the ArcRowId column */
+		sqlite3_result_int64 (pContext, row->Arc->ArcRowid);
+	    }
+	  if (column == 2)
+	    {
+		/* the NodeFrom column */
+		if (node_code)
+		    sqlite3_result_text (pContext, row->Arc->NodeFrom->Code,
+					 strlen (row->Arc->NodeFrom->Code),
+					 SQLITE_STATIC);
+		else
+		    sqlite3_result_int64 (pContext, row->Arc->NodeFrom->Id);
+	    }
+	  if (column == 3)
+	    {
+		/* the NodeTo column */
+		if (node_code)
+		    sqlite3_result_text (pContext, row->Arc->NodeTo->Code,
+					 strlen (row->Arc->NodeTo->Code),
+					 SQLITE_STATIC);
+		else
+		    sqlite3_result_int64 (pContext, row->Arc->NodeTo->Id);
+	    }
+	  if (column == 4)
+	    {
+		/* the Cost column */
+		sqlite3_result_double (pContext, row->Arc->Cost);
+	    }
+	  if (column == 5)
+	    {
+		/* the Geometry column */
+		sqlite3_result_null (pContext);
+	    }
+	  if (column == 6)
+	    {
+		/* the [optional] Name column */
+		if (row->Name)
+		    sqlite3_result_text (pContext, row->Name,
+					 strlen (row->Name), SQLITE_STATIC);
+		else
+		    sqlite3_result_null (pContext);
+	    }
+      }
+    return SQLITE_OK;
+}
+
+static int
+vnet_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    VirtualNetworkCursorPtr cursor = (VirtualNetworkCursorPtr) pCursor;
+    *pRowid = cursor->solution->CurrentRowId;
+    return SQLITE_OK;
+}
+
+static int
+vnet_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	     sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    VirtualNetworkPtr p_vtab = (VirtualNetworkPtr) pVTab;
+    if (pRowid)
+	pRowid = pRowid;	/* unused arg warning suppression */
+    if (argc == 1)
+      {
+	  /* performing a DELETE is forbidden */
+	  return SQLITE_READONLY;
+      }
+    else
+      {
+	  if (sqlite3_value_type (argv[0]) == SQLITE_NULL)
+	    {
+		/* performing an INSERT is forbidden */
+		return SQLITE_READONLY;
+	    }
+	  else
+	    {
+		/* performing an UPDATE */
+		if (argc == 9)
+		  {
+		      p_vtab->currentAlgorithm = VNET_DIJKSTRA_ALGORITHM;
+		      if (sqlite3_value_type (argv[2]) == SQLITE_TEXT)
+			{
+			    const unsigned char *algorithm =
+				sqlite3_value_text (argv[2]);
+			    if (strcmp ((char *) algorithm, "A*") == 0)
+				p_vtab->currentAlgorithm =
+				    VNET_A_STAR_ALGORITHM;
+			    if (strcmp ((char *) algorithm, "a*") == 0)
+				p_vtab->currentAlgorithm =
+				    VNET_A_STAR_ALGORITHM;
+			}
+		      if (p_vtab->graph->AStar == 0)
+			  p_vtab->currentAlgorithm = VNET_DIJKSTRA_ALGORITHM;
+		  }
+		return SQLITE_OK;
+	    }
+      }
+    return SQLITE_READONLY;
+}
+
+static int
+vnet_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vnet_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vnet_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vnet_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3VirtualNetworkInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    my_net_module.iVersion = 1;
+    my_net_module.xCreate = &vnet_create;
+    my_net_module.xConnect = &vnet_connect;
+    my_net_module.xBestIndex = &vnet_best_index;
+    my_net_module.xDisconnect = &vnet_disconnect;
+    my_net_module.xDestroy = &vnet_destroy;
+    my_net_module.xOpen = &vnet_open;
+    my_net_module.xClose = &vnet_close;
+    my_net_module.xFilter = &vnet_filter;
+    my_net_module.xNext = &vnet_next;
+    my_net_module.xEof = &vnet_eof;
+    my_net_module.xColumn = &vnet_column;
+    my_net_module.xRowid = &vnet_rowid;
+    my_net_module.xUpdate = &vnet_update;
+    my_net_module.xBegin = &vnet_begin;
+    my_net_module.xSync = &vnet_sync;
+    my_net_module.xCommit = &vnet_commit;
+    my_net_module.xRollback = &vnet_rollback;
+    my_net_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "VirtualNetwork", &my_net_module, NULL, 0);
+    return rc;
+}
+
+int
+virtualnetwork_extension_init (sqlite3 * db)
+{
+    return sqlite3VirtualNetworkInit (db);
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/virtualshape.c b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualshape.c
new file mode 100644
index 0000000..58d5a4e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualshape.c
@@ -0,0 +1,947 @@
+/*
+
+ virtualshape.c -- SQLite3 extension [VIRTUAL TABLE accessing Shapefile]
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+#ifndef OMIT_ICONV		/* if ICONV is disabled no SHP support is available */
+
+static struct sqlite3_module my_shape_module;
+
+typedef struct VirtualShapeStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USE INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+    gaiaShapefilePtr Shp;	/* the Shapefile struct */
+    int Srid;			/* the Shapefile SRID */
+} VirtualShape;
+typedef VirtualShape *VirtualShapePtr;
+
+typedef struct VirtualShapeConstraintStruct
+{
+/* a constraint to be verified for xFilter */
+    int iColumn;		/* Column on left-hand side of constraint */
+    int op;			/* Constraint operator */
+    char valueType;		/* value Type ('I'=int,'D'=double,'T'=text) */
+    sqlite3_int64 intValue;	/* Int64 comparison value */
+    double dblValue;		/* Double comparison value */
+    char *txtValue;		/* Text comparison value */
+    struct VirtualShapeConstraintStruct *next;
+} VirtualShapeConstraint;
+typedef VirtualShapeConstraint *VirtualShapeConstraintPtr;
+
+
+typedef struct VirtualShapeCursorStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    VirtualShapePtr pVtab;	/* Virtual table of this cursor */
+    long current_row;		/* the current row ID */
+    int blobSize;
+    unsigned char *blobGeometry;
+    int eof;			/* the EOF marker */
+    VirtualShapeConstraintPtr firstConstraint;
+    VirtualShapeConstraintPtr lastConstraint;
+} VirtualShapeCursor;
+typedef VirtualShapeCursor *VirtualShapeCursorPtr;
+
+static void
+vshp_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+static int
+vshp_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	     sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table connected to some shapefile */
+    char buf[4096];
+    char field[128];
+    VirtualShapePtr p_vt;
+    char path[2048];
+    char encoding[128];
+    const char *pEncoding = NULL;
+    int len;
+    const char *pPath = NULL;
+    int srid;
+    gaiaDbfFieldPtr pFld;
+    int cnt;
+    int col_cnt;
+    int seed;
+    int dup;
+    int idup;
+    char dummyName[4096];
+    char **col_name = NULL;
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+/* checking for shapefile PATH */
+    if (argc == 6)
+      {
+	  pPath = argv[3];
+	  len = strlen (pPath);
+	  if ((*(pPath + 0) == '\'' || *(pPath + 0) == '"')
+	      && (*(pPath + len - 1) == '\'' || *(pPath + len - 1) == '"'))
+	    {
+		/* the path is enclosed between quotes - we need to dequote it */
+		strcpy (path, pPath + 1);
+		len = strlen (path);
+		*(path + len - 1) = '\0';
+	    }
+	  else
+	      strcpy (path, pPath);
+	  pEncoding = argv[4];
+	  len = strlen (pEncoding);
+	  if ((*(pEncoding + 0) == '\'' || *(pEncoding + 0) == '"')
+	      && (*(pEncoding + len - 1) == '\''
+		  || *(pEncoding + len - 1) == '"'))
+	    {
+		/* the charset-name is enclosed between quotes - we need to dequote it */
+		strcpy (encoding, pEncoding + 1);
+		len = strlen (encoding);
+		*(encoding + len - 1) = '\0';
+	    }
+	  else
+	      strcpy (encoding, pEncoding);
+	  srid = atoi (argv[5]);
+	  if (srid <= 0)
+	      srid = -1;
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualShape module] CREATE VIRTUAL: illegal arg list {shp_path, encoding, srid}");
+	  return SQLITE_ERROR;
+      }
+    p_vt = (VirtualShapePtr) sqlite3_malloc (sizeof (VirtualShape));
+    if (!p_vt)
+	return SQLITE_NOMEM;
+    p_vt->pModule = &my_shape_module;
+    p_vt->nRef = 0;
+    p_vt->zErrMsg = NULL;
+    p_vt->db = db;
+    p_vt->Shp = gaiaAllocShapefile ();
+    p_vt->Srid = srid;
+/* trying to open files etc in order to ensure we actually have a genuine shapefile */
+    gaiaOpenShpRead (p_vt->Shp, path, encoding, "UTF-8");
+    if (!(p_vt->Shp->Valid))
+      {
+	  /* something is going the wrong way; creating a stupid default table */
+	  strcpy (dummyName, argv[2]);
+	  vshp_double_quoted_sql (dummyName);
+	  sprintf (buf, "CREATE TABLE %s (PKUID INTEGER, Geometry BLOB)",
+		   dummyName);
+	  if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+	    {
+		*pzErr =
+		    sqlite3_mprintf
+		    ("[VirtualShape module] cannot build a table from Shapefile\n");
+		return SQLITE_ERROR;
+	    }
+	  *ppVTab = (sqlite3_vtab *) p_vt;
+	  return SQLITE_OK;
+      }
+    if (p_vt->Shp->Shape == 3 || p_vt->Shp->Shape == 13 ||
+	p_vt->Shp->Shape == 23 || p_vt->Shp->Shape == 5 ||
+	p_vt->Shp->Shape == 15 || p_vt->Shp->Shape == 25)
+      {
+	  /* fixing anyway the Geometry type for LINESTRING/MULTILINESTRING or POLYGON/MULTIPOLYGON */
+	  gaiaShpAnalyze (p_vt->Shp);
+      }
+/* preparing the COLUMNs for this VIRTUAL TABLE */
+    strcpy (buf, "CREATE TABLE ");
+    strcpy (dummyName, argv[2]);
+    vshp_double_quoted_sql (dummyName);
+    strcat (buf, dummyName);
+    strcat (buf, " (PKUID INTEGER, Geometry BLOB");
+/* checking for duplicate / illegal column names and antialising them */
+    col_cnt = 0;
+    pFld = p_vt->Shp->Dbf->First;
+    while (pFld)
+      {
+	  /* counting DBF fields */
+	  col_cnt++;
+	  pFld = pFld->Next;
+      }
+    col_name = malloc (sizeof (char *) * col_cnt);
+    cnt = 0;
+    seed = 0;
+    pFld = p_vt->Shp->Dbf->First;
+    while (pFld)
+      {
+	  sprintf (dummyName, "%s", pFld->Name);
+	  vshp_double_quoted_sql (dummyName);
+	  dup = 0;
+	  for (idup = 0; idup < cnt; idup++)
+	    {
+		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
+		    dup = 1;
+	    }
+	  if (strcasecmp (dummyName, "PKUID") == 0)
+	      dup = 1;
+	  if (strcasecmp (dummyName, "Geometry") == 0)
+	      dup = 1;
+	  if (dup)
+	    {
+		sprintf (dummyName, "COL_%d", seed++);
+		vshp_double_quoted_sql (dummyName);
+	    }
+	  if (pFld->Type == 'N')
+	    {
+		if (pFld->Decimals > 0 || pFld->Length > 18)
+		    sprintf (field, "%s DOUBLE", dummyName);
+		else
+		    sprintf (field, "%s INTEGER", dummyName);
+	    }
+	  else if (pFld->Type == 'F')
+	      sprintf (field, "%s DOUBLE", dummyName);
+	  else
+	      sprintf (field, "%s VARCHAR(%d)", dummyName, pFld->Length);
+	  strcat (buf, ", ");
+	  strcat (buf, field);
+	  len = strlen (dummyName);
+	  *(col_name + cnt) = malloc (len + 1);
+	  strcpy (*(col_name + cnt), dummyName);
+	  cnt++;
+	  pFld = pFld->Next;
+      }
+    strcat (buf, ")");
+    if (col_name)
+      {
+	  /* releasing memory allocation for column names */
+	  for (cnt = 0; cnt < col_cnt; cnt++)
+	      free (*(col_name + cnt));
+	  free (col_name);
+      }
+    if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualShape module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       buf);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    return SQLITE_OK;
+}
+
+static int
+vshp_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	      sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table to some shapefile - simply aliases vshp_create() */
+    return vshp_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+vshp_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIndex)
+{
+/* best index selection */
+    int i;
+    int iArg = 0;
+    char str[2048];
+    char buf[64];
+
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+
+    *str = '\0';
+    for (i = 0; i < pIndex->nConstraint; i++)
+      {
+	  if (pIndex->aConstraint[i].usable)
+	    {
+		iArg++;
+		pIndex->aConstraintUsage[i].argvIndex = iArg;
+		pIndex->aConstraintUsage[i].omit = 1;
+		sprintf (buf, "%d:%d,", pIndex->aConstraint[i].iColumn,
+			 pIndex->aConstraint[i].op);
+		strcat (str, buf);
+	    }
+      }
+    if (*str != '\0')
+      {
+	  pIndex->idxStr = sqlite3_mprintf ("%s", str);
+	  pIndex->needToFreeIdxStr = 1;
+      }
+
+    return SQLITE_OK;
+}
+
+static int
+vshp_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    VirtualShapePtr p_vt = (VirtualShapePtr) pVTab;
+    if (p_vt->Shp)
+	gaiaFreeShapefile (p_vt->Shp);
+    sqlite3_free (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+vshp_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases vshp_disconnect() */
+    return vshp_disconnect (pVTab);
+}
+
+static void
+vshp_read_row (VirtualShapeCursorPtr cursor)
+{
+/* trying to read a "row" from shapefile */
+    int ret;
+    gaiaGeomCollPtr geom;
+    if (!(cursor->pVtab->Shp->Valid))
+      {
+	  cursor->eof = 1;
+	  return;
+      }
+    if (cursor->blobGeometry)
+      {
+	  free (cursor->blobGeometry);
+	  cursor->blobGeometry = NULL;
+      }
+    ret =
+	gaiaReadShpEntity (cursor->pVtab->Shp, cursor->current_row,
+			   cursor->pVtab->Srid);
+    if (!ret)
+      {
+	  if (!(cursor->pVtab->Shp->LastError))	/* normal SHP EOF */
+	    {
+		cursor->eof = 1;
+		return;
+	    }
+	  /* an error occurred */
+	  fprintf (stderr, "%s\n", cursor->pVtab->Shp->LastError);
+	  cursor->eof = 1;
+	  return;
+      }
+    cursor->current_row++;
+    geom = cursor->pVtab->Shp->Dbf->Geometry;
+    if (geom)
+      {
+	  /* preparing the BLOB representing Geometry */
+	  gaiaToSpatiaLiteBlobWkb (geom, &(cursor->blobGeometry),
+				   &(cursor->blobSize));
+      }
+}
+
+static int
+vshp_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    VirtualShapeCursorPtr cursor =
+	(VirtualShapeCursorPtr) sqlite3_malloc (sizeof (VirtualShapeCursor));
+    if (cursor == NULL)
+	return SQLITE_ERROR;
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+    cursor->pVtab = (VirtualShapePtr) pVTab;
+    cursor->current_row = 0;
+    cursor->blobGeometry = NULL;
+    cursor->blobSize = 0;
+    cursor->eof = 0;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    vshp_read_row (cursor);
+    return SQLITE_OK;
+}
+
+static void
+vshp_free_constraints (VirtualShapeCursorPtr cursor)
+{
+/* memory cleanup - cursor constraints */
+    VirtualShapeConstraintPtr pC;
+    VirtualShapeConstraintPtr pCn;
+    pC = cursor->firstConstraint;
+    while (pC)
+      {
+	  pCn = pC->next;
+	  if (pC->txtValue)
+	      sqlite3_free (pC->txtValue);
+	  sqlite3_free (pC);
+	  pC = pCn;
+      }
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+}
+
+static int
+vshp_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    VirtualShapeCursorPtr cursor = (VirtualShapeCursorPtr) pCursor;
+    if (cursor->blobGeometry)
+	free (cursor->blobGeometry);
+    vshp_free_constraints (cursor);
+    sqlite3_free (pCursor);
+    return SQLITE_OK;
+}
+
+static int
+vshp_parse_constraint (const char *str, int index, int *iColumn, int *op)
+{
+/* parsing a constraint string */
+    char buf[64];
+    const char *in = str;
+    char *out = buf;
+    int i = 0;
+    int found = 0;
+
+    *out = '\0';
+    while (*in != '\0')
+      {
+	  if (*in == ',')
+	    {
+		if (index == i)
+		  {
+		      *out = '\0';
+		      found = 1;
+		      break;
+		  }
+		i++;
+		in++;
+		continue;
+	    }
+	  if (index == i)
+	      *out++ = *in;
+	  in++;
+      }
+    if (!found)
+	return 0;
+    in = buf;
+    for (i = 0; i < (int) strlen (buf); i++)
+      {
+	  if (buf[i] == ':')
+	    {
+		buf[i] = '\0';
+		*iColumn = atoi (buf);
+		*op = atoi (buf + i + 1);
+		return 1;
+	    }
+	  in++;
+      }
+    return 0;
+}
+
+static int
+vshp_eval_constraints (VirtualShapeCursorPtr cursor)
+{
+/* evaluating Filter constraints */
+    int nCol;
+    gaiaDbfFieldPtr pFld;
+    VirtualShapeConstraintPtr pC = cursor->firstConstraint;
+    if (pC == NULL)
+	return 1;
+    while (pC)
+      {
+	  int ok = 0;
+	  if (pC->iColumn == 0)
+	    {
+		/* the PRIMARY KEY column */
+		if (pC->valueType == 'I')
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (cursor->current_row == pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (cursor->current_row > pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (cursor->current_row <= pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (cursor->current_row < pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (cursor->current_row >= pC->intValue)
+				ok = 1;
+			    break;
+			};
+		  }
+		goto done;
+	    }
+	  nCol = 2;
+	  pFld = cursor->pVtab->Shp->Dbf->First;
+	  while (pFld)
+	    {
+		if (nCol == pC->iColumn)
+		  {
+		      if ((pFld->Value))
+			{
+			    switch (pFld->Value->Type)
+			      {
+			      case GAIA_INT_VALUE:
+				  if (pC->valueType == 'I')
+				    {
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (pFld->Value->IntValue ==
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (pFld->Value->IntValue >
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (pFld->Value->IntValue <=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (pFld->Value->IntValue <
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (pFld->Value->IntValue >=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  };
+				    }
+				  break;
+			      case GAIA_DOUBLE_VALUE:
+				  if (pC->valueType == 'I')
+				    {
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (pFld->Value->DblValue ==
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (pFld->Value->DblValue >
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (pFld->Value->DblValue <=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (pFld->Value->DblValue <
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (pFld->Value->DblValue >=
+						  pC->intValue)
+						  ok = 1;
+					      break;
+					  };
+				    }
+				  if (pC->valueType == 'D')
+				    {
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (pFld->Value->DblValue ==
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (pFld->Value->DblValue >
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (pFld->Value->DblValue <=
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (pFld->Value->DblValue <
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (pFld->Value->DblValue >=
+						  pC->dblValue)
+						  ok = 1;
+					      break;
+					  }
+				    }
+				  break;
+			      case GAIA_TEXT_VALUE:
+				  if (pC->valueType == 'T' && pC->txtValue)
+				    {
+					int ret;
+					ret =
+					    strcmp (pFld->Value->TxtValue,
+						    pC->txtValue);
+					switch (pC->op)
+					  {
+					  case SQLITE_INDEX_CONSTRAINT_EQ:
+					      if (ret == 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GT:
+					      if (ret > 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LE:
+					      if (ret <= 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_LT:
+					      if (ret < 0)
+						  ok = 1;
+					      break;
+					  case SQLITE_INDEX_CONSTRAINT_GE:
+					      if (ret >= 0)
+						  ok = 1;
+					      break;
+					  };
+				    }
+				  break;
+			      };
+			}
+		      goto done;
+		  }
+		nCol++;
+		pFld = pFld->Next;
+	    }
+	done:
+	  if (!ok)
+	      return 0;
+	  pC = pC->next;
+      }
+    return 1;
+}
+
+static int
+vshp_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	     int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    int i;
+    int iColumn;
+    int op;
+    int len;
+    VirtualShapeConstraintPtr pC;
+    VirtualShapeCursorPtr cursor = (VirtualShapeCursorPtr) pCursor;
+    if (idxNum)
+	idxNum = idxNum;	/* unused arg warning suppression */
+
+/* resetting any previously set filter constraint */
+    vshp_free_constraints (cursor);
+
+    for (i = 0; i < argc; i++)
+      {
+	  if (!vshp_parse_constraint (idxStr, i, &iColumn, &op))
+	      continue;
+	  pC = sqlite3_malloc (sizeof (VirtualShapeConstraint));
+	  if (!pC)
+	      continue;
+	  pC->iColumn = iColumn;
+	  pC->op = op;
+	  pC->valueType = '\0';
+	  pC->txtValue = NULL;
+	  pC->next = NULL;
+
+	  if (sqlite3_value_type (argv[i]) == SQLITE_INTEGER)
+	    {
+		pC->valueType = 'I';
+		pC->intValue = sqlite3_value_int64 (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_FLOAT)
+	    {
+		pC->valueType = 'D';
+		pC->dblValue = sqlite3_value_double (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_TEXT)
+	    {
+		pC->valueType = 'T';
+		len = sqlite3_value_bytes (argv[i]) + 1;
+		pC->txtValue = (char *) sqlite3_malloc (len);
+		if (pC->txtValue)
+		    strcpy (pC->txtValue,
+			    (char *) sqlite3_value_text (argv[i]));
+	    }
+	  if (cursor->firstConstraint == NULL)
+	      cursor->firstConstraint = pC;
+	  if (cursor->lastConstraint != NULL)
+	      cursor->lastConstraint->next = pC;
+	  cursor->lastConstraint = pC;
+      }
+
+    cursor->current_row = 0;
+    if (cursor->blobGeometry)
+	free (cursor->blobGeometry);
+    cursor->blobGeometry = NULL;
+    cursor->blobSize = 0;
+    cursor->eof = 0;
+    while (1)
+      {
+	  vshp_read_row (cursor);
+	  if (cursor->eof)
+	      break;
+	  if (vshp_eval_constraints (cursor))
+	      break;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vshp_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching a next row from cursor */
+    VirtualShapeCursorPtr cursor = (VirtualShapeCursorPtr) pCursor;
+    while (1)
+      {
+	  vshp_read_row (cursor);
+	  if (cursor->eof)
+	      break;
+	  if (vshp_eval_constraints (cursor))
+	      break;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vshp_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    VirtualShapeCursorPtr cursor = (VirtualShapeCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+vshp_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	     int column)
+{
+/* fetching value for the Nth column */
+    int nCol = 2;
+    gaiaGeomCollPtr geom;
+    gaiaDbfFieldPtr pFld;
+    VirtualShapeCursorPtr cursor = (VirtualShapeCursorPtr) pCursor;
+    if (column == 0)
+      {
+	  /* the PRIMARY KEY column */
+	  sqlite3_result_int (pContext, cursor->current_row);
+	  return SQLITE_OK;
+      }
+    if (column == 1)
+      {
+	  /* the GEOMETRY column */
+	  geom = cursor->pVtab->Shp->Dbf->Geometry;
+	  if (geom)
+	      sqlite3_result_blob (pContext, cursor->blobGeometry,
+				   cursor->blobSize, SQLITE_STATIC);
+	  else
+	      sqlite3_result_null (pContext);
+	  return SQLITE_OK;
+      }
+    pFld = cursor->pVtab->Shp->Dbf->First;
+    while (pFld)
+      {
+	  /* column values */
+	  if (nCol == column)
+	    {
+		if (!(pFld->Value))
+		    sqlite3_result_null (pContext);
+		else
+		  {
+		      switch (pFld->Value->Type)
+			{
+			case GAIA_INT_VALUE:
+			    sqlite3_result_int64 (pContext,
+						  pFld->Value->IntValue);
+			    break;
+			case GAIA_DOUBLE_VALUE:
+			    sqlite3_result_double (pContext,
+						   pFld->Value->DblValue);
+			    break;
+			case GAIA_TEXT_VALUE:
+			    sqlite3_result_text (pContext,
+						 pFld->Value->TxtValue,
+						 strlen (pFld->Value->TxtValue),
+						 SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_result_null (pContext);
+			    break;
+			}
+		  }
+		break;
+	    }
+	  nCol++;
+	  pFld = pFld->Next;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vshp_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    VirtualShapeCursorPtr cursor = (VirtualShapeCursorPtr) pCursor;
+    *pRowid = cursor->current_row;
+    return SQLITE_OK;
+}
+
+static int
+vshp_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	     sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    if (pVTab || argc || argv || pRowid)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_READONLY;
+}
+
+static int
+vshp_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vshp_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vshp_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vshp_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3VirtualShapeInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    my_shape_module.iVersion = 1;
+    my_shape_module.xCreate = &vshp_create;
+    my_shape_module.xConnect = &vshp_connect;
+    my_shape_module.xBestIndex = &vshp_best_index;
+    my_shape_module.xDisconnect = &vshp_disconnect;
+    my_shape_module.xDestroy = &vshp_destroy;
+    my_shape_module.xOpen = &vshp_open;
+    my_shape_module.xClose = &vshp_close;
+    my_shape_module.xFilter = &vshp_filter;
+    my_shape_module.xNext = &vshp_next;
+    my_shape_module.xEof = &vshp_eof;
+    my_shape_module.xColumn = &vshp_column;
+    my_shape_module.xRowid = &vshp_rowid;
+    my_shape_module.xUpdate = &vshp_update;
+    my_shape_module.xBegin = &vshp_begin;
+    my_shape_module.xSync = &vshp_sync;
+    my_shape_module.xCommit = &vshp_commit;
+    my_shape_module.xRollback = &vshp_rollback;
+    my_shape_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "VirtualShape", &my_shape_module, NULL, 0);
+    return rc;
+}
+
+int
+virtualshape_extension_init (sqlite3 * db)
+{
+    return sqlite3VirtualShapeInit (db);
+}
+
+#endif /* ICONV enabled/disabled */
diff --git a/libspatialite/libspatialite-3.0.1/src/spatialite/virtualspatialindex.c b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualspatialindex.c
new file mode 100644
index 0000000..084c6c6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/spatialite/virtualspatialindex.c
@@ -0,0 +1,667 @@
+/*
+
+ virtualspatialindex.c -- SQLite3 extension [VIRTUAL TABLE RTree metahandler]
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+static struct sqlite3_module my_spidx_module;
+
+
+/******************************************************************************
+/
+/ VirtualTable structs
+/
+******************************************************************************/
+
+typedef struct VirtualSpatialIndexStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USE INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+} VirtualSpatialIndex;
+typedef VirtualSpatialIndex *VirtualSpatialIndexPtr;
+
+typedef struct VirtualSpatialIndexCursorStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    VirtualSpatialIndexPtr pVtab;	/* Virtual table of this cursor */
+    int eof;			/* the EOF marker */
+    sqlite3_stmt *stmt;
+    sqlite3_int64 CurrentRowId;
+} VirtualSpatialIndexCursor;
+typedef VirtualSpatialIndexCursor *VirtualSpatialIndexCursorPtr;
+
+static void
+vspidx_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+static void
+vspidx_clean_sql_string (char *buf)
+{
+/* returns a well formatted TEXT value for SQL */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    while (*in != '\0')
+      {
+	  if (*in == '\'')
+	      *out++ = '\'';
+	  *out++ = *in++;
+      }
+    *out = '\0';
+}
+
+static void
+vspidx_dequote (char *buf)
+{
+/* dequoting an SQL string */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    char strip = '\0';
+    int first = 0;
+    int len = strlen (buf);
+    if (buf[0] == '\'' && buf[len - 1] == '\'')
+	strip = '\'';
+    if (buf[0] == '"' && buf[len - 1] == '"')
+	strip = '"';
+    if (strip == '\0')
+	return;
+    strcpy (tmp, buf + 1);
+    len = strlen (tmp);
+    tmp[len - 1] = '\0';
+    while (*in != '\0')
+      {
+	  if (*in == strip)
+	    {
+		if (first)
+		  {
+		      first = 0;
+		      in++;
+		      continue;
+		  }
+		else
+		  {
+		      first = 1;
+		      *out++ = *in++;
+		      continue;
+		  }
+	    }
+	  first = 0;
+	  *out++ = *in++;
+      }
+    *out = '\0';
+}
+
+static int
+vspidx_check_rtree (sqlite3 * sqlite, const char *table_name,
+		    const char *geom_column)
+{
+/* checks if the required RTree is actually defined */
+    char sql[4096];
+    char xtable[1024];
+    char xcolumn[1024];
+    int ret;
+    int i;
+    int n_rows;
+    int n_columns;
+    char **results;
+    int count = 0;
+
+    strcpy (xtable, table_name);
+    strcpy (xcolumn, geom_column);
+    strcpy (sql,
+	    "SELECT Count(*) FROM geometry_columns WHERE f_table_name LIKE '");
+    vspidx_clean_sql_string (xtable);
+    strcat (sql, xtable);
+    strcat (sql, "' AND f_geometry_column LIKE '");
+    vspidx_clean_sql_string (xcolumn);
+    strcat (sql, xcolumn);
+    strcat (sql, "' AND spatial_index_enabled = 1");
+    ret = sqlite3_get_table (sqlite, sql, &results, &n_rows, &n_columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (n_rows >= 1)
+      {
+	  for (i = 1; i <= n_rows; i++)
+	      count = atoi (results[(i * n_columns) + 0]);
+      }
+    sqlite3_free_table (results);
+    if (count != 1)
+	return 0;
+    return 1;
+}
+
+static int
+vspidx_find_rtree (sqlite3 * sqlite, const char *table_name, char *geom_column)
+{
+/* attempts to find the corresponding RTree Geometry Column */
+    char sql[4096];
+    char xtable[1024];
+    char xcolumn[1024];
+    int ret;
+    int i;
+    int n_rows;
+    int n_columns;
+    char **results;
+    int count = 0;
+
+    strcpy (xtable, table_name);
+    strcpy (sql,
+	    "SELECT f_geometry_column FROM geometry_columns WHERE f_table_name LIKE '");
+    vspidx_clean_sql_string (xtable);
+    strcat (sql, xtable);
+    strcat (sql, "' AND spatial_index_enabled = 1");
+    ret = sqlite3_get_table (sqlite, sql, &results, &n_rows, &n_columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (n_rows >= 1)
+      {
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count++;
+		strcpy (xcolumn, results[(i * n_columns) + 0]);
+	    }
+      }
+    sqlite3_free_table (results);
+    if (count != 1)
+	return 0;
+    strcpy (geom_column, xcolumn);
+    return 1;
+}
+
+static int
+vspidx_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	       sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table for R*Tree SpatialIndex metahandling */
+    VirtualSpatialIndexPtr p_vt;
+    char buf[1024];
+    char vtable[1024];
+    char xname[1024];
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+    if (argc == 3)
+      {
+	  strcpy (vtable, argv[2]);
+	  vspidx_dequote (vtable);
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualSpatialIndex module] CREATE VIRTUAL: illegal arg list {void}\n");
+	  return SQLITE_ERROR;
+      }
+    p_vt =
+	(VirtualSpatialIndexPtr) sqlite3_malloc (sizeof (VirtualSpatialIndex));
+    if (!p_vt)
+	return SQLITE_NOMEM;
+    p_vt->db = db;
+    p_vt->pModule = &my_spidx_module;
+    p_vt->nRef = 0;
+    p_vt->zErrMsg = NULL;
+/* preparing the COLUMNs for this VIRTUAL TABLE */
+    strcpy (buf, "CREATE TABLE ");
+    strcpy (xname, vtable);
+    vspidx_double_quoted_sql (xname);
+    strcat (buf, xname);
+    strcat (buf,
+	    " (f_table_name TEXT, f_geometry_column TEXT, search_frame BLOB)");
+    if (sqlite3_declare_vtab (db, buf) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualSpatialIndex module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       buf);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    return SQLITE_OK;
+}
+
+static int
+vspidx_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+		sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table - simply aliases vspidx_create() */
+    return vspidx_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+vspidx_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIdxInfo)
+{
+/* best index selection */
+    int i;
+    int errors = 0;
+    int err = 1;
+    int table = 0;
+    int geom = 0;
+    int mbr = 0;
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    for (i = 0; i < pIdxInfo->nConstraint; i++)
+      {
+	  /* verifying the constraints */
+	  struct sqlite3_index_constraint *p = &(pIdxInfo->aConstraint[i]);
+	  if (p->usable)
+	    {
+		if (p->iColumn == 0 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
+		      table++;
+		else if (p->iColumn == 1 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
+		      geom++;
+		else if (p->iColumn == 2 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
+		      mbr++;
+		else
+		    errors++;
+	    }
+      }
+    if (table == 1 && (geom == 0 || geom == 1) && mbr == 1 && errors == 0)
+      {
+	  /* this one is a valid SpatialIndex query */
+	  if (geom == 1)
+	      pIdxInfo->idxNum = 1;
+	  else
+	      pIdxInfo->idxNum = 2;
+	  pIdxInfo->estimatedCost = 1.0;
+	  for (i = 0; i < pIdxInfo->nConstraint; i++)
+	    {
+		if (pIdxInfo->aConstraint[i].usable)
+		  {
+		      pIdxInfo->aConstraintUsage[i].argvIndex = i + 1;
+		      pIdxInfo->aConstraintUsage[i].omit = 1;
+		  }
+	    }
+	  err = 0;
+      }
+    if (err)
+      {
+	  /* illegal query */
+	  pIdxInfo->idxNum = 0;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vspidx_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    VirtualSpatialIndexPtr p_vt = (VirtualSpatialIndexPtr) pVTab;
+    sqlite3_free (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+vspidx_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases vspidx_disconnect() */
+    return vspidx_disconnect (pVTab);
+}
+
+static int
+vspidx_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    VirtualSpatialIndexCursorPtr cursor =
+	(VirtualSpatialIndexCursorPtr)
+	sqlite3_malloc (sizeof (VirtualSpatialIndexCursor));
+    if (cursor == NULL)
+	return SQLITE_ERROR;
+    cursor->pVtab = (VirtualSpatialIndexPtr) pVTab;
+    cursor->stmt = NULL;
+    cursor->eof = 1;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    return SQLITE_OK;
+}
+
+static int
+vspidx_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    VirtualSpatialIndexCursorPtr cursor =
+	(VirtualSpatialIndexCursorPtr) pCursor;
+    if (cursor->stmt)
+	sqlite3_finalize (cursor->stmt);
+    sqlite3_free (pCursor);
+    return SQLITE_OK;
+}
+
+static int
+vspidx_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	       int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    char table_name[1024];
+    char geom_column[1024];
+    char idx_name[1024];
+    char sql[4096];
+    gaiaGeomCollPtr geom = NULL;
+    int ok_table = 0;
+    int ok_geom = 0;
+    const unsigned char *blob;
+    int size;
+    int exists;
+    int ret;
+    sqlite3_stmt *stmt;
+    float minx;
+    float miny;
+    float maxx;
+    float maxy;
+    double tic;
+    double tic2;
+    VirtualSpatialIndexCursorPtr cursor =
+	(VirtualSpatialIndexCursorPtr) pCursor;
+    VirtualSpatialIndexPtr spidx = (VirtualSpatialIndexPtr) cursor->pVtab;
+    if (idxStr)
+	idxStr = idxStr;	/* unused arg warning suppression */
+    cursor->eof = 1;
+    if (idxNum == 1 && argc == 3)
+      {
+	  /* retrieving the Table/Column/MBR params */
+	  if (sqlite3_value_type (argv[0]) == SQLITE_TEXT)
+	    {
+		strcpy (table_name,
+			(const char *) sqlite3_value_text (argv[0]));
+		ok_table = 1;
+	    }
+	  if (sqlite3_value_type (argv[1]) == SQLITE_TEXT)
+	    {
+		strcpy (geom_column,
+			(const char *) sqlite3_value_text (argv[1]));
+		ok_geom = 1;
+	    }
+	  if (sqlite3_value_type (argv[2]) == SQLITE_BLOB)
+	    {
+		blob = sqlite3_value_blob (argv[2]);
+		size = sqlite3_value_bytes (argv[2]);
+		geom = gaiaFromSpatiaLiteBlobWkb (blob, size);
+	    }
+	  if (ok_table && ok_geom && geom)
+	      ;
+	  else
+	    {
+		/* invalid args */
+		goto stop;
+	    }
+      }
+    if (idxNum == 2 && argc == 2)
+      {
+	  /* retrieving the Table/MBR params */
+	  if (sqlite3_value_type (argv[0]) == SQLITE_TEXT)
+	    {
+		strcpy (table_name,
+			(const char *) sqlite3_value_text (argv[0]));
+		ok_table = 1;
+	    }
+	  if (sqlite3_value_type (argv[1]) == SQLITE_BLOB)
+	    {
+		blob = sqlite3_value_blob (argv[1]);
+		size = sqlite3_value_bytes (argv[1]);
+		geom = gaiaFromSpatiaLiteBlobWkb (blob, size);
+	    }
+	  if (ok_table && geom)
+	      ;
+	  else
+	    {
+		/* invalid args */
+		goto stop;
+	    }
+      }
+
+/* checking if the corresponding R*Tree exists */
+    if (ok_geom)
+	exists = vspidx_check_rtree (spidx->db, table_name, geom_column);
+    else
+	exists = vspidx_find_rtree (spidx->db, table_name, geom_column);
+    if (!exists)
+	goto stop;
+
+/* building the RTree query */
+    sprintf (idx_name, "idx_%s_%s", table_name, geom_column);
+    vspidx_double_quoted_sql (idx_name);
+    sprintf (sql, "SELECT pkid FROM %s WHERE ", idx_name);
+    strcat (sql, "xmin <= ? AND xmax >= ? AND ymin <= ? AND ymax >= ?");
+    ret = sqlite3_prepare_v2 (spidx->db, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto stop;
+/* binding stmt params [MBR] */
+    gaiaMbrGeometry (geom);
+
+/* adjusting the MBR so to compensate for DOUBLE/FLOAT truncations */
+    minx = (float)(geom->MinX);
+    miny = (float)(geom->MinY);
+    maxx = (float)(geom->MaxX);
+    maxy = (float)(geom->MaxY);
+    tic = fabs (geom->MinX - minx);
+    tic2 = fabs (geom->MinY - miny);
+    if (tic2 > tic)
+	tic = tic2;
+    tic2 = fabs (geom->MaxX - maxx);
+    if (tic2 > tic)
+	tic = tic2;
+    tic2 = fabs (geom->MaxY - maxy);
+    if (tic2 > tic)
+	tic = tic2;
+    tic *= 2.0;
+    sqlite3_bind_double (stmt, 1, geom->MaxX + tic);
+    sqlite3_bind_double (stmt, 2, geom->MinX - tic);
+    sqlite3_bind_double (stmt, 3, geom->MaxY + tic);
+    sqlite3_bind_double (stmt, 4, geom->MinY - tic);
+    cursor->stmt = stmt;
+    cursor->eof = 0;
+/* fetching the first ResultSet's row */
+    ret = sqlite3_step (cursor->stmt);
+    if (ret == SQLITE_ROW)
+	cursor->CurrentRowId = sqlite3_column_int64 (cursor->stmt, 0);
+    else
+	cursor->eof = 1;
+  stop:
+    return SQLITE_OK;
+}
+
+static int
+vspidx_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching a next row from cursor */
+    int ret;
+    VirtualSpatialIndexCursorPtr cursor =
+	(VirtualSpatialIndexCursorPtr) pCursor;
+    ret = sqlite3_step (cursor->stmt);
+    if (ret == SQLITE_ROW)
+	cursor->CurrentRowId = sqlite3_column_int64 (cursor->stmt, 0);
+    else
+	cursor->eof = 1;
+    return SQLITE_OK;
+}
+
+static int
+vspidx_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    VirtualSpatialIndexCursorPtr cursor =
+	(VirtualSpatialIndexCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+vspidx_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	       int column)
+{
+/* fetching value for the Nth column */
+    VirtualSpatialIndexCursorPtr cursor =
+	(VirtualSpatialIndexCursorPtr) pCursor;
+    if (cursor || column)
+	cursor = cursor;	/* unused arg warning suppression */
+    if (column)
+	column = column;	/* unused arg warning suppression */
+    sqlite3_result_null (pContext);
+    return SQLITE_OK;
+}
+
+static int
+vspidx_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    VirtualSpatialIndexCursorPtr cursor =
+	(VirtualSpatialIndexCursorPtr) pCursor;
+    *pRowid = cursor->CurrentRowId;
+    return SQLITE_OK;
+}
+
+static int
+vspidx_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	       sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    if (pRowid || argc || argv || pVTab)
+	pRowid = pRowid;	/* unused arg warning suppression */
+/* read only datasource */
+    return SQLITE_READONLY;
+}
+
+static int
+vspidx_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vspidx_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vspidx_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vspidx_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3VirtualSpatialIndexInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    my_spidx_module.iVersion = 1;
+    my_spidx_module.xCreate = &vspidx_create;
+    my_spidx_module.xConnect = &vspidx_connect;
+    my_spidx_module.xBestIndex = &vspidx_best_index;
+    my_spidx_module.xDisconnect = &vspidx_disconnect;
+    my_spidx_module.xDestroy = &vspidx_destroy;
+    my_spidx_module.xOpen = &vspidx_open;
+    my_spidx_module.xClose = &vspidx_close;
+    my_spidx_module.xFilter = &vspidx_filter;
+    my_spidx_module.xNext = &vspidx_next;
+    my_spidx_module.xEof = &vspidx_eof;
+    my_spidx_module.xColumn = &vspidx_column;
+    my_spidx_module.xRowid = &vspidx_rowid;
+    my_spidx_module.xUpdate = &vspidx_update;
+    my_spidx_module.xBegin = &vspidx_begin;
+    my_spidx_module.xSync = &vspidx_sync;
+    my_spidx_module.xCommit = &vspidx_commit;
+    my_spidx_module.xRollback = &vspidx_rollback;
+    my_spidx_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "VirtualSpatialIndex", &my_spidx_module, NULL,
+			      0);
+    return rc;
+}
+
+int
+virtual_spatialindex_extension_init (sqlite3 * db)
+{
+    return sqlite3VirtualSpatialIndexInit (db);
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/srsinit/Makefile.am b/libspatialite/libspatialite-3.0.1/src/srsinit/Makefile.am
new file mode 100644
index 0000000..7b86a96
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/srsinit/Makefile.am
@@ -0,0 +1,15 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libsrsinit.la
+
+libsrsinit_la_SOURCES = srs_init.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/srsinit/Makefile.in b/libspatialite/libspatialite-3.0.1/src/srsinit/Makefile.in
new file mode 100644
index 0000000..92a8f40
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/srsinit/Makefile.in
@@ -0,0 +1,488 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/srsinit
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsrsinit_la_LIBADD =
+am_libsrsinit_la_OBJECTS = srs_init.lo
+libsrsinit_la_OBJECTS = $(am_libsrsinit_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libsrsinit_la_SOURCES)
+DIST_SOURCES = $(libsrsinit_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libsrsinit.la
+libsrsinit_la_SOURCES = srs_init.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/srsinit/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/srsinit/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libsrsinit.la: $(libsrsinit_la_OBJECTS) $(libsrsinit_la_DEPENDENCIES) 
+	$(LINK)  $(libsrsinit_la_OBJECTS) $(libsrsinit_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/srs_init.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/srsinit/srs_init.c b/libspatialite/libspatialite-3.0.1/src/srsinit/srs_init.c
new file mode 100644
index 0000000..1c1d536
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/srsinit/srs_init.c
@@ -0,0 +1,110730 @@
+/*
+
+ srs_init.c -- populating the SPATIAL_REF_SYS table
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+#include <spatialite.h>
+
+struct epsg_defs
+{
+    int srid;
+    char *auth_name;
+    int auth_srid;
+    char *ref_sys_name;
+    char *proj4text;
+    char *srs_wkt;
+    struct epsg_defs *next;
+};
+
+static void
+free_epsg_def (struct epsg_defs *ptr)
+{
+/* memory cleanup - destroying an EPSG def item */
+    if (ptr->auth_name)
+	free (ptr->auth_name);
+    if (ptr->ref_sys_name)
+	free (ptr->ref_sys_name);
+    if (ptr->proj4text)
+	free (ptr->proj4text);
+    if (ptr->srs_wkt)
+	free (ptr->srs_wkt);
+    free (ptr);
+}
+
+static struct epsg_defs *
+add_epsg_def (struct epsg_defs **first, struct epsg_defs **last, int srid,
+	      const char *auth_name, int auth_srid, const char *ref_sys_name)
+{
+/* appending an EPSG def to the list */
+    int len;
+    struct epsg_defs *p = malloc (sizeof (struct epsg_defs));
+    if (!p)
+	return NULL;
+    p->srid = srid;
+    p->auth_name = NULL;
+    p->auth_srid = auth_srid;
+    p->ref_sys_name = NULL;
+    p->proj4text = NULL;
+    p->srs_wkt = NULL;
+    p->next = NULL;
+    if (auth_name)
+      {
+	  len = strlen (auth_name);
+	  if (len > 0)
+	    {
+		p->auth_name = malloc (len + 1);
+		if (p->auth_name == NULL)
+		    goto error;
+		strcpy (p->auth_name, auth_name);
+	    }
+      }
+    if (ref_sys_name)
+      {
+	  len = strlen (ref_sys_name);
+	  if (len > 0)
+	    {
+		p->ref_sys_name = malloc (len + 1);
+		if (p->ref_sys_name == NULL)
+		    goto error;
+		strcpy (p->ref_sys_name, ref_sys_name);
+	    }
+      }
+    if (*first == NULL)
+	*first = p;
+    if (*last != NULL)
+	(*last)->next = p;
+    *last = p;
+    return p;
+  error:
+    free_epsg_def (p);
+    return NULL;
+}
+
+static void
+add_proj4text (struct epsg_defs *p, int count, const char *text)
+{
+/* creating the PROJ4TEXT string */
+    int len;
+    int olen;
+    char *string;
+    if (text == NULL)
+	return;
+    len = strlen (text);
+    if (!count)
+      {
+	  p->proj4text = malloc (len + 1);
+	  if (p->proj4text == NULL)
+	      return;
+	  strcpy (p->proj4text, text);
+	  return;
+      }
+    if (p->proj4text == NULL)
+	return;
+    olen = strlen (p->proj4text);
+    string = malloc (len + olen + 1);
+    if (string == NULL)
+	return;
+    strcpy (string, p->proj4text);
+    free (p->proj4text);
+    p->proj4text = string;
+    strcat (p->proj4text, text);
+}
+
+static void
+add_srs_wkt (struct epsg_defs *p, int count, const char *text)
+{
+/* creating the SRS_WKT string */
+    int len;
+    int olen;
+    char *string;
+    if (text == NULL)
+	return;
+    len = strlen (text);
+    if (!count)
+      {
+	  p->srs_wkt = malloc (len + 1);
+	  if (p->srs_wkt == NULL)
+	      return;
+	  strcpy (p->srs_wkt, text);
+	  return;
+      }
+    if (p->srs_wkt == NULL)
+	return;
+    olen = strlen (p->srs_wkt);
+    string = malloc (len + olen + 1);
+    if (string == NULL)
+	return;
+    strcpy (string, p->srs_wkt);
+    free (p->srs_wkt);
+    p->srs_wkt = string;
+    strcat (p->srs_wkt, text);
+}
+
+static void
+initialize_epsg_00 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2000, "epsg", 2000,
+		      "Anguilla 1957 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1, "_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Anguilla 1957 / British West Indies Grid\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Anguilla 1957\",DATUM[\"Anguilla_1957\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7012\"]],AUTHORITY[\"EPSG\",\"6600\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4600\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-62],PARAMETER[\"scale_factor\",0.9995],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",400000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"2000\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2001, "epsg", 2001,
+		      "Antigua 1943 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1, "_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Antigua 1943 / British West Indies Grid\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Antigua 1943\",DATUM[\"Antigua_1943\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7012\"]],AUTHORITY[\"EPSG\",\"6601\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4601\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-62],PARAMETER[\"scale_factor\",0.9995],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",400000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"2001\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2002, "epsg", 2002,
+		      "Dominica 1945 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1,
+		   "_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Dominica 1945 / British West Indies Grid\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Dominica 1945\",DATUM[\"Dominica_1945\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7012\"]],TOWGS84[725,685,536,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"6602\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4602\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",0],PARAMETER[\"central_meridian\",-62],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.9995],PARAMETER[\"false_easting\",400000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2002");
+    add_srs_wkt (p, 12, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2003, "epsg", 2003,
+		      "Grenada 1953 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1,
+		   "_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Grenada 1953 / British West Indies Grid\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Grenada 1953\",DATUM[\"Grenada_1953\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7012\"]],TOWGS84[72,213.7,93,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6603\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4603\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-62],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9995],PARAMETER[\"false_easting\",400000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2003\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2004, "epsg", 2004,
+		      "Montserrat 1958 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1,
+		   "_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Montserrat 1958 / British West Indies Grid\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"Montserrat 1958\",DATUM[\"Montserrat_1958\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7012\"]],TOWGS84[174,359,365,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6604\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4604\"");
+    add_srs_wkt (p, 7,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",0],PARAMETER[\"central_meridian\",-62],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"scale_factor\",0.9995],PARAMETER[\"false_easting\",400");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12,
+		 "\"2004\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2005, "epsg", 2005,
+		      "St. Kitts 1955 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1, "_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"St. Kitts 1955 / British West Indies Grid\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"St. Kitts 1955\",DATUM[\"St_Kitts_1955\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6605\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4605\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-62],PARAMETER[\"scale_factor\",0.9995],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",400000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2005\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2006, "epsg", 2006,
+		      "St. Lucia 1955 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1,
+		   "_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"St. Lucia 1955 / British West Indies Grid\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"St. Lucia 1955\",DATUM[\"St_Lucia_1955\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7012\"]],TOWGS84[-149,128,296,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6606\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4606\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-62],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.9995],PARAMETER[\"false_easting\",40000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "2006\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 2007, "epsg", 2007,
+		      "St. Vincent 45 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1,
+		   "_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,");
+    add_proj4text (p, 2, "274.607,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"St. Vincent 45 / British West Indies Grid\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"St. Vincent 1945\",DATUM[\"St_Vincent_1945\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7012\"]],TOWGS84[195.671,332.517,274.607,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6607\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4607\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-6");
+    add_srs_wkt (p, 10,
+		 "2],PARAMETER[\"scale_factor\",0.9995],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",400000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"2007\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 2008, "epsg", 2008,
+		      "NAD27(CGQ77) / SCoPQ zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 2\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-55.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2008\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2009, "epsg", 2009,
+		      "NAD27(CGQ77) / SCoPQ zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 3\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-58.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2009\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2010, "epsg", 2010,
+		      "NAD27(CGQ77) / SCoPQ zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 4\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-61.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2010\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2011, "epsg", 2011,
+		      "NAD27(CGQ77) / SCoPQ zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 5\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-64.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2011\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2012, "epsg", 2012,
+		      "NAD27(CGQ77) / SCoPQ zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 6\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-67.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2012\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2013, "epsg", 2013,
+		      "NAD27(CGQ77) / SCoPQ zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 7\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-70.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2013\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2014, "epsg", 2014,
+		      "NAD27(CGQ77) / SCoPQ zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 8\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-73.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2014\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2015, "epsg", 2015,
+		      "NAD27(CGQ77) / SCoPQ zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 9\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-76.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2015\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2016, "epsg", 2016,
+		      "NAD27(CGQ77) / SCoPQ zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / SCoPQ zone 10\",GEOGCS[\"NAD27(C");
+    add_srs_wkt (p, 1,
+		 "GQ77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-79.5],PARAMETER[\"scale_factor\",0.9999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",304800],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2016\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2017, "epsg", 2017,
+		      "NAD27(76) / MTM zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 8\",GEOGCS[\"NAD27(76)\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clark");
+    add_srs_wkt (p, 2,
+		 "e 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-73.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2017\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 2018, "epsg", 2018,
+		      "NAD27(76) / MTM zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 9\",GEOGCS[\"NAD27(76)\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clark");
+    add_srs_wkt (p, 2,
+		 "e 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-76.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2018\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 2019, "epsg", 2019,
+		      "NAD27(76) / MTM zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 10\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-79.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",304800],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"2019\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2020, "epsg", 2020,
+		      "NAD27(76) / MTM zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 11\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-82.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",304800],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"2020\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2021, "epsg", 2021,
+		      "NAD27(76) / MTM zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 12\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-81],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2021\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2022, "epsg", 2022,
+		      "NAD27(76) / MTM zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 13\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-84],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2022\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2023, "epsg", 2023,
+		      "NAD27(76) / MTM zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 14\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-87],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2023\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2024, "epsg", 2024,
+		      "NAD27(76) / MTM zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 15\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-90],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2024\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2025, "epsg", 2025,
+		      "NAD27(76) / MTM zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 16\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-93],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2025\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2026, "epsg", 2026,
+		      "NAD27(76) / MTM zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / MTM zone 17\",GEOGCS[\"NAD27(76)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-96],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",304800],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2026\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2027, "epsg", 2027,
+		      "NAD27(76) / UTM zone 15N");
+    add_proj4text (p, 0, "+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / UTM zone 15N\",GEOGCS[\"NAD27(76)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2027\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2028, "epsg", 2028,
+		      "NAD27(76) / UTM zone 16N");
+    add_proj4text (p, 0, "+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / UTM zone 16N\",GEOGCS[\"NAD27(76)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2028\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2029, "epsg", 2029,
+		      "NAD27(76) / UTM zone 17N");
+    add_proj4text (p, 0, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / UTM zone 17N\",GEOGCS[\"NAD27(76)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2029\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2030, "epsg", 2030,
+		      "NAD27(76) / UTM zone 18N");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(76) / UTM zone 18N\",GEOGCS[\"NAD27(76)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927_1976\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6608\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4608\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2030\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2031, "epsg", 2031,
+		      "NAD27(CGQ77) / UTM zone 17N");
+    add_proj4text (p, 0, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / UTM zone 17N\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"2031\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2032, "epsg", 2032,
+		      "NAD27(CGQ77) / UTM zone 18N");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / UTM zone 18N\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"2032\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2033, "epsg", 2033,
+		      "NAD27(CGQ77) / UTM zone 19N");
+    add_proj4text (p, 0, "+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / UTM zone 19N\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"2033\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2034, "epsg", 2034,
+		      "NAD27(CGQ77) / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / UTM zone 20N\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"2034\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2035, "epsg", 2035,
+		      "NAD27(CGQ77) / UTM zone 21N");
+    add_proj4text (p, 0, "+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / UTM zone 21N\",GEOGCS[\"NAD27(CG");
+    add_srs_wkt (p, 1,
+		 "Q77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"2035\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2036, "epsg", 2036,
+		      "NAD83(CSRS98) / New Brunswick Stereo (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2");
+    add_proj4text (p, 1,
+		   "500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / New Brunswick Stereo (deprecate");
+    add_srs_wkt (p, 1,
+		 "d)\",GEOGCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spa");
+    add_srs_wkt (p, 2,
+		 "tial_Reference_System\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "74532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"latitude_of_origin\",46.5],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",-66.5],PARAMETER[\"scale_factor\",0.999912],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",2500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",7500000],AUTHORITY[\"EPSG\",\"2036\"],AXIS[\"Northing");
+    add_srs_wkt (p, 13, "\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2037, "epsg", 2037,
+		      "NAD83(CSRS98) / UTM zone 19N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 19N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-69],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2037\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2038, "epsg", 2038,
+		      "NAD83(CSRS98) / UTM zone 20N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 20N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-63],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2038\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2039, "epsg", 2039,
+		      "Israel / Israeli TM Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.204516944");
+    add_proj4text (p, 1,
+		   "44445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps");
+    add_proj4text (p, 2, "=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Israel / Israeli TM Grid\",GEOGCS[\"Israel\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Israel\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 2,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[-48,55,52,0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0],AUTHORITY[\"EPSG\",\"6141\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 5,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"4141\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 7,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 8,
+		 "titude_of_origin\",31.73439361111111],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",35.20451694444445],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",1.0000067],PARAMETER[\"false_easting\",219529.584],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",626907.39],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"2039\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 2040, "epsg", 2040,
+		      "Locodjo 1965 / UTM zone 30N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Locodjo 1965 / UTM zone 30N\",GEOGCS[\"Locodjo ");
+    add_srs_wkt (p, 1,
+		 "1965\",DATUM[\"Locodjo_1965\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-125,53,467,0,0,0,0],AUTHORITY[\"EPSG\",\"6142\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4142\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2040\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2041, "epsg", 2041,
+		      "Abidjan 1987 / UTM zone 30N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466");
+    add_proj4text (p, 1, ".79,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Abidjan 1987 / UTM zone 30N\",GEOGCS[\"Abidjan ");
+    add_srs_wkt (p, 1,
+		 "1987\",DATUM[\"Abidjan_1987\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "143\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4143\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 8,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",-3],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2041\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2042, "epsg", 2042,
+		      "Locodjo 1965 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Locodjo 1965 / UTM zone 29N\",GEOGCS[\"Locodjo ");
+    add_srs_wkt (p, 1,
+		 "1965\",DATUM[\"Locodjo_1965\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-125,53,467,0,0,0,0],AUTHORITY[\"EPSG\",\"6142\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4142\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2042\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2043, "epsg", 2043,
+		      "Abidjan 1987 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466");
+    add_proj4text (p, 1, ".79,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Abidjan 1987 / UTM zone 29N\",GEOGCS[\"Abidjan ");
+    add_srs_wkt (p, 1,
+		 "1987\",DATUM[\"Abidjan_1987\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "143\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4143\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 8,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",-9],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2043\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2044, "epsg", 2044,
+		      "Hanoi 1972 / Gauss-Kruger zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hanoi 1972 / Gauss-Kruger zone 18\",GEOGCS[\"Ha");
+    add_srs_wkt (p, 1,
+		 "noi 1972\",DATUM[\"Hanoi_1972\",SPHEROID[\"Krassowsky 19");
+    add_srs_wkt (p, 2,
+		 "40\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY[\"EPSG\",\"614");
+    add_srs_wkt (p, 4,
+		 "7\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4147\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",105],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "1],PARAMETER[\"false_easting\",18500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"2044\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2045, "epsg", 2045,
+		      "Hanoi 1972 / Gauss-Kruger zone 19");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hanoi 1972 / Gauss-Kruger zone 19\",GEOGCS[\"Ha");
+    add_srs_wkt (p, 1,
+		 "noi 1972\",DATUM[\"Hanoi_1972\",SPHEROID[\"Krassowsky 19");
+    add_srs_wkt (p, 2,
+		 "40\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY[\"EPSG\",\"614");
+    add_srs_wkt (p, 4,
+		 "7\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4147\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",111],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "1],PARAMETER[\"false_easting\",19500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"2045\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2056, "epsg", 2056, "CH1903+ / LV95");
+    add_proj4text (p, 0,
+		   "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333");
+    add_proj4text (p, 1,
+		   "333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +t");
+    add_proj4text (p, 2,
+		   "owgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"CH1903+ / LV95\",GEOGCS[\"CH1903+\",DATUM[\"CH1");
+    add_srs_wkt (p, 1,
+		 "903\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7004\"]],TOWGS84[674.374,15.056,405.");
+    add_srs_wkt (p, 3,
+		 "346,0,0,0,0],AUTHORITY[\"EPSG\",\"6150\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4150\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"latitude_of_center\",46.95240555555556],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"longitude_of_center\",7.439583333333333],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"azimuth\",90],PARAMETER[\"rectified_grid_angle\",90]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",2600000],PARAMETER[\"false_northing\",1200000],AUTHOR");
+    add_srs_wkt (p, 13,
+		 "ITY[\"EPSG\",\"2056\"],AXIS[\"Y\",EAST],AXIS[\"X\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 2057, "epsg", 2057,
+		      "Rassadiran / Nakhl e Taqi");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=27.51882880555555 +lonc=52.6035391666");
+    add_proj4text (p, 1,
+		   "6667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=65837");
+    add_proj4text (p, 2,
+		   "7.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157");
+    add_proj4text (p, 3, ".5,-158.62,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Rassadiran / Nakhl e Taqi\",GEOGCS[\"Rassadiran");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Rassadiran\",SPHEROID[\"International 1924\",");
+    add_srs_wkt (p, 2,
+		 "6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-133.6");
+    add_srs_wkt (p, 3,
+		 "3,-157.5,-158.62,0,0,0,0],AUTHORITY[\"EPSG\",\"6153\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4153\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Hotine_Oblique_");
+    add_srs_wkt (p, 8,
+		 "Mercator\"],PARAMETER[\"latitude_of_center\",27.51882880");
+    add_srs_wkt (p, 9,
+		 "555555],PARAMETER[\"longitude_of_center\",52.60353916666");
+    add_srs_wkt (p, 10,
+		 "667],PARAMETER[\"azimuth\",0.5716611944444444],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"rectified_grid_angle\",0.5716611944444444],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"scale_factor\",0.999895934],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 13,
+		 ",658377.437],PARAMETER[\"false_northing\",3044969.194],A");
+    add_srs_wkt (p, 14,
+		 "UTHORITY[\"EPSG\",\"2057\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 15, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2058, "epsg", 2058,
+		      "ED50(ED77) / UTM zone 38N");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50(ED77) / UTM zone 38N\",GEOGCS[\"ED50(ED77)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Datum_1950_1977\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6154\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4154\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",45],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"2058\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 2059, "epsg", 2059,
+		      "ED50(ED77) / UTM zone 39N");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50(ED77) / UTM zone 39N\",GEOGCS[\"ED50(ED77)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Datum_1950_1977\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6154\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4154\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",51],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"2059\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 2060, "epsg", 2060,
+		      "ED50(ED77) / UTM zone 40N");
+    add_proj4text (p, 0, "+proj=utm +zone=40 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50(ED77) / UTM zone 40N\",GEOGCS[\"ED50(ED77)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Datum_1950_1977\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6154\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4154\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",57],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"2060\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 2061, "epsg", 2061,
+		      "ED50(ED77) / UTM zone 41N");
+    add_proj4text (p, 0, "+proj=utm +zone=41 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50(ED77) / UTM zone 41N\",GEOGCS[\"ED50(ED77)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Datum_1950_1977\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6154\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4154\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",63],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"2061\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 2062, "epsg", 2062,
+		      "Madrid 1870 (Madrid) / Spain");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293");
+    add_proj4text (p, 1,
+		   " +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.1426695");
+    add_proj4text (p, 2, "61 +pm=madrid +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Madrid 1870 (Madrid) / Spain\",GEOGCS[\"Madrid ");
+    add_srs_wkt (p, 1,
+		 "1870 (Madrid)\",DATUM[\"Madrid_1870_Madrid\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Struve 1860\",6378298.3,294.73,AUTHORITY[\"EPSG\",\"7028");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6903\"]],PRIMEM[\"Madrid\",-3.");
+    add_srs_wkt (p, 4,
+		 "687938888888889,AUTHORITY[\"EPSG\",\"8905\"]],UNIT[\"deg");
+    add_srs_wkt (p, 5,
+		 "ree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"4903\"]],UNIT[\"metre\",1,AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Coni");
+    add_srs_wkt (p, 8,
+		 "c_1SP\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",0],PARAMETER[\"scale_factor\",0.998");
+    add_srs_wkt (p, 10,
+		 "8085293],PARAMETER[\"false_easting\",600000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",600000],AUTHORITY[\"EPSG\",\"2062\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2063, "epsg", 2063,
+		      "Dabola 1981 / UTM zone 28N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,");
+    add_proj4text (p, 1, "259,-9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Dabola 1981 / UTM zone 28N (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Conakry 1905\",DATUM[\"Conakry_1905\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7011\"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6315\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4315\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "2063\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 2064, "epsg", 2064,
+		      "Dabola 1981 / UTM zone 29N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,");
+    add_proj4text (p, 1, "259,-9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Dabola 1981 / UTM zone 29N (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Conakry 1905\",DATUM[\"Conakry_1905\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7011\"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6315\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4315\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.9996],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12,
+		 "064\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2065, "epsg", 2065,
+		      "S-JTSK (Ferro) / Krovak");
+    add_proj4text (p, 0,
+		   "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.288139722");
+    add_proj4text (p, 1,
+		   "22222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"S-JTSK (Ferro) / Krovak\",GEOGCS[\"S-JTSK (Ferr");
+    add_srs_wkt (p, 1,
+		 "o)\",DATUM[\"S_JTSK_Ferro\",SPHEROID[\"Bessel 1841\",637");
+    add_srs_wkt (p, 2,
+		 "7397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6818\"]],PRIMEM[\"Ferro\",-17.6666666666");
+    add_srs_wkt (p, 4,
+		 "6667,AUTHORITY[\"EPSG\",\"8909\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4818\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Krovak\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "center\",49.5],PARAMETER[\"longitude_of_center\",42.5],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"azimuth\",30.28813972222222],PARAMETER[\"pseu");
+    add_srs_wkt (p, 10,
+		 "do_standard_parallel_1\",78.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2065\"],AXIS[\"X\",");
+    add_srs_wkt (p, 13, "SOUTH],AXIS[\"Y\",WEST]]");
+    p = add_epsg_def (first, last, 2066, "epsg", 2066,
+		      "Mount Dillon / Tobago Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=11.25217861111111 +lon_0=-60.686008888");
+    add_proj4text (p, 1,
+		   "88889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293");
+    add_proj4text (p, 2,
+		   ".645208759 +b=6356617.987679838 +to_meter=0.201166195164");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mount Dillon / Tobago Grid\",GEOGCS[\"Mount Dil");
+    add_srs_wkt (p, 1,
+		 "lon\",DATUM[\"Mount_Dillon\",SPHEROID[\"Clarke 1858\",63");
+    add_srs_wkt (p, 2,
+		 "78293.645208759,294.2606763692569,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "007\"]],AUTHORITY[\"EPSG\",\"6157\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4157\"]],UNIT[\"Clarke's link\",0.201166195164,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9039\"]],PROJECTION[\"Cassini_Soldn");
+    add_srs_wkt (p, 8,
+		 "er\"],PARAMETER[\"latitude_of_origin\",11.25217861111111");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-60.68600888888889],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",187500],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",180000],AUTHORITY[\"EPSG\",\"2066\"],AXIS[\"Eastin");
+    add_srs_wkt (p, 12, "g\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2067, "epsg", 2067,
+		      "Naparima 1955 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Naparima 1955 / UTM zone 20N\",GEOGCS[\"Naparim");
+    add_srs_wkt (p, 1,
+		 "a 1955\",DATUM[\"Naparima_1955\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 2,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6158\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"415");
+    add_srs_wkt (p, 6,
+		 "8\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11,
+		 "\",\"2067\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NO");
+    add_srs_wkt (p, 12, "RTH]]");
+    p = add_epsg_def (first, last, 2068, "epsg", 2068, "ELD79 / Libya zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 5\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "cale_factor\",0.9999],PARAMETER[\"false_easting\",200000");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 11, "068\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2069, "epsg", 2069, "ELD79 / Libya zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 6\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",11],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2069\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2070, "epsg", 2070, "ELD79 / Libya zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 7\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",13],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2070\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2071, "epsg", 2071, "ELD79 / Libya zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 8\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2071\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2072, "epsg", 2072, "ELD79 / Libya zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 9\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",17],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2072\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2073, "epsg", 2073, "ELD79 / Libya zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 10\",GEOGCS[\"ELD79\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"European_Libyan_Datum_1979\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",0],PARAMETER[\"central_meridian\",19],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2073\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2074, "epsg", 2074, "ELD79 / Libya zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 11\",GEOGCS[\"ELD79\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"European_Libyan_Datum_1979\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2074\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2075, "epsg", 2075, "ELD79 / Libya zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 12\",GEOGCS[\"ELD79\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"European_Libyan_Datum_1979\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",0],PARAMETER[\"central_meridian\",23],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2075\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2076, "epsg", 2076, "ELD79 / Libya zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / Libya zone 13\",GEOGCS[\"ELD79\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"European_Libyan_Datum_1979\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",0],PARAMETER[\"central_meridian\",25],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2076\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2077, "epsg", 2077, "ELD79 / UTM zone 32N");
+    add_proj4text (p, 0, "+proj=utm +zone=32 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / UTM zone 32N\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "cale_factor\",0.9996],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 11,
+		 "077\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2078, "epsg", 2078, "ELD79 / UTM zone 33N");
+    add_proj4text (p, 0, "+proj=utm +zone=33 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / UTM zone 33N\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "2078\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2079, "epsg", 2079, "ELD79 / UTM zone 34N");
+    add_proj4text (p, 0, "+proj=utm +zone=34 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / UTM zone 34N\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "2079\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2080, "epsg", 2080, "ELD79 / UTM zone 35N");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / UTM zone 35N\",GEOGCS[\"ELD79\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Libyan_Datum_1979\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "2080\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2081, "epsg", 2081,
+		      "Chos Malal 1914 / Argentina zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Chos Malal 1914 / Argentina zone 2\",GEOGCS[\"C");
+    add_srs_wkt (p, 1,
+		 "hos Malal 1914\",DATUM[\"Chos_Malal_1914\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6160\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4160\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",-90],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",2500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2081\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2082, "epsg", 2082,
+		      "Pampa del Castillo / Argentina zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pampa del Castillo / Argentina zone 2\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Pampa del Castillo\",DATUM[\"Pampa_del_Castillo\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7022\"]],TOWGS84[27.5,14,186.4,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6161\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4161\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",-90],PARAMETER[\"central_meridian\",-69],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",2500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2082");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2083, "epsg", 2083,
+		      "Hito XVIII 1963 / Argentina zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hito XVIII 1963 / Argentina zone 2\",GEOGCS[\"H");
+    add_srs_wkt (p, 1,
+		 "ito XVIII 1963\",DATUM[\"Hito_XVIII_1963\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6254\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4254\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",-90],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",2500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2083\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2084, "epsg", 2084,
+		      "Hito XVIII 1963 / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hito XVIII 1963 / UTM zone 19S\",GEOGCS[\"Hito ");
+    add_srs_wkt (p, 1,
+		 "XVIII 1963\",DATUM[\"Hito_XVIII_1963\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6254\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4254\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-69],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"2084\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2085, "epsg", 2085,
+		      "NAD27 / Cuba Norte (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99");
+    add_proj4text (p, 1,
+		   "993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=");
+    add_proj4text (p, 2, "NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Cuba Norte (deprecated)\",GEOGCS[\"NAD2");
+    add_srs_wkt (p, 1,
+		 "7\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clark");
+    add_srs_wkt (p, 2,
+		 "e 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_origin\",22.35],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",-81],PARAMETER[\"scale_factor\",0.9999360");
+    add_srs_wkt (p, 10,
+		 "2],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",280296.016],AUTHORITY[\"EPSG\",\"2085\"],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",NORTH],AXIS[\"X\",EAST]]");
+    p = add_epsg_def (first, last, 2086, "epsg", 2086,
+		      "NAD27 / Cuba Sur (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=50000");
+    add_proj4text (p, 2,
+		   "0 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Cuba Sur (deprecated)\",GEOGCS[\"NAD27\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 2,
+		 "866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"latitude_of_origin\",20.71666666666667],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-76.83333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.99994848],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",229126.939],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2086\"],AXIS[\"Y\",NORTH],AXIS[\"X\",EAST]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 2087, "epsg", 2087, "ELD79 / TM 12 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ELD79 / TM 12 NE\",GEOGCS[\"ELD79\",DATUM[\"Eur");
+    add_srs_wkt (p, 1,
+		 "opean_Libyan_Datum_1979\",SPHEROID[\"International 1924\"");
+    add_srs_wkt (p, 2,
+		 ",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6159\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4159\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2087\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2088, "epsg", 2088, "Carthage / TM 11 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Carthage / TM 11 NE\",GEOGCS[\"Carthage\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,2");
+    add_srs_wkt (p, 2,
+		 "93.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4223\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",11],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "2088\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2089, "epsg", 2089,
+		      "Yemen NGN96 / UTM zone 38N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Yemen NGN96 / UTM zone 38N\",GEOGCS[\"Yemen NGN");
+    add_srs_wkt (p, 1,
+		 "96\",DATUM[\"Yemen_National_Geodetic_Network_1996\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6163\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4163\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",45],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2089\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2090, "epsg", 2090,
+		      "Yemen NGN96 / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Yemen NGN96 / UTM zone 39N\",GEOGCS[\"Yemen NGN");
+    add_srs_wkt (p, 1,
+		 "96\",DATUM[\"Yemen_National_Geodetic_Network_1996\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6163\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4163\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",51],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2090\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2091, "epsg", 2091,
+		      "South Yemen / Gauss Kruger zone 8 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"South Yemen / Gauss Kruger zone 8 (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"South Yemen\",DATUM[\"South_Yemen\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6164\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4164\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",45],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",1],PARAMETER[\"false_easting\",8500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2091\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2092, "epsg", 2092,
+		      "South Yemen / Gauss Kruger zone 9 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"South Yemen / Gauss Kruger zone 9 (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"South Yemen\",DATUM[\"South_Yemen\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6164\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4164\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",51],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",1],PARAMETER[\"false_easting\",9500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2092\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2093, "epsg", 2093,
+		      "Hanoi 1972 / GK 106 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hanoi 1972 / GK 106 NE\",GEOGCS[\"Hanoi 1972\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Hanoi_1972\",SPHEROID[\"Krassowsky 1940\",637824");
+    add_srs_wkt (p, 2,
+		 "5,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[-17.51,-10");
+    add_srs_wkt (p, 3,
+		 "8.32,-62.39,0,0,0,0],AUTHORITY[\"EPSG\",\"6147\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4147\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",106],PARAMETER[\"scale_factor\",1],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2093\"],AXIS[\"X\",NORTH],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2094, "epsg", 2094, "WGS 72BE / TM 106 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / TM 106 NE\",GEOGCS[\"WGS 72BE\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TOWG");
+    add_srs_wkt (p, 3,
+		 "S84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",106],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"2094\"],AXIS[\"Eas");
+    add_srs_wkt (p, 12, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2095, "epsg", 2095, "Bissau / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,");
+    add_proj4text (p, 1, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bissau / UTM zone 28N\",GEOGCS[\"Bissau\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Bissau\",SPHEROID[\"International 1924\",6378388,297,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-173,253,27,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0],AUTHORITY[\"EPSG\",\"6165\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4165\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",-15]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 10,
+		 "sting\",500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2095\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 12, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 2096, "epsg", 2096,
+		      "Korean 1985 / Korea East Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=5");
+    add_proj4text (p, 1, "00000 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Korean 1985 / Korea East Belt\",GEOGCS[\"Korean");
+    add_srs_wkt (p, 1,
+		 " 1985\",DATUM[\"Korean_Datum_1985\",SPHEROID[\"Bessel 18");
+    add_srs_wkt (p, 2,
+		 "41\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6162\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4162\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",38],PARAMETER[\"central_meridian\",129");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",200000],PARAMETER[\"false_northing\",500000],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"2096\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 2097, "epsg", 2097,
+		      "Korean 1985 / Korea Central Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=5");
+    add_proj4text (p, 1, "00000 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Korean 1985 / Korea Central Belt\",GEOGCS[\"Kor");
+    add_srs_wkt (p, 1,
+		 "ean 1985\",DATUM[\"Korean_Datum_1985\",SPHEROID[\"Bessel");
+    add_srs_wkt (p, 2,
+		 " 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6162\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4162\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",38],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "127],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",200000],PARAMETER[\"false_northing\",500000],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"2097\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 12, "ST]]");
+    p = add_epsg_def (first, last, 2098, "epsg", 2098,
+		      "Korean 1985 / Korea West Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=5");
+    add_proj4text (p, 1, "00000 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Korean 1985 / Korea West Belt\",GEOGCS[\"Korean");
+    add_srs_wkt (p, 1,
+		 " 1985\",DATUM[\"Korean_Datum_1985\",SPHEROID[\"Bessel 18");
+    add_srs_wkt (p, 2,
+		 "41\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6162\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4162\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",38],PARAMETER[\"central_meridian\",125");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",200000],PARAMETER[\"false_northing\",500000],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"2098\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 2099, "epsg", 2099,
+		      "Qatar 1948 / Qatar Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=25.38236111111111 +lon_0=50.7613888888");
+    add_proj4text (p, 1,
+		   "8889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Qatar 1948 / Qatar Grid\",GEOGCS[\"Qatar 1948\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Qatar_1948\",SPHEROID[\"Helmert 1906\",6378200,");
+    add_srs_wkt (p, 2,
+		 "298.3,AUTHORITY[\"EPSG\",\"7020\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6286\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4286\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Cassin");
+    add_srs_wkt (p, 7,
+		 "i_Soldner\"],PARAMETER[\"latitude_of_origin\",25.3823611");
+    add_srs_wkt (p, 8,
+		 "1111111],PARAMETER[\"central_meridian\",50.7613888888888");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"false_easting\",100000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",100000],AUTHORITY[\"EPSG\",\"2099\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2100, "epsg", 2100, "GGRS87 / Greek Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=GRS80 +datum=GGRS87 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GGRS87 / Greek Grid\",GEOGCS[\"GGRS87\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Greek_Geodetic_Reference_System_1987\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[-199.87,74.79,246.62,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6121\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4121\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",24],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2100\"],AX");
+    add_srs_wkt (p, 12, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2101, "epsg", 2101,
+		      "Lake / Maracaibo Grid M1");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.");
+    add_proj4text (p, 2, "972 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lake / Maracaibo Grid M1\",GEOGCS[\"Lake\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"Lake\",SPHEROID[\"International 1924\",6378388,297,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6249\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4249\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Confo");
+    add_srs_wkt (p, 7,
+		 "rmal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",10.16");
+    add_srs_wkt (p, 8,
+		 "666666666667],PARAMETER[\"central_meridian\",-71.6056177");
+    add_srs_wkt (p, 9,
+		 "7777777],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",0],PARAMETER[\"false_northing\",-52684.972],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"2101\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 2102, "epsg", 2102, "Lake / Maracaibo Grid");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=14");
+    add_proj4text (p, 2, "7315.028 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lake / Maracaibo Grid\",GEOGCS[\"Lake\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Lake\",SPHEROID[\"International 1924\",6378388,297,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6249\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4249\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conforma");
+    add_srs_wkt (p, 7,
+		 "l_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",10.16666");
+    add_srs_wkt (p, 8,
+		 "666666667],PARAMETER[\"central_meridian\",-71.6056177777");
+    add_srs_wkt (p, 9,
+		 "7777],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 10,
+		 "sting\",200000],PARAMETER[\"false_northing\",147315.028]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"2102\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 2103, "epsg", 2103,
+		      "Lake / Maracaibo Grid M3");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=44");
+    add_proj4text (p, 2, "7315.028 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lake / Maracaibo Grid M3\",GEOGCS[\"Lake\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"Lake\",SPHEROID[\"International 1924\",6378388,297,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6249\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4249\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Confo");
+    add_srs_wkt (p, 7,
+		 "rmal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",10.16");
+    add_srs_wkt (p, 8,
+		 "666666666667],PARAMETER[\"central_meridian\",-71.6056177");
+    add_srs_wkt (p, 9,
+		 "7777777],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",447315.0");
+    add_srs_wkt (p, 11,
+		 "28],AUTHORITY[\"EPSG\",\"2103\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2104, "epsg", 2104,
+		      "Lake / Maracaibo La Rosa Grid");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-2");
+    add_proj4text (p, 2, "3139.97 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lake / Maracaibo La Rosa Grid\",GEOGCS[\"Lake\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Lake\",SPHEROID[\"International 1924\",6378388,");
+    add_srs_wkt (p, 2,
+		 "297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "249\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4249\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",10.16666666666667],PARAMETER[\"central_meridian\",-71.6");
+    add_srs_wkt (p, 9,
+		 "0561777777777],PARAMETER[\"scale_factor\",1],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",-17044],PARAMETER[\"false_northing\",-23");
+    add_srs_wkt (p, 11,
+		 "139.97],AUTHORITY[\"EPSG\",\"2104\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2105, "epsg", 2105,
+		      "NZGD2000 / Mount Eden 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Mount Eden 2000\",GEOGCS[\"NZGD2000\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-36.879722222");
+    add_srs_wkt (p, 9,
+		 "22222],PARAMETER[\"central_meridian\",174.7641666666667]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",400000],PARAMETER[\"false_northing\",800000],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2105\"],AXIS[\"Northing\",NORTH],AXIS[");
+    add_srs_wkt (p, 13, "\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2106, "epsg", 2106,
+		      "NZGD2000 / Bay of Plenty 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Bay of Plenty 2000\",GEOGCS[\"NZGD20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"616");
+    add_srs_wkt (p, 4,
+		 "7\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-37.761111");
+    add_srs_wkt (p, 9,
+		 "11111111],PARAMETER[\"central_meridian\",176.46611111111");
+    add_srs_wkt (p, 10,
+		 "11],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",400000],PARAMETER[\"false_northing\",800000],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"2106\"],AXIS[\"Northing\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2107, "epsg", 2107,
+		      "NZGD2000 / Poverty Bay 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555");
+    add_proj4text (p, 1,
+		   "555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Poverty Bay 2000\",GEOGCS[\"NZGD2000");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-38.624444444");
+    add_srs_wkt (p, 9,
+		 "44444],PARAMETER[\"central_meridian\",177.8855555555556]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",400000],PARAMETER[\"false_northing\",800000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2107\"],AXIS[\"Northing\",NORTH],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST]]");
+    p = add_epsg_def (first, last, 2108, "epsg", 2108,
+		      "NZGD2000 / Hawkes Bay 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Hawkes Bay 2000\",GEOGCS[\"NZGD2000\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-39.650833333");
+    add_srs_wkt (p, 9,
+		 "33333],PARAMETER[\"central_meridian\",176.6736111111111]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",400000],PARAMETER[\"false_northing\",800000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2108\"],AXIS[\"Northing\",NORTH],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST]]");
+    p = add_epsg_def (first, last, 2109, "epsg", 2109,
+		      "NZGD2000 / Taranaki 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777");
+    add_proj4text (p, 1,
+		   "777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Taranaki 2000\",GEOGCS[\"NZGD2000\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",-39.13555555555");
+    add_srs_wkt (p, 9,
+		 "556],PARAMETER[\"central_meridian\",174.2277777777778],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",400000],PARAMETER[\"false_northing\",800000],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2109\"],AXIS[\"Northing\",NORTH],AXIS[\"Easti");
+    add_srs_wkt (p, 13, "ng\",EAST]]");
+    p = add_epsg_def (first, last, 2110, "epsg", 2110,
+		      "NZGD2000 / Tuhirangi 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1");
+    add_proj4text (p, 1,
+		   " +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Tuhirangi 2000\",GEOGCS[\"NZGD2000\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-39.512222222");
+    add_srs_wkt (p, 9,
+		 "22222],PARAMETER[\"central_meridian\",175.64],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"scale_factor\",1],PARAMETER[\"false_easting\",400000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",800000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12,
+		 "\"2110\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2111, "epsg", 2111,
+		      "NZGD2000 / Wanganui 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555");
+    add_proj4text (p, 1,
+		   "555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Wanganui 2000\",GEOGCS[\"NZGD2000\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",-40.24194444444");
+    add_srs_wkt (p, 9,
+		 "444],PARAMETER[\"central_meridian\",175.4880555555555],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",400000],PARAMETER[\"false_northing\",800000],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2111\"],AXIS[\"Northing\",NORTH],AXIS[\"Easti");
+    add_srs_wkt (p, 13, "ng\",EAST]]");
+    p = add_epsg_def (first, last, 2112, "epsg", 2112,
+		      "NZGD2000 / Wairarapa 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222");
+    add_proj4text (p, 1,
+		   "222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Wairarapa 2000\",GEOGCS[\"NZGD2000\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-40.925277777");
+    add_srs_wkt (p, 9,
+		 "77777],PARAMETER[\"central_meridian\",175.6472222222222]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",400000],PARAMETER[\"false_northing\",800000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2112\"],AXIS[\"Northing\",NORTH],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST]]");
+    p = add_epsg_def (first, last, 2113, "epsg", 2113,
+		      "NZGD2000 / Wellington 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.77638888");
+    add_proj4text (p, 1,
+		   "88889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84");
+    add_proj4text (p, 2, "=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Wellington 2000\",GEOGCS[\"NZGD2000\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-41.301111111");
+    add_srs_wkt (p, 9,
+		 "1111],PARAMETER[\"central_meridian\",174.7763888888889],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",400000],PARAMETER[\"false_northing\",800000],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2113\"],AXIS[\"Northing\",NORTH],AXIS[\"Easti");
+    add_srs_wkt (p, 13, "ng\",EAST]]");
+    p = add_epsg_def (first, last, 2114, "epsg", 2114,
+		      "NZGD2000 / Collingwood 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444");
+    add_proj4text (p, 1,
+		   "444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Collingwood 2000\",GEOGCS[\"NZGD2000");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-40.714722222");
+    add_srs_wkt (p, 9,
+		 "22223],PARAMETER[\"central_meridian\",172.6719444444444]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",400000],PARAMETER[\"false_northing\",800000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2114\"],AXIS[\"Northing\",NORTH],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST]]");
+    p = add_epsg_def (first, last, 2115, "epsg", 2115,
+		      "NZGD2000 / Nelson 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Nelson 2000\",GEOGCS[\"NZGD2000\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",-41.274444444444");
+    add_srs_wkt (p, 9,
+		 "44],PARAMETER[\"central_meridian\",173.2991666666667],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "400000],PARAMETER[\"false_northing\",800000],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2115\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST]]");
+    p = add_epsg_def (first, last, 2116, "epsg", 2116,
+		      "NZGD2000 / Karamea 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888");
+    add_proj4text (p, 1,
+		   "888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Karamea 2000\",GEOGCS[\"NZGD2000\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",-41.28972222222");
+    add_srs_wkt (p, 9,
+		 "222],PARAMETER[\"central_meridian\",172.1088888888889],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",400000],PARAMETER[\"false_northing\",800000],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2116\"],AXIS[\"Northing\",NORTH],AXIS[\"Easti");
+    add_srs_wkt (p, 13, "ng\",EAST]]");
+    p = add_epsg_def (first, last, 2117, "epsg", 2117,
+		      "NZGD2000 / Buller 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Buller 2000\",GEOGCS[\"NZGD2000\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",-41.810555555555");
+    add_srs_wkt (p, 9,
+		 "55],PARAMETER[\"central_meridian\",171.5811111111111],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "400000],PARAMETER[\"false_northing\",800000],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2117\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST]]");
+    p = add_epsg_def (first, last, 2118, "epsg", 2118, "NZGD2000 / Grey 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222");
+    add_proj4text (p, 1,
+		   "222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Grey 2000\",GEOGCS[\"NZGD2000\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],");
+    add_srs_wkt (p, 3,
+		 "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",-42.33361111111111]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",171.5497222222222],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",400");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",800000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12,
+		 "SG\",\"2118\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\"");
+    add_srs_wkt (p, 13, ",EAST]]");
+    p = add_epsg_def (first, last, 2119, "epsg", 2119, "NZGD2000 / Amuri 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1");
+    add_proj4text (p, 1,
+		   " +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Amuri 2000\",GEOGCS[\"NZGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",-42.6888888888888");
+    add_srs_wkt (p, 9,
+		 "8],PARAMETER[\"central_meridian\",173.01],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",400000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",800000],AUTHORITY[\"EPSG\",\"21");
+    add_srs_wkt (p, 12,
+		 "19\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2120, "epsg", 2120,
+		      "NZGD2000 / Marlborough 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444");
+    add_proj4text (p, 1,
+		   "444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Marlborough 2000\",GEOGCS[\"NZGD2000");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-41.544444444");
+    add_srs_wkt (p, 9,
+		 "44444],PARAMETER[\"central_meridian\",173.8019444444444]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",400000],PARAMETER[\"false_northing\",800000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2120\"],AXIS[\"Northing\",NORTH],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST]]");
+    p = add_epsg_def (first, last, 2121, "epsg", 2121,
+		      "NZGD2000 / Hokitika 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222");
+    add_proj4text (p, 1,
+		   "222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Hokitika 2000\",GEOGCS[\"NZGD2000\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",-42.88611111111");
+    add_srs_wkt (p, 9,
+		 "111],PARAMETER[\"central_meridian\",170.9797222222222],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",400000],PARAMETER[\"false_northing\",800000],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2121\"],AXIS[\"Northing\",NORTH],AXIS[\"Easti");
+    add_srs_wkt (p, 13, "ng\",EAST]]");
+    p = add_epsg_def (first, last, 2122, "epsg", 2122,
+		      "NZGD2000 / Okarito 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 ");
+    add_proj4text (p, 1,
+		   "+x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Okarito 2000\",GEOGCS[\"NZGD2000\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",-43.11],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",170.2608333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",400000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",800000],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12,
+		 "122\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2123, "epsg", 2123,
+		      "NZGD2000 / Jacksons Bay 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Jacksons Bay 2000\",GEOGCS[\"NZGD200");
+    add_srs_wkt (p, 1,
+		 "0\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-43.977777777");
+    add_srs_wkt (p, 9,
+		 "77778],PARAMETER[\"central_meridian\",168.6061111111111]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",400000],PARAMETER[\"false_northing\",800000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2123\"],AXIS[\"Northing\",NORTH],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST]]");
+    p = add_epsg_def (first, last, 2124, "epsg", 2124,
+		      "NZGD2000 / Mount Pleasant 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444");
+    add_proj4text (p, 1,
+		   "444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Mount Pleasant 2000\",GEOGCS[\"NZGD2");
+    add_srs_wkt (p, 1,
+		 "000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"616");
+    add_srs_wkt (p, 4,
+		 "7\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-43.590555");
+    add_srs_wkt (p, 9,
+		 "55555556],PARAMETER[\"central_meridian\",172.72694444444");
+    add_srs_wkt (p, 10,
+		 "45],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",400000],PARAMETER[\"false_northing\",800000],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"2124\"],AXIS[\"Northing\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2125, "epsg", 2125,
+		      "NZGD2000 / Gawler 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555");
+    add_proj4text (p, 1,
+		   "555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Gawler 2000\",GEOGCS[\"NZGD2000\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",-43.748611111111");
+    add_srs_wkt (p, 9,
+		 "11],PARAMETER[\"central_meridian\",171.3605555555555],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "400000],PARAMETER[\"false_northing\",800000],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2125\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST]]");
+    p = add_epsg_def (first, last, 2126, "epsg", 2126,
+		      "NZGD2000 / Timaru 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222");
+    add_proj4text (p, 1,
+		   "222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Timaru 2000\",GEOGCS[\"NZGD2000\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",-44.401944444444");
+    add_srs_wkt (p, 9,
+		 "45],PARAMETER[\"central_meridian\",171.0572222222222],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "400000],PARAMETER[\"false_northing\",800000],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2126\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST]]");
+    p = add_epsg_def (first, last, 2127, "epsg", 2127,
+		      "NZGD2000 / Lindis Peak 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400");
+    add_proj4text (p, 1,
+		   "000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Lindis Peak 2000\",GEOGCS[\"NZGD2000");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-44.735],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",169.4675],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",1],PARAMETER[\"false_easting\",400000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",800000],AUTHORITY[\"EPSG\",\"2127\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2128, "epsg", 2128,
+		      "NZGD2000 / Mount Nicholas 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Mount Nicholas 2000\",GEOGCS[\"NZGD2");
+    add_srs_wkt (p, 1,
+		 "000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"616");
+    add_srs_wkt (p, 4,
+		 "7\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-45.132777");
+    add_srs_wkt (p, 9,
+		 "77777778],PARAMETER[\"central_meridian\",168.39861111111");
+    add_srs_wkt (p, 10,
+		 "11],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",400000],PARAMETER[\"false_northing\",800000],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"2128\"],AXIS[\"Northing\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2129, "epsg", 2129,
+		      "NZGD2000 / Mount York 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Mount York 2000\",GEOGCS[\"NZGD2000\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-45.563611111");
+    add_srs_wkt (p, 9,
+		 "11111],PARAMETER[\"central_meridian\",167.7386111111111]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",400000],PARAMETER[\"false_northing\",800000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2129\"],AXIS[\"Northing\",NORTH],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST]]");
+    p = add_epsg_def (first, last, 2130, "epsg", 2130,
+		      "NZGD2000 / Observation Point 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Observation Point 2000\",GEOGCS[\"NZ");
+    add_srs_wkt (p, 1,
+		 "GD2000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",-45.81");
+    add_srs_wkt (p, 9,
+		 "611111111111],PARAMETER[\"central_meridian\",170.6283333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",400000],PARAMETER[\"false_northing\",800000],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"2130\"],AXIS[\"Northing\",NORTH],AXI");
+    add_srs_wkt (p, 13, "S[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2131, "epsg", 2131,
+		      "NZGD2000 / North Taieri 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k");
+    add_proj4text (p, 1,
+		   "=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 2, ",0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / North Taieri 2000\",GEOGCS[\"NZGD200");
+    add_srs_wkt (p, 1,
+		 "0\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",-45.861388888");
+    add_srs_wkt (p, 9,
+		 "88889],PARAMETER[\"central_meridian\",170.2825],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.99996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "400000],PARAMETER[\"false_northing\",800000],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2131\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST]]");
+    p = add_epsg_def (first, last, 2132, "epsg", 2132, "NZGD2000 / Bluff 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +");
+    add_proj4text (p, 1,
+		   "x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Bluff 2000\",GEOGCS[\"NZGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",-46.6],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",168.3427777777778],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",1],PARAMETER[\"false_easting\",400000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",800000],AUTHORITY[\"EPSG\",\"2132");
+    add_srs_wkt (p, 12, "\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2133, "epsg", 2133,
+		      "NZGD2000 / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / UTM zone 58S\",GEOGCS[\"NZGD2000\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",165],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"2133\"],AXIS[");
+    add_srs_wkt (p, 12, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2134, "epsg", 2134,
+		      "NZGD2000 / UTM zone 59S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / UTM zone 59S\",GEOGCS[\"NZGD2000\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",171],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"2134\"],AXIS[");
+    add_srs_wkt (p, 12, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2135, "epsg", 2135,
+		      "NZGD2000 / UTM zone 60S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / UTM zone 60S\",GEOGCS[\"NZGD2000\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",177],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"2135\"],AXIS[");
+    add_srs_wkt (p, 12, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2136, "epsg", 2136,
+		      "Accra / Ghana National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.9997");
+    add_proj4text (p, 1,
+		   "5 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.68");
+    add_proj4text (p, 2, "9189189 +to_meter=0.3047997101815088 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Accra / Ghana National Grid\",GEOGCS[\"Accra\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Accra\",SPHEROID[\"War Office\",6378300,296,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7029\"]],AUTHORITY[\"EPSG\",\"6168\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4168\"]],UNIT[\"Gold Coast f");
+    add_srs_wkt (p, 6,
+		 "oot\",0.3047997101815088,AUTHORITY[\"EPSG\",\"9094\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_origin\",4.666666666666667],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",-1],PARAMETER[\"scale_factor\",0.99975],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",900000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"2136\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_01 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2137, "epsg", 2137, "Accra / TM 1 NW");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +a=6378300 +b=6356751.689189189 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Accra / TM 1 NW\",GEOGCS[\"Accra\",DATUM[\"Accr");
+    add_srs_wkt (p, 1,
+		 "a\",SPHEROID[\"War Office\",6378300,296,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 2,
+		 "\",\"7029\"]],AUTHORITY[\"EPSG\",\"6168\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 3,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"4168\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 7,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 8,
+		 "dian\",-1],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 10,
+		 "],AUTHORITY[\"EPSG\",\"2137\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 11, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2138, "epsg", 2138,
+		      "NAD27(CGQ77) / Quebec Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_");
+    add_proj4text (p, 1, "0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27(CGQ77) / Quebec Lambert\",GEOGCS[\"NAD27(");
+    add_srs_wkt (p, 1,
+		 "CGQ77)\",DATUM[\"North_American_Datum_1927_CGQ77\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6609\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4609\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",60],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_2\",46],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",44],PARAMETER[\"central_meridian\",-68.5],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",0],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"2138\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 2139, "epsg", 2139,
+		      "NAD83(CSRS98) / SCoPQ zone 2 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / SCoPQ zone 2 (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-55.5],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",304800],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"2139\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2140, "epsg", 2140,
+		      "NAD83(CSRS98) / MTM zone 3 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 3 (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-58.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2140\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2141, "epsg", 2141,
+		      "NAD83(CSRS98) / MTM zone 4 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 4 (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-61.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2141\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2142, "epsg", 2142,
+		      "NAD83(CSRS98) / MTM zone 5 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 5 (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-64.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2142\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2143, "epsg", 2143,
+		      "NAD83(CSRS98) / MTM zone 6 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 6 (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-67.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2143\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2144, "epsg", 2144,
+		      "NAD83(CSRS98) / MTM zone 7 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 7 (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-70.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2144\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2145, "epsg", 2145,
+		      "NAD83(CSRS98) / MTM zone 8 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 8 (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-73.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2145\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2146, "epsg", 2146,
+		      "NAD83(CSRS98) / MTM zone 9 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 9 (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-76.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2146\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2147, "epsg", 2147,
+		      "NAD83(CSRS98) / MTM zone 10 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / MTM zone 10 (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "99433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-79.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2147\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 2148, "epsg", 2148,
+		      "NAD83(CSRS98) / UTM zone 21N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 21N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-57],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2148\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2149, "epsg", 2149,
+		      "NAD83(CSRS98) / UTM zone 18N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 18N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-75],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2149\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2150, "epsg", 2150,
+		      "NAD83(CSRS98) / UTM zone 17N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 17N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-81],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2150\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2151, "epsg", 2151,
+		      "NAD83(CSRS98) / UTM zone 13N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 13N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-105],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2151\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 13, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 2152, "epsg", 2152,
+		      "NAD83(CSRS98) / UTM zone 12N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 12N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-111],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2152\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 13, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 2153, "epsg", 2153,
+		      "NAD83(CSRS98) / UTM zone 11N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / UTM zone 11N (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4140\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-117],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2153\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 13, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 2154, "epsg", 2154, "RGF93 / Lambert-93");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=");
+    add_proj4text (p, 1,
+		   "700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / Lambert-93\",GEOGCS[\"RGF93\",DATUM[\"R");
+    add_srs_wkt (p, 1,
+		 "eseau_Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS");
+    add_srs_wkt (p, 3,
+		 "84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",49],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",44],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 10,
+		 "\",46.5],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",700000],PARAMETER[\"false_northing\",6600");
+    add_srs_wkt (p, 12,
+		 "000],AUTHORITY[\"EPSG\",\"2154\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2155, "epsg", 2155,
+		      "American Samoa 1962 / American Samoa Lambert (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.266666666");
+    add_proj4text (p, 1,
+		   "66667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +e");
+    add_proj4text (p, 2,
+		   "llps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"American Samoa 1962 / American Samoa Lambert (d");
+    add_srs_wkt (p, 1,
+		 "eprecated)\",GEOGCS[\"American Samoa 1962\",DATUM[\"Amer");
+    add_srs_wkt (p, 2,
+		 "ican_Samoa_1962\",SPHEROID[\"Clarke 1866\",6378206.4,294");
+    add_srs_wkt (p, 3,
+		 ".9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],TOWGS84[-11");
+    add_srs_wkt (p, 4,
+		 "5,118,426,0,0,0,0],AUTHORITY[\"EPSG\",\"6169\"]],PRIMEM[");
+    add_srs_wkt (p, 5,
+		 "\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"deg");
+    add_srs_wkt (p, 6,
+		 "ree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"4169\"]],UNIT[\"US survey foot\",0.");
+    add_srs_wkt (p, 8,
+		 "3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTIO");
+    add_srs_wkt (p, 9,
+		 "N[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 10,
+		 "of_origin\",-14.26666666666667],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 11,
+		 "dian\",170],PARAMETER[\"scale_factor\",1],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",500000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 13,
+		 "THORITY[\"EPSG\",\"2155\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 14, "ORTH]]");
+    p = add_epsg_def (first, last, 2156, "epsg", 2156,
+		      "NAD83(HARN) / UTM zone 59S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 59S (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_N");
+    add_srs_wkt (p, 2,
+		 "etwork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",171],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"2156\"],AXIS[");
+    add_srs_wkt (p, 12, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2157, "epsg", 2157,
+		      "IRENET95 / Irish Transverse Mercator");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000");
+    add_proj4text (p, 1,
+		   " +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IRENET95 / Irish Transverse Mercator\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "IRENET95\",DATUM[\"IRENET95\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6173\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4173\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",53.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-8],PARAMETER[\"scale_factor\",0.99982],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",600000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",750000],AUTHORITY[\"EPSG\",\"2157\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2158, "epsg", 2158,
+		      "IRENET95 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IRENET95 / UTM zone 29N\",GEOGCS[\"IRENET95\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"IRENET95\",SPHEROID[\"GRS 1980\",6378137,298.2572");
+    add_srs_wkt (p, 2,
+		 "22101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0],AUTHORITY[\"EPSG\",\"6173\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4173\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",-9],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2158\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 2159, "epsg", 2159,
+		      "Sierra Leone 1924 / New Colony Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_");
+    add_proj4text (p, 1,
+		   "0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.6891891");
+    add_proj4text (p, 2, "89 +to_meter=0.3047997101815088 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sierra Leone 1924 / New Colony Grid\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Sierra Leone 1924\",DATUM[\"Sierra_Leone_Colony_1924\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"War Office\",6378300,296,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7029\"]],AUTHORITY[\"EPSG\",\"6174\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4174\"]],UNIT[\"Gold Coast foot\",0.304799710");
+    add_srs_wkt (p, 7,
+		 "1815088,AUTHORITY[\"EPSG\",\"9094\"]],PROJECTION[\"Trans");
+    add_srs_wkt (p, 8,
+		 "verse_Mercator\"],PARAMETER[\"latitude_of_origin\",6.666");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"central_meridian\",-12],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "2159\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 2160, "epsg", 2160,
+		      "Sierra Leone 1924 / New War Office Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_");
+    add_proj4text (p, 1,
+		   "0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b");
+    add_proj4text (p, 2,
+		   "=6356751.689189189 +to_meter=0.3047997101815088 +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sierra Leone 1924 / New War Office Grid\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Sierra Leone 1924\",DATUM[\"Sierra_Leone_Colony_1924");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"War Office\",6378300,296,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7029\"]],AUTHORITY[\"EPSG\",\"6174\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4174\"]],UNIT[\"Gold Coast foot\",0.304799");
+    add_srs_wkt (p, 7,
+		 "7101815088,AUTHORITY[\"EPSG\",\"9094\"]],PROJECTION[\"Tr");
+    add_srs_wkt (p, 8,
+		 "ansverse_Mercator\"],PARAMETER[\"latitude_of_origin\",6.");
+    add_srs_wkt (p, 9,
+		 "666666666666667],PARAMETER[\"central_meridian\",-12],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",8");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",600000],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"2160\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2161, "epsg", 2161,
+		      "Sierra Leone 1968 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,");
+    add_proj4text (p, 1, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sierra Leone 1968 / UTM zone 28N\",GEOGCS[\"Sie");
+    add_srs_wkt (p, 1,
+		 "rra Leone 1968\",DATUM[\"Sierra_Leone_1968\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7012\"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6175\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4175\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",-15],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2161\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2162, "epsg", 2162,
+		      "Sierra Leone 1968 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,");
+    add_proj4text (p, 1, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sierra Leone 1968 / UTM zone 29N\",GEOGCS[\"Sie");
+    add_srs_wkt (p, 1,
+		 "rra Leone 1968\",DATUM[\"Sierra_Leone_1968\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7012\"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6175\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4175\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2162\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2163, "epsg", 2163, "unnamed");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=637099");
+    add_proj4text (p, 1, "7 +b=6370997 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"un");
+    add_srs_wkt (p, 1,
+		 "known\",SPHEROID[\"unnamed\",6370997,0]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 2,
+		 "ich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION");
+    add_srs_wkt (p, 3,
+		 "[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 4,
+		 "of_center\",45],PARAMETER[\"longitude_of_center\",-100],");
+    add_srs_wkt (p, 5,
+		 "PARAMETER[\"false_easting\",0],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 6,
+		 "g\",0],UNIT[\"Meter\",1],AUTHORITY[\"EPSG\",\"2163\"]]");
+    p = add_epsg_def (first, last, 2164, "epsg", 2164,
+		      "Locodjo 1965 / TM 5 NW");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Locodjo 1965 / TM 5 NW\",GEOGCS[\"Locodjo 1965\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Locodjo_1965\",SPHEROID[\"Clarke 1880 (RGS)\",6");
+    add_srs_wkt (p, 2,
+		 "378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[-125,53,467,0,0,0,0],AUTHORITY[\"EPSG\",\"6142\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4142\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",-5],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"2164\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2165, "epsg", 2165,
+		      "Abidjan 1987 / TM 5 NW");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +un");
+    add_proj4text (p, 2, "its=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Abidjan 1987 / TM 5 NW\",GEOGCS[\"Abidjan 1987\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Abidjan_1987\",SPHEROID[\"Clarke 1880 (RGS)\",6");
+    add_srs_wkt (p, 2,
+		 "378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[-124.76,53,466.79,0,0,0,0],AUTHORITY[\"EPSG\",\"6143\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4143\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-5],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2165\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2166, "epsg", 2166,
+		      "Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / Gauss Kruger zone 3 (depreca");
+    add_srs_wkt (p, 1,
+		 "ted)\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_");
+    add_srs_wkt (p, 2,
+		 "83\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",9],PARAMETER[\"scale_factor\",1],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",3500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2166\"],AXIS[\"X\",NORTH],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2167, "epsg", 2167,
+		      "Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / Gauss Kruger zone 4 (depreca");
+    add_srs_wkt (p, 1,
+		 "ted)\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_");
+    add_srs_wkt (p, 2,
+		 "83\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",12],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",4500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"2167\"],AXIS[\"X\",NORTH],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2168, "epsg", 2168,
+		      "Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / Gauss Kruger zone 5 (depreca");
+    add_srs_wkt (p, 1,
+		 "ted)\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_");
+    add_srs_wkt (p, 2,
+		 "83\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",5500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"2168\"],AXIS[\"X\",NORTH],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2169, "epsg", 2169,
+		      "Luxembourg 1930 / Gauss");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.1666666666");
+    add_proj4text (p, 1,
+		   "66667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-");
+    add_proj4text (p, 2,
+		   "193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Luxembourg 1930 / Gauss\",GEOGCS[\"Luxembourg 1");
+    add_srs_wkt (p, 1,
+		 "930\",DATUM[\"Luxembourg_1930\",SPHEROID[\"International");
+    add_srs_wkt (p, 2,
+		 " 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS8");
+    add_srs_wkt (p, 3,
+		 "4[-193,13.7,-39.3,-0.41,-2.933,2.688,0.43],AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"6181\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4181\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",49.83333333333334],PARAMETER[\"central_meridian\",6.166");
+    add_srs_wkt (p, 10,
+		 "666666666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",80000],PARAMETER[\"false_northing\",1000");
+    add_srs_wkt (p, 12,
+		 "00],AUTHORITY[\"EPSG\",\"2169\"],AXIS[\"X\",NORTH],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2170, "epsg", 2170,
+		      "MGI / Slovenia Grid (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Slovenia Grid (deprecated)\",GEOGCS[\"MGI");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5");
+    add_srs_wkt (p, 4,
+		 ".297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 5,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 6,
+		 "0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"2170\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",EAST]]");
+    p = add_epsg_def (first, last, 2171, "epsg", 2171,
+		      "Pulkovo 1942(58) / Poland zone I (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0");
+    add_proj4text (p, 1,
+		   ".9998 +x_0=4637000 +y_0=5647000 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Poland zone I (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Oblique_Stereographic\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_origin\",50.625],PARAMETER[\"cen");
+    add_srs_wkt (p, 9,
+		 "tral_meridian\",21.08333333333333],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 10,
+		 "tor\",0.9998],PARAMETER[\"false_easting\",4637000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",5647000],AUTHORITY[\"EPSG\",\"21");
+    add_srs_wkt (p, 12, "71\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2172, "epsg", 2172,
+		      "Pulkovo 1942(58) / Poland zone II");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777");
+    add_proj4text (p, 1,
+		   "777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Poland zone II\",GEOGCS[\"Pu");
+    add_srs_wkt (p, 1,
+		 "lkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID[\"Kr");
+    add_srs_wkt (p, 2,
+		 "assowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",53.00194444444445],PARAMETER[\"centr");
+    add_srs_wkt (p, 9,
+		 "al_meridian\",21.50277777777778],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 10,
+		 "r\",0.9998],PARAMETER[\"false_easting\",4603000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",5806000],AUTHORITY[\"EPSG\",\"2172");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2173, "epsg", 2173,
+		      "Pulkovo 1942(58) / Poland zone III");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Poland zone III\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID[\"K");
+    add_srs_wkt (p, 2,
+		 "rassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",53.58333333333334],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",17.00833333333333],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9998],PARAMETER[\"false_easting\",3501000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",5999000],AUTHORITY[\"EPSG\",\"217");
+    add_srs_wkt (p, 12, "3\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2174, "epsg", 2174,
+		      "Pulkovo 1942(58) / Poland zone IV");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222");
+    add_proj4text (p, 1,
+		   "222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Poland zone IV\",GEOGCS[\"Pu");
+    add_srs_wkt (p, 1,
+		 "lkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID[\"Kr");
+    add_srs_wkt (p, 2,
+		 "assowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",51.67083333333333],PARAMETER[\"centr");
+    add_srs_wkt (p, 9,
+		 "al_meridian\",16.67222222222222],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 10,
+		 "r\",0.9998],PARAMETER[\"false_easting\",3703000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",5627000],AUTHORITY[\"EPSG\",\"2174");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2175, "epsg", 2175,
+		      "Pulkovo 1942(58) / Poland zone V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.99998");
+    add_proj4text (p, 1,
+		   "3 +x_0=237000 +y_0=-4700000 +ellps=krass +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Poland zone V\",GEOGCS[\"Pul");
+    add_srs_wkt (p, 1,
+		 "kovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID[\"Kra");
+    add_srs_wkt (p, 2,
+		 "ssowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",18.9");
+    add_srs_wkt (p, 9,
+		 "5833333333333],PARAMETER[\"scale_factor\",0.999983],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",237000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",-4700000],AUTHORITY[\"EPSG\",\"2175\"],AXIS[\"X\",N");
+    add_srs_wkt (p, 12, "ORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2176, "epsg", 2176,
+		      "ETRS89 / Poland CS2000 zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Poland CS2000 zone 5\",GEOGCS[\"ETRS89");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Terrestrial_Reference_System_1989\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",15],PARAMETER[\"scale_factor\",0.999923],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",5500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2176\"],AXIS[\"x\",NORTH],AX");
+    add_srs_wkt (p, 12, "IS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 2177, "epsg", 2177,
+		      "ETRS89 / Poland CS2000 zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Poland CS2000 zone 6\",GEOGCS[\"ETRS89");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Terrestrial_Reference_System_1989\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",18],PARAMETER[\"scale_factor\",0.999923],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",6500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2177\"],AXIS[\"x\",NORTH],AX");
+    add_srs_wkt (p, 12, "IS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 2178, "epsg", 2178,
+		      "ETRS89 / Poland CS2000 zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Poland CS2000 zone 7\",GEOGCS[\"ETRS89");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Terrestrial_Reference_System_1989\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",21],PARAMETER[\"scale_factor\",0.999923],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",7500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2178\"],AXIS[\"x\",NORTH],AX");
+    add_srs_wkt (p, 12, "IS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 2179, "epsg", 2179,
+		      "ETRS89 / Poland CS2000 zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Poland CS2000 zone 8\",GEOGCS[\"ETRS89");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Terrestrial_Reference_System_1989\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",24],PARAMETER[\"scale_factor\",0.999923],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",8500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2179\"],AXIS[\"x\",NORTH],AX");
+    add_srs_wkt (p, 12, "IS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 2180, "epsg", 2180, "ETRS89 / Poland CS92");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=-5300000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Poland CS92\",GEOGCS[\"ETRS89\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"European_Terrestrial_Reference_System_1989\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",19],PARAMETER[\"scale_factor\",0.9993],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",-530000");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"2180\"],AXIS[\"x\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 12, "y\",EAST]]");
+    p = add_epsg_def (first, last, 2188, "epsg", 2188,
+		      "Azores Occidental 1939 / UTM zone 25N");
+    add_proj4text (p, 0, "+proj=utm +zone=25 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Azores Occidental 1939 / UTM zone 25N\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Azores Occidental 1939\",DATUM[\"Azores_Occidental_Isl");
+    add_srs_wkt (p, 2,
+		 "ands_1939\",SPHEROID[\"International 1924\",6378388,297,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6182\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4182\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"2188\"],AXIS[\"Eas");
+    add_srs_wkt (p, 12, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2189, "epsg", 2189,
+		      "Azores Central 1948 / UTM zone 26N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Azores Central 1948 / UTM zone 26N\",GEOGCS[\"A");
+    add_srs_wkt (p, 1,
+		 "zores Central 1948\",DATUM[\"Azores_Central_Islands_1948");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7022\"]],TOWGS84[-104,167,-38,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6183\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"418");
+    add_srs_wkt (p, 7,
+		 "3\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",-27],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12,
+		 "\",\"2189\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NO");
+    add_srs_wkt (p, 13, "RTH]]");
+    p = add_epsg_def (first, last, 2190, "epsg", 2190,
+		      "Azores Oriental 1940 / UTM zone 26N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,");
+    add_proj4text (p, 1, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Azores Oriental 1940 / UTM zone 26N\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Azores Oriental 1940\",DATUM[\"Azores_Oriental_Islands_1");
+    add_srs_wkt (p, 2,
+		 "940\",SPHEROID[\"International 1924\",6378388,297,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7022\"]],TOWGS84[-203,141,53,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6184\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "184\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-27],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"2190\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 2191, "epsg", 2191,
+		      "Madeira 1936 / UTM zone 28N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Madeira 1936 / UTM zone 28N (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Madeira 1936\",DATUM[\"Madeira_1936\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6185\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "2925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"4185\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 7,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 8,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-15");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"2191\"],AXIS[\"Easting\",EAST],AXIS[\"Nort");
+    add_srs_wkt (p, 12, "hing\",NORTH]]");
+    p = add_epsg_def (first, last, 2192, "epsg", 2192,
+		      "ED50 / France EuroLambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.3372291666666");
+    add_proj4text (p, 1,
+		   "67 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / France EuroLambert\",GEOGCS[\"ED50\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"European_Datum_1950\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 8,
+		 "f_origin\",46.8],PARAMETER[\"central_meridian\",2.337229");
+    add_srs_wkt (p, 9,
+		 "166666667],PARAMETER[\"scale_factor\",0.99987742],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",600000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",2200000],AUTHORITY[\"EPSG\",\"2192\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2193, "epsg", 2193,
+		      "NZGD2000 / New Zealand Transverse Mercator 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +");
+    add_proj4text (p, 1,
+		   "y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / New Zealand Transverse Mercator 2000");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"NZGD2000\",DATUM[\"New_Zealand_Geodetic_Datu");
+    add_srs_wkt (p, 2,
+		 "m_2000\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",0],PARAMETER[\"central_meridian\",173],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",1");
+    add_srs_wkt (p, 11,
+		 "600000],PARAMETER[\"false_northing\",10000000],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"2193\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 13, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 2194, "epsg", 2194,
+		      "American Samoa 1962 / American Samoa Lambert (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.266666666");
+    add_proj4text (p, 1,
+		   "66667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +");
+    add_proj4text (p, 2,
+		   "ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"American Samoa 1962 / American Samoa Lambert (d");
+    add_srs_wkt (p, 1,
+		 "eprecated)\",GEOGCS[\"American Samoa 1962\",DATUM[\"Amer");
+    add_srs_wkt (p, 2,
+		 "ican_Samoa_1962\",SPHEROID[\"Clarke 1866\",6378206.4,294");
+    add_srs_wkt (p, 3,
+		 ".9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],TOWGS84[-11");
+    add_srs_wkt (p, 4,
+		 "5,118,426,0,0,0,0],AUTHORITY[\"EPSG\",\"6169\"]],PRIMEM[");
+    add_srs_wkt (p, 5,
+		 "\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"deg");
+    add_srs_wkt (p, 6,
+		 "ree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"4169\"]],UNIT[\"US survey foot\",0.");
+    add_srs_wkt (p, 8,
+		 "3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTIO");
+    add_srs_wkt (p, 9,
+		 "N[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 10,
+		 "of_origin\",-14.26666666666667],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 11,
+		 "dian\",-170],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",500000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"2194\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 14, "NORTH]]");
+    p = add_epsg_def (first, last, 2195, "epsg", 2195,
+		      "NAD83(HARN) / UTM zone 2S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 2S\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-171],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"2195\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2196, "epsg", 2196,
+		      "ETRS89 / Kp2000 Jutland");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Kp2000 Jutland\",GEOGCS[\"ETRS89\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"European_Terrestrial_Reference_System_1989\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",9.5],PARAMETER[\"scale_factor\",0.99995],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",200000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"2196\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2197, "epsg", 2197,
+		      "ETRS89 / Kp2000 Zealand");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Kp2000 Zealand\",GEOGCS[\"ETRS89\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"European_Terrestrial_Reference_System_1989\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",12],PARAMETER[\"scale_factor\",0.99995],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2197\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2198, "epsg", 2198,
+		      "ETRS89 / Kp2000 Bornholm");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Kp2000 Bornholm\",GEOGCS[\"ETRS89\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"European_Terrestrial_Reference_System_1989\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",900000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"2198\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 2199, "epsg", 2199,
+		      "Albanian 1987 / Gauss Kruger zone 4 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Albanian 1987 / Gauss Kruger zone 4 (deprecated");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"Albanian 1987\",DATUM[\"Albanian_1987\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7024\"]],AUTHORITY[\"EPSG\",\"6191\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4191\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",4500000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 11,
+		 "THORITY[\"EPSG\",\"2199\"],AXIS[\"X\",NORTH],AXIS[\"Y\",");
+    add_srs_wkt (p, 12, "EAST]]");
+    p = add_epsg_def (first, last, 2200, "epsg", 2200,
+		      "ATS77 / New Brunswick Stereographic (ATS77)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=3");
+    add_proj4text (p, 1,
+		   "00000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ATS77 / New Brunswick Stereographic (ATS77)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"ATS77\",DATUM[\"Average_Terrestrial_System_1977\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Average Terrestrial System 1977\",6378135,29");
+    add_srs_wkt (p, 3,
+		 "8.257,AUTHORITY[\"EPSG\",\"7041\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6122\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4122\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Obliqu");
+    add_srs_wkt (p, 8,
+		 "e_Stereographic\"],PARAMETER[\"latitude_of_origin\",46.5");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-66.5],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.999912],PARAMETER[\"false_easting\",300000]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",800000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"2200\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAS");
+    add_srs_wkt (p, 13, "T]]");
+    p = add_epsg_def (first, last, 2201, "epsg", 2201, "REGVEN / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"REGVEN / UTM zone 18N\",GEOGCS[\"REGVEN\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Red_Geodesica_Venezolana\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6189\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4189\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"2201\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2202, "epsg", 2202, "REGVEN / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"REGVEN / UTM zone 19N\",GEOGCS[\"REGVEN\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Red_Geodesica_Venezolana\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6189\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4189\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"2202\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2203, "epsg", 2203, "REGVEN / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"REGVEN / UTM zone 20N\",GEOGCS[\"REGVEN\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Red_Geodesica_Venezolana\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6189\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4189\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"2203\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2204, "epsg", 2204, "NAD27 / Tennessee");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2,
+		   "30480.06096012192 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Tennessee\",GEOGCS[\"NAD27\",DATUM[\"No");
+    add_srs_wkt (p, 1,
+		 "rth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",63782");
+    add_srs_wkt (p, 2,
+		 "06.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_");
+    add_srs_wkt (p, 8,
+		 "Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35.25],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"standard_parallel_2\",36.41666666666666],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",34.66666666666666],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-86],PARAMETER[\"false_easting\",2");
+    add_srs_wkt (p, 12,
+		 "000000],PARAMETER[\"false_northing\",100000],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2204\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2205, "epsg", 2205,
+		      "NAD83 / Kentucky North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kentucky North\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",37.96666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",38.96666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",37.5],PARAMETER[\"central_meridian\",-84.25],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"2205\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2206, "epsg", 2206,
+		      "ED50 / 3-degree Gauss-Kruger zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / 3-degree Gauss-Kruger zone 9\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",950");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"2206\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2207, "epsg", 2207,
+		      "ED50 / 3-degree Gauss-Kruger zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / 3-degree Gauss-Kruger zone 10\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",105");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"2207\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2208, "epsg", 2208,
+		      "ED50 / 3-degree Gauss-Kruger zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / 3-degree Gauss-Kruger zone 11\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",115");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"2208\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2209, "epsg", 2209,
+		      "ED50 / 3-degree Gauss-Kruger zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / 3-degree Gauss-Kruger zone 12\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",125");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"2209\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2210, "epsg", 2210,
+		      "ED50 / 3-degree Gauss-Kruger zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / 3-degree Gauss-Kruger zone 13\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",135");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"2210\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2211, "epsg", 2211,
+		      "ED50 / 3-degree Gauss-Kruger zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / 3-degree Gauss-Kruger zone 14\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",42],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",145");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"2211\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2212, "epsg", 2212,
+		      "ED50 / 3-degree Gauss-Kruger zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / 3-degree Gauss-Kruger zone 15\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",155");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"2212\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2213, "epsg", 2213, "ETRS89 / TM 30 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / TM 30 NE\",GEOGCS[\"ETRS89\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Terrestrial_Reference_System_1989\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",3");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"2213\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 12, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 2214, "epsg", 2214,
+		      "Douala 1948 / AOF west (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +");
+    add_proj4text (p, 1,
+		   "y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Douala 1948 / AOF west (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Douala 1948\",DATUM[\"Douala_1948\",SPHEROID[\"Internati");
+    add_srs_wkt (p, 2,
+		 "onal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6192\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4192\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",10.5],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.999],PARAMETER[\"false_easting\",1000000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"2214");
+    add_srs_wkt (p, 12, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2215, "epsg", 2215,
+		      "Manoca 1962 / UTM zone 32N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.");
+    add_proj4text (p, 1, "9,-151.8,-41.4,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Manoca 1962 / UTM zone 32N\",GEOGCS[\"Manoca 19");
+    add_srs_wkt (p, 1,
+		 "62\",DATUM[\"Manoca_1962\",SPHEROID[\"Clarke 1880 (IGN)\"");
+    add_srs_wkt (p, 2,
+		 ",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6193\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4193\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",9],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 10,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2215\"],AXI");
+    add_srs_wkt (p, 12, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2216, "epsg", 2216,
+		      "Qornoq 1927 / UTM zone 22N");
+    add_proj4text (p, 0, "+proj=utm +zone=22 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Qornoq 1927 / UTM zone 22N\",GEOGCS[\"Qornoq 19");
+    add_srs_wkt (p, 1,
+		 "27\",DATUM[\"Qornoq_1927\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6194\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4194\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"sc");
+    add_srs_wkt (p, 9,
+		 "ale_factor\",0.9996],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"22");
+    add_srs_wkt (p, 11,
+		 "16\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2217, "epsg", 2217,
+		      "Qornoq 1927 / UTM zone 23N");
+    add_proj4text (p, 0, "+proj=utm +zone=23 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Qornoq 1927 / UTM zone 23N\",GEOGCS[\"Qornoq 19");
+    add_srs_wkt (p, 1,
+		 "27\",DATUM[\"Qornoq_1927\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6194\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4194\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"sc");
+    add_srs_wkt (p, 9,
+		 "ale_factor\",0.9996],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"22");
+    add_srs_wkt (p, 11,
+		 "17\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2219, "epsg", 2219, "ATS77 / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ATS77 / UTM zone 19N\",GEOGCS[\"ATS77\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Average_Terrestrial_System_1977\",SPHEROID[\"Average Ter");
+    add_srs_wkt (p, 2,
+		 "restrial System 1977\",6378135,298.257,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7041\"]],AUTHORITY[\"EPSG\",\"6122\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4122\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2219\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2220, "epsg", 2220, "ATS77 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ATS77 / UTM zone 20N\",GEOGCS[\"ATS77\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Average_Terrestrial_System_1977\",SPHEROID[\"Average Ter");
+    add_srs_wkt (p, 2,
+		 "restrial System 1977\",6378135,298.257,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7041\"]],AUTHORITY[\"EPSG\",\"6122\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4122\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2220\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2222, "epsg", 2222,
+		      "NAD83 / Arizona East (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arizona East (ft)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",31],PARAMETER[\"central_meridian\",-110.1");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",700000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2222\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2223, "epsg", 2223,
+		      "NAD83 / Arizona Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arizona Central (ft)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",31],PARAMETER[\"central_meridian\",-111.");
+    add_srs_wkt (p, 9,
+		 "9166666666667],PARAMETER[\"scale_factor\",0.9999],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",700000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"2223\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2224, "epsg", 2224,
+		      "NAD83 / Arizona West (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0");
+    add_proj4text (p, 1,
+		   "=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arizona West (ft)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",31],PARAMETER[\"central_meridian\",-113.7");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",700000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"2224\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 2225, "epsg", 2225,
+		      "NAD83 / California zone 1 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.3");
+    add_proj4text (p, 1,
+		   "3333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=5000");
+    add_proj4text (p, 2,
+		   "00.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no");
+    add_proj4text (p, 3, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 1 (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.");
+    add_srs_wkt (p, 9,
+		 "66666666666666],PARAMETER[\"standard_parallel_2\",40],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",39.33333333333334],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-122],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",6561666.667],PARAMETER[\"false_northing\",1640416.667");
+    add_srs_wkt (p, 13,
+		 "],AUTHORITY[\"EPSG\",\"2225\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 2226, "epsg", 2226,
+		      "NAD83 / California zone 2 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.00");
+    add_proj4text (p, 2,
+		   "01016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +");
+    add_proj4text (p, 3, "units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 2 (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.");
+    add_srs_wkt (p, 9,
+		 "83333333333334],PARAMETER[\"standard_parallel_2\",38.333");
+    add_srs_wkt (p, 10,
+		 "33333333334],PARAMETER[\"latitude_of_origin\",37.6666666");
+    add_srs_wkt (p, 11,
+		 "6666666],PARAMETER[\"central_meridian\",-122],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",6561666.667],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 13,
+		 "g\",1640416.667],AUTHORITY[\"EPSG\",\"2226\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2227, "epsg", 2227,
+		      "NAD83 / California zone 3 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=");
+    add_proj4text (p, 2,
+		   "500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 3 (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.");
+    add_srs_wkt (p, 9,
+		 "43333333333333],PARAMETER[\"standard_parallel_2\",37.066");
+    add_srs_wkt (p, 10,
+		 "66666666667],PARAMETER[\"latitude_of_origin\",36.5],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-120.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",6561666.667],PARAMETER[\"false_northing\",1640416");
+    add_srs_wkt (p, 13,
+		 ".667],AUTHORITY[\"EPSG\",\"2227\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2228, "epsg", 2228,
+		      "NAD83 / California zone 4 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.3333333333333");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.000101600");
+    add_proj4text (p, 2, "1 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 4 (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.");
+    add_srs_wkt (p, 9,
+		 "25],PARAMETER[\"standard_parallel_2\",36],PARAMETER[\"la");
+    add_srs_wkt (p, 10,
+		 "titude_of_origin\",35.33333333333334],PARAMETER[\"centra");
+    add_srs_wkt (p, 11,
+		 "l_meridian\",-119],PARAMETER[\"false_easting\",6561666.6");
+    add_srs_wkt (p, 12,
+		 "67],PARAMETER[\"false_northing\",1640416.667],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"2228\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2229, "epsg", 2229,
+		      "NAD83 / California zone 5 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=50");
+    add_proj4text (p, 2,
+		   "0000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 5 (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35.");
+    add_srs_wkt (p, 9,
+		 "46666666666667],PARAMETER[\"standard_parallel_2\",34.033");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"latitude_of_origin\",33.5],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-118],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",6561666.667],PARAMETER[\"false_northing\",1640416.6");
+    add_srs_wkt (p, 13,
+		 "67],AUTHORITY[\"EPSG\",\"2229\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2230, "epsg", 2230,
+		      "NAD83 / California zone 6 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000");
+    add_proj4text (p, 2,
+		   ".0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD8");
+    add_proj4text (p, 3, "3 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 6 (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",33.");
+    add_srs_wkt (p, 9,
+		 "88333333333333],PARAMETER[\"standard_parallel_2\",32.783");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"latitude_of_origin\",32.1666666");
+    add_srs_wkt (p, 11,
+		 "6666666],PARAMETER[\"central_meridian\",-116.25],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",6561666.667],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 13,
+		 "hing\",1640416.667],AUTHORITY[\"EPSG\",\"2230\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2231, "epsg", 2231,
+		      "NAD83 / Colorado North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD");
+    add_proj4text (p, 3, "83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Colorado North (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.78333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",39.71666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",39.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-105.5],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",3000000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 13,
+		 "0000],AUTHORITY[\"EPSG\",\"2231\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2232, "epsg", 2232,
+		      "NAD83 / Colorado Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.8333333333");
+    add_proj4text (p, 1,
+		   "3334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.60");
+    add_proj4text (p, 2,
+		   "96012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Colorado Central (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.75");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"standard_parallel_2\",38.45],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",37.83333333333334],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-105.5],PARAMETER[\"false_easting\",300000");
+    add_srs_wkt (p, 12,
+		 "0],PARAMETER[\"false_northing\",1000000],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"2232\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2233, "epsg", 2233,
+		      "NAD83 / Colorado South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD");
+    add_proj4text (p, 3, "83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Colorado South (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.43333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",37.23333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"latitude_of_origin\",36.666666666666");
+    add_srs_wkt (p, 11,
+		 "66],PARAMETER[\"central_meridian\",-105.5],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",3000000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 13,
+		 "0000],AUTHORITY[\"EPSG\",\"2233\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2234, "epsg", 2234,
+		      "NAD83 / Connecticut (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40");
+    add_proj4text (p, 1,
+		   ".83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_");
+    add_proj4text (p, 2,
+		   "0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +units=us-");
+    add_proj4text (p, 3, "ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Connecticut (ftUS)\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_");
+    add_srs_wkt (p, 8,
+		 "Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.866666");
+    add_srs_wkt (p, 9,
+		 "66666667],PARAMETER[\"standard_parallel_2\",41.2],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"latitude_of_origin\",40.83333333333334],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"central_meridian\",-72.75],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",1000000],PARAMETER[\"false_northing\",500000],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"2234\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2235, "epsg", 2235,
+		      "NAD83 / Delaware (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Delaware (ftUS)\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"centr");
+    add_srs_wkt (p, 9,
+		 "al_meridian\",-75.41666666666667],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.999995],PARAMETER[\"false_easting\",656166.667],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2235");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2236, "epsg", 2236,
+		      "NAD83 / Florida East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum");
+    add_proj4text (p, 2, "=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Florida East (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",24.33333333333333]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.999941177],PARAMETER[\"false_easting\",656166.");
+    add_srs_wkt (p, 11,
+		 "667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2236\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2237, "epsg", 2237,
+		      "NAD83 / Florida West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum");
+    add_proj4text (p, 2, "=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Florida West (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",24.33333333333333]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",-82],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.999941177],PARAMETER[\"false_easting\",656166.");
+    add_srs_wkt (p, 11,
+		 "667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2237\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2238, "epsg", 2238,
+		      "NAD83 / Florida North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=2");
+    add_proj4text (p, 1,
+		   "9 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Florida North (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.75],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",29.58333333333333],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",29],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-84.5],PARAMETER[\"false_easting\",1968500],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2238\"]");
+    add_srs_wkt (p, 13, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2239, "epsg", 2239,
+		      "NAD83 / Georgia East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD8");
+    add_proj4text (p, 2, "3 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Georgia East (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-82.16666666666667],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",656166.667],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"223");
+    add_srs_wkt (p, 12, "9\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2240, "epsg", 2240,
+		      "NAD83 / Georgia West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD8");
+    add_proj4text (p, 2, "3 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Georgia West (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-84.16666666666667],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",2296583.333]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"22");
+    add_srs_wkt (p, 12, "40\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2241, "epsg", 2241,
+		      "NAD83 / Idaho East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Idaho East (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",-112.1666666666667],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.999947368],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",656166.667],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"2241\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 2242, "epsg", 2242,
+		      "NAD83 / Idaho Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.99");
+    add_proj4text (p, 1,
+		   "99473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Idaho Central (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",41.66666666666666");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-114],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.999947368],PARAMETER[\"false_easting\",16404");
+    add_srs_wkt (p, 11,
+		 "16.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2242\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2243, "epsg", 2243,
+		      "NAD83 / Idaho West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Idaho West (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",41.66666666666666],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",-115.75],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.999933333],PARAMETER[\"false_easting\",2624");
+    add_srs_wkt (p, 11,
+		 "666.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2243\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2244, "epsg", 2244,
+		      "NAD83 / Indiana East (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +");
+    add_proj4text (p, 2, "ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Indiana East (ftUS) (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4269\"]],UNIT[\"US survey foot\",0.30480060");
+    add_srs_wkt (p, 7,
+		 "96012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",37.5");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-85.66666666666667],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",328083.333],PARAMETER[\"false_northing\",818125");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"2244\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 2245, "epsg", 2245,
+		      "NAD83 / Indiana West (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Indiana West (ftUS) (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4269\"]],UNIT[\"US survey foot\",0.30480060");
+    add_srs_wkt (p, 7,
+		 "96012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",37.5");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-87.08333333333333],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",2952750],PARAMETER[\"false_northing\",818125],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"2245\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 2246, "epsg", 2246,
+		      "NAD83 / Kentucky North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_");
+    add_proj4text (p, 2, "0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kentucky North (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.96666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",38.96666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-84.25],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",1640416.667],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"2246\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2247, "epsg", 2247,
+		      "NAD83 / Kentucky South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD");
+    add_proj4text (p, 3, "83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kentucky South (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.93333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",36.73333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"latitude_of_origin\",36.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-85.75],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",1640416.667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",1640416.667],AUTHORITY[\"EPSG\",\"2247\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 14, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2248, "epsg", 2248,
+		      "NAD83 / Maryland (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maryland (ftUS)\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 8,
+		 "ic_2SP\"],PARAMETER[\"standard_parallel_1\",39.45],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_2\",38.3],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 10,
+		 "of_origin\",37.66666666666666],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 11,
+		 "ian\",-77],PARAMETER[\"false_easting\",1312333.333],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2248\"]");
+    add_srs_wkt (p, 13, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2249, "epsg", 2249,
+		      "NAD83 / Massachusetts Mainland (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=7");
+    add_proj4text (p, 2,
+		   "50000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Massachusetts Mainland (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "42.68333333333333],PARAMETER[\"standard_parallel_2\",41.");
+    add_srs_wkt (p, 10,
+		 "71666666666667],PARAMETER[\"latitude_of_origin\",41],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"central_meridian\",-71.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",656166.667],PARAMETER[\"false_northing\",2460625]");
+    add_srs_wkt (p, 13,
+		 ",AUTHORITY[\"EPSG\",\"2249\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 2250, "epsg", 2250,
+		      "NAD83 / Massachusetts Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0");
+    add_proj4text (p, 2, " +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Massachusetts Island (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "41.48333333333333],PARAMETER[\"standard_parallel_2\",41.");
+    add_srs_wkt (p, 10,
+		 "28333333333333],PARAMETER[\"latitude_of_origin\",41],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"central_meridian\",-70.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",1640416.667],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 13,
+		 "ORITY[\"EPSG\",\"2250\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 2251, "epsg", 2251,
+		      "NAD83 / Michigan North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999");
+    add_proj4text (p, 2,
+		   "968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_de");
+    add_proj4text (p, 3, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Michigan North (ft)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",47.08333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",45.48333333333333],PARAMETER[\"lat");
+    add_srs_wkt (p, 10,
+		 "itude_of_origin\",44.78333333333333],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-87],PARAMETER[\"false_easting\",26246719.16");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "251\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2252, "epsg", 2252,
+		      "NAD83 / Michigan Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43");
+    add_proj4text (p, 1,
+		   ".31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.9");
+    add_proj4text (p, 2,
+		   "99976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_");
+    add_proj4text (p, 3, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Michigan Central (ft)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",45.7],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",44.18333333333333],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",43.31666666666667],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 11,
+		 "84.36666666666666],PARAMETER[\"false_easting\",19685039.");
+    add_srs_wkt (p, 12,
+		 "37],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "2252\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2253, "epsg", 2253,
+		      "NAD83 / Michigan South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41");
+    add_proj4text (p, 1,
+		   ".5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +datum=NAD83 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Michigan South (ft)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",43.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",42.1],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",41.5],PARAMETER[\"central_meridian\",-84.3666666666");
+    add_srs_wkt (p, 11,
+		 "6666],PARAMETER[\"false_easting\",13123359.58],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2253\"],AXIS");
+    add_srs_wkt (p, 13, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2254, "epsg", 2254,
+		      "NAD83 / Mississippi East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=N");
+    add_proj4text (p, 2, "AD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Mississippi East (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",29.5],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-88.83333333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.99995],PARAMETER[\"false_easting\",98425");
+    add_srs_wkt (p, 11,
+		 "0.0000000002],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2254\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2255, "epsg", 2255,
+		      "NAD83 / Mississippi West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=N");
+    add_proj4text (p, 2, "AD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Mississippi West (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",29.5],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-90.33333333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.99995],PARAMETER[\"false_easting\",22965");
+    add_srs_wkt (p, 11,
+		 "83.333],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2255\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2256, "epsg", 2256, "NAD83 / Montana (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5");
+    add_proj4text (p, 1,
+		   " +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +u");
+    add_proj4text (p, 2, "nits=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Montana (ft)\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",49],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 9,
+		 "45],PARAMETER[\"latitude_of_origin\",44.25],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",-109.5],PARAMETER[\"false_easting\",1");
+    add_srs_wkt (p, 11,
+		 "968503.937],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"2256\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2257, "epsg", 2257,
+		      "NAD83 / New Mexico East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Mexico East (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-104.3333333333333],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.999909091],PARAMETER[\"false_easting\",541");
+    add_srs_wkt (p, 11,
+		 "337.5],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2257\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2258, "epsg", 2258,
+		      "NAD83 / New Mexico Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=5000");
+    add_proj4text (p, 1,
+		   "00.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us");
+    add_proj4text (p, 2, "-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Mexico Central (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-106.25],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",1640416.667],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2258\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2259, "epsg", 2259,
+		      "NAD83 / New Mexico West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum");
+    add_proj4text (p, 2, "=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Mexico West (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-107.8333333333333],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.999916667],PARAMETER[\"false_easting\",272");
+    add_srs_wkt (p, 11,
+		 "3091.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12, "SG\",\"2259\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2260, "epsg", 2260,
+		      "NAD83 / New York East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York East (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",38.83333333333334");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-74.5],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.9999],PARAMETER[\"false_easting\",492125],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2260");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2261, "epsg", 2261,
+		      "NAD83 / New York Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=N");
+    add_proj4text (p, 2, "AD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York Central (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-76.58333333333333],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.9999375],PARAMETER[\"false_easting\",82020");
+    add_srs_wkt (p, 11,
+		 "8.3330000002],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2261\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2262, "epsg", 2262,
+		      "NAD83 / New York West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=N");
+    add_proj4text (p, 2, "AD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York West (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-78.58333333333333],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999375],PARAMETER[\"false_easting\",1148291.");
+    add_srs_wkt (p, 11,
+		 "667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2262\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2263, "epsg", 2263,
+		      "NAD83 / New York Long Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000");
+    add_proj4text (p, 2,
+		   "000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no");
+    add_proj4text (p, 3, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York Long Island (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "41.03333333333333],PARAMETER[\"standard_parallel_2\",40.");
+    add_srs_wkt (p, 10,
+		 "66666666666666],PARAMETER[\"latitude_of_origin\",40.1666");
+    add_srs_wkt (p, 11,
+		 "6666666666],PARAMETER[\"central_meridian\",-74],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",984250.0000000002],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"2263\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 14, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2264, "epsg", 2264,
+		      "NAD83 / North Carolina (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / North Carolina (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.16666");
+    add_srs_wkt (p, 9,
+		 "666666666],PARAMETER[\"standard_parallel_2\",34.33333333");
+    add_srs_wkt (p, 10,
+		 "333334],PARAMETER[\"latitude_of_origin\",33.75],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-79],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"2264\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2265, "epsg", 2265,
+		      "NAD83 / North Dakota North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=GRS80 +datum=NAD83 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / North Dakota North (ft)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "02\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"standard_parallel_1\",48.73333333333333],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"standard_parallel_2\",47.43333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",47],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 11,
+		 "-100.5],PARAMETER[\"false_easting\",1968503.937],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2265\"],AX");
+    add_srs_wkt (p, 13, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2266, "epsg", 2266,
+		      "NAD83 / North Dakota South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9");
+    add_proj4text (p, 2,
+		   "999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_de");
+    add_proj4text (p, 3, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / North Dakota South (ft)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "02\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"standard_parallel_1\",47.48333333333333],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"standard_parallel_2\",46.18333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",45.66666666666666],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-100.5],PARAMETER[\"false_easting\",19685");
+    add_srs_wkt (p, 12,
+		 "03.937],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13, "\",\"2266\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2267, "epsg", 2267,
+		      "NAD83 / Oklahoma North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oklahoma North (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.76666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",35.56666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",35],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-98],PARAMETER[\"false_easting\",1968");
+    add_srs_wkt (p, 12,
+		 "500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 13, "\"2267\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2268, "epsg", 2268,
+		      "NAD83 / Oklahoma South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oklahoma South (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35.23333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",33.93333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"latitude_of_origin\",33.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-98],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",1968500],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 13,
+		 "HORITY[\"EPSG\",\"2268\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 2269, "epsg", 2269,
+		      "NAD83 / Oregon North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +datum=NAD83 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oregon North (ft)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"standard_parallel_1\",46],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 9,
+		 "l_2\",44.33333333333334],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 10,
+		 ",43.66666666666666],PARAMETER[\"central_meridian\",-120.");
+    add_srs_wkt (p, 11,
+		 "5],PARAMETER[\"false_easting\",8202099.738],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2269\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2270, "epsg", 2270,
+		      "NAD83 / Oregon South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +datum=NAD83 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oregon South (ft)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"standard_parallel_1\",44],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 9,
+		 "l_2\",42.33333333333334],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 10,
+		 ",41.66666666666666],PARAMETER[\"central_meridian\",-120.");
+    add_srs_wkt (p, 11,
+		 "5],PARAMETER[\"false_easting\",4921259.843],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2270\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2271, "epsg", 2271,
+		      "NAD83 / Pennsylvania North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=4");
+    add_proj4text (p, 1,
+		   "0.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Pennsylvania North (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.");
+    add_srs_wkt (p, 9,
+		 "95],PARAMETER[\"standard_parallel_2\",40.88333333333333]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"latitude_of_origin\",40.16666666666666],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"central_meridian\",-77.75],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 12,
+		 "sting\",1968500],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"2271\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 14, "]");
+    p = add_epsg_def (first, last, 2272, "epsg", 2272,
+		      "NAD83 / Pennsylvania South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +");
+    add_proj4text (p, 2,
+		   "y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Pennsylvania South (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.");
+    add_srs_wkt (p, 9,
+		 "96666666666667],PARAMETER[\"standard_parallel_2\",39.933");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"latitude_of_origin\",39.3333333");
+    add_srs_wkt (p, 11,
+		 "3333334],PARAMETER[\"central_meridian\",-77.75],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"2272\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2273, "epsg", 2273,
+		      "NAD83 / South Carolina (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31");
+    add_proj4text (p, 1,
+		   ".83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / South Carolina (ft)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",34.83333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",32.5],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",31.83333333333333],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 11,
+		 "81],PARAMETER[\"false_easting\",2000000],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"2273\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_02 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2274, "epsg", 2274,
+		      "NAD83 / Tennessee (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Tennessee (ftUS)\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",36.41666666");
+    add_srs_wkt (p, 9,
+		 "666666],PARAMETER[\"standard_parallel_2\",35.25],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"latitude_of_origin\",34.33333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-86],PARAMETER[\"false_easting\",1968");
+    add_srs_wkt (p, 12,
+		 "500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 13, "\"2274\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2275, "epsg", 2275,
+		      "NAD83 / Texas North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.99989");
+    add_proj4text (p, 2,
+		   "83998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas North (ftUS)\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_");
+    add_srs_wkt (p, 8,
+		 "Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.183333");
+    add_srs_wkt (p, 9,
+		 "33333333],PARAMETER[\"standard_parallel_2\",34.65],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",34],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 11,
+		 "dian\",-101.5],PARAMETER[\"false_easting\",656166.667],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",3280833.333],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"2275\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2276, "epsg", 2276,
+		      "NAD83 / Texas North Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas North Central (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4269\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 9,
+		 "3.96666666666667],PARAMETER[\"standard_parallel_2\",32.1");
+    add_srs_wkt (p, 10,
+		 "3333333333333],PARAMETER[\"latitude_of_origin\",31.66666");
+    add_srs_wkt (p, 11,
+		 "666666667],PARAMETER[\"central_meridian\",-98.5],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",1968500],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",6561666.667],AUTHORITY[\"EPSG\",\"2276\"],AXIS[\"X\",");
+    add_srs_wkt (p, 14, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2277, "epsg", 2277,
+		      "NAD83 / Texas Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=N");
+    add_proj4text (p, 3, "AD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas Central (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",31.88333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",30.11666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",29.666666666666");
+    add_srs_wkt (p, 11,
+		 "67],PARAMETER[\"central_meridian\",-100.3333333333333],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_easting\",2296583.333],PARAMETER[\"fals");
+    add_srs_wkt (p, 13,
+		 "e_northing\",9842500.000000002],AUTHORITY[\"EPSG\",\"227");
+    add_srs_wkt (p, 14, "7\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2278, "epsg", 2278,
+		      "NAD83 / Texas South Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=3999999.9998984 +ellps=GRS80 +datum=NAD83 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas South Central (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4269\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 9,
+		 "0.28333333333333],PARAMETER[\"standard_parallel_2\",28.3");
+    add_srs_wkt (p, 10,
+		 "8333333333333],PARAMETER[\"latitude_of_origin\",27.83333");
+    add_srs_wkt (p, 11,
+		 "333333333],PARAMETER[\"central_meridian\",-99],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",13123333.333],AUTHORITY[\"EPSG\",\"2278\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 14, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2279, "epsg", 2279,
+		      "NAD83 / Texas South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.00");
+    add_proj4text (p, 2,
+		   "00000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 3, "+units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas South (ftUS)\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_");
+    add_srs_wkt (p, 8,
+		 "Conic_2SP\"],PARAMETER[\"standard_parallel_1\",27.833333");
+    add_srs_wkt (p, 9,
+		 "33333333],PARAMETER[\"standard_parallel_2\",26.166666666");
+    add_srs_wkt (p, 10,
+		 "66667],PARAMETER[\"latitude_of_origin\",25.6666666666666");
+    add_srs_wkt (p, 11,
+		 "7],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_easting\",984250.0000000002],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 13,
+		 "ng\",16404166.667],AUTHORITY[\"EPSG\",\"2279\"],AXIS[\"X");
+    add_srs_wkt (p, 14, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2280, "epsg", 2280,
+		      "NAD83 / Utah North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 3, "+units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah North (ft)\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",41.78333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_2\",40.71666666666667],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",40.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 11,
+		 "ridian\",-111.5],PARAMETER[\"false_easting\",1640419.948");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",3280839.895],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2280\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2281, "epsg", 2281,
+		      "NAD83 / Utah Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=");
+    add_proj4text (p, 2,
+		   "1999999.999992 +ellps=GRS80 +datum=NAD83 +units=ft +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah Central (ft)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"standard_parallel_1\",40.65],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",39.01666666666667],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",38.33333333333334],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 11,
+		 "111.5],PARAMETER[\"false_easting\",1640419.948],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_northing\",6561679.79],AUTHORITY[\"EPSG\",\"22");
+    add_srs_wkt (p, 13, "81\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2282, "epsg", 2282,
+		      "NAD83 / Utah South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=");
+    add_proj4text (p, 2,
+		   "2999999.999988 +ellps=GRS80 +datum=NAD83 +units=ft +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah South (ft)\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",38.35],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 9,
+		 "el_2\",37.21666666666667],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 10,
+		 "\",36.66666666666666],PARAMETER[\"central_meridian\",-11");
+    add_srs_wkt (p, 11,
+		 "1.5],PARAMETER[\"false_easting\",1640419.948],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_northing\",9842519.685],AUTHORITY[\"EPSG\",\"228");
+    add_srs_wkt (p, 13, "2\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2283, "epsg", 2283,
+		      "NAD83 / Virginia North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2");
+    add_proj4text (p, 2,
+		   "000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Virginia North (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.2],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"standard_parallel_2\",38.03333333333333],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",37.66666666666666],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-78.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",11482916.667],PARAMETER[\"false_northing\",6561666.667]");
+    add_srs_wkt (p, 13,
+		 ",AUTHORITY[\"EPSG\",\"2283\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 2284, "epsg", 2284,
+		      "NAD83 / Virginia South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0");
+    add_proj4text (p, 2,
+		   "001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 3, "+units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Virginia South (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.96666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",36.76666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",36.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-78.5],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",11482916.667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",3280833.333],AUTHORITY[\"EPSG\",\"2284\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 14, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2285, "epsg", 2285,
+		      "NAD83 / Washington North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47");
+    add_proj4text (p, 1,
+		   " +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0");
+    add_proj4text (p, 2, " +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Washington North (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.73");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",47.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-120.8333333333333],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",1640416.667],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"2285\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2286, "epsg", 2286,
+		      "NAD83 / Washington South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Washington South (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.33");
+    add_srs_wkt (p, 9,
+		 "333333333334],PARAMETER[\"standard_parallel_2\",45.83333");
+    add_srs_wkt (p, 10,
+		 "333333334],PARAMETER[\"latitude_of_origin\",45.333333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-120.5],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",1640416.667],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 13,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2286\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2287, "epsg", 2287,
+		      "NAD83 / Wisconsin North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wisconsin North (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",46.76");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",45.56666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"latitude_of_origin\",45.166666666");
+    add_srs_wkt (p, 11,
+		 "66666],PARAMETER[\"central_meridian\",-90],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",1968500],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"2287\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 2288, "epsg", 2288,
+		      "NAD83 / Wisconsin Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wisconsin Central (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"standard_parallel_2\",44.25],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",43.83333333333334],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-90],PARAMETER[\"false_easting\",1968500]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"22");
+    add_srs_wkt (p, 13, "88\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2289, "epsg", 2289,
+		      "NAD83 / Wisconsin South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wisconsin South (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.06");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",42.73333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",42],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-90],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "1968500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"2289\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2290, "epsg", 2290,
+		      "ATS77 / Prince Edward Isl. Stereographic (ATS77)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=70");
+    add_proj4text (p, 1,
+		   "0000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ATS77 / Prince Edward Isl. Stereographic (ATS77");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"ATS77\",DATUM[\"Average_Terrestrial_System_");
+    add_srs_wkt (p, 2,
+		 "1977\",SPHEROID[\"Average Terrestrial System 1977\",6378");
+    add_srs_wkt (p, 3,
+		 "135,298.257,AUTHORITY[\"EPSG\",\"7041\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6122\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4122\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",47.25],PARAMETER[\"central_meridian\",-63],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.999912],PARAMETER[\"false_easting\",700");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",400000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12,
+		 "SG\",\"2290\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 2291, "epsg", 2291,
+		      "NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=40");
+    add_proj4text (p, 1,
+		   "0000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / Prince Edward Isl. Stereographi");
+    add_srs_wkt (p, 1,
+		 "c (NAD83) (deprecated)\",GEOGCS[\"ATS77\",DATUM[\"Averag");
+    add_srs_wkt (p, 2,
+		 "e_Terrestrial_System_1977\",SPHEROID[\"Average Terrestri");
+    add_srs_wkt (p, 3,
+		 "al System 1977\",6378135,298.257,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 4,
+		 "41\"]],AUTHORITY[\"EPSG\",\"6122\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4122\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 8,
+		 "001\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"latitude_of_origin\",47.25],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",-63],PARAMETER[\"scale_factor\",0.999912],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",400000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 12,
+		 "800000],AUTHORITY[\"EPSG\",\"2291\"],AXIS[\"E(X)\",EAST]");
+    add_srs_wkt (p, 13, ",AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2292, "epsg", 2292,
+		      "NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=40");
+    add_proj4text (p, 1,
+		   "0000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +un");
+    add_proj4text (p, 2, "its=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS98) / Prince Edward Isl. Stereographi");
+    add_srs_wkt (p, 1,
+		 "c (NAD83) (deprecated)\",GEOGCS[\"NAD83(CSRS98)\",DATUM[");
+    add_srs_wkt (p, 2,
+		 "\"NAD83_Canadian_Spatial_Reference_System\",SPHEROID[\"G");
+    add_srs_wkt (p, 3,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 4,
+		 "9\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6140\"");
+    add_srs_wkt (p, 5,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 6,
+		 "UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9108\"]],AUTHORITY[\"EPSG\",\"4140\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 8,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Oblique_Stere");
+    add_srs_wkt (p, 9,
+		 "ographic\"],PARAMETER[\"latitude_of_origin\",47.25],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"central_meridian\",-63],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 11,
+		 "\",0.999912],PARAMETER[\"false_easting\",400000],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_northing\",800000],AUTHORITY[\"EPSG\",\"2292\"");
+    add_srs_wkt (p, 13, "],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2294, "epsg", 2294,
+		      "ATS77 / MTM Nova Scotia zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000");
+    add_proj4text (p, 1,
+		   " +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ATS77 / MTM Nova Scotia zone 4\",GEOGCS[\"ATS77");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Average_Terrestrial_System_1977\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Average Terrestrial System 1977\",6378135,298.257,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7041\"]],AUTHORITY[\"EPSG\",\"6122\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4122\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-61.5],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "9],PARAMETER[\"false_easting\",4500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2294\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2295, "epsg", 2295,
+		      "ATS77 / MTM Nova Scotia zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000");
+    add_proj4text (p, 1,
+		   " +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ATS77 / MTM Nova Scotia zone 5\",GEOGCS[\"ATS77");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Average_Terrestrial_System_1977\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Average Terrestrial System 1977\",6378135,298.257,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7041\"]],AUTHORITY[\"EPSG\",\"6122\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4122\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-64.5],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "9],PARAMETER[\"false_easting\",5500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2295\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2308, "epsg", 2308, "Batavia / TM 109 SE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y");
+    add_proj4text (p, 1, "_0=10000000 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Batavia / TM 109 SE\",GEOGCS[\"Batavia\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"Batavia\",SPHEROID[\"Bessel 1841\",6377397.155,299.152");
+    add_srs_wkt (p, 2,
+		 "8128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6211\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4211\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",109],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"2308");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2309, "epsg", 2309, "WGS 84 / TM 116 SE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y");
+    add_proj4text (p, 1,
+		   "_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / TM 116 SE\",GEOGCS[\"WGS 84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 4,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 5,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 6,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 7,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "central_meridian\",116],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"2309\"],AXIS[");
+    add_srs_wkt (p, 11, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2310, "epsg", 2310, "WGS 84 / TM 132 SE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y");
+    add_proj4text (p, 1,
+		   "_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / TM 132 SE\",GEOGCS[\"WGS 84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 4,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 5,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 6,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 7,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "central_meridian\",132],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"2310\"],AXIS[");
+    add_srs_wkt (p, 11, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2311, "epsg", 2311, "WGS 84 / TM 6 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / TM 6 NE\",GEOGCS[\"WGS 84\",DATUM[\"WG");
+    add_srs_wkt (p, 1,
+		 "S_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 7,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 8,
+		 "entral_meridian\",6],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"2311\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2312, "epsg", 2312, "Garoua / UTM zone 33N");
+    add_proj4text (p, 0, "+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Garoua / UTM zone 33N\",GEOGCS[\"Garoua\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Garoua\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,2");
+    add_srs_wkt (p, 2,
+		 "93.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6197\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4197\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",15],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2312\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2313, "epsg", 2313,
+		      "Kousseri / UTM zone 33N");
+    add_proj4text (p, 0, "+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kousseri / UTM zone 33N\",GEOGCS[\"Kousseri\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Kousseri\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6198\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4198\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2313\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2314, "epsg", 2314,
+		      "Trinidad 1903 / Trinidad Grid (ftCla)");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.333333333");
+    add_proj4text (p, 1,
+		   "33334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=63782");
+    add_proj4text (p, 2,
+		   "93.645208759 +b=6356617.987679838 +to_meter=0.3047972654");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Trinidad 1903 / Trinidad Grid (ftCla)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Trinidad 1903\",DATUM[\"Trinidad_1903\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1858\",6378293.645208759,294.2606763692569,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7007\"]],AUTHORITY[\"EPSG\",\"6302\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4302\"]],UNIT[\"Clarke's foot\",0");
+    add_srs_wkt (p, 7,
+		 ".3047972654,AUTHORITY[\"EPSG\",\"9005\"]],PROJECTION[\"C");
+    add_srs_wkt (p, 8,
+		 "assini_Soldner\"],PARAMETER[\"latitude_of_origin\",10.44");
+    add_srs_wkt (p, 9,
+		 "166666666667],PARAMETER[\"central_meridian\",-61.3333333");
+    add_srs_wkt (p, 10,
+		 "3333334],PARAMETER[\"false_easting\",283800],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",214500],AUTHORITY[\"EPSG\",\"2314\"],AX");
+    add_srs_wkt (p, 12, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2315, "epsg", 2315,
+		      "Campo Inchauspe / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / UTM zone 19S\",GEOGCS[\"Campo");
+    add_srs_wkt (p, 1,
+		 " Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-69],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"2315\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2316, "epsg", 2316,
+		      "Campo Inchauspe / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / UTM zone 20S\",GEOGCS[\"Campo");
+    add_srs_wkt (p, 1,
+		 " Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-63],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"2316\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2317, "epsg", 2317, "PSAD56 / ICN Regional");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=100");
+    add_proj4text (p, 1, "0000 +y_0=1000000 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / ICN Regional\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"standard_parallel_1\",9],PARAMETER[\"standard_par");
+    add_srs_wkt (p, 9,
+		 "allel_2\",3],PARAMETER[\"latitude_of_origin\",6],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"central_meridian\",-66],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",1000000],PARAMETER[\"false_northing\",1000000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"2317\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 2318, "epsg", 2318,
+		      "Ain el Abd / Aramco Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 ");
+    add_proj4text (p, 1, "+x_0=0 +y_0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Ain el Abd / Aramco Lambert\",GEOGCS[\"Ain el A");
+    add_srs_wkt (p, 1,
+		 "bd\",DATUM[\"Ain_el_Abd_1970\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4204\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",17],PARAMETER[\"standard_parallel_2\",33");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",25.08951],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",48],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2318\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2319, "epsg", 2319, "ED50 / TM27");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM27\",GEOGCS[\"ED50\",DATUM[\"European_");
+    add_srs_wkt (p, 1,
+		 "Datum_1950\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",27],PARAMETER[\"scale_factor\",1");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2319\"],AXIS[\"X\",NO");
+    add_srs_wkt (p, 11, "RTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2320, "epsg", 2320, "ED50 / TM30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM30\",GEOGCS[\"ED50\",DATUM[\"European_");
+    add_srs_wkt (p, 1,
+		 "Datum_1950\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",30],PARAMETER[\"scale_factor\",1");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2320\"],AXIS[\"X\",NO");
+    add_srs_wkt (p, 11, "RTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2321, "epsg", 2321, "ED50 / TM33");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM33\",GEOGCS[\"ED50\",DATUM[\"European_");
+    add_srs_wkt (p, 1,
+		 "Datum_1950\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",33],PARAMETER[\"scale_factor\",1");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2321\"],AXIS[\"X\",NO");
+    add_srs_wkt (p, 11, "RTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2322, "epsg", 2322, "ED50 / TM36");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM36\",GEOGCS[\"ED50\",DATUM[\"European_");
+    add_srs_wkt (p, 1,
+		 "Datum_1950\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",36],PARAMETER[\"scale_factor\",1");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2322\"],AXIS[\"X\",NO");
+    add_srs_wkt (p, 11, "RTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2323, "epsg", 2323, "ED50 / TM39");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM39\",GEOGCS[\"ED50\",DATUM[\"European_");
+    add_srs_wkt (p, 1,
+		 "Datum_1950\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",39],PARAMETER[\"scale_factor\",1");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2323\"],AXIS[\"X\",NO");
+    add_srs_wkt (p, 11, "RTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2324, "epsg", 2324, "ED50 / TM42");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM42\",GEOGCS[\"ED50\",DATUM[\"European_");
+    add_srs_wkt (p, 1,
+		 "Datum_1950\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",42],PARAMETER[\"scale_factor\",1");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2324\"],AXIS[\"X\",NO");
+    add_srs_wkt (p, 11, "RTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2325, "epsg", 2325, "ED50 / TM45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM45\",GEOGCS[\"ED50\",DATUM[\"European_");
+    add_srs_wkt (p, 1,
+		 "Datum_1950\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",45],PARAMETER[\"scale_factor\",1");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2325\"],AXIS[\"X\",NO");
+    add_srs_wkt (p, 11, "RTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2326, "epsg", 2326,
+		      "Hong Kong 1980 Grid System");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.17855555");
+    add_proj4text (p, 1,
+		   "55556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +tow");
+    add_proj4text (p, 2,
+		   "gs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.158");
+    add_proj4text (p, 3, "83,-1.09425 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hong Kong 1980 Grid System\",GEOGCS[\"Hong Kong");
+    add_srs_wkt (p, 1,
+		 " 1980\",DATUM[\"Hong_Kong_1980\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 2,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS");
+    add_srs_wkt (p, 3,
+		 "84[-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883");
+    add_srs_wkt (p, 4,
+		 ",-1.09425],AUTHORITY[\"EPSG\",\"6611\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4611\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"latitude_of_origin\",22.31213333333334],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",114.1785555555556],PARAMETER[\"scale_");
+    add_srs_wkt (p, 11,
+		 "factor\",1],PARAMETER[\"false_easting\",836694.05],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_northing\",819069.8],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13,
+		 "326\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 2327, "epsg", 2327,
+		      "Xian 1980 / Gauss-Kruger zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 13\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",13500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2327\"],A");
+    add_srs_wkt (p, 11, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2328, "epsg", 2328,
+		      "Xian 1980 / Gauss-Kruger zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 14\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",14500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2328\"],A");
+    add_srs_wkt (p, 11, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2329, "epsg", 2329,
+		      "Xian 1980 / Gauss-Kruger zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 15\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",15500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2329\"],A");
+    add_srs_wkt (p, 11, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2330, "epsg", 2330,
+		      "Xian 1980 / Gauss-Kruger zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 16\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",16500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2330\"],A");
+    add_srs_wkt (p, 11, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2331, "epsg", 2331,
+		      "Xian 1980 / Gauss-Kruger zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 17\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",17500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2331\"],A");
+    add_srs_wkt (p, 11, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2332, "epsg", 2332,
+		      "Xian 1980 / Gauss-Kruger zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 18\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",18500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2332\"],");
+    add_srs_wkt (p, 11, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2333, "epsg", 2333,
+		      "Xian 1980 / Gauss-Kruger zone 19");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 19\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",19500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2333\"],");
+    add_srs_wkt (p, 11, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2334, "epsg", 2334,
+		      "Xian 1980 / Gauss-Kruger zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 20\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",20500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2334\"],");
+    add_srs_wkt (p, 11, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2335, "epsg", 2335,
+		      "Xian 1980 / Gauss-Kruger zone 21");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 21\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",21500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2335\"],");
+    add_srs_wkt (p, 11, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2336, "epsg", 2336,
+		      "Xian 1980 / Gauss-Kruger zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 22\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",22500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2336\"],");
+    add_srs_wkt (p, 11, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2337, "epsg", 2337,
+		      "Xian 1980 / Gauss-Kruger zone 23");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger zone 23\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",23500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2337\"],");
+    add_srs_wkt (p, 11, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2338, "epsg", 2338,
+		      "Xian 1980 / Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 75E\",GEOGCS[\"Xian");
+    add_srs_wkt (p, 1,
+		 " 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",63781");
+    add_srs_wkt (p, 2,
+		 "40,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",75],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2338\"],AXI");
+    add_srs_wkt (p, 11, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2339, "epsg", 2339,
+		      "Xian 1980 / Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 81E\",GEOGCS[\"Xian");
+    add_srs_wkt (p, 1,
+		 " 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",63781");
+    add_srs_wkt (p, 2,
+		 "40,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",81],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2339\"],AXI");
+    add_srs_wkt (p, 11, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2340, "epsg", 2340,
+		      "Xian 1980 / Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 87E\",GEOGCS[\"Xian");
+    add_srs_wkt (p, 1,
+		 " 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",63781");
+    add_srs_wkt (p, 2,
+		 "40,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",87],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2340\"],AXI");
+    add_srs_wkt (p, 11, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2341, "epsg", 2341,
+		      "Xian 1980 / Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 93E\",GEOGCS[\"Xian");
+    add_srs_wkt (p, 1,
+		 " 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",63781");
+    add_srs_wkt (p, 2,
+		 "40,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",93],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2341\"],AXI");
+    add_srs_wkt (p, 11, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2342, "epsg", 2342,
+		      "Xian 1980 / Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 99E\",GEOGCS[\"Xian");
+    add_srs_wkt (p, 1,
+		 " 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",63781");
+    add_srs_wkt (p, 2,
+		 "40,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",99],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",1],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2342\"],AXI");
+    add_srs_wkt (p, 11, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2343, "epsg", 2343,
+		      "Xian 1980 / Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 105E\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",105],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2343\"],AX");
+    add_srs_wkt (p, 11, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2344, "epsg", 2344,
+		      "Xian 1980 / Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 111E\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",111],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2344\"],AX");
+    add_srs_wkt (p, 11, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2345, "epsg", 2345,
+		      "Xian 1980 / Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 117E\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2345\"],AX");
+    add_srs_wkt (p, 11, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2346, "epsg", 2346,
+		      "Xian 1980 / Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 123E\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",123],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2346\"],AX");
+    add_srs_wkt (p, 11, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2347, "epsg", 2347,
+		      "Xian 1980 / Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 129E\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",129],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2347\"],AX");
+    add_srs_wkt (p, 11, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2348, "epsg", 2348,
+		      "Xian 1980 / Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / Gauss-Kruger CM 135E\",GEOGCS[\"Xia");
+    add_srs_wkt (p, 1,
+		 "n 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",135],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2348\"],AX");
+    add_srs_wkt (p, 11, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2349, "epsg", 2349,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 25");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 25\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",255000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2349\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2350, "epsg", 2350,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 26\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",78],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",265000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2350\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2351, "epsg", 2351,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 27");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 27\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",275000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2351\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2352, "epsg", 2352,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 28\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",84],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",285000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2352\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2353, "epsg", 2353,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 29");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 29\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",295000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2353\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2354, "epsg", 2354,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 30\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",90],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",305000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2354\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2355, "epsg", 2355,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 31\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",315000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2355\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2356, "epsg", 2356,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 32");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 32\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",96],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",325000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2356\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2357, "epsg", 2357,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 33");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0");
+    add_proj4text (p, 1, " +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 33\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",335000");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2357\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2358, "epsg", 2358,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 34");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 34\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",102],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",34500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2358\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2359, "epsg", 2359,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 35");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 35\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",105],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",35500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2359\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2360, "epsg", 2360,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 36");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 36\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",108],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",36500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2360\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2361, "epsg", 2361,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 37");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 37\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",111],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",37500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2361\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2362, "epsg", 2362,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 38");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 38\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",114],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",38500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2362\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2363, "epsg", 2363,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 39");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 39\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",117],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",39500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2363\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2364, "epsg", 2364,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 40\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",120],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",40500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2364\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2365, "epsg", 2365,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 41");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 41\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",123],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",41500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2365\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2366, "epsg", 2366,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 42");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 42\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",126],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",42500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2366\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2367, "epsg", 2367,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 43");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 43\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",129],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",43500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2367\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2368, "epsg", 2368,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 44");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 44\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",132],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",44500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2368\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2369, "epsg", 2369,
+		      "Xian 1980 / 3-degree Gauss-Kruger zone 45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=");
+    add_proj4text (p, 1, "0 +a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger zone 45\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",135],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",45500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"2369\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2370, "epsg", 2370,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 75E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",75],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "70\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2371, "epsg", 2371,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 78E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 78E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",78],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "71\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2372, "epsg", 2372,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 81E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",81],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "72\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2373, "epsg", 2373,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 84E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 84E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",84],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "73\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2374, "epsg", 2374,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 87E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",87],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "74\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2375, "epsg", 2375,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 90E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 90E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",90],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "75\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2376, "epsg", 2376,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 93E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",93],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "76\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2377, "epsg", 2377,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 96E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 96E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",96],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "77\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2378, "epsg", 2378,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 99E\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4610");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",99],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23");
+    add_srs_wkt (p, 11, "78\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2379, "epsg", 2379,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 102E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 102E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",102],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2379\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2380, "epsg", 2380,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 105E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",105],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2380\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2381, "epsg", 2381,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 108E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 108E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",108],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2381\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2382, "epsg", 2382,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 111E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",111],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2382\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2383, "epsg", 2383,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 114E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 114E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",114],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2383\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2384, "epsg", 2384,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 117E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",117],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2384\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2385, "epsg", 2385,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 120E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 120E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",120],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2385\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2386, "epsg", 2386,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 123E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",123],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2386\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2387, "epsg", 2387,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 126E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 126E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",126],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2387\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2388, "epsg", 2388,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 129E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",129],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2388\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2389, "epsg", 2389,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 132E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 132E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",132],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2389\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2390, "epsg", 2390,
+		      "Xian 1980 / 3-degree Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+a=6378140 +b=6356755.288157528 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Xian 1980 / 3-degree Gauss-Kruger CM 135E\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"461");
+    add_srs_wkt (p, 6,
+		 "0\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",135],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "2390\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2391, "epsg", 2391, "KKJ / Finland zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KKJ / Finland zone 1\",GEOGCS[\"KKJ\",DATUM[\"K");
+    add_srs_wkt (p, 1,
+		 "artastokoordinaattijarjestelma_1966\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6123\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4123\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",21],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",1");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"2391\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2392, "epsg", 2392, "KKJ / Finland zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KKJ / Finland zone 2\",GEOGCS[\"KKJ\",DATUM[\"K");
+    add_srs_wkt (p, 1,
+		 "artastokoordinaattijarjestelma_1966\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6123\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4123\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",24],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"2392\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2393, "epsg", 2393,
+		      "KKJ / Finland Uniform Coordinate System");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KKJ / Finland Uniform Coordinate System\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"KKJ\",DATUM[\"Kartastokoordinaattijarjestelma_1966\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6123\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4123\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",3500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2393\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 2394, "epsg", 2394, "KKJ / Finland zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KKJ / Finland zone 4\",GEOGCS[\"KKJ\",DATUM[\"K");
+    add_srs_wkt (p, 1,
+		 "artastokoordinaattijarjestelma_1966\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6123\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4123\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",30],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",4");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"2394\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2395, "epsg", 2395,
+		      "South Yemen / Gauss-Kruger zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"South Yemen / Gauss-Kruger zone 8\",GEOGCS[\"So");
+    add_srs_wkt (p, 1,
+		 "uth Yemen\",DATUM[\"South_Yemen\",SPHEROID[\"Krassowsky ");
+    add_srs_wkt (p, 2,
+		 "1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS");
+    add_srs_wkt (p, 3,
+		 "84[-76,-138,67,0,0,0,0],AUTHORITY[\"EPSG\",\"6164\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4164\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",45],PARAMETER[\"scale_factor\",1],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",8500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"2395\"],AXIS[\"X\",NORTH],A");
+    add_srs_wkt (p, 12, "XIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2396, "epsg", 2396,
+		      "South Yemen / Gauss-Kruger zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"South Yemen / Gauss-Kruger zone 9\",GEOGCS[\"So");
+    add_srs_wkt (p, 1,
+		 "uth Yemen\",DATUM[\"South_Yemen\",SPHEROID[\"Krassowsky ");
+    add_srs_wkt (p, 2,
+		 "1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS");
+    add_srs_wkt (p, 3,
+		 "84[-76,-138,67,0,0,0,0],AUTHORITY[\"EPSG\",\"6164\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4164\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",51],PARAMETER[\"scale_factor\",1],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",9500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"2396\"],AXIS[\"X\",NORTH],A");
+    add_srs_wkt (p, 12, "XIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2397, "epsg", 2397,
+		      "Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",3500000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"2397\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 2398, "epsg", 2398,
+		      "Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",4500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2398\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 2399, "epsg", 2399,
+		      "Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",5500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"2399\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 2400, "epsg", 2400,
+		      "RT90 2.5 gon W (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT90 2.5 gon W (deprecated)\",GEOGCS[\"RT90\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Rikets_koordinatsystem_1990\",SPHEROID[\"Bessel 1");
+    add_srs_wkt (p, 2,
+		 "841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6124\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4124\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",15.8");
+    add_srs_wkt (p, 9,
+		 "0827777777778],PARAMETER[\"scale_factor\",1],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",1500000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"2400\"],AXIS[\"X\",NORTH],AXIS[\"Y");
+    add_srs_wkt (p, 12, "\",EAST]]");
+    p = add_epsg_def (first, last, 2401, "epsg", 2401,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 25");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 25\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",7");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",25500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2401\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2402, "epsg", 2402,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 26\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",7");
+    add_srs_wkt (p, 9,
+		 "8],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",26500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2402\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2403, "epsg", 2403,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 27");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 27\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",27500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2403\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2404, "epsg", 2404,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 28\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",28500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2404\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2405, "epsg", 2405,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 29");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 29\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",29500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2405\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2406, "epsg", 2406,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 30\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",30500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2406\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2407, "epsg", 2407,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 31\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",31500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2407\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2408, "epsg", 2408,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 32");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 32\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",32500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2408\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2409, "epsg", 2409,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 33");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 33\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",33500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"2409\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2410, "epsg", 2410,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 34");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 34\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "02],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",34500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2410\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2411, "epsg", 2411,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 35");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 35\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "05],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",35500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2411\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2412, "epsg", 2412,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 36");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 36\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "08],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",36500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2412\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2413, "epsg", 2413,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 37");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 37\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "11],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",37500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2413\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2414, "epsg", 2414,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 38");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 38\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "14],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",38500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2414\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_03 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2415, "epsg", 2415,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 39");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 39\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "17],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",39500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2415\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2416, "epsg", 2416,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 40\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "20],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",40500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2416\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2417, "epsg", 2417,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 41");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 41\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "23],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",41500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2417\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2418, "epsg", 2418,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 42");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 42\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "26],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",42500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2418\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2419, "epsg", 2419,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 43");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 43\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "29],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",43500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2419\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2420, "epsg", 2420,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 44");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 44\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "32],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",44500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2420\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2421, "epsg", 2421,
+		      "Beijing 1954 / 3-degree Gauss-Kruger zone 45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger zone 45\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "35],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",45500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"2421\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 2422, "epsg", 2422,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 75E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",7");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2422\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2423, "epsg", 2423,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 78E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 78E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",7");
+    add_srs_wkt (p, 9,
+		 "8],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2423\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2424, "epsg", 2424,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 81E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2424\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2425, "epsg", 2425,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 84E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 84E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2425\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2426, "epsg", 2426,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 87E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2426\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2427, "epsg", 2427,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 90E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 90E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2427\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2428, "epsg", 2428,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 93E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2428\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2429, "epsg", 2429,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 96E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 96E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2429\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2430, "epsg", 2430,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 99E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"2430\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2431, "epsg", 2431,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 102E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 102E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "02],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2431\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2432, "epsg", 2432,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 105E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "05],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2432\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2433, "epsg", 2433,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 108E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 108E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "08],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2433\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2434, "epsg", 2434,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 111E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "11],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2434\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2435, "epsg", 2435,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 114E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 114E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "14],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2435\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2436, "epsg", 2436,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 117E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "17],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2436\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2437, "epsg", 2437,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 120E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 120E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "20],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2437\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2438, "epsg", 2438,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 123E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "23],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2438\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2439, "epsg", 2439,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 126E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 126E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "26],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2439\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2440, "epsg", 2440,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 129E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "29],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2440\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2441, "epsg", 2441,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 132E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 132E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "32],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2441\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2442, "epsg", 2442,
+		      "Beijing 1954 / 3-degree Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / 3-degree Gauss-Kruger CM 135E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "35],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2442\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2443, "epsg", 2443,
+		      "JGD2000 / Japan Plane Rectangular CS I");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS I\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",33],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",129.5],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2443\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2444, "epsg", 2444,
+		      "JGD2000 / Japan Plane Rectangular CS II");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS II\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",33],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",131],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 10,
+		 "ctor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2444\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2445, "epsg", 2445,
+		      "JGD2000 / Japan Plane Rectangular CS III");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999");
+    add_proj4text (p, 1,
+		   " +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS III\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",132.1666666666667],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2445\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2446, "epsg", 2446,
+		      "JGD2000 / Japan Plane Rectangular CS IV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS IV\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",33],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",133.5],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2446\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2447, "epsg", 2447,
+		      "JGD2000 / Japan Plane Rectangular CS V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999");
+    add_proj4text (p, 1,
+		   " +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS V\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",134.3333333333333],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2447\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2448, "epsg", 2448,
+		      "JGD2000 / Japan Plane Rectangular CS VI");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS VI\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",136],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 10,
+		 "ctor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2448\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2449, "epsg", 2449,
+		      "JGD2000 / Japan Plane Rectangular CS VII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999");
+    add_proj4text (p, 1,
+		   " +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS VII\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",137.1666666666667],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2449\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2450, "epsg", 2450,
+		      "JGD2000 / Japan Plane Rectangular CS VIII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS VIII\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",3");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"central_meridian\",138.5],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2450\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2451, "epsg", 2451,
+		      "JGD2000 / Japan Plane Rectangular CS IX");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999");
+    add_proj4text (p, 1,
+		   " +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS IX\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",139.8333333333333],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2451\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2452, "epsg", 2452,
+		      "JGD2000 / Japan Plane Rectangular CS X");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999");
+    add_proj4text (p, 1,
+		   " +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS X\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",140.8333333333333],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2452\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2453, "epsg", 2453,
+		      "JGD2000 / Japan Plane Rectangular CS XI");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XI\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",44],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",140.25],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2453\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2454, "epsg", 2454,
+		      "JGD2000 / Japan Plane Rectangular CS XII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XII\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",44],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",142.25],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2454\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2455, "epsg", 2455,
+		      "JGD2000 / Japan Plane Rectangular CS XIII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XIII\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"central_meridian\",144.25],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2455\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2456, "epsg", 2456,
+		      "JGD2000 / Japan Plane Rectangular CS XIV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XIV\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",142],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 10,
+		 "ctor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2456\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2457, "epsg", 2457,
+		      "JGD2000 / Japan Plane Rectangular CS XV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XV\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",127.5],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2457\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2458, "epsg", 2458,
+		      "JGD2000 / Japan Plane Rectangular CS XVI");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XVI\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",124],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 10,
+		 "ctor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2458\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2459, "epsg", 2459,
+		      "JGD2000 / Japan Plane Rectangular CS XVII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XVII\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",2");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"central_meridian\",131],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2459\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2460, "epsg", 2460,
+		      "JGD2000 / Japan Plane Rectangular CS XVIII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XVIII\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "20],PARAMETER[\"central_meridian\",136],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2460\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2461, "epsg", 2461,
+		      "JGD2000 / Japan Plane Rectangular CS XIX");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / Japan Plane Rectangular CS XIX\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",26],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",154],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 10,
+		 "ctor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2461\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2462, "epsg", 2462,
+		      "Albanian 1987 / Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Albanian 1987 / Gauss-Kruger zone 4\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Albanian 1987\",DATUM[\"Albanian_1987\",SPHEROID[\"Krass");
+    add_srs_wkt (p, 2,
+		 "owsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6191\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4191\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",21],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "4500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11, "G\",\"2462\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2463, "epsg", 2463,
+		      "Pulkovo 1995 / Gauss-Kruger CM 21E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 21E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2463\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2464, "epsg", 2464,
+		      "Pulkovo 1995 / Gauss-Kruger CM 27E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 27E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2464\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2465, "epsg", 2465,
+		      "Pulkovo 1995 / Gauss-Kruger CM 33E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 33E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2465\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2466, "epsg", 2466,
+		      "Pulkovo 1995 / Gauss-Kruger CM 39E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 39E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2466\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2467, "epsg", 2467,
+		      "Pulkovo 1995 / Gauss-Kruger CM 45E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 45E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2467\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2468, "epsg", 2468,
+		      "Pulkovo 1995 / Gauss-Kruger CM 51E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 51E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2468\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2469, "epsg", 2469,
+		      "Pulkovo 1995 / Gauss-Kruger CM 57E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 57E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2469\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2470, "epsg", 2470,
+		      "Pulkovo 1995 / Gauss-Kruger CM 63E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 63E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2470\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2471, "epsg", 2471,
+		      "Pulkovo 1995 / Gauss-Kruger CM 69E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 69E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2471\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2472, "epsg", 2472,
+		      "Pulkovo 1995 / Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 75E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2472\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2473, "epsg", 2473,
+		      "Pulkovo 1995 / Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 81E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2473\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2474, "epsg", 2474,
+		      "Pulkovo 1995 / Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 87E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2474\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2475, "epsg", 2475,
+		      "Pulkovo 1995 / Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 93E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2475\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2476, "epsg", 2476,
+		      "Pulkovo 1995 / Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 99E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2476\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2477, "epsg", 2477,
+		      "Pulkovo 1995 / Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 105E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2477\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2478, "epsg", 2478,
+		      "Pulkovo 1995 / Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 111E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2478\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2479, "epsg", 2479,
+		      "Pulkovo 1995 / Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 117E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2479\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2480, "epsg", 2480,
+		      "Pulkovo 1995 / Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 123E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2480\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2481, "epsg", 2481,
+		      "Pulkovo 1995 / Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 129E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2481\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2482, "epsg", 2482,
+		      "Pulkovo 1995 / Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 135E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2482\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2483, "epsg", 2483,
+		      "Pulkovo 1995 / Gauss-Kruger CM 141E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 141E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2483\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2484, "epsg", 2484,
+		      "Pulkovo 1995 / Gauss-Kruger CM 147E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 147E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2484\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2485, "epsg", 2485,
+		      "Pulkovo 1995 / Gauss-Kruger CM 153E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 153E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2485\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2486, "epsg", 2486,
+		      "Pulkovo 1995 / Gauss-Kruger CM 159E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 159E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2486\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2487, "epsg", 2487,
+		      "Pulkovo 1995 / Gauss-Kruger CM 165E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 165E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2487\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2488, "epsg", 2488,
+		      "Pulkovo 1995 / Gauss-Kruger CM 171E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 171E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2488\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2489, "epsg", 2489,
+		      "Pulkovo 1995 / Gauss-Kruger CM 177E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 177E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2489\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2490, "epsg", 2490,
+		      "Pulkovo 1995 / Gauss-Kruger CM 177W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 177W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2490\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2491, "epsg", 2491,
+		      "Pulkovo 1995 / Gauss-Kruger CM 171W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger CM 171W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2491\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2492, "epsg", 2492,
+		      "Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +e");
+    add_proj4text (p, 1, "llps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2492\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2493, "epsg", 2493,
+		      "Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",15],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2493\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2494, "epsg", 2494,
+		      "Pulkovo 1942 / Gauss-Kruger CM 21E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 21E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2494\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2495, "epsg", 2495,
+		      "Pulkovo 1942 / Gauss-Kruger CM 27E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 27E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2495\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2496, "epsg", 2496,
+		      "Pulkovo 1942 / Gauss-Kruger CM 33E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 33E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2496\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2497, "epsg", 2497,
+		      "Pulkovo 1942 / Gauss-Kruger CM 39E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 39E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2497\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2498, "epsg", 2498,
+		      "Pulkovo 1942 / Gauss-Kruger CM 45E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 45E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2498\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2499, "epsg", 2499,
+		      "Pulkovo 1942 / Gauss-Kruger CM 51E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 51E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2499\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2500, "epsg", 2500,
+		      "Pulkovo 1942 / Gauss-Kruger CM 57E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 57E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2500\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2501, "epsg", 2501,
+		      "Pulkovo 1942 / Gauss-Kruger CM 63E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 63E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2501\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2502, "epsg", 2502,
+		      "Pulkovo 1942 / Gauss-Kruger CM 69E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 69E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2502\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2503, "epsg", 2503,
+		      "Pulkovo 1942 / Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 75E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2503\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2504, "epsg", 2504,
+		      "Pulkovo 1942 / Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 81E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2504\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2505, "epsg", 2505,
+		      "Pulkovo 1942 / Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 87E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2505\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2506, "epsg", 2506,
+		      "Pulkovo 1942 / Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 93E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2506\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2507, "epsg", 2507,
+		      "Pulkovo 1942 / Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 99E\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2507\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2508, "epsg", 2508,
+		      "Pulkovo 1942 / Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 105E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2508\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2509, "epsg", 2509,
+		      "Pulkovo 1942 / Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 111E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2509\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2510, "epsg", 2510,
+		      "Pulkovo 1942 / Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 117E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2510\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2511, "epsg", 2511,
+		      "Pulkovo 1942 / Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 123E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2511\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2512, "epsg", 2512,
+		      "Pulkovo 1942 / Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 129E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2512\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2513, "epsg", 2513,
+		      "Pulkovo 1942 / Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 135E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2513\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2514, "epsg", 2514,
+		      "Pulkovo 1942 / Gauss-Kruger CM 141E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 141E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2514\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2515, "epsg", 2515,
+		      "Pulkovo 1942 / Gauss-Kruger CM 147E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 147E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2515\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2516, "epsg", 2516,
+		      "Pulkovo 1942 / Gauss-Kruger CM 153E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 153E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2516\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2517, "epsg", 2517,
+		      "Pulkovo 1942 / Gauss-Kruger CM 159E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 159E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2517\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2518, "epsg", 2518,
+		      "Pulkovo 1942 / Gauss-Kruger CM 165E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 165E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2518\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2519, "epsg", 2519,
+		      "Pulkovo 1942 / Gauss-Kruger CM 171E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 171E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2519\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2520, "epsg", 2520,
+		      "Pulkovo 1942 / Gauss-Kruger CM 177E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 177E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2520\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2521, "epsg", 2521,
+		      "Pulkovo 1942 / Gauss-Kruger CM 177W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 177W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2521\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2522, "epsg", 2522,
+		      "Pulkovo 1942 / Gauss-Kruger CM 171W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger CM 171W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2522\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2523, "epsg", 2523,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 7\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",21],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",75000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2523\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2524, "epsg", 2524,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 8\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",24],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",85000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2524\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2525, "epsg", 2525,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 9\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",27],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",95000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2525\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2526, "epsg", 2526,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 10\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",105");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2526\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2527, "epsg", 2527,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 11\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",115");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2527\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2528, "epsg", 2528,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 12\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",125");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2528\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2529, "epsg", 2529,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 13\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",135");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2529\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2530, "epsg", 2530,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 14\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",42],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",145");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2530\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2531, "epsg", 2531,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 15\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",155");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2531\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2532, "epsg", 2532,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 16\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",48],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",165");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2532\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2533, "epsg", 2533,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 17\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",175");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2533\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2534, "epsg", 2534,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 18\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",54],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",185");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2534\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2535, "epsg", 2535,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 19");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 19\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",195");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2535\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2536, "epsg", 2536,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 20\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",60],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",205");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2536\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2537, "epsg", 2537,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 21");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 21\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",215");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2537\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2538, "epsg", 2538,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 22\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",66],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",225");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2538\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2539, "epsg", 2539,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 23");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 23\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",235");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2539\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2540, "epsg", 2540,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 24");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 24\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",72],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",245");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2540\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2541, "epsg", 2541,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 25");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 25\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",255");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2541\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2542, "epsg", 2542,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 26\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",78],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",265");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2542\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_04 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2543, "epsg", 2543,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 27");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 27\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",275");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2543\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2544, "epsg", 2544,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 28\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",84],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",285");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2544\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2545, "epsg", 2545,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 29");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 29\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",295");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2545\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2546, "epsg", 2546,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 30\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",90],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",305");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2546\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2547, "epsg", 2547,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 31\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",315");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2547\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2548, "epsg", 2548,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 32");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 32\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",96],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",325");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2548\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2549, "epsg", 2549,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 33");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 33\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",335");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2549\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2550, "epsg", 2550,
+		      "Samboja / UTM zone 50S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78");
+    add_proj4text (p, 1, ",685.68,45.47,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Samboja / UTM zone 50S (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Samboja\",DATUM[\"Samboja\",SPHEROID[\"Bessel 1841\",637");
+    add_srs_wkt (p, 2,
+		 "7397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS");
+    add_srs_wkt (p, 3,
+		 "84[-404.78,685.68,45.47,0,0,0,0],AUTHORITY[\"EPSG\",\"61");
+    add_srs_wkt (p, 4,
+		 "25\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9108\"]],AUTHORITY[\"EPSG\",\"4125\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",117],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"2550\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2551, "epsg", 2551,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 34");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 34\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",102],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",34");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2551\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2552, "epsg", 2552,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 35");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 35\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",35");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2552\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2553, "epsg", 2553,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 36");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 36\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",108],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",36");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2553\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2554, "epsg", 2554,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 37");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 37\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",37");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2554\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2555, "epsg", 2555,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 38");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 38\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",114],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",38");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2555\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2556, "epsg", 2556,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 39");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 39\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",39");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2556\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2557, "epsg", 2557,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 40\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",120],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",40");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2557\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2558, "epsg", 2558,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 41");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 41\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",41");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2558\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2559, "epsg", 2559,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 42");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 42\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",126],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",42");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2559\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2560, "epsg", 2560,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 43");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 43\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",43");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2560\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2561, "epsg", 2561,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 44");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 44\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",132],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",44");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2561\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2562, "epsg", 2562,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 45\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",45");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2562\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2563, "epsg", 2563,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 46");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 46\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",138],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",46");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2563\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2564, "epsg", 2564,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 47");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 47\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",141],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",47");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2564\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2565, "epsg", 2565,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 48");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 48\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",144],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",48");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2565\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2566, "epsg", 2566,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 49");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 49\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",147],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",49");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2566\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2567, "epsg", 2567,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 50");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 50\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",150],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2567\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2568, "epsg", 2568,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 51");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 51\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",153],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",51");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2568\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2569, "epsg", 2569,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 52");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 52\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",156],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",52");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2569\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2570, "epsg", 2570,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 53");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 53\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",159],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",53");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2570\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2571, "epsg", 2571,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 54");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 54\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",162],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",54");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2571\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2572, "epsg", 2572,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 55");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 55\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",165],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",55");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2572\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2573, "epsg", 2573,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 56");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 56\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",168],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",56");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2573\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2574, "epsg", 2574,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 57");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 57\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",171],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",57");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2574\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2575, "epsg", 2575,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 58");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 58\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",174],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",58");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2575\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2576, "epsg", 2576,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 59");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 59\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",177],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",59");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2576\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2577, "epsg", 2577,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (d");
+    add_srs_wkt (p, 1,
+		 "eprecated)\",GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_194");
+    add_srs_wkt (p, 2,
+		 "2\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0");
+    add_srs_wkt (p, 4,
+		 ".85,-0.12],AUTHORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 10,
+		 "\",180],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",60000000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"2577\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 13, "ST]]");
+    p = add_epsg_def (first, last, 2578, "epsg", 2578,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 61");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 61\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-177],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "1500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2578\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2579, "epsg", 2579,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 62");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 62\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-174],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "2500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2579\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2580, "epsg", 2580,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 63");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 63\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-171],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "3500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2580\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2581, "epsg", 2581,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 64");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 64\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-168],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "4500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2581\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2582, "epsg", 2582,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",21],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2582\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2583, "epsg", 2583,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",24],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2583\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2584, "epsg", 2584,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",27],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2584\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2585, "epsg", 2585,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",30],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2585\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2586, "epsg", 2586,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",33],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2586\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2587, "epsg", 2587,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",36],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2587\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2588, "epsg", 2588,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",39],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2588\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2589, "epsg", 2589,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",42],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2589\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2590, "epsg", 2590,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",45],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2590\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2591, "epsg", 2591,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",48],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2591\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2592, "epsg", 2592,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",51],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2592\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2593, "epsg", 2593,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",54],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2593\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2594, "epsg", 2594,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",57],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2594\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2595, "epsg", 2595,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",60],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2595\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2596, "epsg", 2596,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",63],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2596\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2597, "epsg", 2597,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",66],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2597\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2598, "epsg", 2598,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",69],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2598\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2599, "epsg", 2599,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",72],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2599\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2600, "epsg", 2600,
+		      "Lietuvos Koordinoei Sistema 1994 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lietuvos Koordinoei Sistema 1994 (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"LKS94\",DATUM[\"Lithuania_1994_ETRS89\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6126\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4669\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",24],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9998],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2600\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2601, "epsg", 2601,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",75],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2601\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2602, "epsg", 2602,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",78],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2602\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2603, "epsg", 2603,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",81],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2603\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2604, "epsg", 2604,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",84],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2604\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2605, "epsg", 2605,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",87],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2605\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2606, "epsg", 2606,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",90],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2606\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2607, "epsg", 2607,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",93],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2607\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2608, "epsg", 2608,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",96],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2608\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2609, "epsg", 2609,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",99],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2609\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2610, "epsg", 2610,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",102],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2610\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2611, "epsg", 2611,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2611\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2612, "epsg", 2612,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",108],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2612\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2613, "epsg", 2613,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2613\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2614, "epsg", 2614,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",114],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2614\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2615, "epsg", 2615,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2615\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2616, "epsg", 2616,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",120],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2616\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2617, "epsg", 2617,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2617\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2618, "epsg", 2618,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",126],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2618\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2619, "epsg", 2619,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2619\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2620, "epsg", 2620,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",132],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2620\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2621, "epsg", 2621,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2621\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2622, "epsg", 2622,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",138],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2622\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2623, "epsg", 2623,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",141],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2623\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2624, "epsg", 2624,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",144],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2624\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2625, "epsg", 2625,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",147],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2625\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2626, "epsg", 2626,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",150],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2626\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2627, "epsg", 2627,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",153],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2627\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2628, "epsg", 2628,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",156],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2628\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2629, "epsg", 2629,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",159],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2629\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2630, "epsg", 2630,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",162],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2630\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2631, "epsg", 2631,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",165],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2631\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2632, "epsg", 2632,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",168],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2632\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2633, "epsg", 2633,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",171],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2633\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2634, "epsg", 2634,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",174],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2634\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2635, "epsg", 2635,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",177],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2635\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2636, "epsg", 2636,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",180],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2636\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2637, "epsg", 2637,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-177],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2637\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2638, "epsg", 2638,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-174],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2638\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2639, "epsg", 2639,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-171],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2639\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2640, "epsg", 2640,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-168],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2640\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2641, "epsg", 2641,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 7\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",21],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",7500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2641\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2642, "epsg", 2642,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 8\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",24],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",8500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2642\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2643, "epsg", 2643,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 9\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",27],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",9500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2643\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2644, "epsg", 2644,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 10\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",30],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",105");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2644\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2645, "epsg", 2645,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 11\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",115");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2645\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2646, "epsg", 2646,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 12\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",36],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",125");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2646\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2647, "epsg", 2647,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 13\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",135");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2647\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2648, "epsg", 2648,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 14\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",42],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",145");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2648\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2649, "epsg", 2649,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 15\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",155");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2649\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2650, "epsg", 2650,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 16\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",48],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",165");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2650\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2651, "epsg", 2651,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 17\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",175");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2651\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2652, "epsg", 2652,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 18\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",54],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",185");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2652\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2653, "epsg", 2653,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 19");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 19\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",195");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2653\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2654, "epsg", 2654,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 20\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",60],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",205");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2654\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2655, "epsg", 2655,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 21");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 21\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",215");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2655\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2656, "epsg", 2656,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 22\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",66],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",225");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2656\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2657, "epsg", 2657,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 23");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 23\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",235");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2657\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2658, "epsg", 2658,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 24");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 24\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",72],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",245");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2658\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2659, "epsg", 2659,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 25");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 25\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",255");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2659\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2660, "epsg", 2660,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 26\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",78],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",265");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2660\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2661, "epsg", 2661,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 27");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 27\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",275");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2661\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2662, "epsg", 2662,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 28\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",84],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",285");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2662\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2663, "epsg", 2663,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 29");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 29\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",295");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2663\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2664, "epsg", 2664,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 30\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",90],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",305");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2664\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2665, "epsg", 2665,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 31\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",315");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2665\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2666, "epsg", 2666,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 32");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 32\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",96],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",325");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2666\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2667, "epsg", 2667,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 33");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 33\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",335");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2667\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2668, "epsg", 2668,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 34");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 34\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",102],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",34");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2668\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2669, "epsg", 2669,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 35");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 35\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",35");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2669\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2670, "epsg", 2670,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 36");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 36\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",108],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",36");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2670\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_05 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2671, "epsg", 2671,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 37");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 37\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",37");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2671\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2672, "epsg", 2672,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 38");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 38\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",114],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",38");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2672\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2673, "epsg", 2673,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 39");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 39\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",39");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2673\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2674, "epsg", 2674,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 40\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",120],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",40");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2674\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2675, "epsg", 2675,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 41");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 41\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",41");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2675\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2676, "epsg", 2676,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 42");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 42\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",126],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",42");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2676\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2677, "epsg", 2677,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 43");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 43\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",43");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2677\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2678, "epsg", 2678,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 44");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 44\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",132],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",44");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2678\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2679, "epsg", 2679,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 45\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",45");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2679\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2680, "epsg", 2680,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 46");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 46\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",138],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",46");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2680\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2681, "epsg", 2681,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 47");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 47\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",141],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",47");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2681\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2682, "epsg", 2682,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 48");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 48\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",144],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",48");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2682\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2683, "epsg", 2683,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 49");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 49\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",147],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",49");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2683\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2684, "epsg", 2684,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 50");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 50\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",150],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2684\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2685, "epsg", 2685,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 51");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 51\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",153],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",51");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2685\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2686, "epsg", 2686,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 52");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 52\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",156],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",52");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2686\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2687, "epsg", 2687,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 53");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 53\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",159],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",53");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2687\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2688, "epsg", 2688,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 54");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 54\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",162],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",54");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2688\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2689, "epsg", 2689,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 55");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 55\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",165],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",55");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2689\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2690, "epsg", 2690,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 56");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 56\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",168],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",56");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2690\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2691, "epsg", 2691,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 57");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 57\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",171],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",57");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2691\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2692, "epsg", 2692,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 58");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 58\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",174],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",58");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2692\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2693, "epsg", 2693,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 59");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 59\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",177],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",59");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"2693\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2694, "epsg", 2694,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (d");
+    add_srs_wkt (p, 1,
+		 "eprecated)\",GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_199");
+    add_srs_wkt (p, 2,
+		 "5\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,");
+    add_srs_wkt (p, 4,
+		 "0.16,-0.12],AUTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",180],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",60000000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 12,
+		 "THORITY[\"EPSG\",\"2694\"],AXIS[\"X\",NORTH],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "EAST]]");
+    p = add_epsg_def (first, last, 2695, "epsg", 2695,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 61");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16");
+    add_proj4text (p, 2, ",-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 61\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-177],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "1500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2695\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2696, "epsg", 2696,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 62");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16");
+    add_proj4text (p, 2, ",-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 62\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-174],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "2500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2696\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2697, "epsg", 2697,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 63");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16");
+    add_proj4text (p, 2, ",-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 63\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-171],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "3500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2697\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2698, "epsg", 2698,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 64");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16");
+    add_proj4text (p, 2, ",-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 64\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-168],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 11,
+		 "4500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"2698\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2699, "epsg", 2699,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",21],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2699\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2700, "epsg", 2700,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",24],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2700\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2701, "epsg", 2701,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",27],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2701\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2702, "epsg", 2702,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",30],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2702\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2703, "epsg", 2703,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",33],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2703\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2704, "epsg", 2704,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",36],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2704\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2705, "epsg", 2705,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",39],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2705\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2706, "epsg", 2706,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",42],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2706\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2707, "epsg", 2707,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",45],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2707\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2708, "epsg", 2708,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",48],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2708\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2709, "epsg", 2709,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",51],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2709\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2710, "epsg", 2710,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",54],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2710\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2711, "epsg", 2711,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",57],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2711\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2712, "epsg", 2712,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",60],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2712\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2713, "epsg", 2713,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",63],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2713\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2714, "epsg", 2714,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",66],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2714\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2715, "epsg", 2715,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",69],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2715\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2716, "epsg", 2716,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",72],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2716\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2717, "epsg", 2717,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",75],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2717\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2718, "epsg", 2718,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",78],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2718\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2719, "epsg", 2719,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",81],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2719\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2720, "epsg", 2720,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",84],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2720\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2721, "epsg", 2721,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",87],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2721\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2722, "epsg", 2722,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",90],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2722\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2723, "epsg", 2723,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",93],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2723\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2724, "epsg", 2724,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",96],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2724\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2725, "epsg", 2725,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",99],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2725\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2726, "epsg", 2726,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",102],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2726\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2727, "epsg", 2727,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2727\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2728, "epsg", 2728,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",108],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2728\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2729, "epsg", 2729,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2729\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2730, "epsg", 2730,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",114],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2730\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2731, "epsg", 2731,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2731\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2732, "epsg", 2732,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",120],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2732\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2733, "epsg", 2733,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2733\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2734, "epsg", 2734,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",126],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2734\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2735, "epsg", 2735,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2735\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2736, "epsg", 2736, "Tete / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tete / UTM zone 36S\",GEOGCS[\"Tete\",DATUM[\"T");
+    add_srs_wkt (p, 1,
+		 "ete\",SPHEROID[\"Clarke 1866\",6378206.4,294.97869821390");
+    add_srs_wkt (p, 2,
+		 "06,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"61");
+    add_srs_wkt (p, 3,
+		 "27\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4127\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 9,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"2736\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2737, "epsg", 2737, "Tete / UTM zone 37S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tete / UTM zone 37S\",GEOGCS[\"Tete\",DATUM[\"T");
+    add_srs_wkt (p, 1,
+		 "ete\",SPHEROID[\"Clarke 1866\",6378206.4,294.97869821390");
+    add_srs_wkt (p, 2,
+		 "06,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"61");
+    add_srs_wkt (p, 3,
+		 "27\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4127\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 9,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"2737\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2738, "epsg", 2738,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",132],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2738\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2739, "epsg", 2739,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2739\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2740, "epsg", 2740,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",138],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2740\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2741, "epsg", 2741,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",141],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2741\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2742, "epsg", 2742,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",144],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2742\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2743, "epsg", 2743,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",147],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2743\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2744, "epsg", 2744,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",150],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2744\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2745, "epsg", 2745,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",153],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2745\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2746, "epsg", 2746,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",156],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2746\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2747, "epsg", 2747,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",159],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2747\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2748, "epsg", 2748,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",162],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2748\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2749, "epsg", 2749,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",165],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2749\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2750, "epsg", 2750,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",168],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2750\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2751, "epsg", 2751,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",171],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2751\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2752, "epsg", 2752,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",174],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2752\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2753, "epsg", 2753,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",177],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2753\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2754, "epsg", 2754,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",180],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2754\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2755, "epsg", 2755,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-177],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2755\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2756, "epsg", 2756,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-174],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2756\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2757, "epsg", 2757,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-171],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2757\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2758, "epsg", 2758,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-168],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2758\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 2759, "epsg", 2759,
+		      "NAD83(HARN) / Alabama East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Alabama East\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",30.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-85.83333333333333],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.99996],PARAMETER[\"false_easting\",200000],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2759\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2760, "epsg", 2760,
+		      "NAD83(HARN) / Alabama West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=6");
+    add_proj4text (p, 1, "00000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Alabama West\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",30],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 9,
+		 "idian\",-87.5],PARAMETER[\"scale_factor\",0.999933333],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",600000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2760\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2761, "epsg", 2761,
+		      "NAD83(HARN) / Arizona East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999");
+    add_proj4text (p, 1, "9 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arizona East\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",31],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 9,
+		 "idian\",-110.1666666666667],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9999],PARAMETER[\"false_easting\",213360],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2761\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2762, "epsg", 2762,
+		      "NAD83(HARN) / Arizona Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999");
+    add_proj4text (p, 1, "9 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arizona Central\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-111.9166666666667],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999],PARAMETER[\"false_easting\",213360],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2762\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2763, "epsg", 2763,
+		      "NAD83(HARN) / Arizona West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0");
+    add_proj4text (p, 1, "=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arizona West\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",31],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 9,
+		 "idian\",-113.75],PARAMETER[\"scale_factor\",0.999933333]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",213360],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"2763\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 12, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2764, "epsg", 2764,
+		      "NAD83(HARN) / Arkansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arkansas North\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",36.2333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",34.93333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",34.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-92],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",400000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2764\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2765, "epsg", 2765,
+		      "NAD83(HARN) / Arkansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arkansas South\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",34.7666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",33.3],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",32.66666666666666],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-92],PARAMETER[\"false_easting\",400000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",400000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "2765\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2766, "epsg", 2766,
+		      "NAD83(HARN) / California zone 1");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.3");
+    add_proj4text (p, 1,
+		   "3333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 1\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",41.6666666666666");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"lat");
+    add_srs_wkt (p, 10,
+		 "itude_of_origin\",39.33333333333334],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-122],PARAMETER[\"false_easting\",2000000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "2766\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2767, "epsg", 2767,
+		      "NAD83(HARN) / California zone 2");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y");
+    add_proj4text (p, 2, "_0=500000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 2\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",39.8333333333333");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",38.33333333333334],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",37.66666666666666],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-122],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",2000000],PARAMETER[\"false_northing\",500000],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"2767\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 14, "H]]");
+    p = add_epsg_def (first, last, 2768, "epsg", 2768,
+		      "NAD83(HARN) / California zone 3");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +");
+    add_proj4text (p, 2, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 3\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",38.4333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",37.06666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",36.5],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-120.5],PARAMETER[\"false_easting\",200000");
+    add_srs_wkt (p, 12,
+		 "0],PARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13, "\",\"2768\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2769, "epsg", 2769,
+		      "NAD83(HARN) / California zone 4");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.3333333333333");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 4\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",37.25],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_2\",36],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 10,
+		 "gin\",35.33333333333334],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 11,
+		 "-119],PARAMETER[\"false_easting\",2000000],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_northing\",500000],AUTHORITY[\"EPSG\",\"2769\"],AXI");
+    add_srs_wkt (p, 13, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2770, "epsg", 2770,
+		      "NAD83(HARN) / California zone 5");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +el");
+    add_proj4text (p, 2, "lps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 5\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",35.4666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",34.03333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",33.5],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-118],PARAMETER[\"false_easting\",2000000]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"2770\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2771, "epsg", 2771,
+		      "NAD83(HARN) / California zone 6");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000");
+    add_proj4text (p, 2, " +y_0=500000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 6\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",33.8833333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",32.78333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",32.16666666666666],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-116.25],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 12,
+		 "sting\",2000000],PARAMETER[\"false_northing\",500000],AU");
+    add_srs_wkt (p, 13,
+		 "THORITY[\"EPSG\",\"2771\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 14, "ORTH]]");
+    p = add_epsg_def (first, last, 2772, "epsg", 2772,
+		      "NAD83(HARN) / Colorado North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2, "289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Colorado North\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",40.7833333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",39.71666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",39.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-105.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",914401.8289],PARAMETER[\"false_northing\",304800.");
+    add_srs_wkt (p, 13,
+		 "6096],AUTHORITY[\"EPSG\",\"2772\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2773, "epsg", 2773,
+		      "NAD83(HARN) / Colorado Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.8333333333");
+    add_proj4text (p, 1,
+		   "3334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +el");
+    add_proj4text (p, 2, "lps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Colorado Central\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",39.75],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_2\",38.45],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",37.83333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-105.5],PARAMETER[\"false_easting\",914401.8289],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",304800.6096],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"2773\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2774, "epsg", 2774,
+		      "NAD83(HARN) / Colorado South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2, "289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Colorado South\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",38.4333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",37.23333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",36.66666666666666],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-105.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",914401.8289],PARAMETER[\"false_northing\",304800.");
+    add_srs_wkt (p, 13,
+		 "6096],AUTHORITY[\"EPSG\",\"2774\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2775, "epsg", 2775,
+		      "NAD83(HARN) / Connecticut");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40");
+    add_proj4text (p, 1,
+		   ".83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=1524");
+    add_proj4text (p, 2, "00.3048 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Connecticut\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",41.86666666666667],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",41.2],PARAMETER[\"latit");
+    add_srs_wkt (p, 10,
+		 "ude_of_origin\",40.83333333333334],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-72.75],PARAMETER[\"false_easting\",304800.609");
+    add_srs_wkt (p, 12,
+		 "6],PARAMETER[\"false_northing\",152400.3048],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2775\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2776, "epsg", 2776,
+		      "NAD83(HARN) / Delaware");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Delaware\",GEOGCS[\"NAD83(HARN)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",38],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-75.41666666666667],PARAMETER[\"scale_factor\",0.9999");
+    add_srs_wkt (p, 10,
+		 "95],PARAMETER[\"false_easting\",200000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2776\"],AXIS[\"X\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2777, "epsg", 2777,
+		      "NAD83(HARN) / Florida East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Florida East\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",24.33333333333333],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".999941177],PARAMETER[\"false_easting\",200000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2777\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2778, "epsg", 2778,
+		      "NAD83(HARN) / Florida West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Florida West\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",24.33333333333333],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-82],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".999941177],PARAMETER[\"false_easting\",200000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2778\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2779, "epsg", 2779,
+		      "NAD83(HARN) / Florida North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=2");
+    add_proj4text (p, 1,
+		   "9 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Florida North\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",30.75],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",29.58333333333333],PARAMETER[\"lat");
+    add_srs_wkt (p, 10,
+		 "itude_of_origin\",29],PARAMETER[\"central_meridian\",-84");
+    add_srs_wkt (p, 11,
+		 ".5],PARAMETER[\"false_easting\",600000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"2779\"],AXIS[\"X\",");
+    add_srs_wkt (p, 13, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2780, "epsg", 2780,
+		      "NAD83(HARN) / Georgia East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999");
+    add_proj4text (p, 1, "9 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Georgia East\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",30],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 9,
+		 "idian\",-82.16666666666667],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2780\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2781, "epsg", 2781,
+		      "NAD83(HARN) / Georgia West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999");
+    add_proj4text (p, 1, "9 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Georgia West\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",30],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 9,
+		 "idian\",-84.16666666666667],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9999],PARAMETER[\"false_easting\",700000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2781\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2782, "epsg", 2782,
+		      "NAD83(HARN) / Hawaii zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.");
+    add_proj4text (p, 1,
+		   "999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Hawaii zone 1\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",18.83333333333333],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-155.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999966667],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2782\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2783, "epsg", 2783,
+		      "NAD83(HARN) / Hawaii zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Hawaii zone 2\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",20.33333333333333],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-156.6666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999966667],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2783\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2784, "epsg", 2784,
+		      "NAD83(HARN) / Hawaii zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99");
+    add_proj4text (p, 1,
+		   "999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Hawaii zone 3\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",21.16666666666667],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-158],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.99999],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2784\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2785, "epsg", 2785,
+		      "NAD83(HARN) / Hawaii zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.");
+    add_proj4text (p, 1,
+		   "99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Hawaii zone 4\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",21.83333333333333],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-159.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.99999],PARAMETER[\"false_easting\",500000],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2785\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2786, "epsg", 2786,
+		      "NAD83(HARN) / Hawaii zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Hawaii zone 5\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",21.66666666666667],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-160.1666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2786\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2787, "epsg", 2787,
+		      "NAD83(HARN) / Idaho East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Idaho East\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",41.66666666666666],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-112.1666666666667],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.999947368],PARAMETER[\"false_easting\",200");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2787\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2788, "epsg", 2788,
+		      "NAD83(HARN) / Idaho Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.99");
+    add_proj4text (p, 1,
+		   "99473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Idaho Central\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",41.66666666666666],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-114],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.999947368],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2788\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2789, "epsg", 2789,
+		      "NAD83(HARN) / Idaho West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Idaho West\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",41.66666666666666],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-115.75],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999933333],PARAMETER[\"false_easting\",800000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2789\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2790, "epsg", 2790,
+		      "NAD83(HARN) / Illinois East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Illinois East\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",36.66666666666666],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-88.33333333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999975],PARAMETER[\"false_easting\",3000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "2790\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2791, "epsg", 2791,
+		      "NAD83(HARN) / Illinois West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Illinois West\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",36.66666666666666],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-90.16666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999941177],PARAMETER[\"false_easting\",7");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2791\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2792, "epsg", 2792,
+		      "NAD83(HARN) / Indiana East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Indiana East\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",37.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-85.66666666666667],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999966667],PARAMETER[\"false_easting\",100000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",250000],AUTHORITY[\"EPSG\",\"2792");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2793, "epsg", 2793,
+		      "NAD83(HARN) / Indiana West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Indiana West\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",37.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-87.08333333333333],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999966667],PARAMETER[\"false_easting\",900000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",250000],AUTHORITY[\"EPSG\",\"2793");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2794, "epsg", 2794,
+		      "NAD83(HARN) / Iowa North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +");
+    add_proj4text (p, 2, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Iowa North\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",43.26666666666667],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",42.06666666666667],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",41.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-93.5],PARAMETER[\"false_easting\",1500000],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "2794\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2795, "epsg", 2795,
+		      "NAD83(HARN) / Iowa South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Iowa South\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",41.78333333333333],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",40.61666666666667],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",40],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-93.5],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2795\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2796, "epsg", 2796,
+		      "NAD83(HARN) / Kansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kansas North\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",39.78333333333333]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",38.71666666666667],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",38.33333333333334],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-98],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",400000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"2796\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2797, "epsg", 2797,
+		      "NAD83(HARN) / Kansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y");
+    add_proj4text (p, 2, "_0=400000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kansas South\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",38.56666666666667]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",37.26666666666667],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",36.66666666666666],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-98.5],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",400000],PARAMETER[\"false_northing\",400000],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"2797\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 14, "]");
+    p = add_epsg_def (first, last, 2798, "epsg", 2798,
+		      "NAD83(HARN) / Kentucky North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kentucky North\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",37.9666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",38.96666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-84.25],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "798\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_06 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2799, "epsg", 2799,
+		      "NAD83(HARN) / Kentucky South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +");
+    add_proj4text (p, 2, "y_0=500000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kentucky South\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",37.9333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",36.73333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",36.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-85.75],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",500000],PARAMETER[\"false_northing\",500000],AUTH");
+    add_srs_wkt (p, 13,
+		 "ORITY[\"EPSG\",\"2799\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 2800, "epsg", 2800,
+		      "NAD83(HARN) / Louisiana North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Louisiana North\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",32.6666666666666");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"standard_parallel_2\",31.16666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",30.5],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-92.5],PARAMETER[\"false_easting\",1000000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "800\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2801, "epsg", 2801,
+		      "NAD83(HARN) / Louisiana South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91");
+    add_proj4text (p, 1,
+		   ".33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Louisiana South\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",30.7],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_2\",29.3],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 10,
+		 "igin\",28.5],PARAMETER[\"central_meridian\",-91.33333333");
+    add_srs_wkt (p, 11,
+		 "333333],PARAMETER[\"false_easting\",1000000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2801\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2802, "epsg", 2802,
+		      "NAD83(HARN) / Maine East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine East\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",43.66666666666666],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-68.5],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2802\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2803, "epsg", 2803,
+		      "NAD83(HARN) / Maine West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine West\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",42.83333333333334],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-70.16666666666667],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.999966667],PARAMETER[\"false_easting\",900");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2803\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2804, "epsg", 2804,
+		      "NAD83(HARN) / Maryland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maryland\",GEOGCS[\"NAD83(HARN)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"standard_parallel_1\",39.45],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",38.3],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 10,
+		 ",37.66666666666666],PARAMETER[\"central_meridian\",-77],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",400000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"2804\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2805, "epsg", 2805,
+		      "NAD83(HARN) / Massachusetts Mainland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Massachusetts Mainland\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",42.6833333");
+    add_srs_wkt (p, 9,
+		 "3333333],PARAMETER[\"standard_parallel_2\",41.7166666666");
+    add_srs_wkt (p, 10,
+		 "6667],PARAMETER[\"latitude_of_origin\",41],PARAMETER[\"c");
+    add_srs_wkt (p, 11,
+		 "entral_meridian\",-71.5],PARAMETER[\"false_easting\",200");
+    add_srs_wkt (p, 12,
+		 "000],PARAMETER[\"false_northing\",750000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"2805\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2806, "epsg", 2806,
+		      "NAD83(HARN) / Massachusetts Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Massachusetts Island\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",41.4833333");
+    add_srs_wkt (p, 9,
+		 "3333333],PARAMETER[\"standard_parallel_2\",41.2833333333");
+    add_srs_wkt (p, 10,
+		 "3333],PARAMETER[\"latitude_of_origin\",41],PARAMETER[\"c");
+    add_srs_wkt (p, 11,
+		 "entral_meridian\",-70.5],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 12,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 13, "\"2806\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2807, "epsg", 2807,
+		      "NAD83(HARN) / Michigan North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_");
+    add_proj4text (p, 2, "0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Michigan North\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",47.0833333333333");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",45.48333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",44.78333333333333],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-87],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",8000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2807\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2808, "epsg", 2808,
+		      "NAD83(HARN) / Michigan Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43");
+    add_proj4text (p, 1,
+		   ".31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Michigan Central\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",45.7],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_2\",44.18333333333333],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",43.31666666666667],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-84.36666666666666],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",6000000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"2808\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2809, "epsg", 2809,
+		      "NAD83(HARN) / Michigan South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41");
+    add_proj4text (p, 1,
+		   ".5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Michigan South\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",43.6666666666666");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"standard_parallel_2\",42.1],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",41.5],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-84.36666666666666],PARAMETER[\"false_easting\",4000000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "809\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2810, "epsg", 2810,
+		      "NAD83(HARN) / Minnesota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y");
+    add_proj4text (p, 2, "_0=100000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota North\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",48.6333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",47.03333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-93.1],PARAMETER[\"false_easting\",800000]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_northing\",100000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"2810\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2811, "epsg", 2811,
+		      "NAD83(HARN) / Minnesota Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +un");
+    add_proj4text (p, 2, "its=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota Central\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",45],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 11,
+		 "-94.25],PARAMETER[\"false_easting\",800000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",100000],AUTHORITY[\"EPSG\",\"2811\"],AX");
+    add_srs_wkt (p, 13, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2812, "epsg", 2812,
+		      "NAD83(HARN) / Minnesota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=");
+    add_proj4text (p, 2, "GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota South\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",45.2166666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",43.78333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-94],PARAMETER[\"false_easting\",800000],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_northing\",100000],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "812\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2813, "epsg", 2813,
+		      "NAD83(HARN) / Mississippi East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Mississippi East\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",29.5],PARAMETER[\"central");
+    add_srs_wkt (p, 9,
+		 "_meridian\",-88.83333333333333],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.99995],PARAMETER[\"false_easting\",300000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2813\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2814, "epsg", 2814,
+		      "NAD83(HARN) / Mississippi West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Mississippi West\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",29.5],PARAMETER[\"central");
+    add_srs_wkt (p, 9,
+		 "_meridian\",-90.33333333333333],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.99995],PARAMETER[\"false_easting\",700000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2814\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2815, "epsg", 2815,
+		      "NAD83(HARN) / Missouri East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Missouri East\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",35.83333333333334],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-90.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999933333],PARAMETER[\"false_easting\",250000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2815\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2816, "epsg", 2816,
+		      "NAD83(HARN) / Missouri Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Missouri Central\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",35.83333333333334],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"central_meridian\",-92.5],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.999933333],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2816\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2817, "epsg", 2817,
+		      "NAD83(HARN) / Missouri West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Missouri West\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",36.16666666666666],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-94.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999941177],PARAMETER[\"false_easting\",850000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2817\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2818, "epsg", 2818, "NAD83(HARN) / Montana");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5");
+    add_proj4text (p, 1, " +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Montana\",GEOGCS[\"NAD83(HARN)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"standard_parallel_1\",49],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_2\",45],PARAMETER[\"latitude_of_origin\",44.2");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"central_meridian\",-109.5],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",600000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 12,
+		 "THORITY[\"EPSG\",\"2818\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 2819, "epsg", 2819,
+		      "NAD83(HARN) / Nebraska");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nebraska\",GEOGCS[\"NAD83(HARN)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"standard_parallel_1\",43],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39.8");
+    add_srs_wkt (p, 10,
+		 "3333333333334],PARAMETER[\"central_meridian\",-100],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"2819\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2820, "epsg", 2820,
+		      "NAD83(HARN) / Nevada East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nevada East\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",34.75],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-115.5833333333333],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",8000000],AUTHORITY[\"EPSG\",\"2820\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2821, "epsg", 2821,
+		      "NAD83(HARN) / Nevada Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nevada Central\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-116.6666666666667],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 10,
+		 "r\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",6000000],AUTHORITY[\"EPSG\",\"2821\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2822, "epsg", 2822,
+		      "NAD83(HARN) / Nevada West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nevada West\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",34.75],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-118.5833333333333],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9999],PARAMETER[\"false_easting\",800000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",4000000],AUTHORITY[\"EPSG\",\"2822\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2823, "epsg", 2823,
+		      "NAD83(HARN) / New Hampshire");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Hampshire\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",42.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-71.66666666666667],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999966667],PARAMETER[\"false_easting\",300000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2823\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2824, "epsg", 2824,
+		      "NAD83(HARN) / New Jersey");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Jersey\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",38.83333333333334],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-74.5],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9999],PARAMETER[\"false_easting\",150000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2824\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2825, "epsg", 2825,
+		      "NAD83(HARN) / New Mexico East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Mexico East\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-104.3333333333333],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999909091],PARAMETER[\"false_easting\",165000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2825\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2826, "epsg", 2826,
+		      "NAD83(HARN) / New Mexico Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=5000");
+    add_proj4text (p, 1, "00 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Mexico Central\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-106.25],PARAMETER[\"scale_factor\",0.9999],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"2826\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2827, "epsg", 2827,
+		      "NAD83(HARN) / New Mexico West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Mexico West\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",31],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-107.8333333333333],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999916667],PARAMETER[\"false_easting\",830000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2827\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2828, "epsg", 2828,
+		      "NAD83(HARN) / New York East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York East\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",38.83333333333334],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-74.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999],PARAMETER[\"false_easting\",150000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2828\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2829, "epsg", 2829,
+		      "NAD83(HARN) / New York Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York Central\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",40],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-76.58333333333333],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999375],PARAMETER[\"false_easting\",250000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2829\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2830, "epsg", 2830,
+		      "NAD83(HARN) / New York West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York West\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",40],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 9,
+		 "idian\",-78.58333333333333],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9999375],PARAMETER[\"false_easting\",350000],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"2830\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2831, "epsg", 2831,
+		      "NAD83(HARN) / New York Long Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York Long Island\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",41.0333333");
+    add_srs_wkt (p, 9,
+		 "3333333],PARAMETER[\"standard_parallel_2\",40.6666666666");
+    add_srs_wkt (p, 10,
+		 "6666],PARAMETER[\"latitude_of_origin\",40.16666666666666");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"central_meridian\",-74],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "easting\",300000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 13,
+		 "ITY[\"EPSG\",\"2831\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 2832, "epsg", 2832,
+		      "NAD83(HARN) / North Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / North Dakota North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",48.7333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",47.43333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-100.5],PARAMETER[\"false_easting\",600000],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"283");
+    add_srs_wkt (p, 13, "2\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2833, "epsg", 2833,
+		      "NAD83(HARN) / North Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / North Dakota South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",47.4833333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",46.18333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",45.66666666666666],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-100.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",600000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"2833\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2834, "epsg", 2834,
+		      "NAD83(HARN) / Ohio North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Ohio North\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",41.7],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_2\",40.43333333333333],PARAMETER[\"latit");
+    add_srs_wkt (p, 10,
+		 "ude_of_origin\",39.66666666666666],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-82.5],PARAMETER[\"false_easting\",600000],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2834\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2835, "epsg", 2835,
+		      "NAD83(HARN) / Ohio South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Ohio South\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",40.03333333333333],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",38.73333333333333],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",38],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-82.5],PARAMETER[\"false_easting\",600000],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2835\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2836, "epsg", 2836,
+		      "NAD83(HARN) / Oklahoma North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oklahoma North\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",36.7666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",35.56666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",35],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-98],PARAMETER[\"false_easting\",600000],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2836\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2837, "epsg", 2837,
+		      "NAD83(HARN) / Oklahoma South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oklahoma South\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",35.2333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",33.93333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",33.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-98],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",600000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2837\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2838, "epsg", 2838,
+		      "NAD83(HARN) / Oregon North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oregon North\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",46],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_2\",44.33333333333334],PARAMETER[\"latit");
+    add_srs_wkt (p, 10,
+		 "ude_of_origin\",43.66666666666666],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-120.5],PARAMETER[\"false_easting\",2500000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2838");
+    add_srs_wkt (p, 13, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2839, "epsg", 2839,
+		      "NAD83(HARN) / Oregon South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oregon South\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",44],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_2\",42.33333333333334],PARAMETER[\"latit");
+    add_srs_wkt (p, 10,
+		 "ude_of_origin\",41.66666666666666],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-120.5],PARAMETER[\"false_easting\",1500000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2839");
+    add_srs_wkt (p, 13, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2840, "epsg", 2840,
+		      "NAD83(HARN) / Rhode Island");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Rhode Island\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",41.08333333333334],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-71.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.99999375],PARAMETER[\"false_easting\",100000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2840\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2841, "epsg", 2841,
+		      "NAD83(HARN) / South Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_");
+    add_proj4text (p, 2, "0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / South Dakota North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",45.6833333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",44.41666666666666],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",43.83333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-100],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",600000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2841\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2842, "epsg", 2842,
+		      "NAD83(HARN) / South Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y");
+    add_proj4text (p, 2, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / South Dakota South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",44.4],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_2\",42.83333333333334],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",42.33333333333334],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-100.3333333333333],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",600000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"2842\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2843, "epsg", 2843,
+		      "NAD83(HARN) / Tennessee");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Tennessee\",GEOGCS[\"NAD83(HARN)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"standard_parallel_1\",36.41666666666666],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"standard_parallel_2\",35.25],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",34.33333333333334],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-86],PARAMETER[\"false_easting\",600000],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2843\"],AX");
+    add_srs_wkt (p, 13, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2844, "epsg", 2844,
+		      "NAD83(HARN) / Texas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas North\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",36.18333333333333],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",34.65],PARAMETER[\"lati");
+    add_srs_wkt (p, 10,
+		 "tude_of_origin\",34],PARAMETER[\"central_meridian\",-101");
+    add_srs_wkt (p, 11,
+		 ".5],PARAMETER[\"false_easting\",200000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",1000000],AUTHORITY[\"EPSG\",\"2844\"],AXIS[");
+    add_srs_wkt (p, 13, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2845, "epsg", 2845,
+		      "NAD83(HARN) / Texas North Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y");
+    add_proj4text (p, 2, "_0=2000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas North Central\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",33.96666666");
+    add_srs_wkt (p, 9,
+		 "666667],PARAMETER[\"standard_parallel_2\",32.13333333333");
+    add_srs_wkt (p, 10,
+		 "333],PARAMETER[\"latitude_of_origin\",31.66666666666667]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_easting\",600000],PARAMETER[\"false_northing\",2000000]");
+    add_srs_wkt (p, 13,
+		 ",AUTHORITY[\"EPSG\",\"2845\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 2846, "epsg", 2846,
+		      "NAD83(HARN) / Texas Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas Central\",GEOGCS[\"NAD83(HA");
+    add_srs_wkt (p, 1,
+		 "RN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",31.88333333333333]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",30.11666666666667],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",29.66666666666667],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-100.3333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",700000],PARAMETER[\"false_northing\",300");
+    add_srs_wkt (p, 13,
+		 "0000],AUTHORITY[\"EPSG\",\"2846\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2847, "epsg", 2847,
+		      "NAD83(HARN) / Texas South Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=4000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas South Central\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",30.28333333");
+    add_srs_wkt (p, 9,
+		 "333333],PARAMETER[\"standard_parallel_2\",28.38333333333");
+    add_srs_wkt (p, 10,
+		 "333],PARAMETER[\"latitude_of_origin\",27.83333333333333]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"central_meridian\",-99],PARAMETER[\"false_e");
+    add_srs_wkt (p, 12,
+		 "asting\",600000],PARAMETER[\"false_northing\",4000000],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"2847\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 14, "NORTH]]");
+    p = add_epsg_def (first, last, 2848, "epsg", 2848,
+		      "NAD83(HARN) / Texas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y");
+    add_proj4text (p, 2, "_0=5000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas South\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",27.83333333333333],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",26.16666666666667],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",25.66666666666667],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-98.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",300000],PARAMETER[\"false_northing\",5000000],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"2848\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2849, "epsg", 2849,
+		      "NAD83(HARN) / Utah North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +");
+    add_proj4text (p, 2, "y_0=1000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah North\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",41.78333333333333],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",40.71666666666667],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",40.33333333333334],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-111.5],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",500000],PARAMETER[\"false_northing\",1000000],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"2849\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 14, "]");
+    p = add_epsg_def (first, last, 2850, "epsg", 2850,
+		      "NAD83(HARN) / Utah Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah Central\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",40.65],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",39.01666666666667],PARAMETER[\"lat");
+    add_srs_wkt (p, 10,
+		 "itude_of_origin\",38.33333333333334],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-111.5],PARAMETER[\"false_easting\",500000],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_northing\",2000000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"2850\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2851, "epsg", 2851,
+		      "NAD83(HARN) / Utah South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah South\",GEOGCS[\"NAD83(HARN)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",38.35],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",37.21666666666667],PARAMETER[\"lati");
+    add_srs_wkt (p, 10,
+		 "tude_of_origin\",36.66666666666666],PARAMETER[\"central_");
+    add_srs_wkt (p, 11,
+		 "meridian\",-111.5],PARAMETER[\"false_easting\",500000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",3000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 13, "\"2851\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2852, "epsg", 2852, "NAD83(HARN) / Vermont");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0");
+    add_proj4text (p, 1, "=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Vermont\",GEOGCS[\"NAD83(HARN)\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",42.5],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-72.5],PARAMETER[\"scale_factor\",0.999964286],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"2852\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2853, "epsg", 2853,
+		      "NAD83(HARN) / Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +");
+    add_proj4text (p, 2, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Virginia North\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",39.2],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_2\",38.03333333333333],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",37.66666666666666],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-78.5],PARAMETER[\"false_easting\",3500000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",2000000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13, "\",\"2853\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2854, "epsg", 2854,
+		      "NAD83(HARN) / Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +");
+    add_proj4text (p, 2, "y_0=1000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Virginia South\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",37.9666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",36.76666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",36.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-78.5],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",3500000],PARAMETER[\"false_northing\",1000000],AUT");
+    add_srs_wkt (p, 13,
+		 "HORITY[\"EPSG\",\"2854\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 2855, "epsg", 2855,
+		      "NAD83(HARN) / Washington North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47");
+    add_proj4text (p, 1,
+		   " +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Washington North\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",48.7333333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",47.5],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",47],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 11,
+		 "120.8333333333333],PARAMETER[\"false_easting\",500000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2855");
+    add_srs_wkt (p, 13, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2856, "epsg", 2856,
+		      "NAD83(HARN) / Washington South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Washington South\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",47.3333333333333");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",45.83333333333334],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",45.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-120.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"2856\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2857, "epsg", 2857,
+		      "NAD83(HARN) / West Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1, "5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / West Virginia North\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"standard_parallel_2\",39],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 10,
+		 "f_origin\",38.5],PARAMETER[\"central_meridian\",-79.5],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",600000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2857\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 13, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2858, "epsg", 2858,
+		      "NAD83(HARN) / West Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / West Virginia South\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",38.88333333");
+    add_srs_wkt (p, 9,
+		 "333333],PARAMETER[\"standard_parallel_2\",37.48333333333");
+    add_srs_wkt (p, 10,
+		 "333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"ce");
+    add_srs_wkt (p, 11,
+		 "ntral_meridian\",-81],PARAMETER[\"false_easting\",600000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "858\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2859, "epsg", 2859,
+		      "NAD83(HARN) / Wisconsin North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wisconsin North\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",46.7666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",45.56666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",45.16666666666666],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-90],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",600000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"2859\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2860, "epsg", 2860,
+		      "NAD83(HARN) / Wisconsin Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wisconsin Central\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",45.5],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_2\",44.25],PARAMETER[\"latitude_of_o");
+    add_srs_wkt (p, 10,
+		 "rigin\",43.83333333333334],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-90],PARAMETER[\"false_easting\",600000],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"2860\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2861, "epsg", 2861,
+		      "NAD83(HARN) / Wisconsin South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wisconsin South\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",44.0666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",42.73333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",42],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-90],PARAMETER[\"false_easting\",600000],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2861\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2862, "epsg", 2862,
+		      "NAD83(HARN) / Wyoming East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming East\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",40.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-105.1666666666667],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999375],PARAMETER[\"false_easting\",200000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2862\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2863, "epsg", 2863,
+		      "NAD83(HARN) / Wyoming East Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming East Central\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-107.3333333333333],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999375],PARAMETER[\"false_easting\",400000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",100000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"2863\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2864, "epsg", 2864,
+		      "NAD83(HARN) / Wyoming West Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0");
+    add_proj4text (p, 1, "=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming West Central\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-108.75],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999375],PARAMETER[\"false_easting\",600000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2864\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2865, "epsg", 2865,
+		      "NAD83(HARN) / Wyoming West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming West\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",40.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-110.0833333333333],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999375],PARAMETER[\"false_easting\",800000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",100000],AUTHORITY[\"EPSG\",\"2865\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2866, "epsg", 2866,
+		      "NAD83(HARN) / Puerto Rico and Virgin Is.");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +");
+    add_proj4text (p, 2,
+		   "x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Puerto Rico and Virgin Is.\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_");
+    add_srs_wkt (p, 2,
+		 "Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Confo");
+    add_srs_wkt (p, 8,
+		 "rmal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",18.4");
+    add_srs_wkt (p, 9,
+		 "3333333333333],PARAMETER[\"standard_parallel_2\",18.0333");
+    add_srs_wkt (p, 10,
+		 "3333333333],PARAMETER[\"latitude_of_origin\",17.83333333");
+    add_srs_wkt (p, 11,
+		 "333333],PARAMETER[\"central_meridian\",-66.4333333333333");
+    add_srs_wkt (p, 12,
+		 "4],PARAMETER[\"false_easting\",200000],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",200000],AUTHORITY[\"EPSG\",\"2866\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2867, "epsg", 2867,
+		      "NAD83(HARN) / Arizona East (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arizona East (ft)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9002\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"centr");
+    add_srs_wkt (p, 9,
+		 "al_meridian\",-110.1666666666667],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9999],PARAMETER[\"false_easting\",700000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2867\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2868, "epsg", 2868,
+		      "NAD83(HARN) / Arizona Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arizona Central (ft)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-111.9166666666667],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",700000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2868\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2869, "epsg", 2869,
+		      "NAD83(HARN) / Arizona West (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0");
+    add_proj4text (p, 1, "=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arizona West (ft)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9002\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"centr");
+    add_srs_wkt (p, 9,
+		 "al_meridian\",-113.75],PARAMETER[\"scale_factor\",0.9999");
+    add_srs_wkt (p, 10,
+		 "33333],PARAMETER[\"false_easting\",700000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"2869\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2870, "epsg", 2870,
+		      "NAD83(HARN) / California zone 1 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.3");
+    add_proj4text (p, 1,
+		   "3333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=5000");
+    add_proj4text (p, 2, "00.0001016001 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 1 (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",41.66666666666666],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39");
+    add_srs_wkt (p, 11,
+		 ".33333333333334],PARAMETER[\"central_meridian\",-122],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_easting\",6561666.667],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",1640416.667],AUTHORITY[\"EPSG\",\"2870\"],AX");
+    add_srs_wkt (p, 14, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2871, "epsg", 2871,
+		      "NAD83(HARN) / California zone 2 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.00");
+    add_proj4text (p, 2,
+		   "01016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 2 (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",39.83333333333334],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",38.33333333333334],PARAMETER[\"latitude");
+    add_srs_wkt (p, 11,
+		 "_of_origin\",37.66666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 12,
+		 "dian\",-122],PARAMETER[\"false_easting\",6561666.667],PA");
+    add_srs_wkt (p, 13,
+		 "RAMETER[\"false_northing\",1640416.667],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 14, "\",\"2871\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2872, "epsg", 2872,
+		      "NAD83(HARN) / California zone 3 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=");
+    add_proj4text (p, 2,
+		   "500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 3 (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",38.43333333333333],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",37.06666666666667],PARAMETER[\"latitude");
+    add_srs_wkt (p, 11,
+		 "_of_origin\",36.5],PARAMETER[\"central_meridian\",-120.5");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",6561666.667],PARAMETER[\"f");
+    add_srs_wkt (p, 13,
+		 "alse_northing\",1640416.667],AUTHORITY[\"EPSG\",\"2872\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2873, "epsg", 2873,
+		      "NAD83(HARN) / California zone 4 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.3333333333333");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.000101600");
+    add_proj4text (p, 2, "1 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 4 (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",37.25],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 10,
+		 "_2\",36],PARAMETER[\"latitude_of_origin\",35.33333333333");
+    add_srs_wkt (p, 11,
+		 "334],PARAMETER[\"central_meridian\",-119],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",6561666.667],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "1640416.667],AUTHORITY[\"EPSG\",\"2873\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 14, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2874, "epsg", 2874,
+		      "NAD83(HARN) / California zone 5 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=50");
+    add_proj4text (p, 2, "0000.0001016001 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 5 (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",35.46666666666667],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",34.03333333333333],PARAMETER[\"latitude");
+    add_srs_wkt (p, 11,
+		 "_of_origin\",33.5],PARAMETER[\"central_meridian\",-118],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_easting\",6561666.667],PARAMETER[\"fal");
+    add_srs_wkt (p, 13,
+		 "se_northing\",1640416.667],AUTHORITY[\"EPSG\",\"2874\"],");
+    add_srs_wkt (p, 14, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2875, "epsg", 2875,
+		      "NAD83(HARN) / California zone 6 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000");
+    add_proj4text (p, 2,
+		   ".0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California zone 6 (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",33.88333333333333],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",32.78333333333333],PARAMETER[\"latitude");
+    add_srs_wkt (p, 11,
+		 "_of_origin\",32.16666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 12,
+		 "dian\",-116.25],PARAMETER[\"false_easting\",6561666.667]");
+    add_srs_wkt (p, 13,
+		 ",PARAMETER[\"false_northing\",1640416.667],AUTHORITY[\"E");
+    add_srs_wkt (p, 14, "PSG\",\"2875\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2876, "epsg", 2876,
+		      "NAD83(HARN) / Colorado North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-");
+    add_proj4text (p, 3, "ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Colorado North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",40.78333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",39.71666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",39.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-105.5],PARAMETER[\"false_easting\",3000000],PARAMETE");
+    add_srs_wkt (p, 13,
+		 "R[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"2876\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2877, "epsg", 2877,
+		      "NAD83(HARN) / Colorado Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.8333333333");
+    add_proj4text (p, 1,
+		   "3334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.60");
+    add_proj4text (p, 2, "96012192 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Colorado Central (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foo");
+    add_srs_wkt (p, 7,
+		 "t\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",39.75],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "2\",38.45],PARAMETER[\"latitude_of_origin\",37.833333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-105.5],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",3000000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "1000000],AUTHORITY[\"EPSG\",\"2877\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 14, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2878, "epsg", 2878,
+		      "NAD83(HARN) / Colorado South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-");
+    add_proj4text (p, 3, "ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Colorado South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",38.43333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",37.23333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",36.66666666666666],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-105.5],PARAMETER[\"false_easting\",3000000],PARAMETE");
+    add_srs_wkt (p, 13,
+		 "R[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"2878\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2879, "epsg", 2879,
+		      "NAD83(HARN) / Connecticut (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40");
+    add_proj4text (p, 1,
+		   ".83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_");
+    add_proj4text (p, 2,
+		   "0=152400.3048006096 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Connecticut (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",41.86666666666667],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",41.2],PARAMETER[\"latitude_of_origin\",40.833333");
+    add_srs_wkt (p, 11,
+		 "33333334],PARAMETER[\"central_meridian\",-72.75],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",1000000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",500000],AUTHORITY[\"EPSG\",\"2879\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 14, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2880, "epsg", 2880,
+		      "NAD83(HARN) / Delaware (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us");
+    add_proj4text (p, 2, "-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Delaware (ftUS)\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",38],PARAMETER[\"central_meridian\",-75.41666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",0.999995],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",656166.667],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2880\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 13, "RTH]]");
+    p = add_epsg_def (first, last, 2881, "epsg", 2881,
+		      "NAD83(HARN) / Florida East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units");
+    add_proj4text (p, 2, "=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Florida East (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",24.33333333333333],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "-81],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",656166.667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"2881\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2882, "epsg", 2882,
+		      "NAD83(HARN) / Florida West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units");
+    add_proj4text (p, 2, "=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Florida West (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",24.33333333333333],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "-82],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",656166.667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"2882\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2883, "epsg", 2883,
+		      "NAD83(HARN) / Florida North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=2");
+    add_proj4text (p, 1,
+		   "9 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us");
+    add_proj4text (p, 2, "-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Florida North (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",30.75],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 10,
+		 ",29.58333333333333],PARAMETER[\"latitude_of_origin\",29]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"central_meridian\",-84.5],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_easting\",1968500],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 13,
+		 "ORITY[\"EPSG\",\"2883\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 2884, "epsg", 2884,
+		      "NAD83(HARN) / Georgia East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Georgia East (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",30],PARAMETER[\"central_meridian\",-82.16666666666");
+    add_srs_wkt (p, 10,
+		 "667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",656166.667],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"2884\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2885, "epsg", 2885,
+		      "NAD83(HARN) / Georgia West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Georgia West (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",30],PARAMETER[\"central_meridian\",-84.16666666666");
+    add_srs_wkt (p, 10,
+		 "667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",2296583.333],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"2885\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 2886, "epsg", 2886,
+		      "NAD83(HARN) / Idaho East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Idaho East (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",41.66666666666666],PARAMETER[\"central_meridian\",-112.");
+    add_srs_wkt (p, 10,
+		 "1666666666667],PARAMETER[\"scale_factor\",0.999947368],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",656166.667],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"2886\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 13, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2887, "epsg", 2887,
+		      "NAD83(HARN) / Idaho Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.99");
+    add_proj4text (p, 1,
+		   "99473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Idaho Central (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",41.66666666666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-114],PARAMETER[\"scale_factor\",0.999947368],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",1640416.667],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"2887\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2888, "epsg", 2888,
+		      "NAD83(HARN) / Idaho West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Idaho West (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",41.66666666666666],PARAMETER[\"central_meridian\",-115.");
+    add_srs_wkt (p, 10,
+		 "75],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",2624666.667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"2888\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2889, "epsg", 2889,
+		      "NAD83(HARN) / Indiana East (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +");
+    add_proj4text (p, 2, "ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Indiana East (ftUS) (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regi");
+    add_srs_wkt (p, 2,
+		 "onal_Network\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"61");
+    add_srs_wkt (p, 4,
+		 "52\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US surv");
+    add_srs_wkt (p, 7,
+		 "ey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",37.5],PARAMETER[\"central_meridian\",-85");
+    add_srs_wkt (p, 10,
+		 ".66666666666667],PARAMETER[\"scale_factor\",0.999966667]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",328083.333],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_northing\",818125],AUTHORITY[\"EPSG\",\"2889\"],AXIS[");
+    add_srs_wkt (p, 13, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2890, "epsg", 2890,
+		      "NAD83(HARN) / Indiana West (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Indiana West (ftUS) (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regi");
+    add_srs_wkt (p, 2,
+		 "onal_Network\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"61");
+    add_srs_wkt (p, 4,
+		 "52\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US surv");
+    add_srs_wkt (p, 7,
+		 "ey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",37.5],PARAMETER[\"central_meridian\",-87");
+    add_srs_wkt (p, 10,
+		 ".08333333333333],PARAMETER[\"scale_factor\",0.999966667]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",2952750],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",818125],AUTHORITY[\"EPSG\",\"2890\"],AXIS[\"X");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2891, "epsg", 2891,
+		      "NAD83(HARN) / Kentucky North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_");
+    add_proj4text (p, 2, "0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kentucky North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",37.96666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",38.96666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",37.5],PARAMETER[\"central_meridian\",-84.25],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_easting\",1640416.667],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"2891\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 14, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2892, "epsg", 2892,
+		      "NAD83(HARN) / Kentucky South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001016001 +y_0=500000.0001016001 +ellps=GRS80 +units=us-");
+    add_proj4text (p, 3, "ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kentucky South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",37.93333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",36.73333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",36.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-85.75],PARAMETER[\"false_easting\",1640416.667],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",1640416.667],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"2892\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2893, "epsg", 2893,
+		      "NAD83(HARN) / Maryland (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maryland (ftUS)\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",39.45],PARAMETER[\"standard_parallel_2\",38.3");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"latitude_of_origin\",37.66666666666666],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"central_meridian\",-77],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",1312333.333],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"2893\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 14, "H]]");
+    p = add_epsg_def (first, last, 2894, "epsg", 2894,
+		      "NAD83(HARN) / Massachusetts Mainland (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=7");
+    add_proj4text (p, 2, "50000 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Massachusetts Mainland (ftUS)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Region");
+    add_srs_wkt (p, 2,
+		 "al_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US surv");
+    add_srs_wkt (p, 7,
+		 "ey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",42.68333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",41.71666666666667],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",41],PARAMETER[\"central_meridian\",-71");
+    add_srs_wkt (p, 12,
+		 ".5],PARAMETER[\"false_easting\",656166.667],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",2460625],AUTHORITY[\"EPSG\",\"2894\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2895, "epsg", 2895,
+		      "NAD83(HARN) / Massachusetts Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0");
+    add_proj4text (p, 2, " +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Massachusetts Island (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional");
+    add_srs_wkt (p, 2,
+		 "_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",41.48333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",41.28333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",41],PARAMETER[\"central_meridian\",-70.5]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_easting\",1640416.667],PARAMETER[\"fa");
+    add_srs_wkt (p, 13,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"2895\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2896, "epsg", 2896,
+		      "NAD83(HARN) / Michigan North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999");
+    add_proj4text (p, 2, "968001 +y_0=0 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Michigan North (ft)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conforma");
+    add_srs_wkt (p, 8,
+		 "l_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.0833");
+    add_srs_wkt (p, 9,
+		 "3333333334],PARAMETER[\"standard_parallel_2\",45.4833333");
+    add_srs_wkt (p, 10,
+		 "3333333],PARAMETER[\"latitude_of_origin\",44.78333333333");
+    add_srs_wkt (p, 11,
+		 "333],PARAMETER[\"central_meridian\",-87],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_easting\",26246719.16],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 13,
+		 "],AUTHORITY[\"EPSG\",\"2896\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 2897, "epsg", 2897,
+		      "NAD83(HARN) / Michigan Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43");
+    add_proj4text (p, 1,
+		   ".31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.9");
+    add_proj4text (p, 2, "99976001 +y_0=0 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Michigan Central (ft)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conform");
+    add_srs_wkt (p, 8,
+		 "al_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.7],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"standard_parallel_2\",44.18333333333333],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"latitude_of_origin\",43.31666666666667],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"central_meridian\",-84.36666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",19685039.37],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"2897\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2898, "epsg", 2898,
+		      "NAD83(HARN) / Michigan South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41");
+    add_proj4text (p, 1,
+		   ".5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Michigan South (ft)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conforma");
+    add_srs_wkt (p, 8,
+		 "l_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.6666");
+    add_srs_wkt (p, 9,
+		 "6666666666],PARAMETER[\"standard_parallel_2\",42.1],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",41.5],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-84.36666666666666],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",13123359.58],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"2898\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2899, "epsg", 2899,
+		      "NAD83(HARN) / Mississippi East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=u");
+    add_proj4text (p, 2, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Mississippi East (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foo");
+    add_srs_wkt (p, 7,
+		 "t\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",29.5],PARAMETER[\"central_meridian\",-88.83333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"scale_factor\",0.99995],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",984250.0000000002],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2899\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2900, "epsg", 2900,
+		      "NAD83(HARN) / Mississippi West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=u");
+    add_proj4text (p, 2, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Mississippi West (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foo");
+    add_srs_wkt (p, 7,
+		 "t\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",29.5],PARAMETER[\"central_meridian\",-90.33333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"scale_factor\",0.99995],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",2296583.333],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"2900\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2901, "epsg", 2901,
+		      "NAD83(HARN) / Montana (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5");
+    add_proj4text (p, 1,
+		   " +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Montana (ft)\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conformal_Conic");
+    add_srs_wkt (p, 8,
+		 "_2SP\"],PARAMETER[\"standard_parallel_1\",49],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_2\",45],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",44.25],PARAMETER[\"central_meridian\",-109.5],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",1968503.937],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"2901\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2902, "epsg", 2902,
+		      "NAD83(HARN) / New Mexico East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=us-ft +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Mexico East (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",31],PARAMETER[\"central_meridian\",-104.333333333");
+    add_srs_wkt (p, 10,
+		 "3333],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",541337.5],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"2902\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2903, "epsg", 2903,
+		      "NAD83(HARN) / New Mexico Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=5000");
+    add_proj4text (p, 1,
+		   "00.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Mexico Central (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_N");
+    add_srs_wkt (p, 2,
+		 "etwork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey f");
+    add_srs_wkt (p, 7,
+		 "oot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",31],PARAMETER[\"central_meridian\",-106.25],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",1640416.667],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"2903\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 2904, "epsg", 2904,
+		      "NAD83(HARN) / New Mexico West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +units");
+    add_proj4text (p, 2, "=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Mexico West (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",31],PARAMETER[\"central_meridian\",-107.833333333");
+    add_srs_wkt (p, 10,
+		 "3333],PARAMETER[\"scale_factor\",0.999916667],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",2723091.667],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2904\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2905, "epsg", 2905,
+		      "NAD83(HARN) / New York East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York East (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",38.83333333333334],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-74.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",492125],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"2905\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 2906, "epsg", 2906,
+		      "NAD83(HARN) / New York Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +units=u");
+    add_proj4text (p, 2, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York Central (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foo");
+    add_srs_wkt (p, 7,
+		 "t\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",40],PARAMETER[\"central_meridian\",-76.5833333");
+    add_srs_wkt (p, 10,
+		 "3333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",820208.3330000002],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2906\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2907, "epsg", 2907,
+		      "NAD83(HARN) / New York West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +units=u");
+    add_proj4text (p, 2, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York West (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",40],PARAMETER[\"central_meridian\",-78.5833333333");
+    add_srs_wkt (p, 10,
+		 "3333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",1148291.667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"2907\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2908, "epsg", 2908,
+		      "NAD83(HARN) / New York Long Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000");
+    add_proj4text (p, 2, "000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New York Long Island (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional");
+    add_srs_wkt (p, 2,
+		 "_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",41.03333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",40.66666666666666],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",40.16666666666666],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-74],PARAMETER[\"false_easting\",984250.0000000");
+    add_srs_wkt (p, 13,
+		 "002],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 14, "\"2908\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2909, "epsg", 2909,
+		      "NAD83(HARN) / North Dakota North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / North Dakota North (ft)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.");
+    add_srs_wkt (p, 9,
+		 "73333333333333],PARAMETER[\"standard_parallel_2\",47.433");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"latitude_of_origin\",47],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-100.5],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",1968503.937],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 13,
+		 "ITY[\"EPSG\",\"2909\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 2910, "epsg", 2910,
+		      "NAD83(HARN) / North Dakota South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9");
+    add_proj4text (p, 2, "999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / North Dakota South (ft)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.");
+    add_srs_wkt (p, 9,
+		 "48333333333333],PARAMETER[\"standard_parallel_2\",46.183");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"latitude_of_origin\",45.6666666");
+    add_srs_wkt (p, 11,
+		 "6666666],PARAMETER[\"central_meridian\",-100.5],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",1968503.937],PARAMETER[\"false_north");
+    add_srs_wkt (p, 13,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"2910\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 14, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2911, "epsg", 2911,
+		      "NAD83(HARN) / Oklahoma North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oklahoma North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",36.76666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",35.56666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",35],PARAMETER[\"central_meridian\",-98],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",1968500],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",0],AUTHORITY[\"EPSG\",\"2911\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2912, "epsg", 2912,
+		      "NAD83(HARN) / Oklahoma South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oklahoma South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",35.23333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",33.93333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",33.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-98],PARAMETER[\"false_easting\",1968500],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2912\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2913, "epsg", 2913,
+		      "NAD83(HARN) / Oregon North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oregon North (ft)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",46],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"standard_parallel_2\",44.33333333333334],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"latitude_of_origin\",43.66666666666666],PARAMETER[\"ce");
+    add_srs_wkt (p, 11,
+		 "ntral_meridian\",-120.5],PARAMETER[\"false_easting\",820");
+    add_srs_wkt (p, 12,
+		 "2099.738],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"2913\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2914, "epsg", 2914,
+		      "NAD83(HARN) / Oregon South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oregon South (ft)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",44],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"standard_parallel_2\",42.33333333333334],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"latitude_of_origin\",41.66666666666666],PARAMETER[\"ce");
+    add_srs_wkt (p, 11,
+		 "ntral_meridian\",-120.5],PARAMETER[\"false_easting\",492");
+    add_srs_wkt (p, 12,
+		 "1259.843],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"2914\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2915, "epsg", 2915,
+		      "NAD83(HARN) / Tennessee (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Tennessee (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",36.41666666666666],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",35.25],PARAMETER[\"latitude_of_origin\",34.33333");
+    add_srs_wkt (p, 11,
+		 "333333334],PARAMETER[\"central_meridian\",-86],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"2915\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2916, "epsg", 2916,
+		      "NAD83(HARN) / Texas North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.99989");
+    add_proj4text (p, 2, "83998 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas North (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",36.18333333333333],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",34.65],PARAMETER[\"latitude_of_origin\",34],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-101.5],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",656166.667],PARAMETER[\"false_northing\",3280833.");
+    add_srs_wkt (p, 13,
+		 "333],AUTHORITY[\"EPSG\",\"2916\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 14, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2917, "epsg", 2917,
+		      "NAD83(HARN) / Texas North Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas North Central (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_");
+    add_srs_wkt (p, 2,
+		 "Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",33.96666666666667],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",32.13333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",31.66666666666667],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-98.5],PARAMETER[\"false_easting\",1968500],PAR");
+    add_srs_wkt (p, 13,
+		 "AMETER[\"false_northing\",6561666.667],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"2917\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2918, "epsg", 2918,
+		      "NAD83(HARN) / Texas Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +units=u");
+    add_proj4text (p, 3, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas Central (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",31.88333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",30.11666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",29.66666666666667],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-100.3333333333333],PARAMETER[\"false_easting\",22965");
+    add_srs_wkt (p, 13,
+		 "83.333],PARAMETER[\"false_northing\",9842500.000000002],");
+    add_srs_wkt (p, 14,
+		 "AUTHORITY[\"EPSG\",\"2918\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 15, ",NORTH]]");
+    p = add_epsg_def (first, last, 2919, "epsg", 2919,
+		      "NAD83(HARN) / Texas South Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=3999999.9998984 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas South Central (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_");
+    add_srs_wkt (p, 2,
+		 "Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",30.28333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",28.38333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",27.83333333333333],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-99],PARAMETER[\"false_easting\",1968500],PARAM");
+    add_srs_wkt (p, 13,
+		 "ETER[\"false_northing\",13123333.333],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"2919\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2920, "epsg", 2920,
+		      "NAD83(HARN) / Texas South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.00");
+    add_proj4text (p, 2,
+		   "00000001 +y_0=5000000.0001016 +ellps=GRS80 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas South (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",27.83333333333333],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",26.16666666666667],PARAMETER[\"latitude_of_origi");
+    add_srs_wkt (p, 11,
+		 "n\",25.66666666666667],PARAMETER[\"central_meridian\",-9");
+    add_srs_wkt (p, 12,
+		 "8.5],PARAMETER[\"false_easting\",984250.0000000002],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",16404166.667],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"2920\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2921, "epsg", 2921,
+		      "NAD83(HARN) / Utah North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001504 +y_0=999999.9999960001 +ellps=GRS80 +units=ft +no");
+    add_proj4text (p, 3, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah North (ft)\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",41.78333333");
+    add_srs_wkt (p, 9,
+		 "333333],PARAMETER[\"standard_parallel_2\",40.71666666666");
+    add_srs_wkt (p, 10,
+		 "667],PARAMETER[\"latitude_of_origin\",40.33333333333334]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",1640419.948],PARAMETER[\"false_northing\",32");
+    add_srs_wkt (p, 13,
+		 "80839.895],AUTHORITY[\"EPSG\",\"2921\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 14, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2922, "epsg", 2922,
+		      "NAD83(HARN) / Utah Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=");
+    add_proj4text (p, 2, "1999999.999992 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah Central (ft)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",40.65],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"standard_parallel_2\",39.01666666666667],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"latitude_of_origin\",38.33333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-111.5],PARAMETER[\"false_easting\",1");
+    add_srs_wkt (p, 12,
+		 "640419.948],PARAMETER[\"false_northing\",6561679.79],AUT");
+    add_srs_wkt (p, 13,
+		 "HORITY[\"EPSG\",\"2922\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 2923, "epsg", 2923,
+		      "NAD83(HARN) / Utah South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=");
+    add_proj4text (p, 2, "2999999.999988 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah South (ft)\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_2SP\"],PARAMETER[\"standard_parallel_1\",38.35],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"standard_parallel_2\",37.21666666666667],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"latitude_of_origin\",36.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-111.5],PARAMETER[\"false_easting\",1");
+    add_srs_wkt (p, 12,
+		 "640419.948],PARAMETER[\"false_northing\",9842519.685],AU");
+    add_srs_wkt (p, 13,
+		 "THORITY[\"EPSG\",\"2923\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 14, "ORTH]]");
+    p = add_epsg_def (first, last, 2924, "epsg", 2924,
+		      "NAD83(HARN) / Virginia North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2");
+    add_proj4text (p, 2, "000000.0001016 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Virginia North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",39.2],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 10,
+		 "38.03333333333333],PARAMETER[\"latitude_of_origin\",37.6");
+    add_srs_wkt (p, 11,
+		 "6666666666666],PARAMETER[\"central_meridian\",-78.5],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_easting\",11482916.667],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",6561666.667],AUTHORITY[\"EPSG\",\"2924\"],AX");
+    add_srs_wkt (p, 14, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2925, "epsg", 2925,
+		      "NAD83(HARN) / Virginia South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0");
+    add_proj4text (p, 2,
+		   "001016 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Virginia South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",37.96666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",36.76666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",36.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-78.5],PARAMETER[\"false_easting\",11482916.667],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",3280833.333],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"2925\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2926, "epsg", 2926,
+		      "NAD83(HARN) / Washington North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47");
+    add_proj4text (p, 1,
+		   " +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0");
+    add_proj4text (p, 2, " +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Washington North (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foo");
+    add_srs_wkt (p, 7,
+		 "t\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",48.73333333333333],PARAMETER[\"standa");
+    add_srs_wkt (p, 10,
+		 "rd_parallel_2\",47.5],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 11,
+		 "7],PARAMETER[\"central_meridian\",-120.8333333333333],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_easting\",1640416.667],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"2926\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 14, "AST],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_07 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 2927, "epsg", 2927,
+		      "NAD83(HARN) / Washington South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0");
+    add_proj4text (p, 2, "001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Washington South (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Net");
+    add_srs_wkt (p, 2,
+		 "work\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foo");
+    add_srs_wkt (p, 7,
+		 "t\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",47.33333333333334],PARAMETER[\"standa");
+    add_srs_wkt (p, 10,
+		 "rd_parallel_2\",45.83333333333334],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 11,
+		 "of_origin\",45.33333333333334],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 12,
+		 "ian\",-120.5],PARAMETER[\"false_easting\",1640416.667],P");
+    add_srs_wkt (p, 13,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2927");
+    add_srs_wkt (p, 14, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2928, "epsg", 2928,
+		      "NAD83(HARN) / Wisconsin North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wisconsin North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",46.76666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",45.56666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",45.16666666666666],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-90],PARAMETER[\"false_easting\",1968500],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2928\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2929, "epsg", 2929,
+		      "NAD83(HARN) / Wisconsin Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us");
+    add_proj4text (p, 2, "-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wisconsin Central (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",45.5],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "2\",44.25],PARAMETER[\"latitude_of_origin\",43.833333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-90],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",1968500],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"2929\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 2930, "epsg", 2930,
+		      "NAD83(HARN) / Wisconsin South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wisconsin South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",44.06666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",42.73333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",42],PARAMETER[\"central_meridian\",-90],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",1968500],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",0],AUTHORITY[\"EPSG\",\"2930\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2931, "epsg", 2931, "Beduaram / TM 13 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,");
+    add_proj4text (p, 2, "0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beduaram / TM 13 NE\",GEOGCS[\"Beduaram\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Beduaram\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,2");
+    add_srs_wkt (p, 2,
+		 "93.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-");
+    add_srs_wkt (p, 3,
+		 "106,-87,188,0,0,0,0],AUTHORITY[\"EPSG\",\"6213\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4213\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",13],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"2931\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2932, "epsg", 2932,
+		      "QND95 / Qatar National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.4");
+    add_proj4text (p, 2,
+		   "25,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +un");
+    add_proj4text (p, 3, "its=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"QND95 / Qatar National Grid\",GEOGCS[\"QND95\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Qatar_National_Datum_1995\",SPHEROID[\"Internati");
+    add_srs_wkt (p, 2,
+		 "onal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626");
+    add_srs_wkt (p, 4,
+		 ",3.65706],AUTHORITY[\"EPSG\",\"6614\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4614\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"latitude_of_origin\",24.45],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",51.21666666666667],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 11,
+		 "9999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_northing\",300000],AUTHORITY[\"EPSG\",\"2932\"],AXIS");
+    add_srs_wkt (p, 13, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2933, "epsg", 2933, "Segara / UTM zone 50S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=bessel +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Segara / UTM zone 50S\",GEOGCS[\"Segara\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Gunung_Segara\",SPHEROID[\"Bessel 1841\",6377397.155,");
+    add_srs_wkt (p, 2,
+		 "299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6613\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4613\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",117],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"2933\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 2934, "epsg", 2934,
+		      "Segara (Jakarta) / NEIEZ (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 ");
+    add_proj4text (p, 1, "+ellps=bessel +pm=jakarta +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Segara (Jakarta) / NEIEZ (deprecated)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Segara (Jakarta)\",DATUM[\"Gunung_Segara_Jakarta\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6820\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Jakarta\",106.8077194444444,AUTHORITY[\"EPSG\",\"8908");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4820\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercato");
+    add_srs_wkt (p, 8,
+		 "r_1SP\"],PARAMETER[\"central_meridian\",110],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.997],PARAMETER[\"false_easting\",390000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",900000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"2934\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2935, "epsg", 2935,
+		      "Pulkovo 1942 / CS63 zone A1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone A1\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.11");
+    add_srs_wkt (p, 9,
+		 "66666666666667],PARAMETER[\"central_meridian\",41.533333");
+    add_srs_wkt (p, 10,
+		 "33333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",1300000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2935\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST]]");
+    p = add_epsg_def (first, last, 2936, "epsg", 2936,
+		      "Pulkovo 1942 / CS63 zone A2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone A2\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.11");
+    add_srs_wkt (p, 9,
+		 "66666666666667],PARAMETER[\"central_meridian\",44.533333");
+    add_srs_wkt (p, 10,
+		 "33333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",2300000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2936\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST]]");
+    p = add_epsg_def (first, last, 2937, "epsg", 2937,
+		      "Pulkovo 1942 / CS63 zone A3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone A3\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.11");
+    add_srs_wkt (p, 9,
+		 "66666666666667],PARAMETER[\"central_meridian\",47.533333");
+    add_srs_wkt (p, 10,
+		 "33333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",3300000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2937\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST]]");
+    p = add_epsg_def (first, last, 2938, "epsg", 2938,
+		      "Pulkovo 1942 / CS63 zone A4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone A4\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.11");
+    add_srs_wkt (p, 9,
+		 "66666666666667],PARAMETER[\"central_meridian\",50.533333");
+    add_srs_wkt (p, 10,
+		 "33333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",4300000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2938\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST]]");
+    p = add_epsg_def (first, last, 2939, "epsg", 2939,
+		      "Pulkovo 1942 / CS63 zone K2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone K2\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.13");
+    add_srs_wkt (p, 9,
+		 "33333333333333],PARAMETER[\"central_meridian\",50.766666");
+    add_srs_wkt (p, 10,
+		 "66666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",2300000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2939\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST]]");
+    p = add_epsg_def (first, last, 2940, "epsg", 2940,
+		      "Pulkovo 1942 / CS63 zone K3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone K3\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.13");
+    add_srs_wkt (p, 9,
+		 "33333333333333],PARAMETER[\"central_meridian\",53.766666");
+    add_srs_wkt (p, 10,
+		 "66666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",3300000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2940\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST]]");
+    p = add_epsg_def (first, last, 2941, "epsg", 2941,
+		      "Pulkovo 1942 / CS63 zone K4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone K4\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.13");
+    add_srs_wkt (p, 9,
+		 "33333333333333],PARAMETER[\"central_meridian\",56.766666");
+    add_srs_wkt (p, 10,
+		 "66666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",4300000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2941\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST]]");
+    p = add_epsg_def (first, last, 2942, "epsg", 2942,
+		      "Porto Santo / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Porto Santo / UTM zone 28N\",GEOGCS[\"Porto San");
+    add_srs_wkt (p, 1,
+		 "to\",DATUM[\"Porto_Santo_1936\",SPHEROID[\"International");
+    add_srs_wkt (p, 2,
+		 " 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS8");
+    add_srs_wkt (p, 3,
+		 "4[-499,-249,314,0,0,0,0],AUTHORITY[\"EPSG\",\"6615\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4615\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-15],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"2942\"],AXIS[\"Eastin");
+    add_srs_wkt (p, 12, "g\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2943, "epsg", 2943,
+		      "Selvagem Grande / UTM zone 28N");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Selvagem Grande / UTM zone 28N\",GEOGCS[\"Selva");
+    add_srs_wkt (p, 1,
+		 "gem Grande\",DATUM[\"Selvagem_Grande\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6616\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4616\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-15],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2943\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 2944, "epsg", 2944,
+		      "NAD83(CSRS) / SCoPQ zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / SCoPQ zone 2\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-55.5],PARAMETER[\"scale_factor\",0.9999],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",304800],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2944\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2945, "epsg", 2945,
+		      "NAD83(CSRS) / MTM zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 3\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-58.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2945\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2946, "epsg", 2946,
+		      "NAD83(CSRS) / MTM zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 4\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-61.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2946\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2947, "epsg", 2947,
+		      "NAD83(CSRS) / MTM zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 5\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-64.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2947\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2948, "epsg", 2948,
+		      "NAD83(CSRS) / MTM zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 6\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-67.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2948\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2949, "epsg", 2949,
+		      "NAD83(CSRS) / MTM zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 7\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-70.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2949\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2950, "epsg", 2950,
+		      "NAD83(CSRS) / MTM zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 8\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-73.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2950\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2951, "epsg", 2951,
+		      "NAD83(CSRS) / MTM zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 9\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-76.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2951\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2952, "epsg", 2952,
+		      "NAD83(CSRS) / MTM zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 10\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-79.5],PARAMETER[\"scale_factor\",0.9999],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",304800],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2952\"],AXIS[\"E(X)\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 2953, "epsg", 2953,
+		      "NAD83(CSRS) / New Brunswick Stereographic");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2");
+    add_proj4text (p, 1, "500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / New Brunswick Stereographic\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"614");
+    add_srs_wkt (p, 4,
+		 "0\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Oblique_St");
+    add_srs_wkt (p, 8,
+		 "ereographic\"],PARAMETER[\"latitude_of_origin\",46.5],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"central_meridian\",-66.5],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 10,
+		 "ctor\",0.999912],PARAMETER[\"false_easting\",2500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",7500000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "2953\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 2954, "epsg", 2954,
+		      "NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=40");
+    add_proj4text (p, 1, "0000 +y_0=800000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Prince Edward Isl. Stereographic ");
+    add_srs_wkt (p, 1,
+		 "(NAD83)\",GEOGCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_");
+    add_srs_wkt (p, 2,
+		 "Spatial_Reference_System\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",47.25],PARAMETER[\"central_meridian\",-63],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.999912],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",400000],PARAMETER[\"false_northing\",800000],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"2954\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 2955, "epsg", 2955,
+		      "NAD83(CSRS) / UTM zone 11N");
+    add_proj4text (p, 0, "+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 11N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"2955\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2956, "epsg", 2956,
+		      "NAD83(CSRS) / UTM zone 12N");
+    add_proj4text (p, 0, "+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 12N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"2956\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2957, "epsg", 2957,
+		      "NAD83(CSRS) / UTM zone 13N");
+    add_proj4text (p, 0, "+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 13N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"2957\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2958, "epsg", 2958,
+		      "NAD83(CSRS) / UTM zone 17N");
+    add_proj4text (p, 0, "+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 17N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2958\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2959, "epsg", 2959,
+		      "NAD83(CSRS) / UTM zone 18N");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 18N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2959\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2960, "epsg", 2960,
+		      "NAD83(CSRS) / UTM zone 19N");
+    add_proj4text (p, 0, "+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 19N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2960\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2961, "epsg", 2961,
+		      "NAD83(CSRS) / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 20N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2961\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2962, "epsg", 2962,
+		      "NAD83(CSRS) / UTM zone 21N");
+    add_proj4text (p, 0, "+proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 21N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"2962\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2964, "epsg", 2964, "NAD27 / Alaska Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska Albers\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Albers_Conic_E");
+    add_srs_wkt (p, 8,
+		 "qual_Area\"],PARAMETER[\"standard_parallel_1\",55],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_2\",65],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 10,
+		 "_center\",50],PARAMETER[\"longitude_of_center\",-154],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",0],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"2964\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2965, "epsg", 2965,
+		      "NAD83 / Indiana East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +");
+    add_proj4text (p, 2, "ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Indiana East (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-85.66666666666667],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.999966667],PARAMETER[\"false_easting\",32808");
+    add_srs_wkt (p, 11,
+		 "3.333],PARAMETER[\"false_northing\",820208.3330000002],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"2965\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 2966, "epsg", 2966,
+		      "NAD83 / Indiana West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Indiana West (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-87.08333333333333],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.999966667],PARAMETER[\"false_easting\",29527");
+    add_srs_wkt (p, 11,
+		 "50],PARAMETER[\"false_northing\",820208.3330000002],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"2966\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 2967, "epsg", 2967,
+		      "NAD83(HARN) / Indiana East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +");
+    add_proj4text (p, 2, "ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Indiana East (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",37.5],PARAMETER[\"central_meridian\",-85.666666666");
+    add_srs_wkt (p, 10,
+		 "66667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",328083.333],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",820208.3330000002],AUTHORITY[\"EPSG\",\"2967\"],AXIS");
+    add_srs_wkt (p, 13, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2968, "epsg", 2968,
+		      "NAD83(HARN) / Indiana West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Indiana West (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",37.5],PARAMETER[\"central_meridian\",-87.083333333");
+    add_srs_wkt (p, 10,
+		 "33333],PARAMETER[\"scale_factor\",0.999966667],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",2952750],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",820208.3330000002],AUTHORITY[\"EPSG\",\"2968\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2969, "epsg", 2969,
+		      "Fort Marigot / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fort Marigot / UTM zone 20N\",GEOGCS[\"Fort Mar");
+    add_srs_wkt (p, 1,
+		 "igot\",DATUM[\"Fort_Marigot\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "137,248,-430,0,0,0,0],AUTHORITY[\"EPSG\",\"6621\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4621\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2969\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2970, "epsg", 2970,
+		      "Guadeloupe 1948 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Guadeloupe 1948 / UTM zone 20N\",GEOGCS[\"Guade");
+    add_srs_wkt (p, 1,
+		 "loupe 1948\",DATUM[\"Guadeloupe_1948\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6622\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4622\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-63],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2970\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 2971, "epsg", 2971, "CSG67 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"CSG67 / UTM zone 22N\",GEOGCS[\"CSG67\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Centre_Spatial_Guyanais_1967\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[-186,230,110,0,0,0,0],AUTHORITY[\"EPSG\",\"6623\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4623\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"2971\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2972, "epsg", 2972, "RGFG95 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 ");
+    add_proj4text (p, 1, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGFG95 / UTM zone 22N\",GEOGCS[\"RGFG95\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Reseau_Geodesique_Francais_Guyane_1995\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY[\"EPSG\",\"6624\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4624\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"2972\"],AXIS[\"Eas");
+    add_srs_wkt (p, 12, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2973, "epsg", 2973,
+		      "Martinique 1938 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Martinique 1938 / UTM zone 20N\",GEOGCS[\"Marti");
+    add_srs_wkt (p, 1,
+		 "nique 1938\",DATUM[\"Martinique_1938\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6625\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4625\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-63],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2973\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 2975, "epsg", 2975, "RGR92 / UTM zone 40S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGR92 / UTM zone 40S\",GEOGCS[\"RGR92\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Reseau_Geodesique_de_la_Reunion_1992\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6627\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4627\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",57],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 11,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"2975\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2976, "epsg", 2976,
+		      "Tahiti 52 / UTM zone 6S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,15");
+    add_proj4text (p, 1, "4,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tahiti 52 / UTM zone 6S\",GEOGCS[\"Tahiti 52\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Tahiti_52\",SPHEROID[\"International 1924\",6378");
+    add_srs_wkt (p, 2,
+		 "388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[162,117,15");
+    add_srs_wkt (p, 3,
+		 "4,0,0,0,0],AUTHORITY[\"EPSG\",\"6628\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4628\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 11,
+		 "00000],AUTHORITY[\"EPSG\",\"2976\"],AXIS[\"Easting\",EAS");
+    add_srs_wkt (p, 12, "T],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2977, "epsg", 2977,
+		      "Tahaa 54 / UTM zone 5S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tahaa 54 / UTM zone 5S\",GEOGCS[\"Tahaa 54\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Tahaa_54\",SPHEROID[\"International 1924\",6378388");
+    add_srs_wkt (p, 2,
+		 ",297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6629\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4629\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",-153],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"297");
+    add_srs_wkt (p, 11,
+		 "7\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2978, "epsg", 2978,
+		      "IGN72 Nuku Hiva / UTM zone 7S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN72 Nuku Hiva / UTM zone 7S\",GEOGCS[\"IGN72 ");
+    add_srs_wkt (p, 1,
+		 "Nuku Hiva\",DATUM[\"IGN72_Nuku_Hiva\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6630\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4630\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-141],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"2978\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2979, "epsg", 2979,
+		      "K0 1949 / UTM zone 42S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,");
+    add_proj4text (p, 1, "103,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"K0 1949 / UTM zone 42S (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "K0 1949\",DATUM[\"K0_1949\",SPHEROID[\"International 192");
+    add_srs_wkt (p, 2,
+		 "4\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[14");
+    add_srs_wkt (p, 3,
+		 "5,-187,103,0,0,0,0],AUTHORITY[\"EPSG\",\"6631\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4631\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",10000000],AUTHORITY[\"EPSG\",\"2979\"],AXIS[\"Easti");
+    add_srs_wkt (p, 12, "ng\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2980, "epsg", 2980,
+		      "Combani 1950 / UTM zone 38S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,");
+    add_proj4text (p, 1, "-262,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Combani 1950 / UTM zone 38S\",GEOGCS[\"Combani ");
+    add_srs_wkt (p, 1,
+		 "1950\",DATUM[\"Combani_1950\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "-382,-59,-262,0,0,0,0],AUTHORITY[\"EPSG\",\"6632\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4632\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"2980\"],AXIS[\"Eas");
+    add_srs_wkt (p, 12, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2981, "epsg", 2981,
+		      "IGN56 Lifou / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN56 Lifou / UTM zone 58S\",GEOGCS[\"IGN56 Lif");
+    add_srs_wkt (p, 1,
+		 "ou\",DATUM[\"IGN56_Lifou\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6633\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4633\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"sc");
+    add_srs_wkt (p, 9,
+		 "ale_factor\",0.9996],PARAMETER[\"false_easting\",500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11,
+		 "\",\"2981\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NO");
+    add_srs_wkt (p, 12, "RTH]]");
+    p = add_epsg_def (first, last, 2982, "epsg", 2982,
+		      "IGN72 Grand Terre / UTM zone 58S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN72 Grand Terre / UTM zone 58S (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"IGN72 Grand Terre\",DATUM[\"IGN72_Grande_Terre");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6634\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4634\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",165],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",10000000],AUTHORITY[\"EPSG\",\"2982\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2983, "epsg", 2983,
+		      "ST87 Ouvea / UTM zone 58S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,");
+    add_proj4text (p, 1,
+		   "-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ST87 Ouvea / UTM zone 58S (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"ST87 Ouvea\",DATUM[\"ST87_Ouvea\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,");
+    add_srs_wkt (p, 4,
+		 "4.4798],AUTHORITY[\"EPSG\",\"6635\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4635\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 10,
+		 "65],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"2983\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2984, "epsg", 2984,
+		      "RGNC 1991 / Lambert New Caledonia (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +e");
+    add_proj4text (p, 2, "llps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGNC 1991 / Lambert New Caledonia (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"RGNC 1991\",DATUM[\"Reseau_Geodesique_Nouvelle");
+    add_srs_wkt (p, 2,
+		 "_Caledonie_1991\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 3,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[0,0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0],AUTHORITY[\"EPSG\",\"6645\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 6,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"4645\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 8,
+		 "\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"standard_parallel_1\",-20.66666666666667],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"standard_parallel_2\",-22.33333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",-21.5],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",166],PARAMETER[\"false_easting\",400000],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",300000],AUTHORITY[\"EPSG\",\"2984\"],AX");
+    add_srs_wkt (p, 14, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2987, "epsg", 2987,
+		      "Saint Pierre et Miquelon 1950 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Saint Pierre et Miquelon 1950 / UTM zone 21N\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Saint Pierre et Miquelon 1950\",DATUM[\"Saint_P");
+    add_srs_wkt (p, 2,
+		 "ierre_et_Miquelon_1950\",SPHEROID[\"Clarke 1866\",637820");
+    add_srs_wkt (p, 3,
+		 "6.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],TOWG");
+    add_srs_wkt (p, 4,
+		 "S84[30,430,368,0,0,0,0],AUTHORITY[\"EPSG\",\"6638\"]],PR");
+    add_srs_wkt (p, 5,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 7,
+		 "\"]],AUTHORITY[\"EPSG\",\"4638\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 8,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 9,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 10,
+		 "ntral_meridian\",-57],PARAMETER[\"scale_factor\",0.9996]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"2987\"],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2988, "epsg", 2988, "MOP78 / UTM zone 1S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MOP78 / UTM zone 1S\",GEOGCS[\"MOP78\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "MOP78\",SPHEROID[\"International 1924\",6378388,297,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6639\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4639\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 7,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "central_meridian\",-177],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"2988\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2989, "epsg", 2989,
+		      "RRAF 1991 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RRAF 1991 / UTM zone 20N\",GEOGCS[\"RRAF 1991\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Reseau_de_Reference_des_Antilles_Francaises_199");
+    add_srs_wkt (p, 2,
+		 "1\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"6640\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4640\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.9996],PARAMETER[\"false_easting\",500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2989");
+    add_srs_wkt (p, 12, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2990, "epsg", 2990,
+		      "Reunion 1947 / TM Reunion (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Reunion 1947 / TM Reunion (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Reunion 1947\",DATUM[\"Reunion_1947\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 2,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6626\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4626\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",-21.11666666666667],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",55.53333333333333],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",1],PARAMETER[\"false_easting\",50000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",160000],AUTHORITY[\"EPSG\",\"2990\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2991, "epsg", 2991,
+		      "NAD83 / Oregon Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120");
+    add_proj4text (p, 1,
+		   ".5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oregon Lambert\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",43],PARAMETER[\"standard_parallel_2\",45");
+    add_srs_wkt (p, 9,
+		 ".5],PARAMETER[\"latitude_of_origin\",41.75],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",-120.5],PARAMETER[\"false_easting\",4");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"2991\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2992, "epsg", 2992,
+		      "NAD83 / Oregon Lambert (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120");
+    add_proj4text (p, 1,
+		   ".5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 2, "+units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oregon Lambert (ft)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",43],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 9,
+		 "el_2\",45.5],PARAMETER[\"latitude_of_origin\",41.75],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"central_meridian\",-120.5],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",1312335.958],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"2992\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 13, "RTH]]");
+    p = add_epsg_def (first, last, 2993, "epsg", 2993,
+		      "NAD83(HARN) / Oregon Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120");
+    add_proj4text (p, 1,
+		   ".5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oregon Lambert\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",45.5],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",41.75],PARAMETER[\"central_meridian\",-120.5],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",400000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"2993\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2994, "epsg", 2994,
+		      "NAD83(HARN) / Oregon Lambert (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120");
+    add_proj4text (p, 1,
+		   ".5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +units=ft +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Oregon Lambert (ft)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conforma");
+    add_srs_wkt (p, 8,
+		 "l_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_2\",45.5],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",41.75],PARAMETER[\"central_meridian\",-120");
+    add_srs_wkt (p, 11,
+		 ".5],PARAMETER[\"false_easting\",1312335.958],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"2994\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 2995, "epsg", 2995,
+		      "IGN53 Mare / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN53 Mare / UTM zone 58S\",GEOGCS[\"IGN53 Mare");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"IGN53_Mare\",SPHEROID[\"International 1924\",");
+    add_srs_wkt (p, 2,
+		 "6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6641\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4641\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"2995\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 2996, "epsg", 2996,
+		      "ST84 Ile des Pins / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ST84 Ile des Pins / UTM zone 58S\",GEOGCS[\"ST8");
+    add_srs_wkt (p, 1,
+		 "4 Ile des Pins\",DATUM[\"ST84_Ile_des_Pins\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6642\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4642\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "65],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"2996\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 2997, "epsg", 2997,
+		      "ST71 Belep / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-");
+    add_proj4text (p, 1,
+		   "438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ST71 Belep / UTM zone 58S\",GEOGCS[\"ST71 Belep");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"ST71_Belep\",SPHEROID[\"International 1924\",");
+    add_srs_wkt (p, 2,
+		 "6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-480.2");
+    add_srs_wkt (p, 3,
+		 "6,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6643\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"464");
+    add_srs_wkt (p, 7,
+		 "3\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",165],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",10000000],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"2997\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 13, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 2998, "epsg", 2998,
+		      "NEA74 Noumea / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NEA74 Noumea / UTM zone 58S\",GEOGCS[\"NEA74 No");
+    add_srs_wkt (p, 1,
+		 "umea\",DATUM[\"NEA74_Noumea\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6644\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4644\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"2998\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 2999, "epsg", 2999,
+		      "Grand Comoros / UTM zone 38S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Grand Comoros / UTM zone 38S\",GEOGCS[\"Grand C");
+    add_srs_wkt (p, 1,
+		 "omoros\",DATUM[\"Grand_Comoros\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 2,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6646\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"464");
+    add_srs_wkt (p, 6,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",45],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",10000000],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"2999\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3000, "epsg", 3000, "Segara / NEIEZ");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 ");
+    add_proj4text (p, 1, "+ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Segara / NEIEZ\",GEOGCS[\"Segara\",DATUM[\"Gunu");
+    add_srs_wkt (p, 1,
+		 "ng_Segara\",SPHEROID[\"Bessel 1841\",6377397.155,299.152");
+    add_srs_wkt (p, 2,
+		 "8128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6613\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4613\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercat");
+    add_srs_wkt (p, 7,
+		 "or_1SP\"],PARAMETER[\"central_meridian\",110],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"scale_factor\",0.997],PARAMETER[\"false_easting\",3900");
+    add_srs_wkt (p, 9,
+		 "000],PARAMETER[\"false_northing\",900000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 10, "SG\",\"3000\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3001, "epsg", 3001, "Batavia / NEIEZ");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 ");
+    add_proj4text (p, 1, "+ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Batavia / NEIEZ\",GEOGCS[\"Batavia\",DATUM[\"Ba");
+    add_srs_wkt (p, 1,
+		 "tavia\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6211");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4211\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercator_1");
+    add_srs_wkt (p, 7,
+		 "SP\"],PARAMETER[\"central_meridian\",110],PARAMETER[\"sc");
+    add_srs_wkt (p, 8,
+		 "ale_factor\",0.997],PARAMETER[\"false_easting\",3900000]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"false_northing\",900000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 10, ",\"3001\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3002, "epsg", 3002, "Makassar / NEIEZ");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 ");
+    add_proj4text (p, 1,
+		   "+ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Makassar / NEIEZ\",GEOGCS[\"Makassar\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Makassar\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528");
+    add_srs_wkt (p, 2,
+		 "128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[-587.8,519.75,");
+    add_srs_wkt (p, 3,
+		 "145.76,0,0,0,0],AUTHORITY[\"EPSG\",\"6257\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4257\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"central_meridian\",110],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "997],PARAMETER[\"false_easting\",3900000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",900000],AUTHORITY[\"EPSG\",\"3002\"],AXIS");
+    add_srs_wkt (p, 11, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3003, "epsg", 3003,
+		      "Monte Mario / Italy zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Monte Mario / Italy zone 1\",GEOGCS[\"Monte Mar");
+    add_srs_wkt (p, 1,
+		 "io\",DATUM[\"Monte_Mario\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6265\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4265\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scal");
+    add_srs_wkt (p, 9,
+		 "e_factor\",0.9996],PARAMETER[\"false_easting\",1500000],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"300");
+    add_srs_wkt (p, 11, "3\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3004, "epsg", 3004,
+		      "Monte Mario / Italy zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Monte Mario / Italy zone 2\",GEOGCS[\"Monte Mar");
+    add_srs_wkt (p, 1,
+		 "io\",DATUM[\"Monte_Mario\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6265\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4265\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"sca");
+    add_srs_wkt (p, 9,
+		 "le_factor\",0.9996],PARAMETER[\"false_easting\",2520000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "04\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3005, "epsg", 3005, "NAD83 / BC Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x");
+    add_proj4text (p, 1,
+		   "_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / BC Albers\",GEOGCS[\"NAD83\",DATUM[\"No");
+    add_srs_wkt (p, 1,
+		 "rth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 2,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 8,
+		 "lel_1\",50],PARAMETER[\"standard_parallel_2\",58.5],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"latitude_of_center\",45],PARAMETER[\"longitude_o");
+    add_srs_wkt (p, 10,
+		 "f_center\",-126],PARAMETER[\"false_easting\",1000000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3005\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3006, "epsg", 3006, "SWEREF99 TM");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 TM\",GEOGCS[\"SWEREF99\",DATUM[\"SWERE");
+    add_srs_wkt (p, 1,
+		 "F99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3006\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3007, "epsg", 3007, "SWEREF99 12 00");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 12 00\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",12],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",150000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "07\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3008, "epsg", 3008, "SWEREF99 13 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 13 30\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",13.5],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",15000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3008\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3009, "epsg", 3009, "SWEREF99 15 00");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 15 00\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",150000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "09\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3010, "epsg", 3010, "SWEREF99 16 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 16 30\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",16.5],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",15000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3010\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3011, "epsg", 3011, "SWEREF99 18 00");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 18 00\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",18],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",150000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "11\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3012, "epsg", 3012, "SWEREF99 14 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 14 15\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",14.25],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3012\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3013, "epsg", 3013, "SWEREF99 15 45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 15 45\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",15.75],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3013\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3014, "epsg", 3014, "SWEREF99 17 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 17 15\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",17.25],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3014\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3015, "epsg", 3015, "SWEREF99 18 45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 18 45\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",18.75],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3015\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3016, "epsg", 3016, "SWEREF99 20 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 20 15\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",20.25],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3016\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3017, "epsg", 3017, "SWEREF99 21 45");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 21 45\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",21.75],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3017\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3018, "epsg", 3018, "SWEREF99 23 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 23 15\",GEOGCS[\"SWEREF99\",DATUM[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",23.25],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1500");
+    add_srs_wkt (p, 10,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3018\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3019, "epsg", 3019, "RT90 7.5 gon V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT90 7.5 gon V\",GEOGCS[\"RT90\",DATUM[\"Rikets");
+    add_srs_wkt (p, 1,
+		 "_koordinatsystem_1990\",SPHEROID[\"Bessel 1841\",6377397");
+    add_srs_wkt (p, 2,
+		 ".155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6124\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4124\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",11.3082777777777");
+    add_srs_wkt (p, 9,
+		 "8],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",1500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3019\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3020, "epsg", 3020, "RT90 5 gon V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT90 5 gon V\",GEOGCS[\"RT90\",DATUM[\"Rikets_k");
+    add_srs_wkt (p, 1,
+		 "oordinatsystem_1990\",SPHEROID[\"Bessel 1841\",6377397.1");
+    add_srs_wkt (p, 2,
+		 "55,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6124\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4124\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",13.55827777777778],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",1500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"3020\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3021, "epsg", 3021, "RT90 2.5 gon V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT90 2.5 gon V\",GEOGCS[\"RT90\",DATUM[\"Rikets");
+    add_srs_wkt (p, 1,
+		 "_koordinatsystem_1990\",SPHEROID[\"Bessel 1841\",6377397");
+    add_srs_wkt (p, 2,
+		 ".155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6124\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4124\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",15.8082777777777");
+    add_srs_wkt (p, 9,
+		 "8],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",1500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3021\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3022, "epsg", 3022, "RT90 0 gon");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT90 0 gon\",GEOGCS[\"RT90\",DATUM[\"Rikets_koo");
+    add_srs_wkt (p, 1,
+		 "rdinatsystem_1990\",SPHEROID[\"Bessel 1841\",6377397.155");
+    add_srs_wkt (p, 2,
+		 ",299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6124\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4124\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",18.05827777777778],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "1500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11, "G\",\"3022\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3023, "epsg", 3023, "RT90 2.5 gon O");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT90 2.5 gon O\",GEOGCS[\"RT90\",DATUM[\"Rikets");
+    add_srs_wkt (p, 1,
+		 "_koordinatsystem_1990\",SPHEROID[\"Bessel 1841\",6377397");
+    add_srs_wkt (p, 2,
+		 ".155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6124\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4124\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",20.3082777777777");
+    add_srs_wkt (p, 9,
+		 "8],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",1500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3023\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3024, "epsg", 3024, "RT90 5 gon O");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT90 5 gon O\",GEOGCS[\"RT90\",DATUM[\"Rikets_k");
+    add_srs_wkt (p, 1,
+		 "oordinatsystem_1990\",SPHEROID[\"Bessel 1841\",6377397.1");
+    add_srs_wkt (p, 2,
+		 "55,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6124\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4124\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",22.55827777777778],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",1500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"3024\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3025, "epsg", 3025, "RT38 7.5 gon V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT38 7.5 gon V\",GEOGCS[\"RT38\",DATUM[\"Stockh");
+    add_srs_wkt (p, 1,
+		 "olm_1938\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528");
+    add_srs_wkt (p, 2,
+		 "128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "308\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4308\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 7,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"central_meridian\",11.30827777777778],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"scale_factor\",1],PARAMETER[\"false_easting\",1500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "25\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3026, "epsg", 3026, "RT38 5 gon V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT38 5 gon V\",GEOGCS[\"RT38\",DATUM[\"Stockhol");
+    add_srs_wkt (p, 1,
+		 "m_1938\",SPHEROID[\"Bessel 1841\",6377397.155,299.152812");
+    add_srs_wkt (p, 2,
+		 "8,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"630");
+    add_srs_wkt (p, 3,
+		 "8\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4308\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",13.55827777777778],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",1500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3026\"");
+    add_srs_wkt (p, 11, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3027, "epsg", 3027, "RT38 2.5 gon V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT38 2.5 gon V\",GEOGCS[\"RT38\",DATUM[\"Stockh");
+    add_srs_wkt (p, 1,
+		 "olm_1938\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528");
+    add_srs_wkt (p, 2,
+		 "128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "308\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4308\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 7,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"central_meridian\",15.80827777777778],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"scale_factor\",1],PARAMETER[\"false_easting\",1500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "27\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3028, "epsg", 3028, "RT38 0 gon");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT38 0 gon\",GEOGCS[\"RT38\",DATUM[\"Stockholm_");
+    add_srs_wkt (p, 1,
+		 "1938\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6308\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4308\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",18.05827777777778],PARAMETER[\"scal");
+    add_srs_wkt (p, 9,
+		 "e_factor\",1],PARAMETER[\"false_easting\",1500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3028\"],");
+    add_srs_wkt (p, 11, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3029, "epsg", 3029, "RT38 2.5 gon O");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT38 2.5 gon O\",GEOGCS[\"RT38\",DATUM[\"Stockh");
+    add_srs_wkt (p, 1,
+		 "olm_1938\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528");
+    add_srs_wkt (p, 2,
+		 "128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "308\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4308\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 7,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"central_meridian\",20.30827777777778],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"scale_factor\",1],PARAMETER[\"false_easting\",1500000]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "29\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3030, "epsg", 3030, "RT38 5 gon O");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT38 5 gon O\",GEOGCS[\"RT38\",DATUM[\"Stockhol");
+    add_srs_wkt (p, 1,
+		 "m_1938\",SPHEROID[\"Bessel 1841\",6377397.155,299.152812");
+    add_srs_wkt (p, 2,
+		 "8,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"630");
+    add_srs_wkt (p, 3,
+		 "8\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4308\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",22.55827777777778],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",1500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3030\"");
+    add_srs_wkt (p, 11, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3031, "epsg", 3031,
+		      "WGS 84 / Antarctic Polar Stereographic");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Antarctic Polar Stereographic\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",63781");
+    add_srs_wkt (p, 2,
+		 "37,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",-71],PARAMETER[\"central_meridian\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3031\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3032, "epsg", 3032,
+		      "WGS 84 / Australian Antarctic Polar Stereographic");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6");
+    add_proj4text (p, 1,
+		   "000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Australian Antarctic Polar Stereograph");
+    add_srs_wkt (p, 1,
+		 "ic\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS");
+    add_srs_wkt (p, 2,
+		 " 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4326\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",-71],PARAMETER[\"central_meridian\",70],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",6000000],PARAMETER[\"false_northing\",6000000],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3032\"],AXIS[\"Easting\",UNKNOWN],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3033, "epsg", 3033,
+		      "WGS 84 / Australian Antarctic Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70");
+    add_proj4text (p, 1,
+		   " +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +un");
+    add_proj4text (p, 2, "its=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Australian Antarctic Lambert\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",-68.5],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "74.5],PARAMETER[\"latitude_of_origin\",-50],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",70],PARAMETER[\"false_easting\",60000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",6000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12,
+		 "SG\",\"3033\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3034, "epsg", 3034, "ETRS89 / ETRS-LCC");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4");
+    add_proj4text (p, 1, "000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-LCC\",GEOGCS[\"ETRS89\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Terrestrial_Reference_System_1989\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"standard_parallel_1\",35],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 9,
+		 "arallel_2\",65],PARAMETER[\"latitude_of_origin\",52],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"central_meridian\",10],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 11,
+		 "g\",4000000],PARAMETER[\"false_northing\",2800000],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"3034\"],AXIS[\"Northing\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3035, "epsg", 3035, "ETRS89 / ETRS-LAEA");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000");
+    add_proj4text (p, 1, " +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-LAEA\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_");
+    add_srs_wkt (p, 9,
+		 "of_center\",10],PARAMETER[\"false_easting\",4321000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",3210000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3035\"],AXIS[\"Y\",NORTH],AXIS[\"X\",EAST]]");
+    p = add_epsg_def (first, last, 3036, "epsg", 3036, "Moznet / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0");
+    add_proj4text (p, 1, ",-0,-0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Moznet / UTM zone 36S\",GEOGCS[\"Moznet\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Moznet_ITRF94\",SPHEROID[\"WGS 84\",6378137,298.25722");
+    add_srs_wkt (p, 2,
+		 "3563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,-0,-0,-");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"6130\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4130\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",33");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3036\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3037, "epsg", 3037, "Moznet / UTM zone 37S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0");
+    add_proj4text (p, 1, ",-0,-0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Moznet / UTM zone 37S\",GEOGCS[\"Moznet\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Moznet_ITRF94\",SPHEROID[\"WGS 84\",6378137,298.25722");
+    add_srs_wkt (p, 2,
+		 "3563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,-0,-0,-");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"6130\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4130\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",39");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3037\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3038, "epsg", 3038, "ETRS89 / ETRS-TM26");
+    add_proj4text (p, 0, "+proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM26\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"3038\"],AXIS[\"Northing\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3039, "epsg", 3039, "ETRS89 / ETRS-TM27");
+    add_proj4text (p, 0, "+proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM27\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"3039\"],AXIS[\"Northing\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3040, "epsg", 3040, "ETRS89 / ETRS-TM28");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM28\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"3040\"],AXIS[\"Northing\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3041, "epsg", 3041, "ETRS89 / ETRS-TM29");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM29\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3041\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3042, "epsg", 3042, "ETRS89 / ETRS-TM30");
+    add_proj4text (p, 0, "+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM30\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3042\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3043, "epsg", 3043, "ETRS89 / ETRS-TM31");
+    add_proj4text (p, 0, "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM31\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",3");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"3043\"],AXIS[\"Northing\",NORTH],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST]]");
+    p = add_epsg_def (first, last, 3044, "epsg", 3044, "ETRS89 / ETRS-TM32");
+    add_proj4text (p, 0, "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM32\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"3044\"],AXIS[\"Northing\",NORTH],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST]]");
+    p = add_epsg_def (first, last, 3045, "epsg", 3045, "ETRS89 / ETRS-TM33");
+    add_proj4text (p, 0, "+proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM33\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3045\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3046, "epsg", 3046, "ETRS89 / ETRS-TM34");
+    add_proj4text (p, 0, "+proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM34\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",2");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3046\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3047, "epsg", 3047, "ETRS89 / ETRS-TM35");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM35\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",2");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3047\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3048, "epsg", 3048, "ETRS89 / ETRS-TM36");
+    add_proj4text (p, 0, "+proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM36\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",3");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3048\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3049, "epsg", 3049, "ETRS89 / ETRS-TM37");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM37\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",3");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3049\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3050, "epsg", 3050, "ETRS89 / ETRS-TM38");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM38\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",4");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3050\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3051, "epsg", 3051, "ETRS89 / ETRS-TM39");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM39\",GEOGCS[\"ETRS89\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "European_Terrestrial_Reference_System_1989\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",5");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3051\"],AXIS[\"Northing\",NORTH],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST]]");
+    p = add_epsg_def (first, last, 3054, "epsg", 3054,
+		      "Hjorsey 1955 / UTM zone 26N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0");
+    add_proj4text (p, 1, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hjorsey 1955 / UTM zone 26N\",GEOGCS[\"Hjorsey ");
+    add_srs_wkt (p, 1,
+		 "1955\",DATUM[\"Hjorsey_1955\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "-73,46,-86,0,0,0,0],AUTHORITY[\"EPSG\",\"6658\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4658\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3054\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3055, "epsg", 3055,
+		      "Hjorsey 1955 / UTM zone 27N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0");
+    add_proj4text (p, 1, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hjorsey 1955 / UTM zone 27N\",GEOGCS[\"Hjorsey ");
+    add_srs_wkt (p, 1,
+		 "1955\",DATUM[\"Hjorsey_1955\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "-73,46,-86,0,0,0,0],AUTHORITY[\"EPSG\",\"6658\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4658\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3055\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3056, "epsg", 3056,
+		      "Hjorsey 1955 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0");
+    add_proj4text (p, 1, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hjorsey 1955 / UTM zone 28N\",GEOGCS[\"Hjorsey ");
+    add_srs_wkt (p, 1,
+		 "1955\",DATUM[\"Hjorsey_1955\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "-73,46,-86,0,0,0,0],AUTHORITY[\"EPSG\",\"6658\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4658\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3056\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3057, "epsg", 3057, "ISN93 / Lambert 1993");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19");
+    add_proj4text (p, 1,
+		   " +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ISN93 / Lambert 1993\",GEOGCS[\"ISN93\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Islands_Network_1993\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 2,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6659\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4659\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"standard_parallel_1\",64.25],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_2\",65.75],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 10,
+		 "65],PARAMETER[\"central_meridian\",-19],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",500000]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"3057\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3058, "epsg", 3058,
+		      "Helle 1954 / Jan Mayen Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7");
+    add_proj4text (p, 1,
+		   "800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.");
+    add_proj4text (p, 2, "3934,-153.257,-96.2266,16.805 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Helle 1954 / Jan Mayen Grid\",GEOGCS[\"Helle 19");
+    add_srs_wkt (p, 1,
+		 "54\",DATUM[\"Helle_1954\",SPHEROID[\"International 1924\"");
+    add_srs_wkt (p, 2,
+		 ",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[982.6");
+    add_srs_wkt (p, 3,
+		 "09,552.753,-540.873,32.3934,-153.257,-96.2266,16.805],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6660\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4660\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-8.5],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",-7800000],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3058\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3059, "epsg", 3059, "LKS92 / Latvia TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LKS92 / Latvia TM\",GEOGCS[\"LKS92\",DATUM[\"La");
+    add_srs_wkt (p, 1,
+		 "tvia_1992\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6661\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "661\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",24],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",-6000000],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3059\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3060, "epsg", 3060,
+		      "IGN72 Grande Terre / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN72 Grande Terre / UTM zone 58S\",GEOGCS[\"IG");
+    add_srs_wkt (p, 1,
+		 "N72 Grande Terre\",DATUM[\"IGN72_Grande_Terre\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6634\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4662\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",165],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",500000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 11,
+		 "00],AUTHORITY[\"EPSG\",\"3060\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_08 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 3061, "epsg", 3061,
+		      "Porto Santo 1995 / UTM zone 28N");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Porto Santo 1995 / UTM zone 28N\",GEOGCS[\"Port");
+    add_srs_wkt (p, 1,
+		 "o Santo 1995\",DATUM[\"Porto_Santo_1995\",SPHEROID[\"Int");
+    add_srs_wkt (p, 2,
+		 "ernational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6663\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4663\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",-15]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 10,
+		 "sting\",500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3061\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 12, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 3062, "epsg", 3062,
+		      "Azores Oriental 1995 / UTM zone 26N");
+    add_proj4text (p, 0, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Azores Oriental 1995 / UTM zone 26N\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Azores Oriental 1995\",DATUM[\"Azores_Oriental_Islands_1");
+    add_srs_wkt (p, 2,
+		 "995\",SPHEROID[\"International 1924\",6378388,297,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6664\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4664\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-27],PARAMETER[\"scale_factor\",0.9996]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3062\"],AXIS[\"Easting");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3063, "epsg", 3063,
+		      "Azores Central 1995 / UTM zone 26N");
+    add_proj4text (p, 0, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Azores Central 1995 / UTM zone 26N\",GEOGCS[\"A");
+    add_srs_wkt (p, 1,
+		 "zores Central 1995\",DATUM[\"Azores_Central_Islands_1995");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6665\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4665\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3063\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3064, "epsg", 3064, "IGM95 / UTM zone 32N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGM95 / UTM zone 32N\",GEOGCS[\"IGM95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Istituto_Geografico_Militaire_1995\",SPHEROID[\"WGS 84\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6670\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4670\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3064\"],AXIS[\"Easting\",EAS");
+    add_srs_wkt (p, 12, "T],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3065, "epsg", 3065, "IGM95 / UTM zone 33N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGM95 / UTM zone 33N\",GEOGCS[\"IGM95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Istituto_Geografico_Militaire_1995\",SPHEROID[\"WGS 84\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6670\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4670\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3065\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3066, "epsg", 3066, "ED50 / Jordan TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=-3000000 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / Jordan TM\",GEOGCS[\"ED50\",DATUM[\"Euro");
+    add_srs_wkt (p, 1,
+		 "pean_Datum_1950\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 2,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",37],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 9,
+		 "\",0.9998],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_northing\",-3000000],AUTHORITY[\"EPSG\",\"3066\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3067, "epsg", 3067, "ETRS89 / ETRS-TM35FIN");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-TM35FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"3067\"],AXIS[\"Easting\",EAST],AXIS[\"N");
+    add_srs_wkt (p, 12, "orthing\",NORTH]]");
+    p = add_epsg_def (first, last, 3068, "epsg", 3068, "DHDN / Soldner Berlin");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=52.41864827777778 +lon_0=13.6272036666");
+    add_proj4text (p, 1,
+		   "6667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / Soldner Berlin\",GEOGCS[\"DHDN\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Deutsches_Hauptdreiecksnetz\",SPHEROID[\"Bessel 1841\",6");
+    add_srs_wkt (p, 2,
+		 "377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "314\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_of_o");
+    add_srs_wkt (p, 8,
+		 "rigin\",52.41864827777778],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",13.62720366666667],PARAMETER[\"false_easting\",40000],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",10000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3068\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3069, "epsg", 3069,
+		      "NAD27 / Wisconsin Transverse Mercator");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y");
+    add_proj4text (p, 1,
+		   "_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wisconsin Transverse Mercator\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-90],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",-4500000],AUTHORITY[\"EPSG\",\"3069\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3070, "epsg", 3070,
+		      "NAD83 / Wisconsin Transverse Mercator");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y");
+    add_proj4text (p, 1,
+		   "_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wisconsin Transverse Mercator\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "90],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",520000],PARAMETER[\"false_northing\",-4480000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"3070\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3071, "epsg", 3071,
+		      "NAD83(HARN) / Wisconsin Transverse Mercator");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y");
+    add_proj4text (p, 1, "_0=-4480000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wisconsin Transverse Mercator\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Region");
+    add_srs_wkt (p, 2,
+		 "al_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-90],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",520000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",-4480000],AUTHORITY[\"EPSG\",\"3071\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3072, "epsg", 3072,
+		      "NAD83 / Maine CS2000 East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0");
+    add_proj4text (p, 1,
+		   ".99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine CS2000 East\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 8,
+		 "f_origin\",43.83333333333334],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-67.875],PARAMETER[\"scale_factor\",0.99998],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",700000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"3072\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3073, "epsg", 3073,
+		      "NAD83 / Maine CS2000 Central (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500");
+    add_proj4text (p, 1,
+		   "000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine CS2000 Central (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",43],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",-69.125],PARAMETER[\"scale_factor\",0.99998],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3073\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3074, "epsg", 3074,
+		      "NAD83 / Maine CS2000 West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0");
+    add_proj4text (p, 1,
+		   ".99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine CS2000 West\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 8,
+		 "f_origin\",42.83333333333334],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-70.375],PARAMETER[\"scale_factor\",0.99998],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",300000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"3074\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3075, "epsg", 3075,
+		      "NAD83(HARN) / Maine CS2000 East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0");
+    add_proj4text (p, 1,
+		   ".99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine CS2000 East\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",43.83333333333334],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"central_meridian\",-67.875],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.99998],PARAMETER[\"false_easting\",700000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3075\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3076, "epsg", 3076,
+		      "NAD83(HARN) / Maine CS2000 Central (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500");
+    add_proj4text (p, 1, "000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine CS2000 Central (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Re");
+    add_srs_wkt (p, 2,
+		 "gional_Network\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6152\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",43],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"central_meridian\",-69.125],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.99998],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3076\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3077, "epsg", 3077,
+		      "NAD83(HARN) / Maine CS2000 West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0");
+    add_proj4text (p, 1,
+		   ".99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine CS2000 West\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",42.83333333333334],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"central_meridian\",-70.375],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.99998],PARAMETER[\"false_easting\",300000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3077\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3078, "epsg", 3078,
+		      "NAD83 / Michigan Oblique Mercator");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=33");
+    add_proj4text (p, 1,
+		   "7.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +el");
+    add_proj4text (p, 2, "lps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Michigan Oblique Mercator\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_center\",45.30916666666666],PARAMETER[\"long");
+    add_srs_wkt (p, 9,
+		 "itude_of_center\",-86],PARAMETER[\"azimuth\",337.25556],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"rectified_grid_angle\",337.25556],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.9996],PARAMETER[\"false_easting\",254");
+    add_srs_wkt (p, 12,
+		 "6731.496],PARAMETER[\"false_northing\",-4354009.816],AUT");
+    add_srs_wkt (p, 13,
+		 "HORITY[\"EPSG\",\"3078\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 3079, "epsg", 3079,
+		      "NAD83(HARN) / Michigan Oblique Mercator");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=33");
+    add_proj4text (p, 1,
+		   "7.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +el");
+    add_proj4text (p, 2, "lps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Michigan Oblique Mercator\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_N");
+    add_srs_wkt (p, 2,
+		 "etwork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Hotine_Oblique");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_center\",45.3091666");
+    add_srs_wkt (p, 9,
+		 "6666666],PARAMETER[\"longitude_of_center\",-86],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"azimuth\",337.25556],PARAMETER[\"rectified_grid_angl");
+    add_srs_wkt (p, 11,
+		 "e\",337.25556],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_easting\",2546731.496],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 13,
+		 "thing\",-4354009.816],AUTHORITY[\"EPSG\",\"3079\"],AXIS[");
+    add_srs_wkt (p, 14, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3080, "epsg", 3080, "NAD27 / Shackleford");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_");
+    add_proj4text (p, 2,
+		   "0=914400 +ellps=clrk66 +datum=NAD27 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Shackleford\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",27.41666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",34.91666666666666],PARAMETER[\"lat");
+    add_srs_wkt (p, 10,
+		 "itude_of_origin\",31.16666666666667],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-100],PARAMETER[\"false_easting\",3000000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",3000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 13, "\"3080\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3081, "epsg", 3081,
+		      "NAD83 / Texas State Mapping System");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y");
+    add_proj4text (p, 2,
+		   "_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas State Mapping System\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"standard_parallel_1\",27.41666666666667],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"standard_parallel_2\",34.91666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",31.16666666666667],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-100],PARAMETER[\"false_easting\",1000000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",1000000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13, "\",\"3081\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3082, "epsg", 3082,
+		      "NAD83 / Texas Centric Lambert Conformal");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x");
+    add_proj4text (p, 1,
+		   "_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas Centric Lambert Conformal\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"standard_parallel_1\",27.5],PARAMETER[\"stand");
+    add_srs_wkt (p, 9,
+		 "ard_parallel_2\",35],PARAMETER[\"latitude_of_origin\",18");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"central_meridian\",-100],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_easting\",1500000],PARAMETER[\"false_northing\",5000000");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3082\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3083, "epsg", 3083,
+		      "NAD83 / Texas Centric Albers Equal Area");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x");
+    add_proj4text (p, 1,
+		   "_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas Centric Albers Equal Area\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"standard_parallel_1\",27.5],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",35],PARAMETER[\"latitude_of_center\",18],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"longitude_of_center\",-100],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",1500000],PARAMETER[\"false_northing\",6000000]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"3083\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3084, "epsg", 3084,
+		      "NAD83(HARN) / Texas Centric Lambert Conformal");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x");
+    add_proj4text (p, 1,
+		   "_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas Centric Lambert Conformal\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regi");
+    add_srs_wkt (p, 2,
+		 "onal_Network\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"61");
+    add_srs_wkt (p, 4,
+		 "52\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",2");
+    add_srs_wkt (p, 9,
+		 "7.5],PARAMETER[\"standard_parallel_2\",35],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",18],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 11,
+		 "100],PARAMETER[\"false_easting\",1500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_northing\",5000000],AUTHORITY[\"EPSG\",\"3084\"],AXI");
+    add_srs_wkt (p, 13, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3085, "epsg", 3085,
+		      "NAD83(HARN) / Texas Centric Albers Equal Area");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x");
+    add_proj4text (p, 1,
+		   "_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Texas Centric Albers Equal Area\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regi");
+    add_srs_wkt (p, 2,
+		 "onal_Network\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"61");
+    add_srs_wkt (p, 4,
+		 "52\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Albers_Con");
+    add_srs_wkt (p, 8,
+		 "ic_Equal_Area\"],PARAMETER[\"standard_parallel_1\",27.5]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",35],PARAMETER[\"latit");
+    add_srs_wkt (p, 10,
+		 "ude_of_center\",18],PARAMETER[\"longitude_of_center\",-1");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_easting\",1500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_northing\",6000000],AUTHORITY[\"EPSG\",\"3085\"],AXIS");
+    add_srs_wkt (p, 13, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3086, "epsg", 3086,
+		      "NAD83 / Florida GDL Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_");
+    add_proj4text (p, 1,
+		   "0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Florida GDL Albers\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"stand");
+    add_srs_wkt (p, 8,
+		 "ard_parallel_1\",24],PARAMETER[\"standard_parallel_2\",3");
+    add_srs_wkt (p, 9,
+		 "1.5],PARAMETER[\"latitude_of_center\",24],PARAMETER[\"lo");
+    add_srs_wkt (p, 10,
+		 "ngitude_of_center\",-84],PARAMETER[\"false_easting\",400");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"3086\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3087, "epsg", 3087,
+		      "NAD83(HARN) / Florida GDL Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_");
+    add_proj4text (p, 1, "0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Florida GDL Albers\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",24],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",31.5],PARAMETER[\"latitude_of_center\"");
+    add_srs_wkt (p, 10,
+		 ",24],PARAMETER[\"longitude_of_center\",-84],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",400000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"3087\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3088, "epsg", 3088,
+		      "NAD83 / Kentucky Single Zone");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 ");
+    add_proj4text (p, 2,
+		   "+y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kentucky Single Zone\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",37.08333333333334],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_2\",38.66666666666666],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",36.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 11,
+		 "ridian\",-85.75],PARAMETER[\"false_easting\",1500000],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3088\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3089, "epsg", 3089,
+		      "NAD83 / Kentucky Single Zone (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 ");
+    add_proj4text (p, 2,
+		   "+y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 3, "us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kentucky Single Zone (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "37.08333333333334],PARAMETER[\"standard_parallel_2\",38.");
+    add_srs_wkt (p, 10,
+		 "66666666666666],PARAMETER[\"latitude_of_origin\",36.3333");
+    add_srs_wkt (p, 11,
+		 "3333333334],PARAMETER[\"central_meridian\",-85.75],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_easting\",4921250],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 13,
+		 "ng\",3280833.333],AUTHORITY[\"EPSG\",\"3089\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3090, "epsg", 3090,
+		      "NAD83(HARN) / Kentucky Single Zone");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 ");
+    add_proj4text (p, 2, "+y_0=1000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kentucky Single Zone\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",37.0833333");
+    add_srs_wkt (p, 9,
+		 "3333334],PARAMETER[\"standard_parallel_2\",38.6666666666");
+    add_srs_wkt (p, 10,
+		 "6666],PARAMETER[\"latitude_of_origin\",36.33333333333334");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"central_meridian\",-85.75],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_easting\",1500000],PARAMETER[\"false_northing\",10000");
+    add_srs_wkt (p, 13,
+		 "00],AUTHORITY[\"EPSG\",\"3090\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3091, "epsg", 3091,
+		      "NAD83(HARN) / Kentucky Single Zone (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 ");
+    add_proj4text (p, 2,
+		   "+y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_def");
+    add_proj4text (p, 3, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kentucky Single Zone (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional");
+    add_srs_wkt (p, 2,
+		 "_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",37.08333333333334],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",38.66666666666666],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",36.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-85.75],PARAMETER[\"false_easting\",4921250],PA");
+    add_srs_wkt (p, 13,
+		 "RAMETER[\"false_northing\",3280833.333],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 14, "\",\"3091\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3092, "epsg", 3092, "Tokyo / UTM zone 51N");
+    add_proj4text (p, 0, "+proj=utm +zone=51 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / UTM zone 51N\",GEOGCS[\"Tokyo\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6301");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",123],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 9,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3092\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3093, "epsg", 3093, "Tokyo / UTM zone 52N");
+    add_proj4text (p, 0, "+proj=utm +zone=52 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / UTM zone 52N\",GEOGCS[\"Tokyo\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6301");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",129],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 9,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3093\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3094, "epsg", 3094, "Tokyo / UTM zone 53N");
+    add_proj4text (p, 0, "+proj=utm +zone=53 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / UTM zone 53N\",GEOGCS[\"Tokyo\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6301");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",135],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 9,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3094\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3095, "epsg", 3095, "Tokyo / UTM zone 54N");
+    add_proj4text (p, 0, "+proj=utm +zone=54 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / UTM zone 54N\",GEOGCS[\"Tokyo\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6301");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",141],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 9,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3095\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3096, "epsg", 3096, "Tokyo / UTM zone 55N");
+    add_proj4text (p, 0, "+proj=utm +zone=55 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / UTM zone 55N\",GEOGCS[\"Tokyo\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6301");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",147],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 9,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3096\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3097, "epsg", 3097,
+		      "JGD2000 / UTM zone 51N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / UTM zone 51N\",GEOGCS[\"JGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Japanese_Geodetic_Datum_2000\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6612\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",123],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3097\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3098, "epsg", 3098,
+		      "JGD2000 / UTM zone 52N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / UTM zone 52N\",GEOGCS[\"JGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Japanese_Geodetic_Datum_2000\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6612\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",129],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3098\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3099, "epsg", 3099,
+		      "JGD2000 / UTM zone 53N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / UTM zone 53N\",GEOGCS[\"JGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Japanese_Geodetic_Datum_2000\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6612\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",135],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3099\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3100, "epsg", 3100,
+		      "JGD2000 / UTM zone 54N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / UTM zone 54N\",GEOGCS[\"JGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Japanese_Geodetic_Datum_2000\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6612\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",141],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3100\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3101, "epsg", 3101,
+		      "JGD2000 / UTM zone 55N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JGD2000 / UTM zone 55N\",GEOGCS[\"JGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Japanese_Geodetic_Datum_2000\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6612\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4612\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",147],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3101\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3102, "epsg", 3102,
+		      "American Samoa 1962 / American Samoa Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.266666666");
+    add_proj4text (p, 1,
+		   "66667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=951");
+    add_proj4text (p, 2,
+		   "69.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0");
+    add_proj4text (p, 3, ",0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"American Samoa 1962 / American Samoa Lambert\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"American Samoa 1962\",DATUM[\"American_Samoa_19");
+    add_srs_wkt (p, 2,
+		 "62\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213900");
+    add_srs_wkt (p, 3,
+		 "6,AUTHORITY[\"EPSG\",\"7008\"]],TOWGS84[-115,118,426,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6169\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4169\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",-");
+    add_srs_wkt (p, 10,
+		 "14.26666666666667],PARAMETER[\"central_meridian\",-170],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",500000],PARAMETER[\"false_northing\",312234.65],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"3102\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 14, "]");
+    p = add_epsg_def (first, last, 3103, "epsg", 3103,
+		      "Mauritania 1999 / UTM zone 28N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mauritania 1999 / UTM zone 28N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Mauritania 1999\",DATUM[\"Mauritania_1999\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6681\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4681\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3103\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3104, "epsg", 3104,
+		      "Mauritania 1999 / UTM zone 29N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mauritania 1999 / UTM zone 29N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Mauritania 1999\",DATUM[\"Mauritania_1999\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6681\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4681\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3104\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3105, "epsg", 3105,
+		      "Mauritania 1999 / UTM zone 30N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mauritania 1999 / UTM zone 30N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Mauritania 1999\",DATUM[\"Mauritania_1999\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6681\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4681\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3105\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3106, "epsg", 3106,
+		      "Gulshan 303 / Bangladesh Transverse Mercator");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Gulshan 303 / Bangladesh Transverse Mercator\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Gulshan 303\",DATUM[\"Gulshan_303\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Everest 1830 (1937 Adjustment)\",6377276.345,300.8017,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6682\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4682\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",90],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3106\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3107, "epsg", 3107, "GDA94 / SA Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x");
+    add_proj4text (p, 1,
+		   "_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / SA Lambert\",GEOGCS[\"GDA94\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "eocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 8,
+		 "ic_2SP\"],PARAMETER[\"standard_parallel_1\",-28],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"standard_parallel_2\",-36],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",-32],PARAMETER[\"central_meridian\",135],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",1000000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",2000000],AUTHORITY[\"EPSG\",\"3107\"],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3108, "epsg", 3108,
+		      "ETRS89 / Guernsey Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Guernsey Grid\",GEOGCS[\"ETRS89\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"European_Terrestrial_Reference_System_1989\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",49.5],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",-2.416666666666667],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "99997],PARAMETER[\"false_easting\",47000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",50000],AUTHORITY[\"EPSG\",\"3108\"],AXIS[");
+    add_srs_wkt (p, 12, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3109, "epsg", 3109,
+		      "ETRS89 / Jersey Transverse Mercator");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.99999990000");
+    add_proj4text (p, 1,
+		   "00001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Jersey Transverse Mercator\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1");
+    add_srs_wkt (p, 2,
+		 "989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",49.225],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"central_meridian\",-2.135],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999999],PARAMETER[\"false_easting\",40000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",70000],AUTHORITY[\"EPSG\",\"3109\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3110, "epsg", 3110, "AGD66 / Vicgrid66");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x");
+    add_proj4text (p, 1,
+		   "_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / Vicgrid66\",GEOGCS[\"AGD66\",DATUM[\"Au");
+    add_srs_wkt (p, 1,
+		 "stralian_Geodetic_Datum_1966\",SPHEROID[\"Australian Nat");
+    add_srs_wkt (p, 2,
+		 "ional Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "3\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"standard_parallel_1\",-36],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",-38],PARAMETER[\"latitude_of_origin\",-37],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"central_meridian\",145],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",2500000],PARAMETER[\"false_northing\",4500000],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"3110\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3111, "epsg", 3111, "GDA94 / Vicgrid94");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x");
+    add_proj4text (p, 1,
+		   "_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / Vicgrid94\",GEOGCS[\"GDA94\",DATUM[\"Ge");
+    add_srs_wkt (p, 1,
+		 "ocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 8,
+		 "ic_2SP\"],PARAMETER[\"standard_parallel_1\",-36],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"standard_parallel_2\",-38],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",-37],PARAMETER[\"central_meridian\",145],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",2500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",2500000],AUTHORITY[\"EPSG\",\"3111\"],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3112, "epsg", 3112,
+		      "GDA94 / Geoscience Australia Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / Geoscience Australia Lambert\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "GDA94\",DATUM[\"Geocentric_Datum_of_Australia_1994\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6283\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 8,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_1\",-18],PARAMETER[\"standard_parallel_2\",-36],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"latitude_of_origin\",0],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 11,
+		 "n\",134],PARAMETER[\"false_easting\",0],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3112\"],AXIS[\"East");
+    add_srs_wkt (p, 13, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3113, "epsg", 3113, "GDA94 / BCSG02");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 ");
+    add_proj4text (p, 1,
+		   "+y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / BCSG02\",GEOGCS[\"GDA94\",DATUM[\"Geoce");
+    add_srs_wkt (p, 1,
+		 "ntric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS8");
+    add_srs_wkt (p, 3,
+		 "4[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",-28],PARAMETER[\"central_");
+    add_srs_wkt (p, 9,
+		 "meridian\",153],PARAMETER[\"scale_factor\",0.99999],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",50000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",100000],AUTHORITY[\"EPSG\",\"3113\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3114, "epsg", 3114,
+		      "MAGNA-SIRGAS / Colombia Far West zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791");
+    add_proj4text (p, 1,
+		   "666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towg");
+    add_proj4text (p, 2, "s84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MAGNA-SIRGAS / Colombia Far West zone\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"MAGNA-SIRGAS\",DATUM[\"Marco_Geocentrico_Nacional_de_R");
+    add_srs_wkt (p, 2,
+		 "eferencia\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6686\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "686\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",4.596200416666666],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 10,
+		 "ian\",-80.07750791666666],PARAMETER[\"scale_factor\",1],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",1000000],AUTHORITY[\"EPSG\",\"3114\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3115, "epsg", 3115,
+		      "MAGNA-SIRGAS / Colombia West zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791");
+    add_proj4text (p, 1,
+		   "666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towg");
+    add_proj4text (p, 2, "s84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MAGNA-SIRGAS / Colombia West zone\",GEOGCS[\"MA");
+    add_srs_wkt (p, 1,
+		 "GNA-SIRGAS\",DATUM[\"Marco_Geocentrico_Nacional_de_Refer");
+    add_srs_wkt (p, 2,
+		 "encia\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6686\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4686\"");
+    add_srs_wkt (p, 7,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",4.596200416666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-77.07750791666666],PARAMETER[\"scale_factor\",1],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",1000000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",1000000],AUTHORITY[\"EPSG\",\"3115\"],AXIS[\"Northi");
+    add_srs_wkt (p, 13, "ng\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3116, "epsg", 3116,
+		      "MAGNA-SIRGAS / Colombia Bogota zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791");
+    add_proj4text (p, 1,
+		   "666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towg");
+    add_proj4text (p, 2, "s84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MAGNA-SIRGAS / Colombia Bogota zone\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "MAGNA-SIRGAS\",DATUM[\"Marco_Geocentrico_Nacional_de_Ref");
+    add_srs_wkt (p, 2,
+		 "erencia\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6686\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"468");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",4.596200416666666],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",-74.07750791666666],PARAMETER[\"scale_factor\",1],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",1000000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",1000000],AUTHORITY[\"EPSG\",\"3116\"],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3117, "epsg", 3117,
+		      "MAGNA-SIRGAS / Colombia East Central zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791");
+    add_proj4text (p, 1,
+		   "666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towg");
+    add_proj4text (p, 2, "s84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MAGNA-SIRGAS / Colombia East Central zone\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"MAGNA-SIRGAS\",DATUM[\"Marco_Geocentrico_Nacional_");
+    add_srs_wkt (p, 2,
+		 "de_Referencia\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6686\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4686\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",4.596200416666666],PARAMETER[\"central_m");
+    add_srs_wkt (p, 10,
+		 "eridian\",-71.07750791666666],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",1],PARAMETER[\"false_easting\",1000000],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_northing\",1000000],AUTHORITY[\"EPSG\",\"3117\"],AXIS");
+    add_srs_wkt (p, 13, "[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3118, "epsg", 3118,
+		      "MAGNA-SIRGAS / Colombia East zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791");
+    add_proj4text (p, 1,
+		   "666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towg");
+    add_proj4text (p, 2, "s84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MAGNA-SIRGAS / Colombia East zone\",GEOGCS[\"MA");
+    add_srs_wkt (p, 1,
+		 "GNA-SIRGAS\",DATUM[\"Marco_Geocentrico_Nacional_de_Refer");
+    add_srs_wkt (p, 2,
+		 "encia\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6686\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4686\"");
+    add_srs_wkt (p, 7,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",4.596200416666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-68.07750791666666],PARAMETER[\"scale_factor\",1],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",1000000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",1000000],AUTHORITY[\"EPSG\",\"3118\"],AXIS[\"Northi");
+    add_srs_wkt (p, 13, "ng\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3119, "epsg", 3119,
+		      "Douala 1948 / AEF west");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +");
+    add_proj4text (p, 1,
+		   "y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Douala 1948 / AEF west\",GEOGCS[\"Douala 1948\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Douala_1948\",SPHEROID[\"International 1924\",6");
+    add_srs_wkt (p, 2,
+		 "378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-206.1,");
+    add_srs_wkt (p, 3,
+		 "-174.7,-87.7,0,0,0,0],AUTHORITY[\"EPSG\",\"6192\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4192\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",10.5],PARAMETER[\"scale_factor\",0.999],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",1000000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 11,
+		 "rthing\",1000000],AUTHORITY[\"EPSG\",\"3119\"],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3120, "epsg", 3120,
+		      "Pulkovo 1942(58) / Poland zone I");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0");
+    add_proj4text (p, 1,
+		   ".9998 +x_0=4637000 +y_0=5467000 +ellps=krass +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Poland zone I\",GEOGCS[\"Pul");
+    add_srs_wkt (p, 1,
+		 "kovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID[\"Kra");
+    add_srs_wkt (p, 2,
+		 "ssowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",50.625],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",21.08333333333333],PARAMETER[\"scale_factor\",0.9998]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",4637000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",5467000],AUTHORITY[\"EPSG\",\"3120\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3121, "epsg", 3121,
+		      "PRS92 / Philippines zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1,
+		   "y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.06");
+    add_proj4text (p, 2, "8,4.903,1.578,-1.06 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PRS92 / Philippines zone 1\",GEOGCS[\"PRS92\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Philippine_Reference_System_1992\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1");
+    add_srs_wkt (p, 4,
+		 ".578,-1.06],AUTHORITY[\"EPSG\",\"6683\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4683\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",117],PARAMETER[\"scale_factor\",0.99995],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3121\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3122, "epsg", 3122,
+		      "PRS92 / Philippines zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1,
+		   "y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.06");
+    add_proj4text (p, 2, "8,4.903,1.578,-1.06 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PRS92 / Philippines zone 2\",GEOGCS[\"PRS92\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Philippine_Reference_System_1992\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1");
+    add_srs_wkt (p, 4,
+		 ".578,-1.06],AUTHORITY[\"EPSG\",\"6683\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4683\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",119],PARAMETER[\"scale_factor\",0.99995],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3122\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3123, "epsg", 3123,
+		      "PRS92 / Philippines zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1,
+		   "y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.06");
+    add_proj4text (p, 2, "8,4.903,1.578,-1.06 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PRS92 / Philippines zone 3\",GEOGCS[\"PRS92\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Philippine_Reference_System_1992\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1");
+    add_srs_wkt (p, 4,
+		 ".578,-1.06],AUTHORITY[\"EPSG\",\"6683\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4683\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",121],PARAMETER[\"scale_factor\",0.99995],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3123\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3124, "epsg", 3124,
+		      "PRS92 / Philippines zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1,
+		   "y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.06");
+    add_proj4text (p, 2, "8,4.903,1.578,-1.06 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PRS92 / Philippines zone 4\",GEOGCS[\"PRS92\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Philippine_Reference_System_1992\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1");
+    add_srs_wkt (p, 4,
+		 ".578,-1.06],AUTHORITY[\"EPSG\",\"6683\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4683\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",123],PARAMETER[\"scale_factor\",0.99995],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3124\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3125, "epsg", 3125,
+		      "PRS92 / Philippines zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1,
+		   "y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.06");
+    add_proj4text (p, 2, "8,4.903,1.578,-1.06 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PRS92 / Philippines zone 5\",GEOGCS[\"PRS92\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Philippine_Reference_System_1992\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1");
+    add_srs_wkt (p, 4,
+		 ".578,-1.06],AUTHORITY[\"EPSG\",\"6683\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4683\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",125],PARAMETER[\"scale_factor\",0.99995],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3125\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3126, "epsg", 3126, "ETRS89 / ETRS-GK19FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK19FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",19],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3126\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3127, "epsg", 3127, "ETRS89 / ETRS-GK20FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK20FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",20],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3127\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3128, "epsg", 3128, "ETRS89 / ETRS-GK21FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK21FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3128\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3129, "epsg", 3129, "ETRS89 / ETRS-GK22FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK22FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",22],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3129\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3130, "epsg", 3130, "ETRS89 / ETRS-GK23FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK23FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",23],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3130\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3131, "epsg", 3131, "ETRS89 / ETRS-GK24FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK24FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3131\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3132, "epsg", 3132, "ETRS89 / ETRS-GK25FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK25FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",25],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3132\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3133, "epsg", 3133, "ETRS89 / ETRS-GK26FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK26FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",26],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3133\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3134, "epsg", 3134, "ETRS89 / ETRS-GK27FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK27FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3134\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3135, "epsg", 3135, "ETRS89 / ETRS-GK28FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK28FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",28],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3135\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3136, "epsg", 3136, "ETRS89 / ETRS-GK29FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK29FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",29],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3136\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3137, "epsg", 3137, "ETRS89 / ETRS-GK30FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK30FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3137\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3138, "epsg", 3138, "ETRS89 / ETRS-GK31FIN");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / ETRS-GK31FIN\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3138\"],AXIS[\"Northing\",NORTH],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST]]");
+    p = add_epsg_def (first, last, 3140, "epsg", 3140,
+		      "Viti Levu 1912 / Viti Levu Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=14");
+    add_proj4text (p, 1,
+		   "1622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,");
+    add_proj4text (p, 2, "-36,0,0,0,0 +to_meter=0.201168 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Viti Levu 1912 / Viti Levu Grid\",GEOGCS[\"Viti");
+    add_srs_wkt (p, 1,
+		 " Levu 1912\",DATUM[\"Viti_Levu_1912\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1880 (international foot)\",6378306.3696,293.46630765563");
+    add_srs_wkt (p, 3,
+		 "49,AUTHORITY[\"EPSG\",\"7055\"]],TOWGS84[51,391,-36,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6752\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4752\"]],UNIT[\"link\",0.201168,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9098\"]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",-18],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",178],PARAMETER[\"false_easting\",544000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",704000],AUTHORITY[\"EPSG\",\"3140\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3141, "epsg", 3141,
+		      "Fiji 1956 / UTM zone 60S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,3");
+    add_proj4text (p, 1, "84.929,-194.046,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fiji 1956 / UTM zone 60S\",GEOGCS[\"Fiji 1956\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Fiji_1956\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[265.025,3");
+    add_srs_wkt (p, 3,
+		 "84.929,-194.046,0,0,0,0],AUTHORITY[\"EPSG\",\"6721\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4721\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",177],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",10000000],AUTHORITY[\"EPSG\",\"3141\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3142, "epsg", 3142,
+		      "Fiji 1956 / UTM zone 1S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,38");
+    add_proj4text (p, 1, "4.929,-194.046,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fiji 1956 / UTM zone 1S\",GEOGCS[\"Fiji 1956\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Fiji_1956\",SPHEROID[\"International 1924\",6378");
+    add_srs_wkt (p, 2,
+		 "388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[265.025,38");
+    add_srs_wkt (p, 3,
+		 "4.929,-194.046,0,0,0,0],AUTHORITY[\"EPSG\",\"6721\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4721\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-177],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",10000000],AUTHORITY[\"EPSG\",\"3142\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3143, "epsg", 3143,
+		      "Fiji 1986 / Fiji Map Grid (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=200");
+    add_proj4text (p, 1, "0000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fiji 1986 / Fiji Map Grid (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Fiji 1986\",DATUM[\"Fiji_Geodetic_Datum_1986\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6720\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4720\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",-17],PARAMETER[\"central_meridian\",17");
+    add_srs_wkt (p, 9,
+		 "8.75],PARAMETER[\"scale_factor\",0.99985],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",2000000],PARAMETER[\"false_northing\",4000");
+    add_srs_wkt (p, 11,
+		 "000],AUTHORITY[\"EPSG\",\"3143\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3146, "epsg", 3146,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 6\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",18],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",65000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "3146\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3147, "epsg", 3147,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",18],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "3147\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3148, "epsg", 3148,
+		      "Indian 1960 / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1960 / UTM zone 48N\",GEOGCS[\"Indian 19");
+    add_srs_wkt (p, 1,
+		 "60\",DATUM[\"Indian_1960\",SPHEROID[\"Everest 1830 (1937");
+    add_srs_wkt (p, 2,
+		 " Adjustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7015\"]],AUTHORITY[\"EPSG\",\"6131\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4131\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",500000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"3148\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3149, "epsg", 3149,
+		      "Indian 1960 / UTM zone 49N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1960 / UTM zone 49N\",GEOGCS[\"Indian 19");
+    add_srs_wkt (p, 1,
+		 "60\",DATUM[\"Indian_1960\",SPHEROID[\"Everest 1830 (1937");
+    add_srs_wkt (p, 2,
+		 " Adjustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7015\"]],AUTHORITY[\"EPSG\",\"6131\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4131\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",500000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"3149\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3150, "epsg", 3150,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 6\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",18],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",6500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"3150\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3151, "epsg", 3151,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",18],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "3151\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3152, "epsg", 3152, "ST74");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=");
+    add_proj4text (p, 1,
+		   "100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0");
+    add_proj4text (p, 2, ",0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ST74\",GEOGCS[\"SWEREF99\",DATUM[\"SWEREF99\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 7,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",18.05779],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "cale_factor\",0.99999425],PARAMETER[\"false_easting\",10");
+    add_srs_wkt (p, 10,
+		 "0178.1808],PARAMETER[\"false_northing\",-6500614.7836],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"3152\"],AXIS[\"x\",NORTH],AXIS[\"y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3153, "epsg", 3153,
+		      "NAD83(CSRS) / BC Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x");
+    add_proj4text (p, 1, "_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / BC Albers\",GEOGCS[\"NAD83(CSRS)\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"standard_parallel_1\",50],PARAMETER[\"standard");
+    add_srs_wkt (p, 9,
+		 "_parallel_2\",58.5],PARAMETER[\"latitude_of_center\",45]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"longitude_of_center\",-126],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_easting\",1000000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 12,
+		 "THORITY[\"EPSG\",\"3153\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3154, "epsg", 3154,
+		      "NAD83(CSRS) / UTM zone 7N");
+    add_proj4text (p, 0, "+proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 7N\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-141],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"3154\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3155, "epsg", 3155,
+		      "NAD83(CSRS) / UTM zone 8N");
+    add_proj4text (p, 0, "+proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 8N\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-135],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"3155\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3156, "epsg", 3156,
+		      "NAD83(CSRS) / UTM zone 9N");
+    add_proj4text (p, 0, "+proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 9N\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-129],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"3156\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3157, "epsg", 3157,
+		      "NAD83(CSRS) / UTM zone 10N");
+    add_proj4text (p, 0, "+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 10N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"3157\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3158, "epsg", 3158,
+		      "NAD83(CSRS) / UTM zone 14N");
+    add_proj4text (p, 0, "+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 14N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3158\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3159, "epsg", 3159,
+		      "NAD83(CSRS) / UTM zone 15N");
+    add_proj4text (p, 0, "+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 15N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3159\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3160, "epsg", 3160,
+		      "NAD83(CSRS) / UTM zone 16N");
+    add_proj4text (p, 0, "+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 16N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3160\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3161, "epsg", 3161,
+		      "NAD83 / Ontario MNR Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x");
+    add_proj4text (p, 1,
+		   "_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Ontario MNR Lambert\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",44.5],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_2\",53.5],PARAMETER[\"latitude_of_origin\",0],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"central_meridian\",-85],PARAMETER[\"false_easting\",9");
+    add_srs_wkt (p, 11,
+		 "30000],PARAMETER[\"false_northing\",6430000],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3161\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3162, "epsg", 3162,
+		      "NAD83(CSRS) / Ontario MNR Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x");
+    add_proj4text (p, 1,
+		   "_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Ontario MNR Lambert\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.5],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"standard_parallel_2\",53.5],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",-85],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",930000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",6430000],AUTHORITY[\"EPSG\",\"3162\"],AXIS[\"East");
+    add_srs_wkt (p, 13, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3163, "epsg", 3163,
+		      "RGNC91-93 / Lambert New Caledonia");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +e");
+    add_proj4text (p, 2, "llps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGNC91-93 / Lambert New Caledonia\",GEOGCS[\"RG");
+    add_srs_wkt (p, 1,
+		 "NC91-93\",DATUM[\"Reseau_Geodesique_de_Nouvelle_Caledoni");
+    add_srs_wkt (p, 2,
+		 "e_91_93\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6749\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"474");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",-20.66666666666667],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",-22.33333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 11,
+		 "e_of_origin\",-21.5],PARAMETER[\"central_meridian\",166]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_easting\",400000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 13,
+		 "orthing\",300000],AUTHORITY[\"EPSG\",\"3163\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3164, "epsg", 3164,
+		      "ST87 Ouvea / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,");
+    add_proj4text (p, 1, "16.136,-22.856,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ST87 Ouvea / UTM zone 58S\",GEOGCS[\"ST87 Ouvea");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"ST87_Ouvea\",SPHEROID[\"WGS 84\",6378137,298.");
+    add_srs_wkt (p, 2,
+		 "257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[-56.263,");
+    add_srs_wkt (p, 3,
+		 "16.136,-22.856,0,0,0,0],AUTHORITY[\"EPSG\",\"6750\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4750\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",165],PARAMETER[\"scale_factor\",0.9996]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",10000000],AUTHORITY[\"EPSG\",\"3164\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3165, "epsg", 3165,
+		      "NEA74 Noumea / Noumea Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0");
+    add_proj4text (p, 1,
+		   "=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +e");
+    add_proj4text (p, 2, "llps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NEA74 Noumea / Noumea Lambert\",GEOGCS[\"NEA74 ");
+    add_srs_wkt (p, 1,
+		 "Noumea\",DATUM[\"NEA74_Noumea\",SPHEROID[\"International");
+    add_srs_wkt (p, 2,
+		 " 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6644\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4644");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",-22.24469175],PARAMETER[\"standard_par");
+    add_srs_wkt (p, 9,
+		 "allel_2\",-22.29469175],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 10,
+		 ",-22.26969175],PARAMETER[\"central_meridian\",166.442425");
+    add_srs_wkt (p, 11,
+		 "75],PARAMETER[\"false_easting\",0.66],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",1.02],AUTHORITY[\"EPSG\",\"3165\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3166, "epsg", 3166,
+		      "NEA74 Noumea / Noumea Lambert 2");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.294722222");
+    add_proj4text (p, 1,
+		   "22222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.3");
+    add_proj4text (p, 2,
+		   "13000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NEA74 Noumea / Noumea Lambert 2\",GEOGCS[\"NEA7");
+    add_srs_wkt (p, 1,
+		 "4 Noumea\",DATUM[\"NEA74_Noumea\",SPHEROID[\"Internation");
+    add_srs_wkt (p, 2,
+		 "al 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6644\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"46");
+    add_srs_wkt (p, 6,
+		 "44\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",-22.24472222222222],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",-22.29472222222222],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",-22.26972222222222],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",166.4425],PARAMETER[\"false_easting\",8.313],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",-2.354],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3166\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3167, "epsg", 3167,
+		      "Kertau (RSO) / RSO Malaya (ch)");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=");
+    add_proj4text (p, 1,
+		   "0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.6679");
+    add_proj4text (p, 2, "15204 +to_meter=20.116756 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kertau (RSO) / RSO Malaya (ch)\",GEOGCS[\"Kerta");
+    add_srs_wkt (p, 1,
+		 "u (RSO)\",DATUM[\"Kertau_RSO\",SPHEROID[\"Everest 1830 (");
+    add_srs_wkt (p, 2,
+		 "RSO 1969)\",6377295.664,300.8017,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "56\"]],AUTHORITY[\"EPSG\",\"6751\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4751\"]],UNIT[\"British chain (Sears 1922 trunca");
+    add_srs_wkt (p, 7,
+		 "ted)\",20.116756,AUTHORITY[\"EPSG\",\"9301\"]],PROJECTIO");
+    add_srs_wkt (p, 8,
+		 "N[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of_c");
+    add_srs_wkt (p, 9,
+		 "enter\",4],PARAMETER[\"longitude_of_center\",102.25],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"azimuth\",323.0257905],PARAMETER[\"rectified_gr");
+    add_srs_wkt (p, 11,
+		 "id_angle\",323.1301023611111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 12,
+		 ",0.99984],PARAMETER[\"false_easting\",1988.392164223695]");
+    add_srs_wkt (p, 13,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"31");
+    add_srs_wkt (p, 14,
+		 "67\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3168, "epsg", 3168,
+		      "Kertau (RSO) / RSO Malaya (m)");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=");
+    add_proj4text (p, 1,
+		   "0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.");
+    add_proj4text (p, 2, "667915204 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kertau (RSO) / RSO Malaya (m)\",GEOGCS[\"Kertau");
+    add_srs_wkt (p, 1,
+		 " (RSO)\",DATUM[\"Kertau_RSO\",SPHEROID[\"Everest 1830 (R");
+    add_srs_wkt (p, 2,
+		 "SO 1969)\",6377295.664,300.8017,AUTHORITY[\"EPSG\",\"705");
+    add_srs_wkt (p, 3,
+		 "6\"]],AUTHORITY[\"EPSG\",\"6751\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4751\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_center\",4],PARAMETER[\"longitude_of_cen");
+    add_srs_wkt (p, 9,
+		 "ter\",102.25],PARAMETER[\"azimuth\",323.0257905],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"rectified_grid_angle\",323.1301023611111],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"scale_factor\",0.99984],PARAMETER[\"false_easting\",8");
+    add_srs_wkt (p, 12,
+		 "04670.24],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13,
+		 "SG\",\"3168\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 14, "NORTH]]");
+    p = add_epsg_def (first, last, 3169, "epsg", 3169,
+		      "RGNC91-93 / UTM zone 57S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGNC91-93 / UTM zone 57S\",GEOGCS[\"RGNC91-93\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Reseau_Geodesique_de_Nouvelle_Caledonie_91_93\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6749\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4749\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",159],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12,
+		 "\"3169\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 3170, "epsg", 3170,
+		      "RGNC91-93 / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGNC91-93 / UTM zone 58S\",GEOGCS[\"RGNC91-93\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Reseau_Geodesique_de_Nouvelle_Caledonie_91_93\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6749\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4749\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",165],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12,
+		 "\"3170\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 3171, "epsg", 3171,
+		      "RGNC91-93 / UTM zone 59S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGNC91-93 / UTM zone 59S\",GEOGCS[\"RGNC91-93\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Reseau_Geodesique_de_Nouvelle_Caledonie_91_93\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6749\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4749\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12,
+		 "\"3171\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 3172, "epsg", 3172,
+		      "IGN53 Mare / UTM zone 59S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN53 Mare / UTM zone 59S\",GEOGCS[\"IGN53 Mare");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"IGN53_Mare\",SPHEROID[\"International 1924\",");
+    add_srs_wkt (p, 2,
+		 "6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6641\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4641\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",171],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"3172\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 3174, "epsg", 3174,
+		      "NAD83 / Great Lakes Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568");
+    add_proj4text (p, 1,
+		   "977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Great Lakes Albers\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"stand");
+    add_srs_wkt (p, 8,
+		 "ard_parallel_1\",42.122774],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 9,
+		 "l_2\",49.01518],PARAMETER[\"latitude_of_center\",45.5689");
+    add_srs_wkt (p, 10,
+		 "77],PARAMETER[\"longitude_of_center\",-84.455955],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",1000000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",1000000],AUTHORITY[\"EPSG\",\"3174\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3175, "epsg", 3175,
+		      "NAD83 / Great Lakes and St Lawrence Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568");
+    add_proj4text (p, 1,
+		   "977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Great Lakes and St Lawrence Albers\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"standard_parallel_1\",42.122774],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",49.01518],PARAMETER[\"latitude_of_c");
+    add_srs_wkt (p, 10,
+		 "enter\",45.568977],PARAMETER[\"longitude_of_center\",-83");
+    add_srs_wkt (p, 11,
+		 ".248627],PARAMETER[\"false_easting\",1000000],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"3175\"]");
+    add_srs_wkt (p, 13, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3176, "epsg", 3176,
+		      "Indian 1960 / TM 106 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1960 / TM 106 NE\",GEOGCS[\"Indian 1960\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Indian_1960\",SPHEROID[\"Everest 1830 (1937 Adj");
+    add_srs_wkt (p, 2,
+		 "ustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "5\"]],AUTHORITY[\"EPSG\",\"6131\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4131\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "06],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"3176\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 3177, "epsg", 3177, "LGD2006 / Libya TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_");
+    add_proj4text (p, 1,
+		   "0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,");
+    add_proj4text (p, 2, "-2.5764,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM\",GEOGCS[\"LGD2006\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Libyan_Geodetic_Datum_2006\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-");
+    add_srs_wkt (p, 3,
+		 "208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 8,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",17],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9965],PARAMETER[\"false_easting\",1000000],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"3177\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3178, "epsg", 3178, "GR96 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 18N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-75],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3178\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3179, "epsg", 3179, "GR96 / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 19N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-69],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3179\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3180, "epsg", 3180, "GR96 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 20N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-63],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3180\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3181, "epsg", 3181, "GR96 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 21N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-57],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3181\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3182, "epsg", 3182, "GR96 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 22N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-51],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3182\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3183, "epsg", 3183, "GR96 / UTM zone 23N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 23N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-45],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3183\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3184, "epsg", 3184, "GR96 / UTM zone 24N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 24N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-39],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3184\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3185, "epsg", 3185, "GR96 / UTM zone 25N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 25N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-33],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3185\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3186, "epsg", 3186, "GR96 / UTM zone 26N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 26N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-27],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3186\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3187, "epsg", 3187, "GR96 / UTM zone 27N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 27N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-21],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3187\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3188, "epsg", 3188, "GR96 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 28N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-15],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3188\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3189, "epsg", 3189, "GR96 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GR96 / UTM zone 29N\",GEOGCS[\"GR96\",DATUM[\"G");
+    add_srs_wkt (p, 1,
+		 "reenland_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 2,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6747\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4747\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-9],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"3189\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 3190, "epsg", 3190,
+		      "LGD2006 / Libya TM zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0");
+    add_proj4text (p, 2, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 5\",GEOGCS[\"LGD2006\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.99995],PARAMETER[\"false_easting\",200000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3190\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3191, "epsg", 3191,
+		      "LGD2006 / Libya TM zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 6\",GEOGCS[\"LGD2006\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",11],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.99995],PARAMETER[\"false_easting\",200000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3191\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3192, "epsg", 3192,
+		      "LGD2006 / Libya TM zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 7\",GEOGCS[\"LGD2006\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",13],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.99995],PARAMETER[\"false_easting\",200000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3192\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_09 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 3193, "epsg", 3193,
+		      "LGD2006 / Libya TM zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 8\",GEOGCS[\"LGD2006\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.99995],PARAMETER[\"false_easting\",200000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3193\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3194, "epsg", 3194,
+		      "LGD2006 / Libya TM zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 9\",GEOGCS[\"LGD2006\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",17],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.99995],PARAMETER[\"false_easting\",200000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3194\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3195, "epsg", 3195,
+		      "LGD2006 / Libya TM zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 10\",GEOGCS[\"LGD2006\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",0],PARAMETER[\"central_meridian\",19],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99995],PARAMETER[\"false_easting\",200000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3195");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3196, "epsg", 3196,
+		      "LGD2006 / Libya TM zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 11\",GEOGCS[\"LGD2006\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99995],PARAMETER[\"false_easting\",200000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3196");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3197, "epsg", 3197,
+		      "LGD2006 / Libya TM zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 12\",GEOGCS[\"LGD2006\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",0],PARAMETER[\"central_meridian\",23],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99995],PARAMETER[\"false_easting\",200000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3197");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3198, "epsg", 3198,
+		      "LGD2006 / Libya TM zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / Libya TM zone 13\",GEOGCS[\"LGD2006\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",0],PARAMETER[\"central_meridian\",25],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99995],PARAMETER[\"false_easting\",200000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3198");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3199, "epsg", 3199,
+		      "LGD2006 / UTM zone 32N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.87");
+    add_proj4text (p, 1, "8,-2.5764,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / UTM zone 32N\",GEOGCS[\"LGD2006\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internation");
+    add_srs_wkt (p, 2,
+		 "al 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWG");
+    add_srs_wkt (p, 3,
+		 "S84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",9],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 10,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3199\"],AXI");
+    add_srs_wkt (p, 12, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3200, "epsg", 3200, "FD58 / Iraq zone");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.99878");
+    add_proj4text (p, 1,
+		   "64078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"FD58 / Iraq zone\",GEOGCS[\"FD58\",DATUM[\"Fina");
+    add_srs_wkt (p, 1,
+		 "l_Datum_1958\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 2,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6132\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4132\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"L");
+    add_srs_wkt (p, 7,
+		 "ambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",32.5],PARAMETER[\"central_meridian\",45],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",0.9987864078],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",1500000],PARAMETER[\"false_northing\",1166200],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"3200\"],AXIS[\"Easting\",EAST],AXIS[\"N");
+    add_srs_wkt (p, 12, "orthing\",NORTH]]");
+    p = add_epsg_def (first, last, 3201, "epsg", 3201,
+		      "LGD2006 / UTM zone 33N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.87");
+    add_proj4text (p, 1, "8,-2.5764,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / UTM zone 33N\",GEOGCS[\"LGD2006\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internation");
+    add_srs_wkt (p, 2,
+		 "al 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWG");
+    add_srs_wkt (p, 3,
+		 "S84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",15],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3201\"],AX");
+    add_srs_wkt (p, 12, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3202, "epsg", 3202,
+		      "LGD2006 / UTM zone 34N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.87");
+    add_proj4text (p, 1, "8,-2.5764,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / UTM zone 34N\",GEOGCS[\"LGD2006\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internation");
+    add_srs_wkt (p, 2,
+		 "al 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWG");
+    add_srs_wkt (p, 3,
+		 "S84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",21],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3202\"],AX");
+    add_srs_wkt (p, 12, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3203, "epsg", 3203,
+		      "LGD2006 / UTM zone 35N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.87");
+    add_proj4text (p, 1, "8,-2.5764,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LGD2006 / UTM zone 35N\",GEOGCS[\"LGD2006\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"Internation");
+    add_srs_wkt (p, 2,
+		 "al 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWG");
+    add_srs_wkt (p, 3,
+		 "S84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",27],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3203\"],AX");
+    add_srs_wkt (p, 12, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3204, "epsg", 3204,
+		      "WGS 84 / SCAR IMW SP19-20");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.333333333");
+    add_proj4text (p, 1,
+		   "33334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SP19-20\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-60.66666666666666],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "63.33333333333334],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-66],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3204\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3205, "epsg", 3205,
+		      "WGS 84 / SCAR IMW SP21-22");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.333333333");
+    add_proj4text (p, 1,
+		   "33334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SP21-22\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-60.66666666666666],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "63.33333333333334],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-54],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3205\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3206, "epsg", 3206,
+		      "WGS 84 / SCAR IMW SP23-24");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.333333333");
+    add_proj4text (p, 1,
+		   "33334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SP23-24\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-60.66666666666666],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "63.33333333333334],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-42],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3206\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3207, "epsg", 3207,
+		      "WGS 84 / SCAR IMW SQ01-02");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ01-02\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-174],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3207\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3208, "epsg", 3208,
+		      "WGS 84 / SCAR IMW SQ19-20");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ19-20\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-66],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3208\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3209, "epsg", 3209,
+		      "WGS 84 / SCAR IMW SQ21-22");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ21-22\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-54],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3209\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3210, "epsg", 3210,
+		      "WGS 84 / SCAR IMW SQ37-38");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ37-38\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",42],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3210\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3211, "epsg", 3211,
+		      "WGS 84 / SCAR IMW SQ39-40");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ39-40\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",54],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3211\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3212, "epsg", 3212,
+		      "WGS 84 / SCAR IMW SQ41-42");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ41-42\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",66],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3212\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3213, "epsg", 3213,
+		      "WGS 84 / SCAR IMW SQ43-44");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ43-44\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",78],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3213\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3214, "epsg", 3214,
+		      "WGS 84 / SCAR IMW SQ45-46");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ45-46\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",90],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3214\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3215, "epsg", 3215,
+		      "WGS 84 / SCAR IMW SQ47-48");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ47-48\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",102],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3215\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3216, "epsg", 3216,
+		      "WGS 84 / SCAR IMW SQ49-50");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ49-50\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",114],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3216\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3217, "epsg", 3217,
+		      "WGS 84 / SCAR IMW SQ51-52");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ51-52\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",126],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3217\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3218, "epsg", 3218,
+		      "WGS 84 / SCAR IMW SQ53-54");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ53-54\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",138],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3218\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3219, "epsg", 3219,
+		      "WGS 84 / SCAR IMW SQ55-56");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ55-56\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",150],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3219\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3220, "epsg", 3220,
+		      "WGS 84 / SCAR IMW SQ57-58");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SQ57-58\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-64.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "67.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",162],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3220\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3221, "epsg", 3221,
+		      "WGS 84 / SCAR IMW SR13-14");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR13-14\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-102],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3221\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3222, "epsg", 3222,
+		      "WGS 84 / SCAR IMW SR15-16");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR15-16\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-90],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3222\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3223, "epsg", 3223,
+		      "WGS 84 / SCAR IMW SR17-18");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR17-18\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-78],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3223\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3224, "epsg", 3224,
+		      "WGS 84 / SCAR IMW SR19-20");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR19-20\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-66],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3224\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3225, "epsg", 3225,
+		      "WGS 84 / SCAR IMW SR27-28");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR27-28\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-18],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3225\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3226, "epsg", 3226,
+		      "WGS 84 / SCAR IMW SR29-30");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR29-30\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-6],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3226\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3227, "epsg", 3227,
+		      "WGS 84 / SCAR IMW SR31-32");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +da");
+    add_proj4text (p, 2, "tum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR31-32\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",6],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12,
+		 "SG\",\"3227\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3228, "epsg", 3228,
+		      "WGS 84 / SCAR IMW SR33-34");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR33-34\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",18],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3228\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3229, "epsg", 3229,
+		      "WGS 84 / SCAR IMW SR35-36");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR35-36\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",30],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3229\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3230, "epsg", 3230,
+		      "WGS 84 / SCAR IMW SR37-38");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR37-38\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",42],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3230\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3231, "epsg", 3231,
+		      "WGS 84 / SCAR IMW SR39-40");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR39-40\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",54],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3231\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3232, "epsg", 3232,
+		      "WGS 84 / SCAR IMW SR41-42");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR41-42\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",66],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3232\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3233, "epsg", 3233,
+		      "WGS 84 / SCAR IMW SR43-44");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR43-44\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",78],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3233\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3234, "epsg", 3234,
+		      "WGS 84 / SCAR IMW SR45-46");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR45-46\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",90],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3234\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3235, "epsg", 3235,
+		      "WGS 84 / SCAR IMW SR47-48");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR47-48\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",102],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3235\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3236, "epsg", 3236,
+		      "WGS 84 / SCAR IMW SR49-50");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR49-50\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",114],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3236\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3237, "epsg", 3237,
+		      "WGS 84 / SCAR IMW SR51-52");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR51-52\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",126],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3237\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3238, "epsg", 3238,
+		      "WGS 84 / SCAR IMW SR53-54");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR53-54\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",138],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3238\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3239, "epsg", 3239,
+		      "WGS 84 / SCAR IMW SR55-56");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR55-56\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",150],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3239\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3240, "epsg", 3240,
+		      "WGS 84 / SCAR IMW SR57-58");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR57-58\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",162],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3240\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3241, "epsg", 3241,
+		      "WGS 84 / SCAR IMW SR59-60");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SR59-60\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-68.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "71.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",174],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3241\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3242, "epsg", 3242,
+		      "WGS 84 / SCAR IMW SS04-06");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS04-06\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-153],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3242\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3243, "epsg", 3243,
+		      "WGS 84 / SCAR IMW SS07-09");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS07-09\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-135],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3243\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3244, "epsg", 3244,
+		      "WGS 84 / SCAR IMW SS10-12");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS10-12\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-117],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3244\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3245, "epsg", 3245,
+		      "WGS 84 / SCAR IMW SS13-15");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS13-15\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-99],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3245\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3246, "epsg", 3246,
+		      "WGS 84 / SCAR IMW SS16-18");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS16-18\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3246\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3247, "epsg", 3247,
+		      "WGS 84 / SCAR IMW SS19-21");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS19-21\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-63],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3247\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3248, "epsg", 3248,
+		      "WGS 84 / SCAR IMW SS25-27");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS25-27\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-27],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3248\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3249, "epsg", 3249,
+		      "WGS 84 / SCAR IMW SS28-30");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS28-30\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-9],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3249\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3250, "epsg", 3250,
+		      "WGS 84 / SCAR IMW SS31-33");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +da");
+    add_proj4text (p, 2, "tum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS31-33\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",9],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12,
+		 "SG\",\"3250\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3251, "epsg", 3251,
+		      "WGS 84 / SCAR IMW SS34-36");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS34-36\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",27],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3251\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3252, "epsg", 3252,
+		      "WGS 84 / SCAR IMW SS37-39");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS37-39\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",45],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3252\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3253, "epsg", 3253,
+		      "WGS 84 / SCAR IMW SS40-42");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS40-42\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",63],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3253\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3254, "epsg", 3254,
+		      "WGS 84 / SCAR IMW SS43-45");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS43-45\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",81],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3254\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3255, "epsg", 3255,
+		      "WGS 84 / SCAR IMW SS46-48");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS46-48\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",99],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3255\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3256, "epsg", 3256,
+		      "WGS 84 / SCAR IMW SS49-51");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS49-51\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",117],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3256\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3257, "epsg", 3257,
+		      "WGS 84 / SCAR IMW SS52-54");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS52-54\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",135],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3257\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3258, "epsg", 3258,
+		      "WGS 84 / SCAR IMW SS55-57");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS55-57\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",153],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3258\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3259, "epsg", 3259,
+		      "WGS 84 / SCAR IMW SS58-60");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SS58-60\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-72.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "75.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",171],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3259\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3260, "epsg", 3260,
+		      "WGS 84 / SCAR IMW ST01-04");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST01-04\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-168],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3260\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3261, "epsg", 3261,
+		      "WGS 84 / SCAR IMW ST05-08");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST05-08\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-144],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3261\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3262, "epsg", 3262,
+		      "WGS 84 / SCAR IMW ST09-12");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 ");
+    add_proj4text (p, 2, "+datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST09-12\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-120],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3262\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3263, "epsg", 3263,
+		      "WGS 84 / SCAR IMW ST13-16");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST13-16\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-96],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3263\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3264, "epsg", 3264,
+		      "WGS 84 / SCAR IMW ST17-20");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST17-20\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-72],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3264\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3265, "epsg", 3265,
+		      "WGS 84 / SCAR IMW ST21-24");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST21-24\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-48],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3265\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3266, "epsg", 3266,
+		      "WGS 84 / SCAR IMW ST25-28");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST25-28\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-24],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3266\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3267, "epsg", 3267,
+		      "WGS 84 / SCAR IMW ST29-32");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +da");
+    add_proj4text (p, 2, "tum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST29-32\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",0],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12,
+		 "SG\",\"3267\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3268, "epsg", 3268,
+		      "WGS 84 / SCAR IMW ST33-36");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST33-36\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",24],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3268\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3269, "epsg", 3269,
+		      "WGS 84 / SCAR IMW ST37-40");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST37-40\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",48],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3269\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3270, "epsg", 3270,
+		      "WGS 84 / SCAR IMW ST41-44");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST41-44\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",72],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3270\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3271, "epsg", 3271,
+		      "WGS 84 / SCAR IMW ST45-48");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 2, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST45-48\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",96],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3271\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3272, "epsg", 3272,
+		      "WGS 84 / SCAR IMW ST49-52");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST49-52\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",120],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3272\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3273, "epsg", 3273,
+		      "WGS 84 / SCAR IMW ST53-56");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST53-56\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",144],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3273\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3274, "epsg", 3274,
+		      "WGS 84 / SCAR IMW ST57-60");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW ST57-60\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert");
+    add_srs_wkt (p, 7,
+		 "_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 8,
+		 ",-76.66666666666667],PARAMETER[\"standard_parallel_2\",-");
+    add_srs_wkt (p, 9,
+		 "79.33333333333333],PARAMETER[\"latitude_of_origin\",-90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",168],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12,
+		 "EPSG\",\"3274\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3275, "epsg", 3275,
+		      "WGS 84 / SCAR IMW SU01-05");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU01-05\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-165],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3275");
+    add_srs_wkt (p, 11,
+		 "\"],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 3276, "epsg", 3276,
+		      "WGS 84 / SCAR IMW SU06-10");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU06-10\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-135],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3276");
+    add_srs_wkt (p, 11,
+		 "\"],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 3277, "epsg", 3277,
+		      "WGS 84 / SCAR IMW SU11-15");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU11-15\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-105],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3277");
+    add_srs_wkt (p, 11,
+		 "\"],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 3278, "epsg", 3278,
+		      "WGS 84 / SCAR IMW SU16-20");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU16-20\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-75],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3278\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3279, "epsg", 3279,
+		      "WGS 84 / SCAR IMW SU21-25");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU21-25\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-45],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3279\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3280, "epsg", 3280,
+		      "WGS 84 / SCAR IMW SU26-30");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU26-30\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-15],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3280\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3281, "epsg", 3281,
+		      "WGS 84 / SCAR IMW SU31-35");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU31-35\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",15],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3281\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3282, "epsg", 3282,
+		      "WGS 84 / SCAR IMW SU36-40");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU36-40\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",45],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3282\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3283, "epsg", 3283,
+		      "WGS 84 / SCAR IMW SU41-45");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU41-45\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",75],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3283\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3284, "epsg", 3284,
+		      "WGS 84 / SCAR IMW SU46-50");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU46-50\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",105],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3284\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3285, "epsg", 3285,
+		      "WGS 84 / SCAR IMW SU51-55");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU51-55\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",135],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3285\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3286, "epsg", 3286,
+		      "WGS 84 / SCAR IMW SU56-60");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SU56-60\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",165],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3286\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3287, "epsg", 3287,
+		      "WGS 84 / SCAR IMW SV01-10");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SV01-10\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-150],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3287");
+    add_srs_wkt (p, 11,
+		 "\"],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 3288, "epsg", 3288,
+		      "WGS 84 / SCAR IMW SV11-20");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SV11-20\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-90],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3288\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3289, "epsg", 3289,
+		      "WGS 84 / SCAR IMW SV21-30");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SV21-30\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",-30],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3289\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3290, "epsg", 3290,
+		      "WGS 84 / SCAR IMW SV31-40");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SV31-40\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",30],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3290\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3291, "epsg", 3291,
+		      "WGS 84 / SCAR IMW SV41-50");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SV41-50\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",90],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3291\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3292, "epsg", 3292,
+		      "WGS 84 / SCAR IMW SV51-60");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SV51-60\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",150],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3292\"");
+    add_srs_wkt (p, 11,
+		 "],AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3293, "epsg", 3293,
+		      "WGS 84 / SCAR IMW SW01-60");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0");
+    add_proj4text (p, 1,
+		   "=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / SCAR IMW SW01-60\",GEOGCS[\"WGS 84\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223");
+    add_srs_wkt (p, 2,
+		 "563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_S");
+    add_srs_wkt (p, 7,
+		 "tereographic\"],PARAMETER[\"latitude_of_origin\",-80.238");
+    add_srs_wkt (p, 8,
+		 "61111111111],PARAMETER[\"central_meridian\",0],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3293\"]");
+    add_srs_wkt (p, 11,
+		 ",AXIS[\"Easting\",UNKNOWN],AXIS[\"Northing\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3294, "epsg", 3294,
+		      "WGS 84 / USGS Transantarctic Mountains");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 2, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / USGS Transantarctic Mountains\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",63781");
+    add_srs_wkt (p, 2,
+		 "37,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standar");
+    add_srs_wkt (p, 8,
+		 "d_parallel_1\",-76.66666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",-79.33333333333333],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 10,
+		 "_origin\",-78],PARAMETER[\"central_meridian\",162],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",0],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3294\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3296, "epsg", 3296, "RGPF / UTM zone 5S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGPF / UTM zone 5S\",GEOGCS[\"RGPF\",DATUM[\"Re");
+    add_srs_wkt (p, 1,
+		 "seau_Geodesique_de_la_Polynesie_Francaise\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6687\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4687\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",1000000");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3296\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3297, "epsg", 3297, "RGPF / UTM zone 6S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGPF / UTM zone 6S\",GEOGCS[\"RGPF\",DATUM[\"Re");
+    add_srs_wkt (p, 1,
+		 "seau_Geodesique_de_la_Polynesie_Francaise\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6687\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4687\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "147],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",1000000");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3297\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3298, "epsg", 3298, "RGPF / UTM zone 7S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGPF / UTM zone 7S\",GEOGCS[\"RGPF\",DATUM[\"Re");
+    add_srs_wkt (p, 1,
+		 "seau_Geodesique_de_la_Polynesie_Francaise\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6687\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4687\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",1000000");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3298\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3299, "epsg", 3299, "RGPF / UTM zone 8S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGPF / UTM zone 8S\",GEOGCS[\"RGPF\",DATUM[\"Re");
+    add_srs_wkt (p, 1,
+		 "seau_Geodesique_de_la_Polynesie_Francaise\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6687\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4687\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",1000000");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3299\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3300, "epsg", 3300,
+		      "Estonian Coordinate System of 1992");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.5");
+    add_proj4text (p, 1,
+		   "1755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=");
+    add_proj4text (p, 2,
+		   "GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007");
+    add_proj4text (p, 3, ",-0.014 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Estonian Coordinate System of 1992\",GEOGCS[\"E");
+    add_srs_wkt (p, 1,
+		 "ST92\",DATUM[\"Estonia_1992\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6133\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4133");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_1\",59.33333333333334],PARAMETER[\"standar");
+    add_srs_wkt (p, 10,
+		 "d_parallel_2\",58],PARAMETER[\"latitude_of_origin\",57.5");
+    add_srs_wkt (p, 11,
+		 "1755393055556],PARAMETER[\"central_meridian\",24],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",6375000],AUTHORITY[\"EPSG\",\"3300\"],AXIS[\"X\",NORT");
+    add_srs_wkt (p, 14, "H],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3301, "epsg", 3301,
+		      "Estonian Coordinate System of 1997");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.5");
+    add_proj4text (p, 1,
+		   "1755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=");
+    add_proj4text (p, 2, "GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Estonian Coordinate System of 1997\",GEOGCS[\"E");
+    add_srs_wkt (p, 1,
+		 "ST97\",DATUM[\"Estonia_1997\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6180\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4180\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",59.33333333333334]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",58],PARAMETER[\"latit");
+    add_srs_wkt (p, 10,
+		 "ude_of_origin\",57.51755393055556],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",24],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_northing\",6375000],AUTHORITY[\"EPSG\",\"330");
+    add_srs_wkt (p, 13, "1\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3302, "epsg", 3302,
+		      "IGN63 Hiva Oa / UTM zone 7S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN63 Hiva Oa / UTM zone 7S\",GEOGCS[\"IGN63 Hi");
+    add_srs_wkt (p, 1,
+		 "va Oa\",DATUM[\"IGN63_Hiva_Oa\",SPHEROID[\"International");
+    add_srs_wkt (p, 2,
+		 " 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6689\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4689");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",-141],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",10000000],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3302\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 3303, "epsg", 3303,
+		      "Fatu Iva 72 / UTM zone 7S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,10");
+    add_proj4text (p, 1,
+		   "78.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fatu Iva 72 / UTM zone 7S\",GEOGCS[\"Fatu Iva 7");
+    add_srs_wkt (p, 1,
+		 "2\",DATUM[\"Fatu_Iva_72\",SPHEROID[\"International 1924\"");
+    add_srs_wkt (p, 2,
+		 ",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[347.1");
+    add_srs_wkt (p, 3,
+		 "03,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6688\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "688\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-141],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"3303\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 3304, "epsg", 3304,
+		      "Tahiti 79 / UTM zone 6S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tahiti 79 / UTM zone 6S\",GEOGCS[\"Tahiti 79\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Tahiti_79\",SPHEROID[\"International 1924\",6378");
+    add_srs_wkt (p, 2,
+		 "388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6690\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4690\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",-147],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 9,
+		 "ctor\",0.9996],PARAMETER[\"false_easting\",500000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 11,
+		 "304\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3305, "epsg", 3305,
+		      "Moorea 87 / UTM zone 6S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,14");
+    add_proj4text (p, 1,
+		   "9.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Moorea 87 / UTM zone 6S\",GEOGCS[\"Moorea 87\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Moorea_87\",SPHEROID[\"International 1924\",6378");
+    add_srs_wkt (p, 2,
+		 "388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[215.525,14");
+    add_srs_wkt (p, 3,
+		 "9.593,176.229,-3.2624,-1.692,-1.1571,10.4773],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6691\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4691\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12,
+		 "SG\",\"3305\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3306, "epsg", 3306,
+		      "Maupiti 83 / UTM zone 5S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86");
+    add_proj4text (p, 1, ".959,23.956,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Maupiti 83 / UTM zone 5S\",GEOGCS[\"Maupiti 83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Maupiti_83\",SPHEROID[\"International 1924\",63");
+    add_srs_wkt (p, 2,
+		 "78388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[217.037,");
+    add_srs_wkt (p, 3,
+		 "86.959,23.956,0,0,0,0],AUTHORITY[\"EPSG\",\"6692\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4692\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 11,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"3306\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3307, "epsg", 3307,
+		      "Nakhl-e Ghanem / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nakhl-e Ghanem / UTM zone 39N\",GEOGCS[\"Nakhl-");
+    add_srs_wkt (p, 1,
+		 "e Ghanem\",DATUM[\"Nakhl_e_Ghanem\",SPHEROID[\"WGS 84\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWG");
+    add_srs_wkt (p, 3,
+		 "S84[0,-0.15,0.68,0,0,0,0],AUTHORITY[\"EPSG\",\"6693\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4693\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",51],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"3307\"],AXIS[\"Eastin");
+    add_srs_wkt (p, 12, "g\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3308, "epsg", 3308, "GDA94 / NSW Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon");
+    add_proj4text (p, 1,
+		   "_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 2, ",0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / NSW Lambert\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",-30.75],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"standard_parallel_2\",-35.75],PARAMETER[\"lati");
+    add_srs_wkt (p, 10,
+		 "tude_of_origin\",-33.25],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 11,
+		 "147],PARAMETER[\"false_easting\",9300000],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_northing\",4500000],AUTHORITY[\"EPSG\",\"3308\"],AXI");
+    add_srs_wkt (p, 13, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3309, "epsg", 3309,
+		      "NAD27 / California Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_");
+    add_proj4text (p, 1,
+		   "0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California Albers\",GEOGCS[\"NAD27\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866");
+    add_srs_wkt (p, 2,
+		 "\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",34],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 9,
+		 "el_2\",40.5],PARAMETER[\"latitude_of_center\",0],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"longitude_of_center\",-120],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",0],PARAMETER[\"false_northing\",-4000000],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"3309\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3310, "epsg", 3310,
+		      "NAD83 / California Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_");
+    add_proj4text (p, 1,
+		   "0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California Albers\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",34],PARAMETER[\"standard_parallel_2\",40");
+    add_srs_wkt (p, 9,
+		 ".5],PARAMETER[\"latitude_of_center\",0],PARAMETER[\"long");
+    add_srs_wkt (p, 10,
+		 "itude_of_center\",-120],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",-4000000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"3310\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3311, "epsg", 3311,
+		      "NAD83(HARN) / California Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_");
+    add_proj4text (p, 1, "0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / California Albers\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",34],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",40.5],PARAMETER[\"latitude_of_center\"");
+    add_srs_wkt (p, 10,
+		 ",0],PARAMETER[\"longitude_of_center\",-120],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",0],PARAMETER[\"false_northing\",-4000000");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3311\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3312, "epsg", 3312, "CSG67 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"CSG67 / UTM zone 21N\",GEOGCS[\"CSG67\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Centre_Spatial_Guyanais_1967\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[-186,230,110,0,0,0,0],AUTHORITY[\"EPSG\",\"6623\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4623\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"3312\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3313, "epsg", 3313, "RGFG95 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 ");
+    add_proj4text (p, 1, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGFG95 / UTM zone 21N\",GEOGCS[\"RGFG95\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Reseau_Geodesique_Francais_Guyane_1995\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY[\"EPSG\",\"6624\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4624\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"3313\"],AXIS[\"Eas");
+    add_srs_wkt (p, 12, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3314, "epsg", 3314,
+		      "Katanga 1955 / Katanga Lambert (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x");
+    add_proj4text (p, 1,
+		   "_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.");
+    add_proj4text (p, 2, "95,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Katanga 1955 / Katanga Lambert (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Katanga 1955\",DATUM[\"Katanga_1955\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7008\"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4695\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",-6.5],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 10,
+		 "llel_2\",-11.5],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",26],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13,
+		 ",\"3314\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 14, "H]]");
+    p = add_epsg_def (first, last, 3315, "epsg", 3315,
+		      "Katanga 1955 / Katanga TM (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +");
+    add_proj4text (p, 2, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Katanga 1955 / Katanga TM (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Katanga 1955\",DATUM[\"Katanga_1955\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7008\"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "695\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",-9],PARAMETER[\"central_meridian\",26],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9998],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3315\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3316, "epsg", 3316,
+		      "Kasai 1953 / Congo TM zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kasai 1953 / Congo TM zone 22\",GEOGCS[\"Kasai ");
+    add_srs_wkt (p, 1,
+		 "1953\",DATUM[\"Kasai_1953\",SPHEROID[\"Clarke 1880 (RGS)");
+    add_srs_wkt (p, 2,
+		 "\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6696\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "696\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",22],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",10000000],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3316\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 12, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 3317, "epsg", 3317,
+		      "Kasai 1953 / Congo TM zone 24");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kasai 1953 / Congo TM zone 24\",GEOGCS[\"Kasai ");
+    add_srs_wkt (p, 1,
+		 "1953\",DATUM[\"Kasai_1953\",SPHEROID[\"Clarke 1880 (RGS)");
+    add_srs_wkt (p, 2,
+		 "\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6696\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "696\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",24],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",10000000],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3317\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 12, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 3318, "epsg", 3318,
+		      "IGC 1962 / Congo TM zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 12\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",12],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3318\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3319, "epsg", 3319,
+		      "IGC 1962 / Congo TM zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 14\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",14],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3319\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3320, "epsg", 3320,
+		      "IGC 1962 / Congo TM zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 16\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",16],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3320\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3321, "epsg", 3321,
+		      "IGC 1962 / Congo TM zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 18\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3321\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_10 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 3322, "epsg", 3322,
+		      "IGC 1962 / Congo TM zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 20\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",20],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3322\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3323, "epsg", 3323,
+		      "IGC 1962 / Congo TM zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 22\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",22],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3323\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3324, "epsg", 3324,
+		      "IGC 1962 / Congo TM zone 24");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 24\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3324\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3325, "epsg", 3325,
+		      "IGC 1962 / Congo TM zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 26\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",26],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3325\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3326, "epsg", 3326,
+		      "IGC 1962 / Congo TM zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 28\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3326\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3327, "epsg", 3327,
+		      "IGC 1962 / Congo TM zone 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGC 1962 / Congo TM zone 30\",GEOGCS[\"IGC 1962");
+    add_srs_wkt (p, 1,
+		 " 6th Parallel South\",DATUM[\"IGC_1962_Arc_of_the_6th_Pa");
+    add_srs_wkt (p, 2,
+		 "rallel_South\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6697\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4697\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",30],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3327\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3328, "epsg", 3328,
+		      "Pulkovo 1942(58) / GUGiK-80");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / GUGiK-80\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",52.16666666666666],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",19.16666666666667],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".999714],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",500000],AUTHORITY[\"EPSG\",\"3328\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3329, "epsg", 3329,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",5500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3329\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3330, "epsg", 3330,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",6500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3330\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3331, "epsg", 3331,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",7500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3331\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3332, "epsg", 3332,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",8500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3332\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3333, "epsg", 3333,
+		      "Pulkovo 1942(58) / Gauss-Kruger zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Gauss-Kruger zone 3\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",3500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3333\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3334, "epsg", 3334,
+		      "Pulkovo 1942(58) / Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Gauss-Kruger zone 4\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",4500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3334\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3335, "epsg", 3335,
+		      "Pulkovo 1942(58) / Gauss-Kruger zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Gauss-Kruger zone 5\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",5500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3335\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3336, "epsg", 3336,
+		      "IGN 1962 Kerguelen / UTM zone 42S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,");
+    add_proj4text (p, 1, "103,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN 1962 Kerguelen / UTM zone 42S\",GEOGCS[\"IG");
+    add_srs_wkt (p, 1,
+		 "N 1962 Kerguelen\",DATUM[\"IGN_1962_Kerguelen\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7022\"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6698\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4698\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",69],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"333");
+    add_srs_wkt (p, 12,
+		 "6\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3337, "epsg", 3337,
+		      "Le Pouce 1934 / Mauritius Grid");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.195069444");
+    add_proj4text (p, 1,
+		   "44445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=");
+    add_proj4text (p, 2,
+		   "1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0");
+    add_proj4text (p, 3, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Le Pouce 1934 / Mauritius Grid\",GEOGCS[\"Le Po");
+    add_srs_wkt (p, 1,
+		 "uce 1934\",DATUM[\"Le_Pouce_1934\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 2,
+		 "0 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-770.1,158.4,-498.2,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6699\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4699\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"L");
+    add_srs_wkt (p, 8,
+		 "ambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",-20.19506944444445],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",57.52182777777778],PARAMETER[\"scale_factor\",1],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",1000000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",1000000],AUTHORITY[\"EPSG\",\"3337\"],AXIS[\"Easting");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3338, "epsg", 3338, "NAD83 / Alaska Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska Albers\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 8,
+		 "rallel_1\",55],PARAMETER[\"standard_parallel_2\",65],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"latitude_of_center\",50],PARAMETER[\"longitude_");
+    add_srs_wkt (p, 10,
+		 "of_center\",-154],PARAMETER[\"false_easting\",0],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3338\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3339, "epsg", 3339,
+		      "IGCB 1955 / Congo TM zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGCB 1955 / Congo TM zone 12\",GEOGCS[\"IGCB 19");
+    add_srs_wkt (p, 1,
+		 "55\",DATUM[\"Institut_Geographique_du_Congo_Belge_1955\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7012\"]],TOWGS84[-79.9,-158,-168.9,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6701\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4701\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",12");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"3339\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3340, "epsg", 3340,
+		      "IGCB 1955 / Congo TM zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGCB 1955 / Congo TM zone 14\",GEOGCS[\"IGCB 19");
+    add_srs_wkt (p, 1,
+		 "55\",DATUM[\"Institut_Geographique_du_Congo_Belge_1955\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7012\"]],TOWGS84[-79.9,-158,-168.9,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6701\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4701\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",14");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"3340\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3341, "epsg", 3341,
+		      "IGCB 1955 / Congo TM zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGCB 1955 / Congo TM zone 16\",GEOGCS[\"IGCB 19");
+    add_srs_wkt (p, 1,
+		 "55\",DATUM[\"Institut_Geographique_du_Congo_Belge_1955\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7012\"]],TOWGS84[-79.9,-158,-168.9,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6701\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4701\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",16");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"3341\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3342, "epsg", 3342,
+		      "IGCB 1955 / UTM zone 33S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-");
+    add_proj4text (p, 1, "158,-168.9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGCB 1955 / UTM zone 33S\",GEOGCS[\"IGCB 1955\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Institut_Geographique_du_Congo_Belge_1955\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7012\"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6701\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4701\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",15],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",10000000],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"3342\"],AXIS[\"Easting\",EAST],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH]]");
+    p = add_epsg_def (first, last, 3343, "epsg", 3343,
+		      "Mauritania 1999 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mauritania 1999 / UTM zone 28N\",GEOGCS[\"Mauri");
+    add_srs_wkt (p, 1,
+		 "tania 1999\",DATUM[\"Mauritania_1999\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6702\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4702\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-15],PARAMETER[\"scale_factor\",0.9996]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3343\"],AXIS[\"Easting");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3344, "epsg", 3344,
+		      "Mauritania 1999 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mauritania 1999 / UTM zone 29N\",GEOGCS[\"Mauri");
+    add_srs_wkt (p, 1,
+		 "tania 1999\",DATUM[\"Mauritania_1999\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6702\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4702\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 11,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"3344\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3345, "epsg", 3345,
+		      "Mauritania 1999 / UTM zone 30N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mauritania 1999 / UTM zone 30N\",GEOGCS[\"Mauri");
+    add_srs_wkt (p, 1,
+		 "tania 1999\",DATUM[\"Mauritania_1999\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6702\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4702\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 11,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"3345\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3346, "epsg", 3346, "LKS94 / Lithuania TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"LKS94 / Lithuania TM\",GEOGCS[\"LKS94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Lithuania_1994_ETRS89\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 2,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6126\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4669\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",24],PARAMETER[\"scale_factor\",0.9998],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"3346\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 12, "ST]]");
+    p = add_epsg_def (first, last, 3347, "epsg", 3347,
+		      "NAD83 / Statistics Canada Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-9");
+    add_proj4text (p, 1,
+		   "1.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 ");
+    add_proj4text (p, 2, "+datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Statistics Canada Lambert\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"standard_parallel_1\",49],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",77],PARAMETER[\"latitude_of_origin\",63.390675]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"central_meridian\",-91.86666666666666],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",6200000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",3000000],AUTHORITY[\"EPSG\",\"3347\"],AXIS[\"Easti");
+    add_srs_wkt (p, 13, "ng\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3348, "epsg", 3348,
+		      "NAD83(CSRS) / Statistics Canada Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-9");
+    add_proj4text (p, 1,
+		   "1.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Statistics Canada Lambert\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Confo");
+    add_srs_wkt (p, 8,
+		 "rmal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"standard_parallel_2\",77],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",63.390675],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-91.86666666666666],PARAMETER[\"false_easting\",6200000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",3000000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13,
+		 "\",\"3348\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 3349, "epsg", 3349,
+		      "WGS 84 / PDC Mercator (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +");
+    add_proj4text (p, 1, "datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / PDC Mercator (deprecated)\",GEOGCS[\"W");
+    add_srs_wkt (p, 1,
+		 "GS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,2");
+    add_srs_wkt (p, 2,
+		 "98.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Mercator_1SP\"],PARAMETER[\"central_meridian\",-150],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 9,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 10,
+		 "3349\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 11, "");
+    p = add_epsg_def (first, last, 3350, "epsg", 3350,
+		      "Pulkovo 1942 / CS63 zone C0");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone C0\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.1]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",21.95],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",1],PARAMETER[\"false_easting\",250000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3350\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3351, "epsg", 3351,
+		      "Pulkovo 1942 / CS63 zone C1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone C1\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.1]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",24.95],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",1],PARAMETER[\"false_easting\",1250000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3351\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3352, "epsg", 3352,
+		      "Pulkovo 1942 / CS63 zone C2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / CS63 zone C2\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassowsky 1940");
+    add_srs_wkt (p, 2,
+		 "\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[2");
+    add_srs_wkt (p, 3,
+		 "3.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0.1]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",27.95],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",1],PARAMETER[\"false_easting\",2250000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3352\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3353, "epsg", 3353,
+		      "Mhast (onshore) / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mhast (onshore) / UTM zone 32S\",GEOGCS[\"Mhast");
+    add_srs_wkt (p, 1,
+		 " (onshore)\",DATUM[\"Mhast_onshore\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6704\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4704\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",10000000],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3353\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 12, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 3354, "epsg", 3354,
+		      "Mhast (offshore) / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mhast (offshore) / UTM zone 32S\",GEOGCS[\"Mhas");
+    add_srs_wkt (p, 1,
+		 "t (offshore)\",DATUM[\"Mhast_offshore\",SPHEROID[\"Inter");
+    add_srs_wkt (p, 2,
+		 "national 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6705\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4705\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",9],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",10000000],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"3354\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 3355, "epsg", 3355,
+		      "Egypt Gulf of Suez S-650 TL / Red Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=81");
+    add_proj4text (p, 1,
+		   "0000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Egypt Gulf of Suez S-650 TL / Red Belt\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Egypt Gulf of Suez S-650 TL\",DATUM[\"Egypt_Gulf_of_S");
+    add_srs_wkt (p, 2,
+		 "uez_S_650_TL\",SPHEROID[\"Helmert 1906\",6378200,298.3,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7020\"]],TOWGS84[-146.21,112.63,4.05");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6706\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4706\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"latitude_of_origin\",30],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",31],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",615000],PARAMETER[\"false_northing\",810000],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"3355\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3356, "epsg", 3356,
+		      "Grand Cayman 1959 / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138");
+    add_proj4text (p, 1, ".8,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Grand Cayman 1959 / UTM zone 17N\",GEOGCS[\"Gra");
+    add_srs_wkt (p, 1,
+		 "nd Cayman 1959\",DATUM[\"Grand_Cayman_1959\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7008\"]],TOWGS84[67.8,106.1,138.8,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6723\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4723");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"3356\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 3357, "epsg", 3357,
+		      "Little Cayman 1961 / UTM zone 17N");
+    add_proj4text (p, 0, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Little Cayman 1961 / UTM zone 17N\",GEOGCS[\"Li");
+    add_srs_wkt (p, 1,
+		 "ttle Cayman 1961\",DATUM[\"Little_Cayman_1961\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6726\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4726\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3357\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3358, "epsg", 3358,
+		      "NAD83(HARN) / North Carolina");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / North Carolina\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",36.1666666666666");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"standard_parallel_2\",34.33333333333334],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",33.75],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-79],PARAMETER[\"false_easting\",609601.2");
+    add_srs_wkt (p, 12,
+		 "2],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3358\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3359, "epsg", 3359,
+		      "NAD83(HARN) / North Carolina (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=GRS80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / North Carolina (ftUS) (deprecated");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_R");
+    add_srs_wkt (p, 2,
+		 "egional_Network\",SPHEROID[\"GRS 1980\",6378137,298.2572");
+    add_srs_wkt (p, 3,
+		 "22101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6152\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foo");
+    add_srs_wkt (p, 7,
+		 "t\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]],PROJECTION[\"La");
+    add_srs_wkt (p, 8,
+		 "mbert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 9,
+		 "el_1\",36.16666666666666],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "2\",34.33333333333334],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 11,
+		 "33.75],PARAMETER[\"central_meridian\",-79],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",2000004.000008],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 13,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3359\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3360, "epsg", 3360,
+		      "NAD83(HARN) / South Carolina");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31");
+    add_proj4text (p, 1,
+		   ".83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / South Carolina\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",34.8333333333333");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",32.5],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",31.83333333333333],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-81],PARAMETER[\"false_easting\",609600],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3360");
+    add_srs_wkt (p, 13, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3361, "epsg", 3361,
+		      "NAD83(HARN) / South Carolina (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31");
+    add_proj4text (p, 1,
+		   ".83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / South Carolina (ft)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"foot\",0.3048,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9002\"]],PROJECTION[\"Lambert_Conforma");
+    add_srs_wkt (p, 8,
+		 "l_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.8333");
+    add_srs_wkt (p, 9,
+		 "3333333334],PARAMETER[\"standard_parallel_2\",32.5],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",31.83333333333333],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-81],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"3361\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3362, "epsg", 3362,
+		      "NAD83(HARN) / Pennsylvania North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=4");
+    add_proj4text (p, 1,
+		   "0.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Pennsylvania North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",41.95],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_2\",40.88333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",40.16666666666666],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-77.75],PARAMETER[\"false_easting\",60000");
+    add_srs_wkt (p, 12,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3362\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3363, "epsg", 3363,
+		      "NAD83(HARN) / Pennsylvania North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=4");
+    add_proj4text (p, 1,
+		   "0.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Pennsylvania North (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_N");
+    add_srs_wkt (p, 2,
+		 "etwork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey f");
+    add_srs_wkt (p, 7,
+		 "oot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",41.95],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 10,
+		 "l_2\",40.88333333333333],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",40.16666666666666],PARAMETER[\"central_meridian\",-77.7");
+    add_srs_wkt (p, 12,
+		 "5],PARAMETER[\"false_easting\",1968500],PARAMETER[\"fals");
+    add_srs_wkt (p, 13,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3363\"],AXIS[\"X\",");
+    add_srs_wkt (p, 14, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3364, "epsg", 3364,
+		      "NAD83(HARN) / Pennsylvania South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Pennsylvania South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",40.9666666666666");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"standard_parallel_2\",39.93333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",39.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-77.75],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",600000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"3364\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3365, "epsg", 3365,
+		      "NAD83(HARN) / Pennsylvania South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Pennsylvania South (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_N");
+    add_srs_wkt (p, 2,
+		 "etwork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey f");
+    add_srs_wkt (p, 7,
+		 "oot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",40.96666666666667],PARAMETER[\"stan");
+    add_srs_wkt (p, 10,
+		 "dard_parallel_2\",39.93333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 11,
+		 "e_of_origin\",39.33333333333334],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 12,
+		 "idian\",-77.75],PARAMETER[\"false_easting\",1968500],PAR");
+    add_srs_wkt (p, 13,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3365\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3366, "epsg", 3366,
+		      "Hong Kong 1963 Grid System (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=22.31213333333334 +lon_0=114.178555555");
+    add_proj4text (p, 1,
+		   "5556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=63");
+    add_proj4text (p, 2,
+		   "78293.645208759 +b=6356617.987679838 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hong Kong 1963 Grid System (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Hong Kong 1963\",DATUM[\"Hong_Kong_1963\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1858\",6378293.645208759,294.2606763692569,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7007\"]],AUTHORITY[\"EPSG\",\"6738\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4738\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Cassini_Soldner\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",22.31213333333334],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"central_meridian\",114.1785555555556],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",40243.57775604237],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",19069.93351512578],AUTHORITY[\"EPSG\",\"3366");
+    add_srs_wkt (p, 12, "\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3367, "epsg", 3367,
+		      "IGN Astro 1960 / UTM zone 28N");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN Astro 1960 / UTM zone 28N\",GEOGCS[\"IGN As");
+    add_srs_wkt (p, 1,
+		 "tro 1960\",DATUM[\"IGN_Astro_1960\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "80 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6700\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4700\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-1");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3367\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 12, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 3368, "epsg", 3368,
+		      "IGN Astro 1960 / UTM zone 29N");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN Astro 1960 / UTM zone 29N\",GEOGCS[\"IGN As");
+    add_srs_wkt (p, 1,
+		 "tro 1960\",DATUM[\"IGN_Astro_1960\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "80 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6700\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4700\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-9");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"3368\"],AXIS[\"Easting\",EAST],AXIS[\"Nort");
+    add_srs_wkt (p, 12, "hing\",NORTH]]");
+    p = add_epsg_def (first, last, 3369, "epsg", 3369,
+		      "IGN Astro 1960 / UTM zone 30N");
+    add_proj4text (p, 0, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGN Astro 1960 / UTM zone 30N\",GEOGCS[\"IGN As");
+    add_srs_wkt (p, 1,
+		 "tro 1960\",DATUM[\"IGN_Astro_1960\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "80 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6700\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4700\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-3");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"3369\"],AXIS[\"Easting\",EAST],AXIS[\"Nort");
+    add_srs_wkt (p, 12, "hing\",NORTH]]");
+    p = add_epsg_def (first, last, 3370, "epsg", 3370, "NAD27 / UTM zone 59N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 59N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",171],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"3370\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 3371, "epsg", 3371, "NAD27 / UTM zone 60N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 60N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",177],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"3371\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 3372, "epsg", 3372, "NAD83 / UTM zone 59N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 59N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "3372\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3373, "epsg", 3373, "NAD83 / UTM zone 60N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 60N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "3373\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3374, "epsg", 3374, "FD54 / UTM zone 29N");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"FD54 / UTM zone 29N\",GEOGCS[\"FD54\",DATUM[\"F");
+    add_srs_wkt (p, 1,
+		 "aroe_Datum_1954\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 2,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6741\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4741\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 9,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3374\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3375, "epsg", 3375,
+		      "GDM2000 / Peninsula RSO");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.02579646666");
+    add_proj4text (p, 1,
+		   "66 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Peninsula RSO\",GEOGCS[\"GDM2000\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_center\",4],PARAMETER[\"longitude_of_center\"");
+    add_srs_wkt (p, 9,
+		 ",102.25],PARAMETER[\"azimuth\",323.0257964666666],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"rectified_grid_angle\",323.1301023611111],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"scale_factor\",0.99984],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "804671],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13,
+		 "\",\"3375\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 3376, "epsg", 3376,
+		      "GDM2000 / East Malaysia BRSO");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.9");
+    add_proj4text (p, 1, "9984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / East Malaysia BRSO\",GEOGCS[\"GDM2000");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_center\",4],PARAMETER[\"longitude_of_cen");
+    add_srs_wkt (p, 9,
+		 "ter\",115],PARAMETER[\"azimuth\",53.31580995],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"rectified_grid_angle\",53.13010236111111],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "scale_factor\",0.99984],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3376");
+    add_srs_wkt (p, 13, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3377, "epsg", 3377, "GDM2000 / Johor Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=2.121679744444445 +lon_0=103.427936236");
+    add_proj4text (p, 1,
+		   "1111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Johor Grid\",GEOGCS[\"GDM2000\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",2.121679744444445],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",103.4279362361111],PARAMETER[\"false_easting\",-14810");
+    add_srs_wkt (p, 10,
+		 ".562],PARAMETER[\"false_northing\",8758.32],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"3377\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 3378, "epsg", 3378,
+		      "GDM2000 / Sembilan and Melaka Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=2.682347636111111 +lon_0=101.974905041");
+    add_proj4text (p, 1,
+		   "6667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Sembilan and Melaka Grid\",GEOGCS[\"G");
+    add_srs_wkt (p, 1,
+		 "DM2000\",DATUM[\"Geodetic_Datum_of_Malaysia_2000\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"latitude_of_origin\",2.682347636111111],PARAMETER[\"ce");
+    add_srs_wkt (p, 9,
+		 "ntral_meridian\",101.9749050416667],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 10,
+		 "sting\",3673.785],PARAMETER[\"false_northing\",-4240.573");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"3378\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3379, "epsg", 3379, "GDM2000 / PahangGrid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=3.769388088888889 +lon_0=102.368298983");
+    add_proj4text (p, 1,
+		   "3333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / PahangGrid\",GEOGCS[\"GDM2000\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",3.769388088888889],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",102.3682989833333],PARAMETER[\"false_easting\",-7368.");
+    add_srs_wkt (p, 10,
+		 "228],PARAMETER[\"false_northing\",6485.858],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"3379\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 3380, "epsg", 3380,
+		      "GDM2000 / Selangor Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x");
+    add_proj4text (p, 1,
+		   "_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Selangor Grid\",GEOGCS[\"GDM2000\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_origin\",3.68464905],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "01.3891079138889],PARAMETER[\"false_easting\",-34836.161");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_northing\",56464.049],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"3380\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 3381, "epsg", 3381,
+		      "GDM2000 / Terengganu Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19");
+    add_proj4text (p, 1,
+		   "594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Terengganu Grid\",GEOGCS[\"GDM2000\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitud");
+    add_srs_wkt (p, 8,
+		 "e_of_origin\",4.9762852],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "103.070275625],PARAMETER[\"false_easting\",19594.245],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",3371.895],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"3381\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 3382, "epsg", 3382, "GDM2000 / Pinang Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=5.421517541666667 +lon_0=100.344376963");
+    add_proj4text (p, 1,
+		   "8889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Pinang Grid\",GEOGCS[\"GDM2000\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS 198");
+    add_srs_wkt (p, 2,
+		 "0\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 8,
+		 "f_origin\",5.421517541666667],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",100.3443769638889],PARAMETER[\"false_easting\",-23.");
+    add_srs_wkt (p, 10,
+		 "414],PARAMETER[\"false_northing\",62.283],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"3382\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 3383, "epsg", 3383,
+		      "GDM2000 / Kedah and Perlis Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=5.964672713888889 +lon_0=100.636371111");
+    add_proj4text (p, 1, "1111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Kedah and Perlis Grid\",GEOGCS[\"GDM2");
+    add_srs_wkt (p, 1,
+		 "000\",DATUM[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",5.964672713888889],PARAMETER[\"centr");
+    add_srs_wkt (p, 9,
+		 "al_meridian\",100.6363711111111],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11,
+		 "\",\"3383\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NO");
+    add_srs_wkt (p, 12, "RTH]]");
+    p = add_epsg_def (first, last, 3384, "epsg", 3384, "GDM2000 / Perak Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=4.859063022222222 +lon_0=100.815410586");
+    add_proj4text (p, 1,
+		   "1111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Perak Grid\",GEOGCS[\"GDM2000\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",4.859063022222222],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",100.8154105861111],PARAMETER[\"false_easting\",-1.769");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_northing\",133454.779],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"3384\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 3385, "epsg", 3385,
+		      "GDM2000 / Kelantan Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=5.972543658333334 +lon_0=102.295241669");
+    add_proj4text (p, 1,
+		   "4444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDM2000 / Kelantan Grid\",GEOGCS[\"GDM2000\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Geodetic_Datum_of_Malaysia_2000\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6742\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4742\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Cassini_Soldner\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_origin\",5.972543658333334],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",102.2952416694444],PARAMETER[\"false_easting\",132");
+    add_srs_wkt (p, 10,
+		 "27.851],PARAMETER[\"false_northing\",8739.894],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3385\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 3386, "epsg", 3386, "KKJ / Finland zone 0");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KKJ / Finland zone 0\",GEOGCS[\"KKJ\",DATUM[\"K");
+    add_srs_wkt (p, 1,
+		 "artastokoordinaattijarjestelma_1966\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6123\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4123\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",18],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"3386\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3387, "epsg", 3387, "KKJ / Finland zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KKJ / Finland zone 5\",GEOGCS[\"KKJ\",DATUM[\"K");
+    add_srs_wkt (p, 1,
+		 "artastokoordinaattijarjestelma_1966\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6123\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4123\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",0],PARAMETER[\"central_meridian\",33],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"3387\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3388, "epsg", 3388,
+		      "Pulkovo 1942 / Caspian Sea Mercator");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +un");
+    add_proj4text (p, 1, "its=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Caspian Sea Mercator\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",51],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3388\"],AXIS[\"none\",NORTH],AXIS[\"none\",EAST]]");
+    p = add_epsg_def (first, last, 3389, "epsg", 3389,
+		      "Pulkovo 1942 / 3-degree Gauss-Kruger zone 60");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / 3-degree Gauss-Kruger zone 60\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",180],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",60");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"3389\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3390, "epsg", 3390,
+		      "Pulkovo 1995 / 3-degree Gauss-Kruger zone 60");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / 3-degree Gauss-Kruger zone 60\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",180],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",60");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"3390\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3391, "epsg", 3391,
+		      "Karbala 1979 / UTM zone 37N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,21");
+    add_proj4text (p, 1, "8.7,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Karbala 1979 / UTM zone 37N\",GEOGCS[\"Karbala ");
+    add_srs_wkt (p, 1,
+		 "1979\",DATUM[\"Karbala_1979\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "743\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4743\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 8,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",39],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3391\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3392, "epsg", 3392,
+		      "Karbala 1979 / UTM zone 38N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,21");
+    add_proj4text (p, 1, "8.7,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Karbala 1979 / UTM zone 38N\",GEOGCS[\"Karbala ");
+    add_srs_wkt (p, 1,
+		 "1979\",DATUM[\"Karbala_1979\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "743\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4743\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 8,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",45],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3392\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3393, "epsg", 3393,
+		      "Karbala 1979 / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,21");
+    add_proj4text (p, 1, "8.7,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Karbala 1979 / UTM zone 39N\",GEOGCS[\"Karbala ");
+    add_srs_wkt (p, 1,
+		 "1979\",DATUM[\"Karbala_1979\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "743\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4743\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 8,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",51],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3393\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3394, "epsg", 3394,
+		      "Nahrwan 1934 / Iraq zone");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.99878");
+    add_proj4text (p, 1,
+		   "64078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nahrwan 1934 / Iraq zone\",GEOGCS[\"Nahrwan 193");
+    add_srs_wkt (p, 1,
+		 "4\",DATUM[\"Nahrwan_1934\",SPHEROID[\"Clarke 1880 (RGS)\"");
+    add_srs_wkt (p, 2,
+		 ",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6744\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"474");
+    add_srs_wkt (p, 6,
+		 "4\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",32.5],PARAMETER[\"central_meridian\",4");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9987864078],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",1500000],PARAMETER[\"false_northing\",11");
+    add_srs_wkt (p, 11,
+		 "66200],AUTHORITY[\"EPSG\",\"3394\"],AXIS[\"Easting\",EAS");
+    add_srs_wkt (p, 12, "T],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3395, "epsg", 3395,
+		      "WGS 84 / World Mercator");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +dat");
+    add_proj4text (p, 1, "um=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / World Mercator\",GEOGCS[\"WGS 84\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.25722356");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"632");
+    add_srs_wkt (p, 3,
+		 "6\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercator_1");
+    add_srs_wkt (p, 7,
+		 "SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scal");
+    add_srs_wkt (p, 8,
+		 "e_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3395\"],AXIS[\"");
+    add_srs_wkt (p, 10, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3396, "epsg", 3396,
+		      "PD/83 / 3-degree Gauss-Kruger zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PD/83 / 3-degree Gauss-Kruger zone 3\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "PD/83\",DATUM[\"Potsdam_Datum_83\",SPHEROID[\"Bessel 184");
+    add_srs_wkt (p, 2,
+		 "1\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6746\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4746\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",9],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",3");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"3396\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3397, "epsg", 3397,
+		      "PD/83 / 3-degree Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PD/83 / 3-degree Gauss-Kruger zone 4\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "PD/83\",DATUM[\"Potsdam_Datum_83\",SPHEROID[\"Bessel 184");
+    add_srs_wkt (p, 2,
+		 "1\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6746\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4746\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",12],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "4500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11, "G\",\"3397\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3398, "epsg", 3398,
+		      "RD/83 / 3-degree Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RD/83 / 3-degree Gauss-Kruger zone 4\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "RD/83\",DATUM[\"Rauenberg_Datum_83\",SPHEROID[\"Bessel 1");
+    add_srs_wkt (p, 2,
+		 "841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6745\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4745\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",12],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",4500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"3398\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3399, "epsg", 3399,
+		      "RD/83 / 3-degree Gauss-Kruger zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RD/83 / 3-degree Gauss-Kruger zone 5\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "RD/83\",DATUM[\"Rauenberg_Datum_83\",SPHEROID[\"Bessel 1");
+    add_srs_wkt (p, 2,
+		 "841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6745\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4745\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",15],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",5500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"3399\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3400, "epsg", 3400,
+		      "NAD83 / Alberta 10-TM (Forest)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alberta 10-TM (Forest)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-115],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",0.9992],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3400\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 3401, "epsg", 3401,
+		      "NAD83 / Alberta 10-TM (Resource)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alberta 10-TM (Resource)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",-115");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9992],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"3401\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 3402, "epsg", 3402,
+		      "NAD83(CSRS) / Alberta 10-TM (Forest)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Alberta 10-TM (Forest)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-115],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "92],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3402\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3403, "epsg", 3403,
+		      "NAD83(CSRS) / Alberta 10-TM (Resource)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Alberta 10-TM (Resource)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-115],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9992],PARAMETER[\"false_easting\",0],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3403\"],AXIS[\"Easting");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3404, "epsg", 3404,
+		      "NAD83(HARN) / North Carolina (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / North Carolina (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",36.16666666666666],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",34.33333333333334],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",33.75],PARAMETER[\"central_meridian\",-79],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_easting\",2000000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 13,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3404\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 14, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3405, "epsg", 3405,
+		      "VN-2000 / UTM zone 48N");
+    add_proj4text (p, 0, "+proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"VN-2000 / UTM zone 48N\",GEOGCS[\"VN-2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Vietnam_2000\",SPHEROID[\"WGS 84\",6378137,298.2572");
+    add_srs_wkt (p, 2,
+		 "23563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6756\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4756\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",105],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3405\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3406, "epsg", 3406,
+		      "VN-2000 / UTM zone 49N");
+    add_proj4text (p, 0, "+proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"VN-2000 / UTM zone 49N\",GEOGCS[\"VN-2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Vietnam_2000\",SPHEROID[\"WGS 84\",6378137,298.2572");
+    add_srs_wkt (p, 2,
+		 "23563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6756\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4756\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",111],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3406\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3407, "epsg", 3407,
+		      "Hong Kong 1963 Grid System");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=22.31213333333334 +lon_0=114.178555555");
+    add_proj4text (p, 1,
+		   "5556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=63");
+    add_proj4text (p, 2,
+		   "78293.645208759 +b=6356617.987679838 +to_meter=0.3047972");
+    add_proj4text (p, 3, "654 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hong Kong 1963 Grid System\",GEOGCS[\"Hong Kong");
+    add_srs_wkt (p, 1,
+		 " 1963\",DATUM[\"Hong_Kong_1963\",SPHEROID[\"Clarke 1858\"");
+    add_srs_wkt (p, 2,
+		 ",6378293.645208759,294.2606763692569,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7007\"]],AUTHORITY[\"EPSG\",\"6738\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4738\"]],UNIT[\"Clarke's foot\",0.304797265");
+    add_srs_wkt (p, 7,
+		 "4,AUTHORITY[\"EPSG\",\"9005\"]],PROJECTION[\"Cassini_Sol");
+    add_srs_wkt (p, 8,
+		 "dner\"],PARAMETER[\"latitude_of_origin\",22.312133333333");
+    add_srs_wkt (p, 9,
+		 "34],PARAMETER[\"central_meridian\",114.1785555555556],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",132033.92],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",62565.96],AUTHORITY[\"EPSG\",\"3407\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3408, "epsg", 3408, "unnamed");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +");
+    add_proj4text (p, 1, "b=6371228 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"un");
+    add_srs_wkt (p, 1,
+		 "known\",SPHEROID[\"unnamed\",6371228,0]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 2,
+		 "ich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION");
+    add_srs_wkt (p, 3,
+		 "[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 4,
+		 "of_center\",90],PARAMETER[\"longitude_of_center\",0],PAR");
+    add_srs_wkt (p, 5,
+		 "AMETER[\"false_easting\",0],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 6, ",0],UNIT[\"Meter\",1],AUTHORITY[\"EPSG\",\"3408\"]]");
+    p = add_epsg_def (first, last, 3409, "epsg", 3409, "unnamed");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 ");
+    add_proj4text (p, 1, "+b=6371228 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"un");
+    add_srs_wkt (p, 1,
+		 "known\",SPHEROID[\"unnamed\",6371228,0]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 2,
+		 "ich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION");
+    add_srs_wkt (p, 3,
+		 "[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 4,
+		 "of_center\",-90],PARAMETER[\"longitude_of_center\",0],PA");
+    add_srs_wkt (p, 5,
+		 "RAMETER[\"false_easting\",0],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 6, ",0],UNIT[\"Meter\",1],AUTHORITY[\"EPSG\",\"3409\"]]");
+    p = add_epsg_def (first, last, 3410, "epsg", 3410,
+		      "NSIDC EASE-Grid Global");
+    add_proj4text (p, 0,
+		   "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +");
+    add_proj4text (p, 1, "b=6371228 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NSIDC EASE-Grid Global\",GEOGCS[\"Unspecified d");
+    add_srs_wkt (p, 1,
+		 "atum based upon the International 1924 Authalic Sphere\"");
+    add_srs_wkt (p, 2,
+		 ",DATUM[\"Not_specified_based_on_International_1924_Autha");
+    add_srs_wkt (p, 3,
+		 "lic_Sphere\",SPHEROID[\"International 1924 Authalic Sphe");
+    add_srs_wkt (p, 4,
+		 "re\",6371228,0,AUTHORITY[\"EPSG\",\"7057\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"6053\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4053\"]],U");
+    add_srs_wkt (p, 8,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 9,
+		 "[\"Cylindrical_Equal_Area\"],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 10,
+		 "el_1\",30],PARAMETER[\"central_meridian\",0],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",0],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"3410\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 3411, "epsg", 3411,
+		      "NSIDC Sea Ice Polar Stereographic North");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 ");
+    add_proj4text (p, 1, "+y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NSIDC Sea Ice Polar Stereographic North\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Unspecified datum based upon the Hughes 1980 ellipso");
+    add_srs_wkt (p, 2,
+		 "id\",DATUM[\"Not_specified_based_on_Hughes_1980_ellipsoi");
+    add_srs_wkt (p, 3,
+		 "d\",SPHEROID[\"Hughes 1980\",6378273,298.279411123061,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"7058\"]],AUTHORITY[\"EPSG\",\"6054\"]");
+    add_srs_wkt (p, 5,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4054\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 8,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_Stereog");
+    add_srs_wkt (p, 9,
+		 "raphic\"],PARAMETER[\"latitude_of_origin\",70],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"central_meridian\",-45],PARAMETER[\"scale_factor\",1]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",0],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3411\"],AXIS[\"X\",UNKNOWN]");
+    add_srs_wkt (p, 13, ",AXIS[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3412, "epsg", 3412,
+		      "NSIDC Sea Ice Polar Stereographic South");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 ");
+    add_proj4text (p, 1, "+y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NSIDC Sea Ice Polar Stereographic South\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Unspecified datum based upon the Hughes 1980 ellipso");
+    add_srs_wkt (p, 2,
+		 "id\",DATUM[\"Not_specified_based_on_Hughes_1980_ellipsoi");
+    add_srs_wkt (p, 3,
+		 "d\",SPHEROID[\"Hughes 1980\",6378273,298.279411123061,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"7058\"]],AUTHORITY[\"EPSG\",\"6054\"]");
+    add_srs_wkt (p, 5,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4054\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 8,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_Stereog");
+    add_srs_wkt (p, 9,
+		 "raphic\"],PARAMETER[\"latitude_of_origin\",-70],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",0],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3412\"],AXIS[\"X\",UNKNOWN],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3413, "epsg", 3413,
+		      "WGS 84 / NSIDC Sea Ice Polar Stereographic North");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / NSIDC Sea Ice Polar Stereographic Nort");
+    add_srs_wkt (p, 1,
+		 "h\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS ");
+    add_srs_wkt (p, 2,
+		 "84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4326\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",70],PARAMETER[\"central_meridian\",-45],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3413\"],AXIS[\"X\",UNKNOWN],AXIS[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3414, "epsg", 3414, "SVY21 / Singapore TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.83333333");
+    add_proj4text (p, 1,
+		   "33333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SVY21 / Singapore TM\",GEOGCS[\"SVY21\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "SVY21\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6757\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5,
+		 "\"]],AUTHORITY[\"EPSG\",\"4757\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 6,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 7,
+		 "or\"],PARAMETER[\"latitude_of_origin\",1.366666666666667");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",103.8333333333333],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",28");
+    add_srs_wkt (p, 10,
+		 "001.642],PARAMETER[\"false_northing\",38744.572],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"3414\"],AXIS[\"Northing\",NORTH],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST]]");
+    p = add_epsg_def (first, last, 3415, "epsg", 3415,
+		      "WGS 72BE / South China Sea Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=");
+    add_proj4text (p, 1,
+		   "500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 2, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / South China Sea Lambert\",GEOGCS[\"W");
+    add_srs_wkt (p, 1,
+		 "GS 72BE\",DATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7043\"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6324\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_1\",18],PARAMETER[\"standard_parallel_2\",24],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",21],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 11,
+		 "dian\",114],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"3415\"");
+    add_srs_wkt (p, 13, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3416, "epsg", 3416,
+		      "ETRS89 / Austria Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.3333");
+    add_proj4text (p, 1,
+		   "3333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Austria Lambert\",GEOGCS[\"ETRS89\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"European_Terrestrial_Reference_System_1989\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",49],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 10,
+		 "7.5],PARAMETER[\"central_meridian\",13.33333333333333],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",400000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",400000],AUTHORITY[\"EPSG\",\"3416\"],AXIS[\"X\",");
+    add_srs_wkt (p, 13, "NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3417, "epsg", 3417,
+		      "NAD83 / Iowa North (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.99");
+    add_proj4text (p, 2,
+		   "99898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Iowa North (ft US)\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_");
+    add_srs_wkt (p, 8,
+		 "Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.266666");
+    add_srs_wkt (p, 9,
+		 "66666667],PARAMETER[\"standard_parallel_2\",42.066666666");
+    add_srs_wkt (p, 10,
+		 "66667],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"central_meridian\",-93.5],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "4921250],PARAMETER[\"false_northing\",3280833.333300001]");
+    add_srs_wkt (p, 13,
+		 ",AUTHORITY[\"EPSG\",\"3417\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 3418, "epsg", 3418,
+		      "NAD83 / Iowa South (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Iowa South (ft US)\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_");
+    add_srs_wkt (p, 8,
+		 "Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.783333");
+    add_srs_wkt (p, 9,
+		 "33333333],PARAMETER[\"standard_parallel_2\",40.616666666");
+    add_srs_wkt (p, 10,
+		 "66667],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-93.5],PARAMETER[\"false_easting\",16");
+    add_srs_wkt (p, 12,
+		 "40416.6667],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"3418\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3419, "epsg", 3419,
+		      "NAD83 / Kansas North (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999");
+    add_proj4text (p, 2,
+		   "8984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kansas North (ft US)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.78333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",38.71666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",38.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-98],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",1312333.3333],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 13,
+		 "],AUTHORITY[\"EPSG\",\"3419\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3420, "epsg", 3420,
+		      "NAD83 / Kansas South (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99");
+    add_proj4text (p, 2,
+		   "998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +u");
+    add_proj4text (p, 3, "nits=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kansas South (ft US)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.56666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",37.26666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",36.666666666666");
+    add_srs_wkt (p, 11,
+		 "66],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",1312333.3333],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",1312333.3333],AUTHORITY[\"EPSG\",\"3420\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 14, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3421, "epsg", 3421,
+		      "NAD83 / Nevada East (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=");
+    add_proj4text (p, 2, "GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nevada East (ft US)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-115.5833333333333],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",656166.666");
+    add_srs_wkt (p, 11,
+		 "7],PARAMETER[\"false_northing\",26246666.66670001],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"3421\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 3422, "epsg", 3422,
+		      "NAD83 / Nevada Central (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +dat");
+    add_proj4text (p, 2, "um=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nevada Central (ft US)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-116.6666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",16404");
+    add_srs_wkt (p, 11,
+		 "16.6667],PARAMETER[\"false_northing\",19685000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"3422\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3423, "epsg", 3423,
+		      "NAD83 / Nevada West (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps");
+    add_proj4text (p, 2, "=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nevada West (ft US)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-118.5833333333333],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",2624666.66");
+    add_srs_wkt (p, 11,
+		 "67],PARAMETER[\"false_northing\",13123333.3333],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"3423\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3424, "epsg", 3424,
+		      "NAD83 / New Jersey (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Jersey (ft US)\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",38.83333333333334]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",-74.5],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",492125],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3424\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3425, "epsg", 3425,
+		      "NAD83(HARN) / Iowa North (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.99");
+    add_proj4text (p, 2, "99898402 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Iowa North (ft US)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",43.26666666666667],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",42.06666666666667],PARAMETER[\"latitude_of_origi");
+    add_srs_wkt (p, 11,
+		 "n\",41.5],PARAMETER[\"central_meridian\",-93.5],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",4921250],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",3280833.333300001],AUTHORITY[\"EPSG\",\"3425\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3426, "epsg", 3426,
+		      "NAD83(HARN) / Iowa South (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Iowa South (ft US)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",41.78333333333333],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",40.61666666666667],PARAMETER[\"latitude_of_origi");
+    add_srs_wkt (p, 11,
+		 "n\",40],PARAMETER[\"central_meridian\",-93.5],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",1640416.6667],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 13,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3426\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 14, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3427, "epsg", 3427,
+		      "NAD83(HARN) / Kansas North (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999");
+    add_proj4text (p, 2, "8984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kansas North (ft US)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",39.78333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",38.71666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",38.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-98],PARAMETER[\"false_easting\",1312333.3333],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3427\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3428, "epsg", 3428,
+		      "NAD83(HARN) / Kansas South (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99");
+    add_proj4text (p, 2,
+		   "998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Kansas South (ft US)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",38.56666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",37.26666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",36.66666666666666],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-98.5],PARAMETER[\"false_easting\",1312333.3333],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",1312333.3333],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"3428\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3429, "epsg", 3429,
+		      "NAD83(HARN) / Nevada East (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=");
+    add_proj4text (p, 2, "GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nevada East (ft US)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",34.75],PARAMETER[\"central_meridian\",-115.5833333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",656166.6667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",26246666.66670001],AUTHORITY[\"EPSG\",\"3429\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3430, "epsg", 3430,
+		      "NAD83(HARN) / Nevada Central (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +uni");
+    add_proj4text (p, 2, "ts=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nevada Central (ft US)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",34.75],PARAMETER[\"central_meridian\",-116.666666");
+    add_srs_wkt (p, 10,
+		 "6666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",1640416.6667],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",19685000],AUTHORITY[\"EPSG\",\"3430\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3431, "epsg", 3431,
+		      "NAD83(HARN) / Nevada West (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps");
+    add_proj4text (p, 2, "=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nevada West (ft US)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",34.75],PARAMETER[\"central_meridian\",-118.5833333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",2624666.6667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",13123333.3333],AUTHORITY[\"EPSG\",\"3431\"],AXIS[\"X\",");
+    add_srs_wkt (p, 13, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3432, "epsg", 3432,
+		      "NAD83(HARN) / New Jersey (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Jersey (ft US)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",38.83333333333334],PARAMETER[\"central_meridian\",-74.5");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",492125],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"3432\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 13, "]");
+    p = add_epsg_def (first, last, 3433, "epsg", 3433,
+		      "NAD83 / Arkansas North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999");
+    add_proj4text (p, 2,
+		   "8984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arkansas North (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.23333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",34.93333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"latitude_of_origin\",34.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-92],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",1312333.3333],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 13,
+		 "],AUTHORITY[\"EPSG\",\"3433\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3434, "epsg", 3434,
+		      "NAD83 / Arkansas South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399");
+    add_proj4text (p, 2,
+		   "999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_");
+    add_proj4text (p, 3, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arkansas South (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.76666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",33.3],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",32.66666666666666],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-92],PARAMETER[\"false_easting\",1");
+    add_srs_wkt (p, 12,
+		 "312333.3333],PARAMETER[\"false_northing\",1312333.3333],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"3434\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 3435, "epsg", 3435,
+		      "NAD83 / Illinois East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Illinois East (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",36.66666666666666");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-88.33333333333333],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999975],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",984250.0000000002],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"3435\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3436, "epsg", 3436,
+		      "NAD83 / Illinois West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Illinois West (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",36.66666666666666");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-90.16666666666667],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",2296583.333300001],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3436\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3437, "epsg", 3437,
+		      "NAD83 / New Hampshire (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +dat");
+    add_proj4text (p, 2, "um=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Hampshire (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-71.66666666666667],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.999966667],PARAMETER[\"false_easting\",98425");
+    add_srs_wkt (p, 11,
+		 "0.0000000002],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"3437\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3438, "epsg", 3438,
+		      "NAD83 / Rhode Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datu");
+    add_proj4text (p, 2, "m=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Rhode Island (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",41.08333333333334]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",-71.5],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99999375],PARAMETER[\"false_easting\",328083");
+    add_srs_wkt (p, 11,
+		 ".3333],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"3438\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3439, "epsg", 3439, "PSD93 / UTM zone 39N");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSD93 / UTM zone 39N\",GEOGCS[\"PSD93\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "PDO_Survey_Datum_1993\",SPHEROID[\"Clarke 1880 (RGS)\",6");
+    add_srs_wkt (p, 2,
+		 "378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6134\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4134\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "3439\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3440, "epsg", 3440, "PSD93 / UTM zone 40N");
+    add_proj4text (p, 0, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSD93 / UTM zone 40N\",GEOGCS[\"PSD93\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "PDO_Survey_Datum_1993\",SPHEROID[\"Clarke 1880 (RGS)\",6");
+    add_srs_wkt (p, 2,
+		 "378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6134\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4134\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "3440\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3441, "epsg", 3441,
+		      "NAD83(HARN) / Arkansas North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999");
+    add_proj4text (p, 2, "8984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arkansas North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",36.23333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",34.93333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",34.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-92],PARAMETER[\"false_easting\",1312333.3333],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3441\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3442, "epsg", 3442,
+		      "NAD83(HARN) / Arkansas South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399");
+    add_proj4text (p, 2, "999.99998984 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Arkansas South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",34.76666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",33.3],PARAMETER[\"latitude_of_origin\",32.6");
+    add_srs_wkt (p, 11,
+		 "6666666666666],PARAMETER[\"central_meridian\",-92],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_easting\",1312333.3333],PARAMETER[\"false_n");
+    add_srs_wkt (p, 13,
+		 "orthing\",1312333.3333],AUTHORITY[\"EPSG\",\"3442\"],AXI");
+    add_srs_wkt (p, 14, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3443, "epsg", 3443,
+		      "NAD83(HARN) / Illinois East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Illinois East (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",36.66666666666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-88.33333333333333],PARAMETER[\"scale_factor\",0.999975");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_easting\",984250.0000000002],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3443\"],AX");
+    add_srs_wkt (p, 13, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3444, "epsg", 3444,
+		      "NAD83(HARN) / Illinois West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Illinois West (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",36.66666666666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-90.16666666666667],PARAMETER[\"scale_factor\",0.999941");
+    add_srs_wkt (p, 11,
+		 "177],PARAMETER[\"false_easting\",2296583.333300001],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3444\"]");
+    add_srs_wkt (p, 13, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3445, "epsg", 3445,
+		      "NAD83(HARN) / New Hampshire (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +uni");
+    add_proj4text (p, 2, "ts=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / New Hampshire (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",42.5],PARAMETER[\"central_meridian\",-71.66666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"scale_factor\",0.999966667],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_easting\",984250.0000000002],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"3445\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 13, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3446, "epsg", 3446,
+		      "NAD83(HARN) / Rhode Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +unit");
+    add_proj4text (p, 2, "s=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Rhode Island (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",41.08333333333334],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "-71.5],PARAMETER[\"scale_factor\",0.99999375],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",328083.3333],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3446\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3447, "epsg", 3447,
+		      "ETRS89 / Belgian Lambert 2005");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=15032");
+    add_proj4text (p, 2, "8 +y_0=166262 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Belgian Lambert 2005\",GEOGCS[\"ETRS89");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Terrestrial_Reference_System_1989\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",49.8333333333333");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",51.16666666666666],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",50.797815],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",4.359215833333333],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "easting\",150328],PARAMETER[\"false_northing\",166262],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"3447\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 14, "NORTH]]");
+    p = add_epsg_def (first, last, 3448, "epsg", 3448,
+		      "JAD2001 / Jamaica Metric Grid");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750");
+    add_proj4text (p, 1,
+		   "000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JAD2001 / Jamaica Metric Grid\",GEOGCS[\"JAD200");
+    add_srs_wkt (p, 1,
+		 "1\",DATUM[\"Jamaica_2001\",SPHEROID[\"WGS 84\",6378137,2");
+    add_srs_wkt (p, 2,
+		 "98.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6758\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 4,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 5,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"4758\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_origin\",18],PARAMETER[\"central");
+    add_srs_wkt (p, 9,
+		 "_meridian\",-77],PARAMETER[\"scale_factor\",1],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",750000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "650000],AUTHORITY[\"EPSG\",\"3448\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3449, "epsg", 3449,
+		      "JAD2001 / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JAD2001 / UTM zone 17N\",GEOGCS[\"JAD2001\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Jamaica_2001\",SPHEROID[\"WGS 84\",6378137,298.2572");
+    add_srs_wkt (p, 2,
+		 "23563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0],AUTHORITY[\"EPSG\",\"6758\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4758\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",-81]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 10,
+		 "sting\",500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3449\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 12, "ing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_11 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 3450, "epsg", 3450,
+		      "JAD2001 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JAD2001 / UTM zone 18N\",GEOGCS[\"JAD2001\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Jamaica_2001\",SPHEROID[\"WGS 84\",6378137,298.2572");
+    add_srs_wkt (p, 2,
+		 "23563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0],AUTHORITY[\"EPSG\",\"6758\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4758\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",-75]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 10,
+		 "sting\",500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3450\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 12, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 3451, "epsg", 3451,
+		      "NAD83 / Louisiana North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Louisiana North (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",32.66");
+    add_srs_wkt (p, 9,
+		 "666666666666],PARAMETER[\"standard_parallel_2\",31.16666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"latitude_of_origin\",30.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-92.5],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",3280833.333300001],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"3451\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 14, "NORTH]]");
+    p = add_epsg_def (first, last, 3452, "epsg", 3452,
+		      "NAD83 / Louisiana South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91");
+    add_proj4text (p, 1,
+		   ".33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Louisiana South (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.7]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",29.3],PARAMETER[\"lat");
+    add_srs_wkt (p, 10,
+		 "itude_of_origin\",28.5],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 11,
+		 "91.33333333333333],PARAMETER[\"false_easting\",3280833.3");
+    add_srs_wkt (p, 12,
+		 "33300001],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"3452\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3453, "epsg", 3453,
+		      "NAD83 / Louisiana Offshore (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.99");
+    add_proj4text (p, 2,
+		   "99898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Louisiana Offshore (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",27.");
+    add_srs_wkt (p, 9,
+		 "83333333333333],PARAMETER[\"standard_parallel_2\",26.166");
+    add_srs_wkt (p, 10,
+		 "66666666667],PARAMETER[\"latitude_of_origin\",25.5],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-91.33333333333333],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_easting\",3280833.333300001],PARAMETER[\"false_");
+    add_srs_wkt (p, 13,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"3453\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 14, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3454, "epsg", 3454,
+		      "NAD83 / South Dakota North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / South Dakota North (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",42.83333333333334],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",42.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-100.3333333333333],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"3454\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3455, "epsg", 3455,
+		      "NAD83 / South Dakota South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / South Dakota South (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",42.83333333333334],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",42.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-100.3333333333333],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"3455\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3456, "epsg", 3456,
+		      "NAD83(HARN) / Louisiana North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Louisiana North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",32.66666666666666],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",31.16666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",30.5],PARAMETER[\"central_meridian\",-92.5],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_easting\",3280833.333300001],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3456\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3457, "epsg", 3457,
+		      "NAD83(HARN) / Louisiana South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91");
+    add_proj4text (p, 1,
+		   ".33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Louisiana South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",30.7],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 10,
+		 "29.3],PARAMETER[\"latitude_of_origin\",28.5],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-91.33333333333333],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_easting\",3280833.333300001],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",0],AUTHORITY[\"EPSG\",\"3457\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3458, "epsg", 3458,
+		      "NAD83(HARN) / South Dakota North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_");
+    add_proj4text (p, 2, "0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / South Dakota North (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_N");
+    add_srs_wkt (p, 2,
+		 "etwork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey f");
+    add_srs_wkt (p, 7,
+		 "oot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",45.68333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 10,
+		 "dard_parallel_2\",44.41666666666666],PARAMETER[\"latitud");
+    add_srs_wkt (p, 11,
+		 "e_of_origin\",43.83333333333334],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 12,
+		 "idian\",-100],PARAMETER[\"false_easting\",1968500],PARAM");
+    add_srs_wkt (p, 13,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3458\"],");
+    add_srs_wkt (p, 14, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3459, "epsg", 3459,
+		      "NAD83(HARN) / South Dakota South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y");
+    add_proj4text (p, 2, "_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / South Dakota South (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_N");
+    add_srs_wkt (p, 2,
+		 "etwork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey f");
+    add_srs_wkt (p, 7,
+		 "oot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",44.4],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 10,
+		 "_2\",42.83333333333334],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",42.33333333333334],PARAMETER[\"central_meridian\",-100.");
+    add_srs_wkt (p, 12,
+		 "3333333333333],PARAMETER[\"false_easting\",1968500],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3459\"]");
+    add_srs_wkt (p, 14, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3460, "epsg", 3460,
+		      "Fiji 1986 / Fiji Map Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=200");
+    add_proj4text (p, 1, "0000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fiji 1986 / Fiji Map Grid\",GEOGCS[\"Fiji 1986\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Fiji_Geodetic_Datum_1986\",SPHEROID[\"WGS 72\",");
+    add_srs_wkt (p, 2,
+		 "6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6720\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4720\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",-17],PARAMETER[\"central_meridian\",178.75],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.99985],PARAMETER[\"false_easting\",2");
+    add_srs_wkt (p, 10,
+		 "000000],PARAMETER[\"false_northing\",4000000],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3460\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3461, "epsg", 3461,
+		      "Dabola 1981 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,");
+    add_proj4text (p, 1, "37,124,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Dabola 1981 / UTM zone 28N\",GEOGCS[\"Dabola 19");
+    add_srs_wkt (p, 1,
+		 "81\",DATUM[\"Dabola_1981\",SPHEROID[\"Clarke 1880 (IGN)\"");
+    add_srs_wkt (p, 2,
+		 ",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY[\"EPSG\",\"6155");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4155\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3461\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3462, "epsg", 3462,
+		      "Dabola 1981 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,");
+    add_proj4text (p, 1, "37,124,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Dabola 1981 / UTM zone 29N\",GEOGCS[\"Dabola 19");
+    add_srs_wkt (p, 1,
+		 "81\",DATUM[\"Dabola_1981\",SPHEROID[\"Clarke 1880 (IGN)\"");
+    add_srs_wkt (p, 2,
+		 ",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY[\"EPSG\",\"6155");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4155\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"3462\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3463, "epsg", 3463,
+		      "NAD83 / Maine CS2000 Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=5");
+    add_proj4text (p, 1,
+		   "00000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine CS2000 Central\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",43.5],PARAMETER[\"central_meridian\",-69.12");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.99998],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"3463\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 3464, "epsg", 3464,
+		      "NAD83(HARN) / Maine CS2000 Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=5");
+    add_proj4text (p, 1, "00000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine CS2000 Central\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",43.5],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-69.125],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "99998],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"3464\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3465, "epsg", 3465,
+		      "NAD83(NSRS2007) / Alabama East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alabama East\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",30.5],PARAMETER[\"central_meridian\",-85.833");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",0.99996],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",200000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3465\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3466, "epsg", 3466,
+		      "NAD83(NSRS2007) / Alabama West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=6");
+    add_proj4text (p, 1,
+		   "00000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alabama West\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",30],PARAMETER[\"central_meridian\",-87.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.999933333],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",600000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"3466\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 3467, "epsg", 3467,
+		      "NAD83(NSRS2007) / Alaska Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska Albers\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_1\",55],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 10,
+		 "65],PARAMETER[\"latitude_of_center\",50],PARAMETER[\"lon");
+    add_srs_wkt (p, 11,
+		 "gitude_of_center\",-154],PARAMETER[\"false_easting\",0],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"346");
+    add_srs_wkt (p, 13, "7\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3468, "epsg", 3468,
+		      "NAD83(NSRS2007) / Alaska zone 1");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=32");
+    add_proj4text (p, 1,
+		   "3.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +el");
+    add_proj4text (p, 2, "lps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 1\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"lati");
+    add_srs_wkt (p, 9,
+		 "tude_of_center\",57],PARAMETER[\"longitude_of_center\",-");
+    add_srs_wkt (p, 10,
+		 "133.6666666666667],PARAMETER[\"azimuth\",323.13010236111");
+    add_srs_wkt (p, 11,
+		 "11],PARAMETER[\"rectified_grid_angle\",323.1301023611111");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_e");
+    add_srs_wkt (p, 13,
+		 "asting\",5000000],PARAMETER[\"false_northing\",-5000000]");
+    add_srs_wkt (p, 14,
+		 ",AUTHORITY[\"EPSG\",\"3468\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 15, ",NORTH]]");
+    p = add_epsg_def (first, last, 3469, "epsg", 3469,
+		      "NAD83(NSRS2007) / Alaska zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 2\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-142],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3469\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3470, "epsg", 3470,
+		      "NAD83(NSRS2007) / Alaska zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 3\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-146],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3470\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3471, "epsg", 3471,
+		      "NAD83(NSRS2007) / Alaska zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 4\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-150],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3471\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3472, "epsg", 3472,
+		      "NAD83(NSRS2007) / Alaska zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 5\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-154],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3472\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3473, "epsg", 3473,
+		      "NAD83(NSRS2007) / Alaska zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 6\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-158],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3473\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3474, "epsg", 3474,
+		      "NAD83(NSRS2007) / Alaska zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 7\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-162],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3474\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3475, "epsg", 3475,
+		      "NAD83(NSRS2007) / Alaska zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 8\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-166],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3475\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3476, "epsg", 3476,
+		      "NAD83(NSRS2007) / Alaska zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1,
+		   "+y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 9\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",54],PARAMETER[\"central_meridian\",-170],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 11,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 12, "EPSG\",\"3476\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3477, "epsg", 3477,
+		      "NAD83(NSRS2007) / Alaska zone 10");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Alaska zone 10\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",53.83333333333334],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",51.83333333333334],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",51],PARAMETER[\"central_meridian\",-176],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 13,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3477\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 14, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3478, "epsg", 3478,
+		      "NAD83(NSRS2007) / Arizona Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arizona Central\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",31],PARAMETER[\"central_meridian\",-111.9");
+    add_srs_wkt (p, 10,
+		 "166666666667],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",213360],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3478\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3479, "epsg", 3479,
+		      "NAD83(NSRS2007) / Arizona Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arizona Central (ft)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 8,
+		 "\"9002\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"latitude_of_origin\",31],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 10,
+		 "\",-111.9166666666667],PARAMETER[\"scale_factor\",0.9999");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_easting\",700000],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"3479\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3480, "epsg", 3480,
+		      "NAD83(NSRS2007) / Arizona East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arizona East\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",31],PARAMETER[\"central_meridian\",-110.1666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",213360],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3480\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3481, "epsg", 3481,
+		      "NAD83(NSRS2007) / Arizona East (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arizona East (ft)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "02\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",31],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 10,
+		 "110.1666666666667],PARAMETER[\"scale_factor\",0.9999],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",700000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3481\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3482, "epsg", 3482,
+		      "NAD83(NSRS2007) / Arizona West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0");
+    add_proj4text (p, 1,
+		   "=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arizona West\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",31],PARAMETER[\"central_meridian\",-113.75],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",0.999933333],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",213360],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"3482\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 3483, "epsg", 3483,
+		      "NAD83(NSRS2007) / Arizona West (ft)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0");
+    add_proj4text (p, 1,
+		   "=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arizona West (ft)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "02\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",31],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 10,
+		 "113.75],PARAMETER[\"scale_factor\",0.999933333],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_easting\",700000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3483\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3484, "epsg", 3484,
+		      "NAD83(NSRS2007) / Arkansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arkansas North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",36.23333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",34.93333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",34.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-92],PARAMETER[\"false_easting\",400000],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3484\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3485, "epsg", 3485,
+		      "NAD83(NSRS2007) / Arkansas North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999");
+    add_proj4text (p, 2,
+		   "8984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=u");
+    add_proj4text (p, 3, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arkansas North (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "36.23333333333333],PARAMETER[\"standard_parallel_2\",34.");
+    add_srs_wkt (p, 11,
+		 "93333333333333],PARAMETER[\"latitude_of_origin\",34.3333");
+    add_srs_wkt (p, 12,
+		 "3333333334],PARAMETER[\"central_meridian\",-92],PARAMETE");
+    add_srs_wkt (p, 13,
+		 "R[\"false_easting\",1312333.3333],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 14,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3485\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 15, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3486, "epsg", 3486,
+		      "NAD83(NSRS2007) / Arkansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arkansas South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",34.76666666666667],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",33.3],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",32.66666666666666],PARAMETER[\"central_meridian\",-92],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_easting\",400000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 13,
+		 "rthing\",400000],AUTHORITY[\"EPSG\",\"3486\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3487, "epsg", 3487,
+		      "NAD83(NSRS2007) / Arkansas South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399");
+    add_proj4text (p, 2,
+		   "999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 3, "us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Arkansas South (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "34.76666666666667],PARAMETER[\"standard_parallel_2\",33.");
+    add_srs_wkt (p, 11,
+		 "3],PARAMETER[\"latitude_of_origin\",32.66666666666666],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"central_meridian\",-92],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 13,
+		 "ting\",1312333.3333],PARAMETER[\"false_northing\",131233");
+    add_srs_wkt (p, 14,
+		 "3.3333],AUTHORITY[\"EPSG\",\"3487\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 15, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3488, "epsg", 3488,
+		      "NAD83(NSRS2007) / California Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_");
+    add_proj4text (p, 1,
+		   "0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California Albers\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",34],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 10,
+		 "\",40.5],PARAMETER[\"latitude_of_center\",0],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "longitude_of_center\",-120],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "0],PARAMETER[\"false_northing\",-4000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"3488\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3489, "epsg", 3489,
+		      "NAD83(NSRS2007) / California zone 1");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.3");
+    add_proj4text (p, 1,
+		   "3333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 1\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",41.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",40],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 11,
+		 "\",39.33333333333334],PARAMETER[\"central_meridian\",-12");
+    add_srs_wkt (p, 12,
+		 "2],PARAMETER[\"false_easting\",2000000],PARAMETER[\"fals");
+    add_srs_wkt (p, 13,
+		 "e_northing\",500000],AUTHORITY[\"EPSG\",\"3489\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3490, "epsg", 3490,
+		      "NAD83(NSRS2007) / California zone 1 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.3");
+    add_proj4text (p, 1,
+		   "3333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=5000");
+    add_proj4text (p, 2,
+		   "00.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units");
+    add_proj4text (p, 3, "=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 1 (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",41.66666666666666],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 11,
+		 "40],PARAMETER[\"latitude_of_origin\",39.33333333333334],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"central_meridian\",-122],PARAMETER[\"false_e");
+    add_srs_wkt (p, 13,
+		 "asting\",6561666.667],PARAMETER[\"false_northing\",16404");
+    add_srs_wkt (p, 14,
+		 "16.667],AUTHORITY[\"EPSG\",\"3490\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 15, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3491, "epsg", 3491,
+		      "NAD83(NSRS2007) / California zone 2");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y");
+    add_proj4text (p, 2,
+		   "_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 2\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",39.83333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",38.33333333333334],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",37.66666666666666],PARAMETER[\"central");
+    add_srs_wkt (p, 12,
+		 "_meridian\",-122],PARAMETER[\"false_easting\",2000000],P");
+    add_srs_wkt (p, 13,
+		 "ARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 14, "3491\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3492, "epsg", 3492,
+		      "NAD83(NSRS2007) / California zone 2 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.00");
+    add_proj4text (p, 2,
+		   "01016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0");
+    add_proj4text (p, 3, ",0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 2 (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",39.83333333333334],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 11,
+		 "38.33333333333334],PARAMETER[\"latitude_of_origin\",37.6");
+    add_srs_wkt (p, 12,
+		 "6666666666666],PARAMETER[\"central_meridian\",-122],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_easting\",6561666.667],PARAMETER[\"false_n");
+    add_srs_wkt (p, 14,
+		 "orthing\",1640416.667],AUTHORITY[\"EPSG\",\"3492\"],AXIS");
+    add_srs_wkt (p, 15, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3493, "epsg", 3493,
+		      "NAD83(NSRS2007) / California zone 3");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +");
+    add_proj4text (p, 2,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 3\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",38.43333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",37.06666666666667],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",36.5],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 12,
+		 "120.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",500000],AUTHORITY[\"EPSG\",\"3493\"],AX");
+    add_srs_wkt (p, 14, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3494, "epsg", 3494,
+		      "NAD83(NSRS2007) / California zone 3 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=");
+    add_proj4text (p, 2,
+		   "500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 3, "nits=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 3 (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",38.43333333333333],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 11,
+		 "37.06666666666667],PARAMETER[\"latitude_of_origin\",36.5");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"central_meridian\",-120.5],PARAMETER[\"fal");
+    add_srs_wkt (p, 13,
+		 "se_easting\",6561666.667],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 14,
+		 "640416.667],AUTHORITY[\"EPSG\",\"3494\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 15, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3495, "epsg", 3495,
+		      "NAD83(NSRS2007) / California zone 4");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.3333333333333");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +tow");
+    add_proj4text (p, 2, "gs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 4\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",37.25],PARAMETER[\"standard_par");
+    add_srs_wkt (p, 10,
+		 "allel_2\",36],PARAMETER[\"latitude_of_origin\",35.333333");
+    add_srs_wkt (p, 11,
+		 "33333334],PARAMETER[\"central_meridian\",-119],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_easting\",2000000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",500000],AUTHORITY[\"EPSG\",\"3495\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 14, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3496, "epsg", 3496,
+		      "NAD83(NSRS2007) / California zone 4 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.3333333333333");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.000101600");
+    add_proj4text (p, 2,
+		   "1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 4 (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",37.25],PARAMETER[\"standard_parallel_2\",36],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"latitude_of_origin\",35.33333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "central_meridian\",-119],PARAMETER[\"false_easting\",656");
+    add_srs_wkt (p, 13,
+		 "1666.667],PARAMETER[\"false_northing\",1640416.667],AUTH");
+    add_srs_wkt (p, 14,
+		 "ORITY[\"EPSG\",\"3496\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 15, "TH]]");
+    p = add_epsg_def (first, last, 3497, "epsg", 3497,
+		      "NAD83(NSRS2007) / California zone 5");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +el");
+    add_proj4text (p, 2, "lps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 5\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",35.46666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",34.03333333333333],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",33.5],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 12,
+		 "118],PARAMETER[\"false_easting\",2000000],PARAMETER[\"fa");
+    add_srs_wkt (p, 13,
+		 "lse_northing\",500000],AUTHORITY[\"EPSG\",\"3497\"],AXIS");
+    add_srs_wkt (p, 14, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3498, "epsg", 3498,
+		      "NAD83(NSRS2007) / California zone 5 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=50");
+    add_proj4text (p, 2,
+		   "0000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +uni");
+    add_proj4text (p, 3, "ts=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 5 (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",35.46666666666667],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 11,
+		 "34.03333333333333],PARAMETER[\"latitude_of_origin\",33.5");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"central_meridian\",-118],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_easting\",6561666.667],PARAMETER[\"false_northing\",164");
+    add_srs_wkt (p, 14,
+		 "0416.667],AUTHORITY[\"EPSG\",\"3498\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 15, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3499, "epsg", 3499,
+		      "NAD83(NSRS2007) / California zone 6");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000");
+    add_proj4text (p, 2,
+		   " +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 3, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 6\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",33.88333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",32.78333333333333],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",32.16666666666666],PARAMETER[\"central");
+    add_srs_wkt (p, 12,
+		 "_meridian\",-116.25],PARAMETER[\"false_easting\",2000000");
+    add_srs_wkt (p, 13,
+		 "],PARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"3499\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3500, "epsg", 3500,
+		      "NAD83(NSRS2007) / California zone 6 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000");
+    add_proj4text (p, 2,
+		   ".0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,");
+    add_proj4text (p, 3, "0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / California zone 6 (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",33.88333333333333],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 11,
+		 "32.78333333333333],PARAMETER[\"latitude_of_origin\",32.1");
+    add_srs_wkt (p, 12,
+		 "6666666666666],PARAMETER[\"central_meridian\",-116.25],P");
+    add_srs_wkt (p, 13,
+		 "ARAMETER[\"false_easting\",6561666.667],PARAMETER[\"fals");
+    add_srs_wkt (p, 14,
+		 "e_northing\",1640416.667],AUTHORITY[\"EPSG\",\"3500\"],A");
+    add_srs_wkt (p, 15, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3501, "epsg", 3501,
+		      "NAD83(NSRS2007) / Colorado Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.8333333333");
+    add_proj4text (p, 1,
+		   "3334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +el");
+    add_proj4text (p, 2, "lps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Colorado Central\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",39.75],PARAMETER[\"standard_par");
+    add_srs_wkt (p, 10,
+		 "allel_2\",38.45],PARAMETER[\"latitude_of_origin\",37.833");
+    add_srs_wkt (p, 11,
+		 "33333333334],PARAMETER[\"central_meridian\",-105.5],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_easting\",914401.8289],PARAMETER[\"false_n");
+    add_srs_wkt (p, 13,
+		 "orthing\",304800.6096],AUTHORITY[\"EPSG\",\"3501\"],AXIS");
+    add_srs_wkt (p, 14, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3502, "epsg", 3502,
+		      "NAD83(NSRS2007) / Colorado Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.8333333333");
+    add_proj4text (p, 1,
+		   "3334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.60");
+    add_proj4text (p, 2,
+		   "96012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Colorado Central (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 8,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 9,
+		 "Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 10,
+		 ",39.75],PARAMETER[\"standard_parallel_2\",38.45],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"latitude_of_origin\",37.83333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "central_meridian\",-105.5],PARAMETER[\"false_easting\",3");
+    add_srs_wkt (p, 13,
+		 "000000],PARAMETER[\"false_northing\",1000000],AUTHORITY[");
+    add_srs_wkt (p, 14,
+		 "\"EPSG\",\"3502\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3503, "epsg", 3503,
+		      "NAD83(NSRS2007) / Colorado North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 3, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Colorado North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",40.78333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",39.71666666666667],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",39.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-105.5],PARAMETER[\"false_easting\",914401.8289");
+    add_srs_wkt (p, 13,
+		 "],PARAMETER[\"false_northing\",304800.6096],AUTHORITY[\"");
+    add_srs_wkt (p, 14, "EPSG\",\"3503\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3504, "epsg", 3504,
+		      "NAD83(NSRS2007) / Colorado North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 3, ",0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Colorado North (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "40.78333333333333],PARAMETER[\"standard_parallel_2\",39.");
+    add_srs_wkt (p, 11,
+		 "71666666666667],PARAMETER[\"latitude_of_origin\",39.3333");
+    add_srs_wkt (p, 12,
+		 "3333333334],PARAMETER[\"central_meridian\",-105.5],PARAM");
+    add_srs_wkt (p, 13,
+		 "ETER[\"false_easting\",3000000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 14,
+		 "ng\",1000000],AUTHORITY[\"EPSG\",\"3504\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 15, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3505, "epsg", 3505,
+		      "NAD83(NSRS2007) / Colorado South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 3, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Colorado South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",38.43333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",37.23333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",36.66666666666666],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-105.5],PARAMETER[\"false_easting\",914401.8289");
+    add_srs_wkt (p, 13,
+		 "],PARAMETER[\"false_northing\",304800.6096],AUTHORITY[\"");
+    add_srs_wkt (p, 14, "EPSG\",\"3505\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3506, "epsg", 3506,
+		      "NAD83(NSRS2007) / Colorado South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 3, ",0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Colorado South (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "38.43333333333333],PARAMETER[\"standard_parallel_2\",37.");
+    add_srs_wkt (p, 11,
+		 "23333333333333],PARAMETER[\"latitude_of_origin\",36.6666");
+    add_srs_wkt (p, 12,
+		 "6666666666],PARAMETER[\"central_meridian\",-105.5],PARAM");
+    add_srs_wkt (p, 13,
+		 "ETER[\"false_easting\",3000000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 14,
+		 "ng\",1000000],AUTHORITY[\"EPSG\",\"3506\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 15, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3507, "epsg", 3507,
+		      "NAD83(NSRS2007) / Connecticut");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40");
+    add_proj4text (p, 1,
+		   ".83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=1524");
+    add_proj4text (p, 2,
+		   "00.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no");
+    add_proj4text (p, 3, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Connecticut\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",41.86666666666667],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",41.2],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 11,
+		 "40.83333333333334],PARAMETER[\"central_meridian\",-72.75");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",304800.6096],PARAMETER[\"f");
+    add_srs_wkt (p, 13,
+		 "alse_northing\",152400.3048],AUTHORITY[\"EPSG\",\"3507\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3508, "epsg", 3508,
+		      "NAD83(NSRS2007) / Connecticut (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40");
+    add_proj4text (p, 1,
+		   ".83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_");
+    add_proj4text (p, 2,
+		   "0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 ");
+    add_proj4text (p, 3, "+units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Connecticut (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.86");
+    add_srs_wkt (p, 10,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",41.2],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"latitude_of_origin\",40.83333333333334],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"central_meridian\",-72.75],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 13,
+		 "ng\",1000000],PARAMETER[\"false_northing\",500000],AUTHO");
+    add_srs_wkt (p, 14,
+		 "RITY[\"EPSG\",\"3508\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 15, "H]]");
+    p = add_epsg_def (first, last, 3509, "epsg", 3509,
+		      "NAD83(NSRS2007) / Delaware");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Delaware\",GEOGCS[\"NAD83(NSR");
+    add_srs_wkt (p, 1,
+		 "S2007)\",DATUM[\"NAD83_National_Spatial_Reference_System");
+    add_srs_wkt (p, 2,
+		 "_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4759\"");
+    add_srs_wkt (p, 7,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",38],PARAMETER[\"central_meridian\",-75.4166666666");
+    add_srs_wkt (p, 10,
+		 "6667],PARAMETER[\"scale_factor\",0.999995],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",200000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"3509\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3510, "epsg", 3510,
+		      "NAD83(NSRS2007) / Delaware (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Delaware (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,AU");
+    add_srs_wkt (p, 8,
+		 "THORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 9,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",-75.41666666666667],PARAMETER[\"scale");
+    add_srs_wkt (p, 11,
+		 "_factor\",0.999995],PARAMETER[\"false_easting\",656166.6");
+    add_srs_wkt (p, 12,
+		 "67],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3510\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3511, "epsg", 3511,
+		      "NAD83(NSRS2007) / Florida East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Florida East\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",24.33333333333333],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 10,
+		 "ian\",-81],PARAMETER[\"scale_factor\",0.999941177],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",200000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3511\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3512, "epsg", 3512,
+		      "NAD83(NSRS2007) / Florida East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs");
+    add_proj4text (p, 2, "84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Florida East (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",24.33333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"central_meridian\",-81],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "scale_factor\",0.999941177],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "656166.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"3512\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3513, "epsg", 3513,
+		      "NAD83(NSRS2007) / Florida GDL Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_");
+    add_proj4text (p, 1,
+		   "0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Florida GDL Albers\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",24],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 10,
+		 "\",31.5],PARAMETER[\"latitude_of_center\",24],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"longitude_of_center\",-84],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",400000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"3513\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3514, "epsg", 3514,
+		      "NAD83(NSRS2007) / Florida North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=2");
+    add_proj4text (p, 1,
+		   "9 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Florida North\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",30.75],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 10,
+		 "el_2\",29.58333333333333],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 11,
+		 "\",29],PARAMETER[\"central_meridian\",-84.5],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",600000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"3514\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 3515, "epsg", 3515,
+		      "NAD83(NSRS2007) / Florida North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=2");
+    add_proj4text (p, 1,
+		   "9 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Florida North (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 9,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 10,
+		 "0.75],PARAMETER[\"standard_parallel_2\",29.5833333333333");
+    add_srs_wkt (p, 11,
+		 "3],PARAMETER[\"latitude_of_origin\",29],PARAMETER[\"cent");
+    add_srs_wkt (p, 12,
+		 "ral_meridian\",-84.5],PARAMETER[\"false_easting\",196850");
+    add_srs_wkt (p, 13,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 14, "3515\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3516, "epsg", 3516,
+		      "NAD83(NSRS2007) / Florida West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Florida West\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",24.33333333333333],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 10,
+		 "ian\",-82],PARAMETER[\"scale_factor\",0.999941177],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",200000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3516\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3517, "epsg", 3517,
+		      "NAD83(NSRS2007) / Florida West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs");
+    add_proj4text (p, 2, "84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Florida West (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",24.33333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"central_meridian\",-82],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "scale_factor\",0.999941177],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "656166.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"3517\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3518, "epsg", 3518,
+		      "NAD83(NSRS2007) / Georgia East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Georgia East\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",30],PARAMETER[\"central_meridian\",-82.16666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",200000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3518\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3519, "epsg", 3519,
+		      "NAD83(NSRS2007) / Georgia East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,");
+    add_proj4text (p, 2, "0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Georgia East (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"central_meridian\",-82.16666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",65616");
+    add_srs_wkt (p, 12,
+		 "6.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"3519\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3520, "epsg", 3520,
+		      "NAD83(NSRS2007) / Georgia West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Georgia West\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",30],PARAMETER[\"central_meridian\",-84.16666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",700000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3520\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3521, "epsg", 3521,
+		      "NAD83(NSRS2007) / Georgia West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,");
+    add_proj4text (p, 2, "0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Georgia West (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",30],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"central_meridian\",-84.16666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",22965");
+    add_srs_wkt (p, 12,
+		 "83.333],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13, "\",\"3521\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3522, "epsg", 3522,
+		      "NAD83(NSRS2007) / Idaho Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.99");
+    add_proj4text (p, 1,
+		   "99473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Idaho Central\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",41.66666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",-114],PARAMETER[\"scale_factor\",0.999947368],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3522\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 13, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3523, "epsg", 3523,
+		      "NAD83(NSRS2007) / Idaho Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.99");
+    add_proj4text (p, 1,
+		   "99473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Idaho Central (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 9,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",41.6666666");
+    add_srs_wkt (p, 10,
+		 "6666666],PARAMETER[\"central_meridian\",-114],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.999947368],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",1640416.667],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"3523\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3524, "epsg", 3524,
+		      "NAD83(NSRS2007) / Idaho East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Idaho East\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",41.66666666666666],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",-112.1666666666667],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 11,
+		 "947368],PARAMETER[\"false_easting\",200000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3524\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3525, "epsg", 3525,
+		      "NAD83(NSRS2007) / Idaho East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_");
+    add_proj4text (p, 3, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Idaho East (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 9,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",41.66666666666");
+    add_srs_wkt (p, 10,
+		 "666],PARAMETER[\"central_meridian\",-112.1666666666667],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"scale_factor\",0.999947368],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",656166.667],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"3525\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 3526, "epsg", 3526,
+		      "NAD83(NSRS2007) / Idaho West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 2, "0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Idaho West\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",41.66666666666666],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",-115.75],PARAMETER[\"scale_factor\",0.999933333],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",800000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3526\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 13, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3527, "epsg", 3527,
+		      "NAD83(NSRS2007) / Idaho West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Idaho West (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 9,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",41.66666666666");
+    add_srs_wkt (p, 10,
+		 "666],PARAMETER[\"central_meridian\",-115.75],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "scale_factor\",0.999933333],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "2624666.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"3527\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3528, "epsg", 3528,
+		      "NAD83(NSRS2007) / Illinois East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Illinois East\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",36.66666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",-88.33333333333333],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 11,
+		 "999975],PARAMETER[\"false_easting\",300000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3528\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3529, "epsg", 3529,
+		      "NAD83(NSRS2007) / Illinois East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_");
+    add_proj4text (p, 3, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Illinois East (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 9,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",36.6666666");
+    add_srs_wkt (p, 10,
+		 "6666666],PARAMETER[\"central_meridian\",-88.333333333333");
+    add_srs_wkt (p, 11,
+		 "33],PARAMETER[\"scale_factor\",0.999975],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_easting\",984250.0000000002],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 13,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3529\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 14, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3530, "epsg", 3530,
+		      "NAD83(NSRS2007) / Illinois West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Illinois West\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",36.66666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",-90.16666666666667],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 11,
+		 "999941177],PARAMETER[\"false_easting\",700000],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3530\"],AXIS");
+    add_srs_wkt (p, 13, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3531, "epsg", 3531,
+		      "NAD83(NSRS2007) / Illinois West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ell");
+    add_proj4text (p, 2,
+		   "ps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Illinois West (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 9,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",36.6666666");
+    add_srs_wkt (p, 10,
+		 "6666666],PARAMETER[\"central_meridian\",-90.166666666666");
+    add_srs_wkt (p, 11,
+		 "67],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",2296583.333300001],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 13,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"3531\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 14, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3532, "epsg", 3532,
+		      "NAD83(NSRS2007) / Indiana East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 2, ",0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Indiana East\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",37.5],PARAMETER[\"central_meridian\",-85.666");
+    add_srs_wkt (p, 10,
+		 "66666666667],PARAMETER[\"scale_factor\",0.999966667],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",100000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",250000],AUTHORITY[\"EPSG\",\"3532\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3533, "epsg", 3533,
+		      "NAD83(NSRS2007) / Indiana East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +");
+    add_proj4text (p, 2,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Indiana East (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",37.5],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"central_meridian\",-85.66666666666667],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.999966667],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",328083.333],PARAMETER[\"false_northing\",820208.3330000");
+    add_srs_wkt (p, 13,
+		 "002],AUTHORITY[\"EPSG\",\"3533\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 14, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3534, "epsg", 3534,
+		      "NAD83(NSRS2007) / Indiana West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 2, ",0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Indiana West\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",37.5],PARAMETER[\"central_meridian\",-87.083");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",0.999966667],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",900000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",250000],AUTHORITY[\"EPSG\",\"3534\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3535, "epsg", 3535,
+		      "NAD83(NSRS2007) / Indiana West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80");
+    add_proj4text (p, 2, " +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Indiana West (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",37.5],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"central_meridian\",-87.08333333333333],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.999966667],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2952750],PARAMETER[\"false_northing\",820208.3330000002");
+    add_srs_wkt (p, 13,
+		 "],AUTHORITY[\"EPSG\",\"3535\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3536, "epsg", 3536,
+		      "NAD83(NSRS2007) / Iowa North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +");
+    add_proj4text (p, 2,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Iowa North\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",43.26666666666667],PARAMETER[\"standa");
+    add_srs_wkt (p, 10,
+		 "rd_parallel_2\",42.06666666666667],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 11,
+		 "of_origin\",41.5],PARAMETER[\"central_meridian\",-93.5],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 13,
+		 "orthing\",1000000],AUTHORITY[\"EPSG\",\"3536\"],AXIS[\"X");
+    add_srs_wkt (p, 14, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3537, "epsg", 3537,
+		      "NAD83(NSRS2007) / Iowa North (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.99");
+    add_proj4text (p, 2,
+		   "99898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Iowa North (ft US)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.26");
+    add_srs_wkt (p, 10,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",42.06666");
+    add_srs_wkt (p, 11,
+		 "666666667],PARAMETER[\"latitude_of_origin\",41.5],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"central_meridian\",-93.5],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 13,
+		 "g\",4921250],PARAMETER[\"false_northing\",3280833.333300");
+    add_srs_wkt (p, 14,
+		 "001],AUTHORITY[\"EPSG\",\"3537\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 15, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3538, "epsg", 3538,
+		      "NAD83(NSRS2007) / Iowa South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Iowa South\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",41.78333333333333],PARAMETER[\"standa");
+    add_srs_wkt (p, 10,
+		 "rd_parallel_2\",40.61666666666667],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 11,
+		 "of_origin\",40],PARAMETER[\"central_meridian\",-93.5],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 13,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3538\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 14, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3539, "epsg", 3539,
+		      "NAD83(NSRS2007) / Iowa South (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +");
+    add_proj4text (p, 2,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Iowa South (ft US)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.78");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",40.61666");
+    add_srs_wkt (p, 11,
+		 "666666667],PARAMETER[\"latitude_of_origin\",40],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"central_meridian\",-93.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 13,
+		 ",1640416.6667],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 14,
+		 "[\"EPSG\",\"3539\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3540, "epsg", 3540,
+		      "NAD83(NSRS2007) / Kansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kansas North\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",39.78333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 10,
+		 "dard_parallel_2\",38.71666666666667],PARAMETER[\"latitud");
+    add_srs_wkt (p, 11,
+		 "e_of_origin\",38.33333333333334],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 12,
+		 "idian\",-98],PARAMETER[\"false_easting\",400000],PARAMET");
+    add_srs_wkt (p, 13,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3540\"],AX");
+    add_srs_wkt (p, 14, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3541, "epsg", 3541,
+		      "NAD83(NSRS2007) / Kansas North (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999");
+    add_proj4text (p, 2,
+		   "8984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=u");
+    add_proj4text (p, 3, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kansas North (ft US)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 9,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 10,
+		 "9.78333333333333],PARAMETER[\"standard_parallel_2\",38.7");
+    add_srs_wkt (p, 11,
+		 "1666666666667],PARAMETER[\"latitude_of_origin\",38.33333");
+    add_srs_wkt (p, 12,
+		 "333333334],PARAMETER[\"central_meridian\",-98],PARAMETER");
+    add_srs_wkt (p, 13,
+		 "[\"false_easting\",1312333.3333],PARAMETER[\"false_north");
+    add_srs_wkt (p, 14,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3541\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 15, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3542, "epsg", 3542,
+		      "NAD83(NSRS2007) / Kansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y");
+    add_proj4text (p, 2,
+		   "_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kansas South\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",38.56666666666667],PARAMETER[\"stan");
+    add_srs_wkt (p, 10,
+		 "dard_parallel_2\",37.26666666666667],PARAMETER[\"latitud");
+    add_srs_wkt (p, 11,
+		 "e_of_origin\",36.66666666666666],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 12,
+		 "idian\",-98.5],PARAMETER[\"false_easting\",400000],PARAM");
+    add_srs_wkt (p, 13,
+		 "ETER[\"false_northing\",400000],AUTHORITY[\"EPSG\",\"354");
+    add_srs_wkt (p, 14, "2\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3543, "epsg", 3543,
+		      "NAD83(NSRS2007) / Kansas South (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99");
+    add_proj4text (p, 2,
+		   "998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,");
+    add_proj4text (p, 3, "0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kansas South (ft US)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 9,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 10,
+		 "8.56666666666667],PARAMETER[\"standard_parallel_2\",37.2");
+    add_srs_wkt (p, 11,
+		 "6666666666667],PARAMETER[\"latitude_of_origin\",36.66666");
+    add_srs_wkt (p, 12,
+		 "666666666],PARAMETER[\"central_meridian\",-98.5],PARAMET");
+    add_srs_wkt (p, 13,
+		 "ER[\"false_easting\",1312333.3333],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 14,
+		 "thing\",1312333.3333],AUTHORITY[\"EPSG\",\"3543\"],AXIS[");
+    add_srs_wkt (p, 15, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3544, "epsg", 3544,
+		      "NAD83(NSRS2007) / Kentucky North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kentucky North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",37.96666666666667],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",38.96666666666667],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",37.5],PARAMETER[\"central_meridian\",-84.");
+    add_srs_wkt (p, 12,
+		 "25],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 13,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3544\"],AXIS[\"X\",");
+    add_srs_wkt (p, 14, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3545, "epsg", 3545,
+		      "NAD83(NSRS2007) / Kentucky North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no");
+    add_proj4text (p, 3, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kentucky North (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "37.96666666666667],PARAMETER[\"standard_parallel_2\",38.");
+    add_srs_wkt (p, 11,
+		 "96666666666667],PARAMETER[\"latitude_of_origin\",37.5],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"central_meridian\",-84.25],PARAMETER[\"false_");
+    add_srs_wkt (p, 13,
+		 "easting\",1640416.667],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 14,
+		 "UTHORITY[\"EPSG\",\"3545\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 15, "NORTH]]");
+    p = add_epsg_def (first, last, 3546, "epsg", 3546,
+		      "NAD83(NSRS2007) / Kentucky Single Zone");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 ");
+    add_proj4text (p, 2,
+		   "+y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 3, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kentucky Single Zone\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_1\",37.08333333333334],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"standard_parallel_2\",38.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",36.33333333333334],PARAMETER[\"cent");
+    add_srs_wkt (p, 12,
+		 "ral_meridian\",-85.75],PARAMETER[\"false_easting\",15000");
+    add_srs_wkt (p, 13,
+		 "00],PARAMETER[\"false_northing\",1000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 14, "SG\",\"3546\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3547, "epsg", 3547,
+		      "NAD83(NSRS2007) / Kentucky Single Zone (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 ");
+    add_proj4text (p, 2,
+		   "+y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 3, ",0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kentucky Single Zone (ftUS)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spati");
+    add_srs_wkt (p, 2,
+		 "al_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006");
+    add_srs_wkt (p, 8,
+		 "096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lam");
+    add_srs_wkt (p, 9,
+		 "bert_Conformal_Conic_2SP\"],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 10,
+		 "l_1\",37.08333333333334],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 11,
+		 "\",38.66666666666666],PARAMETER[\"latitude_of_origin\",3");
+    add_srs_wkt (p, 12,
+		 "6.33333333333334],PARAMETER[\"central_meridian\",-85.75]");
+    add_srs_wkt (p, 13,
+		 ",PARAMETER[\"false_easting\",4921250],PARAMETER[\"false_");
+    add_srs_wkt (p, 14,
+		 "northing\",3280833.333],AUTHORITY[\"EPSG\",\"3547\"],AXI");
+    add_srs_wkt (p, 15, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3548, "epsg", 3548,
+		      "NAD83(NSRS2007) / Kentucky South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +");
+    add_proj4text (p, 2,
+		   "y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kentucky South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",37.93333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",36.73333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",36.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-85.75],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 13,
+		 "AMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 14, "548\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3549, "epsg", 3549,
+		      "NAD83(NSRS2007) / Kentucky South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 3, ",0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Kentucky South (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "37.93333333333333],PARAMETER[\"standard_parallel_2\",36.");
+    add_srs_wkt (p, 11,
+		 "73333333333333],PARAMETER[\"latitude_of_origin\",36.3333");
+    add_srs_wkt (p, 12,
+		 "3333333334],PARAMETER[\"central_meridian\",-85.75],PARAM");
+    add_srs_wkt (p, 13,
+		 "ETER[\"false_easting\",1640416.667],PARAMETER[\"false_no");
+    add_srs_wkt (p, 14,
+		 "rthing\",1640416.667],AUTHORITY[\"EPSG\",\"3549\"],AXIS[");
+    add_srs_wkt (p, 15, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3550, "epsg", 3550,
+		      "NAD83(NSRS2007) / Louisiana North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Louisiana North\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_1\",32.66666666666666],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "tandard_parallel_2\",31.16666666666667],PARAMETER[\"lati");
+    add_srs_wkt (p, 11,
+		 "tude_of_origin\",30.5],PARAMETER[\"central_meridian\",-9");
+    add_srs_wkt (p, 12,
+		 "2.5],PARAMETER[\"false_easting\",1000000],PARAMETER[\"fa");
+    add_srs_wkt (p, 13,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"3550\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3551, "epsg", 3551,
+		      "NAD83(NSRS2007) / Louisiana North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_");
+    add_proj4text (p, 3, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Louisiana North (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "32.66666666666666],PARAMETER[\"standard_parallel_2\",31.");
+    add_srs_wkt (p, 11,
+		 "16666666666667],PARAMETER[\"latitude_of_origin\",30.5],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"central_meridian\",-92.5],PARAMETER[\"false_e");
+    add_srs_wkt (p, 13,
+		 "asting\",3280833.333300001],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 14,
+		 ",0],AUTHORITY[\"EPSG\",\"3551\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 15, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3552, "epsg", 3552,
+		      "NAD83(NSRS2007) / Louisiana South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91");
+    add_proj4text (p, 1,
+		   ".33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs8");
+    add_proj4text (p, 2, "4=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Louisiana South\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_1\",30.7],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",29.3],PARAMETER[\"latitude_of_origin\",28.5],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"central_meridian\",-91.33333333333333],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",1000000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"3552\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3553, "epsg", 3553,
+		      "NAD83(NSRS2007) / Louisiana South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91");
+    add_proj4text (p, 1,
+		   ".33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Louisiana South (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "30.7],PARAMETER[\"standard_parallel_2\",29.3],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"latitude_of_origin\",28.5],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 12,
+		 "n\",-91.33333333333333],PARAMETER[\"false_easting\",3280");
+    add_srs_wkt (p, 13,
+		 "833.333300001],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 14,
+		 "[\"EPSG\",\"3553\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3554, "epsg", 3554,
+		      "NAD83(NSRS2007) / Maine CS2000 Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=5");
+    add_proj4text (p, 1,
+		   "00000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine CS2000 Central\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",43.5],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-69.125],PARAMETER[\"scale_factor\",0.99998],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3554\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3555, "epsg", 3555,
+		      "NAD83(NSRS2007) / Maine CS2000 East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0");
+    add_proj4text (p, 1,
+		   ".99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine CS2000 East\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",43.83333333333334],PARAMETER[\"central_m");
+    add_srs_wkt (p, 10,
+		 "eridian\",-67.875],PARAMETER[\"scale_factor\",0.99998],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",700000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"3555\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 13, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3556, "epsg", 3556,
+		      "NAD83(NSRS2007) / Maine CS2000 West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0");
+    add_proj4text (p, 1,
+		   ".99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine CS2000 West\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",42.83333333333334],PARAMETER[\"central_m");
+    add_srs_wkt (p, 10,
+		 "eridian\",-70.375],PARAMETER[\"scale_factor\",0.99998],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",300000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"3556\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 13, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3557, "epsg", 3557,
+		      "NAD83(NSRS2007) / Maine East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine East\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",43.66666666666666],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",-68.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",300000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3557\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3558, "epsg", 3558,
+		      "NAD83(NSRS2007) / Maine West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine West\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",42.83333333333334],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",-70.16666666666667],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 11,
+		 "966667],PARAMETER[\"false_easting\",900000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3558\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3559, "epsg", 3559,
+		      "NAD83(NSRS2007) / Maryland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maryland\",GEOGCS[\"NAD83(NSR");
+    add_srs_wkt (p, 1,
+		 "S2007)\",DATUM[\"NAD83_National_Spatial_Reference_System");
+    add_srs_wkt (p, 2,
+		 "_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4759\"");
+    add_srs_wkt (p, 7,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",39.45],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 10,
+		 ",38.3],PARAMETER[\"latitude_of_origin\",37.6666666666666");
+    add_srs_wkt (p, 11,
+		 "6],PARAMETER[\"central_meridian\",-77],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_easting\",400000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"3559\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 14, "H]]");
+    p = add_epsg_def (first, last, 3560, "epsg", 3560,
+		      "NAD83 / Utah North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "0001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83");
+    add_proj4text (p, 3, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah North (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",41.7833333");
+    add_srs_wkt (p, 9,
+		 "3333333],PARAMETER[\"standard_parallel_2\",40.7166666666");
+    add_srs_wkt (p, 10,
+		 "6667],PARAMETER[\"latitude_of_origin\",40.33333333333334");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_easting\",1640416.6667],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "3280833.333300001],AUTHORITY[\"EPSG\",\"3560\"],AXIS[\"X");
+    add_srs_wkt (p, 14, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3561, "epsg", 3561,
+		      "Old Hawaiian / Hawaii zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.");
+    add_proj4text (p, 1,
+		   "999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +u");
+    add_proj4text (p, 2, "nits=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Old Hawaiian / Hawaii zone 1\",GEOGCS[\"Old Haw");
+    add_srs_wkt (p, 1,
+		 "aiian\",DATUM[\"Old_Hawaiian\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6135\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4135\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",18.83333333333");
+    add_srs_wkt (p, 9,
+		 "333],PARAMETER[\"central_meridian\",-155.5],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.999966667],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"3561\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3562, "epsg", 3562,
+		      "Old Hawaiian / Hawaii zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=clrk66 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Old Hawaiian / Hawaii zone 2\",GEOGCS[\"Old Haw");
+    add_srs_wkt (p, 1,
+		 "aiian\",DATUM[\"Old_Hawaiian\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6135\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4135\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",20.33333333333");
+    add_srs_wkt (p, 9,
+		 "333],PARAMETER[\"central_meridian\",-156.6666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"3562\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 3563, "epsg", 3563,
+		      "Old Hawaiian / Hawaii zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99");
+    add_proj4text (p, 1,
+		   "999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=u");
+    add_proj4text (p, 2, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Old Hawaiian / Hawaii zone 3\",GEOGCS[\"Old Haw");
+    add_srs_wkt (p, 1,
+		 "aiian\",DATUM[\"Old_Hawaiian\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6135\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4135\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",21.16666666666");
+    add_srs_wkt (p, 9,
+		 "667],PARAMETER[\"central_meridian\",-158],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",0.99999],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 12, "563\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3564, "epsg", 3564,
+		      "Old Hawaiian / Hawaii zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.");
+    add_proj4text (p, 1,
+		   "99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units");
+    add_proj4text (p, 2, "=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Old Hawaiian / Hawaii zone 4\",GEOGCS[\"Old Haw");
+    add_srs_wkt (p, 1,
+		 "aiian\",DATUM[\"Old_Hawaiian\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6135\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4135\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",21.83333333333");
+    add_srs_wkt (p, 9,
+		 "333],PARAMETER[\"central_meridian\",-159.5],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.99999],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "3564\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3565, "epsg", 3565,
+		      "Old Hawaiian / Hawaii zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 ");
+    add_proj4text (p, 2, "+units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Old Hawaiian / Hawaii zone 5\",GEOGCS[\"Old Haw");
+    add_srs_wkt (p, 1,
+		 "aiian\",DATUM[\"Old_Hawaiian\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6135\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4135\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",21.66666666666");
+    add_srs_wkt (p, 9,
+		 "667],PARAMETER[\"central_meridian\",-160.1666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"3565\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3566, "epsg", 3566,
+		      "NAD83 / Utah Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0");
+    add_proj4text (p, 2,
+		   "=2000000.00001016 +ellps=GRS80 +datum=NAD83 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah Central (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_");
+    add_srs_wkt (p, 8,
+		 "Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.65],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"standard_parallel_2\",39.01666666666667],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",38.33333333333334],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-111.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",1640416.6667],PARAMETER[\"false_northing\",6561666.6667");
+    add_srs_wkt (p, 13,
+		 "00001],AUTHORITY[\"EPSG\",\"3566\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3567, "epsg", 3567,
+		      "NAD83 / Utah South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0");
+    add_proj4text (p, 2,
+		   "=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah South (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",38.35],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_2\",37.21666666666667],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"latitude_of_origin\",36.66666666666666],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"central_meridian\",-111.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",1640416.6667],PARAMETER[\"false_northing\",9842500.0000");
+    add_srs_wkt (p, 13,
+		 "00002],AUTHORITY[\"EPSG\",\"3567\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3568, "epsg", 3568,
+		      "NAD83(HARN) / Utah North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "0001016 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah North (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",41.78333333333333],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",40.71666666666667],PARAMETER[\"latitude_of_origi");
+    add_srs_wkt (p, 11,
+		 "n\",40.33333333333334],PARAMETER[\"central_meridian\",-1");
+    add_srs_wkt (p, 12,
+		 "11.5],PARAMETER[\"false_easting\",1640416.6667],PARAMETE");
+    add_srs_wkt (p, 13,
+		 "R[\"false_northing\",3280833.333300001],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 14, "\",\"3568\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3569, "epsg", 3569,
+		      "NAD83(HARN) / Utah Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0");
+    add_proj4text (p, 2,
+		   "=2000000.00001016 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah Central (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_1\",40.65],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 10,
+		 "39.01666666666667],PARAMETER[\"latitude_of_origin\",38.3");
+    add_srs_wkt (p, 11,
+		 "3333333333334],PARAMETER[\"central_meridian\",-111.5],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_easting\",1640416.6667],PARAMETER[\"fals");
+    add_srs_wkt (p, 13,
+		 "e_northing\",6561666.666700001],AUTHORITY[\"EPSG\",\"356");
+    add_srs_wkt (p, 14, "9\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3570, "epsg", 3570,
+		      "NAD83(HARN) / Utah South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0");
+    add_proj4text (p, 2, "=3000000 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Utah South (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",38.35],PARAMETER[\"standard_parallel_2\",37.2");
+    add_srs_wkt (p, 10,
+		 "1666666666667],PARAMETER[\"latitude_of_origin\",36.66666");
+    add_srs_wkt (p, 11,
+		 "666666666],PARAMETER[\"central_meridian\",-111.5],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_easting\",1640416.6667],PARAMETER[\"false_no");
+    add_srs_wkt (p, 13,
+		 "rthing\",9842500.000000002],AUTHORITY[\"EPSG\",\"3570\"]");
+    add_srs_wkt (p, 14, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3571, "epsg", 3571,
+		      "WGS 84 / North Pole LAEA Bering Sea");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS");
+    add_proj4text (p, 1, "84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / North Pole LAEA Bering Sea\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,");
+    add_srs_wkt (p, 2,
+		 "298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_center\",90],PARAMETER[\"longitude_of_center\",180],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",0],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 10,
+		 "\",0],AUTHORITY[\"EPSG\",\"3571\"],AXIS[\"X\",UNKNOWN],A");
+    add_srs_wkt (p, 11, "XIS[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3572, "epsg", 3572,
+		      "WGS 84 / North Pole LAEA Alaska");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WG");
+    add_proj4text (p, 1, "S84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / North Pole LAEA Alaska\",GEOGCS[\"WGS ");
+    add_srs_wkt (p, 1,
+		 "84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.");
+    add_srs_wkt (p, 2,
+		 "257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"L");
+    add_srs_wkt (p, 7,
+		 "ambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_c");
+    add_srs_wkt (p, 8,
+		 "enter\",90],PARAMETER[\"longitude_of_center\",-150],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"false_easting\",0],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 10,
+		 "0],AUTHORITY[\"EPSG\",\"3572\"],AXIS[\"X\",UNKNOWN],AXIS");
+    add_srs_wkt (p, 11, "[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3573, "epsg", 3573,
+		      "WGS 84 / North Pole LAEA Canada");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WG");
+    add_proj4text (p, 1, "S84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / North Pole LAEA Canada\",GEOGCS[\"WGS ");
+    add_srs_wkt (p, 1,
+		 "84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.");
+    add_srs_wkt (p, 2,
+		 "257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"L");
+    add_srs_wkt (p, 7,
+		 "ambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_c");
+    add_srs_wkt (p, 8,
+		 "enter\",90],PARAMETER[\"longitude_of_center\",-100],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"false_easting\",0],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 10,
+		 "0],AUTHORITY[\"EPSG\",\"3573\"],AXIS[\"X\",UNKNOWN],AXIS");
+    add_srs_wkt (p, 11, "[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3574, "epsg", 3574,
+		      "WGS 84 / North Pole LAEA Atlantic");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS");
+    add_proj4text (p, 1, "84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / North Pole LAEA Atlantic\",GEOGCS[\"WG");
+    add_srs_wkt (p, 1,
+		 "S 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,29");
+    add_srs_wkt (p, 2,
+		 "8.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "center\",90],PARAMETER[\"longitude_of_center\",-40],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"false_easting\",0],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 10,
+		 "0],AUTHORITY[\"EPSG\",\"3574\"],AXIS[\"X\",UNKNOWN],AXIS");
+    add_srs_wkt (p, 11, "[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3575, "epsg", 3575,
+		      "WGS 84 / North Pole LAEA Europe");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS8");
+    add_proj4text (p, 1, "4 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / North Pole LAEA Europe\",GEOGCS[\"WGS ");
+    add_srs_wkt (p, 1,
+		 "84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.");
+    add_srs_wkt (p, 2,
+		 "257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"L");
+    add_srs_wkt (p, 7,
+		 "ambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_c");
+    add_srs_wkt (p, 8,
+		 "enter\",90],PARAMETER[\"longitude_of_center\",10],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"false_easting\",0],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 10,
+		 ",AUTHORITY[\"EPSG\",\"3575\"],AXIS[\"X\",UNKNOWN],AXIS[\"");
+    add_srs_wkt (p, 11, "Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3576, "epsg", 3576,
+		      "WGS 84 / North Pole LAEA Russia");
+    add_proj4text (p, 0,
+		   "+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS8");
+    add_proj4text (p, 1, "4 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / North Pole LAEA Russia\",GEOGCS[\"WGS ");
+    add_srs_wkt (p, 1,
+		 "84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.");
+    add_srs_wkt (p, 2,
+		 "257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"L");
+    add_srs_wkt (p, 7,
+		 "ambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_c");
+    add_srs_wkt (p, 8,
+		 "enter\",90],PARAMETER[\"longitude_of_center\",90],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"false_easting\",0],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 10,
+		 ",AUTHORITY[\"EPSG\",\"3576\"],AXIS[\"X\",UNKNOWN],AXIS[\"");
+    add_srs_wkt (p, 11, "Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3577, "epsg", 3577,
+		      "GDA94 / Australian Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / Australian Albers\",GEOGCS[\"GDA94\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Albers_Conic_");
+    add_srs_wkt (p, 8,
+		 "Equal_Area\"],PARAMETER[\"standard_parallel_1\",-18],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_2\",-36],PARAMETER[\"latitude");
+    add_srs_wkt (p, 10,
+		 "_of_center\",0],PARAMETER[\"longitude_of_center\",132],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",0],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",0],AUTHORITY[\"EPSG\",\"3577\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Northing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_12 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 3578, "epsg", 3578, "NAD83 / Yukon Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +");
+    add_proj4text (p, 1,
+		   "lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum");
+    add_proj4text (p, 2, "=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Yukon Albers\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_par");
+    add_srs_wkt (p, 8,
+		 "allel_1\",61.66666666666666],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 9,
+		 "el_2\",68],PARAMETER[\"latitude_of_center\",59],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"longitude_of_center\",-132.5],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",500000],PARAMETER[\"false_northing\",500000],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"3578\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 3579, "epsg", 3579,
+		      "NAD83(CSRS) / Yukon Albers");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +");
+    add_proj4text (p, 1,
+		   "lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Yukon Albers\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",61.66666666666666],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",68],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_center\",59],PARAMETER[\"longitude_of_center\",-132");
+    add_srs_wkt (p, 11,
+		 ".5],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",500000],AUTHORITY[\"EPSG\",\"3579\"],AXIS[\"");
+    add_srs_wkt (p, 13, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3580, "epsg", 3580, "NAD83 / NWT Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=");
+    add_proj4text (p, 1,
+		   "0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / NWT Lambert\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",62],PARAMETER[\"standard_parallel_2\",70],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",-112],PARAMETER[\"false_easting\",0],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3580\"],AXI");
+    add_srs_wkt (p, 12, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3581, "epsg", 3581,
+		      "NAD83(CSRS) / NWT Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=");
+    add_proj4text (p, 1, "0 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / NWT Lambert\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",62],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",70],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 10,
+		 "\",0],PARAMETER[\"central_meridian\",-112],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",0],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"3581\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 3582, "epsg", 3582,
+		      "NAD83(NSRS2007) / Maryland (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maryland (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,AU");
+    add_srs_wkt (p, 8,
+		 "THORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conform");
+    add_srs_wkt (p, 9,
+		 "al_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.45]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"standard_parallel_2\",38.3],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",37.66666666666666],PARAMETER[\"central");
+    add_srs_wkt (p, 12,
+		 "_meridian\",-77],PARAMETER[\"false_easting\",1312333.333");
+    add_srs_wkt (p, 13,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 14, "582\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3583, "epsg", 3583,
+		      "NAD83(NSRS2007) / Massachusetts Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Massachusetts Island\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_1\",41.48333333333333],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"standard_parallel_2\",41.28333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",41],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 12,
+		 "-70.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 13,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"3583\"],AXIS[\"X");
+    add_srs_wkt (p, 14, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3584, "epsg", 3584,
+		      "NAD83(NSRS2007) / Massachusetts Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0");
+    add_proj4text (p, 2,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_de");
+    add_proj4text (p, 3, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Massachusetts Island (ftUS)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spati");
+    add_srs_wkt (p, 2,
+		 "al_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006");
+    add_srs_wkt (p, 8,
+		 "096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lam");
+    add_srs_wkt (p, 9,
+		 "bert_Conformal_Conic_2SP\"],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 10,
+		 "l_1\",41.48333333333333],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 11,
+		 "\",41.28333333333333],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 12,
+		 "1],PARAMETER[\"central_meridian\",-70.5],PARAMETER[\"fal");
+    add_srs_wkt (p, 13,
+		 "se_easting\",1640416.667],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 14,
+		 "],AUTHORITY[\"EPSG\",\"3584\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 15, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3585, "epsg", 3585,
+		      "NAD83(NSRS2007) / Massachusetts Mainland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Massachusetts Mainland\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 8,
+		 "001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"standard_parallel_1\",42.68333333333333],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"standard_parallel_2\",41.71666666666667],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"latitude_of_origin\",41],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 12,
+		 ",-71.5],PARAMETER[\"false_easting\",200000],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",750000],AUTHORITY[\"EPSG\",\"3585\"],AX");
+    add_srs_wkt (p, 14, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3586, "epsg", 3586,
+		      "NAD83(NSRS2007) / Massachusetts Mainland (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=7");
+    add_proj4text (p, 2,
+		   "50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Massachusetts Mainland (ftUS)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spa");
+    add_srs_wkt (p, 2,
+		 "tial_Reference_System_2007\",SPHEROID[\"GRS 1980\",63781");
+    add_srs_wkt (p, 3,
+		 "37,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 5,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 6,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.30480");
+    add_srs_wkt (p, 8,
+		 "06096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"L");
+    add_srs_wkt (p, 9,
+		 "ambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_1\",42.68333333333333],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 11,
+		 "_2\",41.71666666666667],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 12,
+		 ",41],PARAMETER[\"central_meridian\",-71.5],PARAMETER[\"f");
+    add_srs_wkt (p, 13,
+		 "alse_easting\",656166.667],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 14,
+		 "2460625],AUTHORITY[\"EPSG\",\"3586\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 15, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3587, "epsg", 3587,
+		      "NAD83(NSRS2007) / Michigan Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43");
+    add_proj4text (p, 1,
+		   ".31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +");
+    add_proj4text (p, 2,
+		   "y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Michigan Central\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",45.7],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 10,
+		 "llel_2\",44.18333333333333],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 11,
+		 "in\",43.31666666666667],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 12,
+		 "84.36666666666666],PARAMETER[\"false_easting\",6000000],");
+    add_srs_wkt (p, 13,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"358");
+    add_srs_wkt (p, 14, "7\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3588, "epsg", 3588,
+		      "NAD83(NSRS2007) / Michigan Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43");
+    add_proj4text (p, 1,
+		   ".31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.9");
+    add_proj4text (p, 2,
+		   "99976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +uni");
+    add_proj4text (p, 3, "ts=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Michigan Central (ft)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9002\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"standard_parallel_1\",45.7],PARAMETER[\"stan");
+    add_srs_wkt (p, 10,
+		 "dard_parallel_2\",44.18333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 11,
+		 "e_of_origin\",43.31666666666667],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 12,
+		 "idian\",-84.36666666666666],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 13,
+		 "19685039.37],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 14, "EPSG\",\"3588\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3589, "epsg", 3589,
+		      "NAD83(NSRS2007) / Michigan North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_def");
+    add_proj4text (p, 3, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Michigan North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",47.08333333333334],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",45.48333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",44.78333333333333],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-87],PARAMETER[\"false_easting\",8000000],PARAM");
+    add_srs_wkt (p, 13,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3589\"],");
+    add_srs_wkt (p, 14, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3590, "epsg", 3590,
+		      "NAD83(NSRS2007) / Michigan North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999");
+    add_proj4text (p, 2,
+		   "968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units");
+    add_proj4text (p, 3, "=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Michigan North (ft)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9002\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_1\",47.08333333333334],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"standard_parallel_2\",45.48333333333333],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"latitude_of_origin\",44.78333333333333],PARAMETER[\"c");
+    add_srs_wkt (p, 12,
+		 "entral_meridian\",-87],PARAMETER[\"false_easting\",26246");
+    add_srs_wkt (p, 13,
+		 "719.16],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 14, "\",\"3590\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3591, "epsg", 3591,
+		      "NAD83(NSRS2007) / Michigan Oblique Mercator");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=33");
+    add_proj4text (p, 1,
+		   "7.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +el");
+    add_proj4text (p, 2, "lps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Michigan Oblique Mercator\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial");
+    add_srs_wkt (p, 2,
+		 "_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 3,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"latitude_of_center\",45.30916666666666],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"longitude_of_center\",-86],PARAMETER[\"azimuth\",337");
+    add_srs_wkt (p, 11,
+		 ".25556],PARAMETER[\"rectified_grid_angle\",337.25556],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 13,
+		 "ng\",2546731.496],PARAMETER[\"false_northing\",-4354009.");
+    add_srs_wkt (p, 14,
+		 "816],AUTHORITY[\"EPSG\",\"3591\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 15, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3592, "epsg", 3592,
+		      "NAD83(NSRS2007) / Michigan South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41");
+    add_proj4text (p, 1,
+		   ".5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Michigan South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",43.66666666666666],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",42.1],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",41.5],PARAMETER[\"central_meridian\",-84.36666666666666");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",4000000],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"3592\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 14, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3593, "epsg", 3593,
+		      "NAD83(NSRS2007) / Michigan South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41");
+    add_proj4text (p, 1,
+		   ".5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 ");
+    add_proj4text (p, 2,
+		   "+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Michigan South (ft)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9002\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_1\",43.66666666666666],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"standard_parallel_2\",42.1],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 11,
+		 "f_origin\",41.5],PARAMETER[\"central_meridian\",-84.3666");
+    add_srs_wkt (p, 12,
+		 "6666666666],PARAMETER[\"false_easting\",13123359.58],PAR");
+    add_srs_wkt (p, 13,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3593\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3594, "epsg", 3594,
+		      "NAD83(NSRS2007) / Minnesota Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +to");
+    add_proj4text (p, 2, "wgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota Central\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",47.05],PARAMETER[\"standard_par");
+    add_srs_wkt (p, 10,
+		 "allel_2\",45.61666666666667],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 11,
+		 "gin\",45],PARAMETER[\"central_meridian\",-94.25],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",800000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",100000],AUTHORITY[\"EPSG\",\"3594\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 14, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3595, "epsg", 3595,
+		      "NAD83(NSRS2007) / Minnesota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y");
+    add_proj4text (p, 2,
+		   "_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota North\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_1\",48.63333333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "tandard_parallel_2\",47.03333333333333],PARAMETER[\"lati");
+    add_srs_wkt (p, 11,
+		 "tude_of_origin\",46.5],PARAMETER[\"central_meridian\",-9");
+    add_srs_wkt (p, 12,
+		 "3.1],PARAMETER[\"false_easting\",800000],PARAMETER[\"fal");
+    add_srs_wkt (p, 13,
+		 "se_northing\",100000],AUTHORITY[\"EPSG\",\"3595\"],AXIS[");
+    add_srs_wkt (p, 14, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3596, "epsg", 3596,
+		      "NAD83(NSRS2007) / Minnesota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=");
+    add_proj4text (p, 2, "GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota South\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_1\",45.21666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "tandard_parallel_2\",43.78333333333333],PARAMETER[\"lati");
+    add_srs_wkt (p, 11,
+		 "tude_of_origin\",43],PARAMETER[\"central_meridian\",-94]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_easting\",800000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 13,
+		 "orthing\",100000],AUTHORITY[\"EPSG\",\"3596\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3597, "epsg", 3597,
+		      "NAD83(NSRS2007) / Mississippi East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Mississippi East\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",29.5],PARAMETER[\"central_meridian\",-88");
+    add_srs_wkt (p, 10,
+		 ".83333333333333],PARAMETER[\"scale_factor\",0.99995],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",300000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3597\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 13, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3598, "epsg", 3598,
+		      "NAD83(NSRS2007) / Mississippi East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84");
+    add_proj4text (p, 2, "=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Mississippi East (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 8,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transver");
+    add_srs_wkt (p, 9,
+		 "se_Mercator\"],PARAMETER[\"latitude_of_origin\",29.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"central_meridian\",-88.83333333333333],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"scale_factor\",0.99995],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",984250.0000000002],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 13,
+		 "ORITY[\"EPSG\",\"3598\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 3599, "epsg", 3599,
+		      "NAD83(NSRS2007) / Mississippi West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Mississippi West\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",29.5],PARAMETER[\"central_meridian\",-90");
+    add_srs_wkt (p, 10,
+		 ".33333333333333],PARAMETER[\"scale_factor\",0.99995],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",700000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3599\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 13, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3600, "epsg", 3600,
+		      "NAD83(NSRS2007) / Mississippi West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84");
+    add_proj4text (p, 2, "=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Mississippi West (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 8,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transver");
+    add_srs_wkt (p, 9,
+		 "se_Mercator\"],PARAMETER[\"latitude_of_origin\",29.5],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"central_meridian\",-90.33333333333333],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"scale_factor\",0.99995],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2296583.333],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"3600\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3601, "epsg", 3601,
+		      "NAD83(NSRS2007) / Missouri Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,");
+    add_proj4text (p, 2, "0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Missouri Central\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",35.83333333333334],PARAMETER[\"central_m");
+    add_srs_wkt (p, 10,
+		 "eridian\",-92.5],PARAMETER[\"scale_factor\",0.999933333]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3601\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3602, "epsg", 3602,
+		      "NAD83(NSRS2007) / Missouri East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,");
+    add_proj4text (p, 2, "0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Missouri East\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",35.83333333333334],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",-90.5],PARAMETER[\"scale_factor\",0.999933333],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",250000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3602\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3603, "epsg", 3603,
+		      "NAD83(NSRS2007) / Missouri West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,");
+    add_proj4text (p, 2, "0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Missouri West\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",36.16666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",-94.5],PARAMETER[\"scale_factor\",0.999941177],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",850000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3603\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3604, "epsg", 3604,
+		      "NAD83(NSRS2007) / Montana");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5");
+    add_proj4text (p, 1,
+		   " +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Montana\",GEOGCS[\"NAD83(NSRS");
+    add_srs_wkt (p, 1,
+		 "2007)\",DATUM[\"NAD83_National_Spatial_Reference_System_");
+    add_srs_wkt (p, 2,
+		 "2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4759\"]");
+    add_srs_wkt (p, 7,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_1\",49],PARAMETER[\"standard_parallel_2\",45]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"latitude_of_origin\",44.25],PARAMETER[\"cen");
+    add_srs_wkt (p, 11,
+		 "tral_meridian\",-109.5],PARAMETER[\"false_easting\",6000");
+    add_srs_wkt (p, 12,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3604\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3605, "epsg", 3605,
+		      "NAD83(NSRS2007) / Montana (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5");
+    add_proj4text (p, 1,
+		   " +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,");
+    add_proj4text (p, 2, "0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Montana (ft)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",49],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 10,
+		 "el_2\",45],PARAMETER[\"latitude_of_origin\",44.25],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"central_meridian\",-109.5],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",1968503.937],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"3605\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 14, "H]]");
+    p = add_epsg_def (first, last, 3606, "epsg", 3606,
+		      "NAD83(NSRS2007) / Nebraska");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 2, "0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nebraska\",GEOGCS[\"NAD83(NSR");
+    add_srs_wkt (p, 1,
+		 "S2007)\",DATUM[\"NAD83_National_Spatial_Reference_System");
+    add_srs_wkt (p, 2,
+		 "_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4759\"");
+    add_srs_wkt (p, 7,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",43],PARAMETER[\"standard_parallel_2\",40");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"latitude_of_origin\",39.83333333333334],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"central_meridian\",-100],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"3606\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3607, "epsg", 3607,
+		      "NAD83(NSRS2007) / Nevada Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 2, "0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nevada Central\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",34.75],PARAMETER[\"central_meridian\",-116.");
+    add_srs_wkt (p, 10,
+		 "6666666666667],PARAMETER[\"scale_factor\",0.9999],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",6000000],AUTHORITY[\"EPSG\",\"3607\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3608, "epsg", 3608,
+		      "NAD83(NSRS2007) / Nevada Central (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +tow");
+    add_proj4text (p, 2, "gs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nevada Central (ft US)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transvers");
+    add_srs_wkt (p, 9,
+		 "e_Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"central_meridian\",-116.6666666666667],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "1640416.6667],PARAMETER[\"false_northing\",19685000],AUT");
+    add_srs_wkt (p, 13,
+		 "HORITY[\"EPSG\",\"3608\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 3609, "epsg", 3609,
+		      "NAD83(NSRS2007) / Nevada East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 2, "0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nevada East\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",34.75],PARAMETER[\"central_meridian\",-115.58");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_easting\",200000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",8000000],AUTHORITY[\"EPSG\",\"3609\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3610, "epsg", 3610,
+		      "NAD83(NSRS2007) / Nevada East (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=");
+    add_proj4text (p, 2, "GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nevada East (ft US)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"central_meridian\",-115.5833333333333],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",65");
+    add_srs_wkt (p, 12,
+		 "6166.6667],PARAMETER[\"false_northing\",26246666.6667000");
+    add_srs_wkt (p, 13,
+		 "1],AUTHORITY[\"EPSG\",\"3610\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3611, "epsg", 3611,
+		      "NAD83(NSRS2007) / Nevada West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 2, "0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nevada West\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",34.75],PARAMETER[\"central_meridian\",-118.58");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_easting\",800000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",4000000],AUTHORITY[\"EPSG\",\"3611\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3612, "epsg", 3612,
+		      "NAD83(NSRS2007) / Nevada West (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps");
+    add_proj4text (p, 2, "=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nevada West (ft US)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",34.75],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"central_meridian\",-118.5833333333333],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",26");
+    add_srs_wkt (p, 12,
+		 "24666.6667],PARAMETER[\"false_northing\",13123333.3333],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"3612\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 3613, "epsg", 3613,
+		      "NAD83(NSRS2007) / New Hampshire");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,");
+    add_proj4text (p, 2, "0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Hampshire\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",42.5],PARAMETER[\"central_meridian\",-71.66");
+    add_srs_wkt (p, 10,
+		 "666666666667],PARAMETER[\"scale_factor\",0.999966667],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",300000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3613\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3614, "epsg", 3614,
+		      "NAD83(NSRS2007) / New Hampshire (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +tow");
+    add_proj4text (p, 2, "gs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Hampshire (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 9,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",42.5],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"central_meridian\",-71.66666666666667],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"scale_factor\",0.999966667],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",984250.0000000002],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 13,
+		 "THORITY[\"EPSG\",\"3614\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 14, "ORTH]]");
+    p = add_epsg_def (first, last, 3615, "epsg", 3615,
+		      "NAD83(NSRS2007) / New Jersey");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Jersey\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",38.83333333333334],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",-74.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",150000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3615\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3616, "epsg", 3616,
+		      "NAD83(NSRS2007) / New Jersey (ft US)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Jersey (ft US)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 9,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",38.83333333333");
+    add_srs_wkt (p, 10,
+		 "334],PARAMETER[\"central_meridian\",-74.5],PARAMETER[\"s");
+    add_srs_wkt (p, 11,
+		 "cale_factor\",0.9999],PARAMETER[\"false_easting\",492125");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 13, "616\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3617, "epsg", 3617,
+		      "NAD83(NSRS2007) / New Mexico Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=5000");
+    add_proj4text (p, 1,
+		   "00 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Mexico Central\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",31],PARAMETER[\"central_meridian\",-106.");
+    add_srs_wkt (p, 10,
+		 "25],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"3617\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 3618, "epsg", 3618,
+		      "NAD83(NSRS2007) / New Mexico Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=5000");
+    add_proj4text (p, 1,
+		   "00.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Mexico Central (ftUS)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial");
+    add_srs_wkt (p, 2,
+		 "_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 3,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609");
+    add_srs_wkt (p, 8,
+		 "6012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Trans");
+    add_srs_wkt (p, 9,
+		 "verse_Mercator\"],PARAMETER[\"latitude_of_origin\",31],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"central_meridian\",-106.25],PARAMETER[\"scale");
+    add_srs_wkt (p, 11,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",1640416.66");
+    add_srs_wkt (p, 12,
+		 "7],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3618\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3619, "epsg", 3619,
+		      "NAD83(NSRS2007) / New Mexico East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Mexico East\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",31],PARAMETER[\"central_meridian\",-104.3");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"scale_factor\",0.999909091],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",165000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3619\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3620, "epsg", 3620,
+		      "NAD83(NSRS2007) / New Mexico East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Mexico East (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transvers");
+    add_srs_wkt (p, 9,
+		 "e_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"central_meridian\",-104.3333333333333],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.999909091],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",541337.5],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 13, "PSG\",\"3620\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3621, "epsg", 3621,
+		      "NAD83(NSRS2007) / New Mexico West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Mexico West\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 9,
+		 "de_of_origin\",31],PARAMETER[\"central_meridian\",-107.8");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"scale_factor\",0.999916667],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",830000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3621\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3622, "epsg", 3622,
+		      "NAD83(NSRS2007) / New Mexico West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs");
+    add_proj4text (p, 2, "84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New Mexico West (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transvers");
+    add_srs_wkt (p, 9,
+		 "e_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"central_meridian\",-107.8333333333333],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.999916667],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2723091.667],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"3622\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3623, "epsg", 3623,
+		      "NAD83(NSRS2007) / New York Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York Central\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",40],PARAMETER[\"central_meridian\",-76.5");
+    add_srs_wkt (p, 10,
+		 "8333333333333],PARAMETER[\"scale_factor\",0.9999375],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",250000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"3623\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 13, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3624, "epsg", 3624,
+		      "NAD83(NSRS2007) / New York Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84");
+    add_proj4text (p, 2, "=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York Central (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 8,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transver");
+    add_srs_wkt (p, 9,
+		 "se_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"central_meridian\",-76.58333333333333],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",820208.3330000002],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 13,
+		 "ORITY[\"EPSG\",\"3624\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 3625, "epsg", 3625,
+		      "NAD83(NSRS2007) / New York East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York East\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",38.83333333333334],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",-74.5],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",150000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3625\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3626, "epsg", 3626,
+		      "NAD83(NSRS2007) / New York East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York East (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 9,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",38.8333333");
+    add_srs_wkt (p, 10,
+		 "3333334],PARAMETER[\"central_meridian\",-74.5],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",49");
+    add_srs_wkt (p, 12,
+		 "2125],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"3626\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3627, "epsg", 3627,
+		      "NAD83(NSRS2007) / New York Long Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York Long Island\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_1\",41.03333333333333],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"standard_parallel_2\",40.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",40.16666666666666],PARAMETER[\"cent");
+    add_srs_wkt (p, 12,
+		 "ral_meridian\",-74],PARAMETER[\"false_easting\",300000],");
+    add_srs_wkt (p, 13,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"362");
+    add_srs_wkt (p, 14, "7\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3628, "epsg", 3628,
+		      "NAD83(NSRS2007) / New York Long Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000");
+    add_proj4text (p, 2,
+		   "000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units");
+    add_proj4text (p, 3, "=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York Long Island (ftUS)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spati");
+    add_srs_wkt (p, 2,
+		 "al_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006");
+    add_srs_wkt (p, 8,
+		 "096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lam");
+    add_srs_wkt (p, 9,
+		 "bert_Conformal_Conic_2SP\"],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 10,
+		 "l_1\",41.03333333333333],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 11,
+		 "\",40.66666666666666],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 12,
+		 "0.16666666666666],PARAMETER[\"central_meridian\",-74],PA");
+    add_srs_wkt (p, 13,
+		 "RAMETER[\"false_easting\",984250.0000000002],PARAMETER[\"");
+    add_srs_wkt (p, 14,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3628\"],AXIS[\"");
+    add_srs_wkt (p, 15, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3629, "epsg", 3629,
+		      "NAD83(NSRS2007) / New York West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York West\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",40],PARAMETER[\"central_meridian\",-78.5833");
+    add_srs_wkt (p, 10,
+		 "3333333333],PARAMETER[\"scale_factor\",0.9999375],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",350000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",0],AUTHORITY[\"EPSG\",\"3629\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3630, "epsg", 3630,
+		      "NAD83(NSRS2007) / New York West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84");
+    add_proj4text (p, 2, "=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / New York West (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 9,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",40],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"central_meridian\",-78.58333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "scale_factor\",0.9999375],PARAMETER[\"false_easting\",11");
+    add_srs_wkt (p, 12,
+		 "48291.667],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 13, "PSG\",\"3630\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3631, "epsg", 3631,
+		      "NAD83(NSRS2007) / North Carolina");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / North Carolina\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",36.16666666666666],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",34.33333333333334],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",33.75],PARAMETER[\"central_meridian\",-79");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",609601.22],PARAMETER[\"fal");
+    add_srs_wkt (p, 13,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"3631\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3632, "epsg", 3632,
+		      "NAD83(NSRS2007) / North Carolina (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2,
+		   "0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / North Carolina (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "36.16666666666666],PARAMETER[\"standard_parallel_2\",34.");
+    add_srs_wkt (p, 11,
+		 "33333333333334],PARAMETER[\"latitude_of_origin\",33.75],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"central_meridian\",-79],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 13,
+		 "sting\",2000000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 14,
+		 "TY[\"EPSG\",\"3632\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 15, "]");
+    p = add_epsg_def (first, last, 3633, "epsg", 3633,
+		      "NAD83(NSRS2007) / North Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / North Dakota North\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",48.73333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",47.43333333333333],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",47],PARAMETER[\"central_meridian\",-10");
+    add_srs_wkt (p, 12,
+		 "0.5],PARAMETER[\"false_easting\",600000],PARAMETER[\"fal");
+    add_srs_wkt (p, 13,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"3633\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3634, "epsg", 3634,
+		      "NAD83(NSRS2007) / North Dakota North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +");
+    add_proj4text (p, 2,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / North Dakota North (ft)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9002\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"standard_parallel_1\",48.73333333333333],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"standard_parallel_2\",47.43333333333333],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"latitude_of_origin\",47],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 12,
+		 "ian\",-100.5],PARAMETER[\"false_easting\",1968503.937],P");
+    add_srs_wkt (p, 13,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3634");
+    add_srs_wkt (p, 14, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3635, "epsg", 3635,
+		      "NAD83(NSRS2007) / North Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +");
+    add_proj4text (p, 2,
+		   "y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / North Dakota South\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",47.48333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",46.18333333333333],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",45.66666666666666],PARAMETER[\"central");
+    add_srs_wkt (p, 12,
+		 "_meridian\",-100.5],PARAMETER[\"false_easting\",600000],");
+    add_srs_wkt (p, 13,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"363");
+    add_srs_wkt (p, 14, "5\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3636, "epsg", 3636,
+		      "NAD83(NSRS2007) / North Dakota South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9");
+    add_proj4text (p, 2,
+		   "999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units");
+    add_proj4text (p, 3, "=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / North Dakota South (ft)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9002\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"standard_parallel_1\",47.48333333333333],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"standard_parallel_2\",46.18333333333333],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"latitude_of_origin\",45.66666666666666],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"central_meridian\",-100.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 13,
+		 ",1968503.937],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 14,
+		 "\"EPSG\",\"3636\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3637, "epsg", 3637,
+		      "NAD83(NSRS2007) / Ohio North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Ohio North\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",41.7],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 10,
+		 "\",40.43333333333333],PARAMETER[\"latitude_of_origin\",3");
+    add_srs_wkt (p, 11,
+		 "9.66666666666666],PARAMETER[\"central_meridian\",-82.5],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_easting\",600000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 13,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"3637\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 14, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3638, "epsg", 3638,
+		      "NAD83(NSRS2007) / Ohio South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Ohio South\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",40.03333333333333],PARAMETER[\"standa");
+    add_srs_wkt (p, 10,
+		 "rd_parallel_2\",38.73333333333333],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 11,
+		 "of_origin\",38],PARAMETER[\"central_meridian\",-82.5],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_easting\",600000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 13,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3638\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 14, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3639, "epsg", 3639,
+		      "NAD83(NSRS2007) / Oklahoma North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oklahoma North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",36.76666666666667],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",35.56666666666667],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",35],PARAMETER[\"central_meridian\",-98],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_easting\",600000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 13,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"3639\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 14, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3640, "epsg", 3640,
+		      "NAD83(NSRS2007) / Oklahoma North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oklahoma North (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "36.76666666666667],PARAMETER[\"standard_parallel_2\",35.");
+    add_srs_wkt (p, 11,
+		 "56666666666667],PARAMETER[\"latitude_of_origin\",35],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"central_meridian\",-98],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 13,
+		 "ng\",1968500],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 14,
+		 "\"EPSG\",\"3640\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3641, "epsg", 3641,
+		      "NAD83(NSRS2007) / Oklahoma South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oklahoma South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",35.23333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",33.93333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",33.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-98],PARAMETER[\"false_easting\",600000],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3641\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3642, "epsg", 3642,
+		      "NAD83(NSRS2007) / Oklahoma South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_");
+    add_proj4text (p, 3, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oklahoma South (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "35.23333333333333],PARAMETER[\"standard_parallel_2\",33.");
+    add_srs_wkt (p, 11,
+		 "93333333333333],PARAMETER[\"latitude_of_origin\",33.3333");
+    add_srs_wkt (p, 12,
+		 "3333333334],PARAMETER[\"central_meridian\",-98],PARAMETE");
+    add_srs_wkt (p, 13,
+		 "R[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 14,
+		 ",0],AUTHORITY[\"EPSG\",\"3642\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 15, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3643, "epsg", 3643,
+		      "NAD83(NSRS2007) / Oregon Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120");
+    add_proj4text (p, 1,
+		   ".5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,");
+    add_proj4text (p, 2, "0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oregon Lambert\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",43],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "2\",45.5],PARAMETER[\"latitude_of_origin\",41.75],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-120.5],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",400000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"3643\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3644, "epsg", 3644,
+		      "NAD83(NSRS2007) / Oregon Lambert (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120");
+    add_proj4text (p, 1,
+		   ".5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 2, "0,0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oregon Lambert (ft)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9002\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_1\",43],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",45.5],PARAMETER[\"latitude_of_origin\",41.7");
+    add_srs_wkt (p, 11,
+		 "5],PARAMETER[\"central_meridian\",-120.5],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",1312335.958],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "0],AUTHORITY[\"EPSG\",\"3644\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3645, "epsg", 3645,
+		      "NAD83(NSRS2007) / Oregon North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oregon North\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",46],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 10,
+		 "\",44.33333333333334],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 11,
+		 "3.66666666666666],PARAMETER[\"central_meridian\",-120.5]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_easting\",2500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 13,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"3645\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 14, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3646, "epsg", 3646,
+		      "NAD83(NSRS2007) / Oregon North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 ");
+    add_proj4text (p, 2,
+		   "+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oregon North (ft)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "02\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_1\",46],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 10,
+		 "rallel_2\",44.33333333333334],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 11,
+		 "igin\",43.66666666666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 12,
+		 ",-120.5],PARAMETER[\"false_easting\",8202099.738],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3646\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3647, "epsg", 3647,
+		      "NAD83(NSRS2007) / Oregon South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oregon South\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",44],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 10,
+		 "\",42.33333333333334],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 11,
+		 "1.66666666666666],PARAMETER[\"central_meridian\",-120.5]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_easting\",1500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 13,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"3647\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 14, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3648, "epsg", 3648,
+		      "NAD83(NSRS2007) / Oregon South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 ");
+    add_proj4text (p, 2,
+		   "+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Oregon South (ft)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "02\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_1\",44],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 10,
+		 "rallel_2\",42.33333333333334],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 11,
+		 "igin\",41.66666666666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 12,
+		 ",-120.5],PARAMETER[\"false_easting\",4921259.843],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3648\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3649, "epsg", 3649,
+		      "NAD83(NSRS2007) / Pennsylvania North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=4");
+    add_proj4text (p, 1,
+		   "0.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Pennsylvania North\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",41.95],PARAMETER[\"standard_par");
+    add_srs_wkt (p, 10,
+		 "allel_2\",40.88333333333333],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 11,
+		 "gin\",40.16666666666666],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 12,
+		 "-77.75],PARAMETER[\"false_easting\",600000],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3649\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3650, "epsg", 3650,
+		      "NAD83(NSRS2007) / Pennsylvania North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=4");
+    add_proj4text (p, 1,
+		   "0.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Pennsylvania North (ftUS)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial");
+    add_srs_wkt (p, 2,
+		 "_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 3,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609");
+    add_srs_wkt (p, 8,
+		 "6012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambe");
+    add_srs_wkt (p, 9,
+		 "rt_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "1\",41.95],PARAMETER[\"standard_parallel_2\",40.88333333");
+    add_srs_wkt (p, 11,
+		 "333333],PARAMETER[\"latitude_of_origin\",40.166666666666");
+    add_srs_wkt (p, 12,
+		 "66],PARAMETER[\"central_meridian\",-77.75],PARAMETER[\"f");
+    add_srs_wkt (p, 13,
+		 "alse_easting\",1968500],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 14,
+		 "AUTHORITY[\"EPSG\",\"3650\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 15, ",NORTH]]");
+    p = add_epsg_def (first, last, 3651, "epsg", 3651,
+		      "NAD83(NSRS2007) / Pennsylvania South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +");
+    add_proj4text (p, 2,
+		   "y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Pennsylvania South\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",40.96666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",39.93333333333333],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",39.33333333333334],PARAMETER[\"central");
+    add_srs_wkt (p, 12,
+		 "_meridian\",-77.75],PARAMETER[\"false_easting\",600000],");
+    add_srs_wkt (p, 13,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"365");
+    add_srs_wkt (p, 14, "1\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3652, "epsg", 3652,
+		      "NAD83(NSRS2007) / Pennsylvania South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +");
+    add_proj4text (p, 2,
+		   "y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Pennsylvania South (ftUS)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial");
+    add_srs_wkt (p, 2,
+		 "_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 3,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609");
+    add_srs_wkt (p, 8,
+		 "6012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambe");
+    add_srs_wkt (p, 9,
+		 "rt_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "1\",40.96666666666667],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 11,
+		 ",39.93333333333333],PARAMETER[\"latitude_of_origin\",39.");
+    add_srs_wkt (p, 12,
+		 "33333333333334],PARAMETER[\"central_meridian\",-77.75],P");
+    add_srs_wkt (p, 13,
+		 "ARAMETER[\"false_easting\",1968500],PARAMETER[\"false_no");
+    add_srs_wkt (p, 14,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"3652\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 15, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3653, "epsg", 3653,
+		      "NAD83(NSRS2007) / Rhode Island");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0");
+    add_proj4text (p, 2, ",0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Rhode Island\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",41.08333333333334],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 10,
+		 "ian\",-71.5],PARAMETER[\"scale_factor\",0.99999375],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",100000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3653\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3654, "epsg", 3654,
+		      "NAD83(NSRS2007) / Rhode Island (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towg");
+    add_proj4text (p, 2, "s84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Rhode Island (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",41.08333333");
+    add_srs_wkt (p, 10,
+		 "333334],PARAMETER[\"central_meridian\",-71.5],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.99999375],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",328083.3333],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"3654\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3655, "epsg", 3655,
+		      "NAD83(NSRS2007) / South Carolina");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31");
+    add_proj4text (p, 1,
+		   ".83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / South Carolina\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",34.83333333333334],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",32.5],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",31.83333333333333],PARAMETER[\"central_meridian\",-81],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_easting\",609600],PARAMETER[\"false_no");
+    add_srs_wkt (p, 13,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"3655\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 14, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3656, "epsg", 3656,
+		      "NAD83(NSRS2007) / South Carolina (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31");
+    add_proj4text (p, 1,
+		   ".83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / South Carolina (ft)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9002\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_1\",34.83333333333334],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"standard_parallel_2\",32.5],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 11,
+		 "f_origin\",31.83333333333333],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 12,
+		 "an\",-81],PARAMETER[\"false_easting\",2000000],PARAMETER");
+    add_srs_wkt (p, 13,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3656\"],AXIS");
+    add_srs_wkt (p, 14, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3657, "epsg", 3657,
+		      "NAD83(NSRS2007) / South Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_def");
+    add_proj4text (p, 3, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / South Dakota North\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",45.68333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",44.41666666666666],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",43.83333333333334],PARAMETER[\"central");
+    add_srs_wkt (p, 12,
+		 "_meridian\",-100],PARAMETER[\"false_easting\",600000],PA");
+    add_srs_wkt (p, 13,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3657\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3658, "epsg", 3658,
+		      "NAD83(NSRS2007) / South Dakota North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no");
+    add_proj4text (p, 3, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / South Dakota North (ftUS)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial");
+    add_srs_wkt (p, 2,
+		 "_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 3,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609");
+    add_srs_wkt (p, 8,
+		 "6012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambe");
+    add_srs_wkt (p, 9,
+		 "rt_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "1\",45.68333333333333],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 11,
+		 ",44.41666666666666],PARAMETER[\"latitude_of_origin\",43.");
+    add_srs_wkt (p, 12,
+		 "83333333333334],PARAMETER[\"central_meridian\",-100],PAR");
+    add_srs_wkt (p, 13,
+		 "AMETER[\"false_easting\",1968500],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 14,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3658\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 15, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3659, "epsg", 3659,
+		      "NAD83(NSRS2007) / South Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_de");
+    add_proj4text (p, 3, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / South Dakota South\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",44.4],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 10,
+		 "llel_2\",42.83333333333334],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 11,
+		 "in\",42.33333333333334],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 12,
+		 "100.3333333333333],PARAMETER[\"false_easting\",600000],P");
+    add_srs_wkt (p, 13,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3659");
+    add_srs_wkt (p, 14, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3660, "epsg", 3660,
+		      "NAD83(NSRS2007) / South Dakota South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / South Dakota South (ftUS)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial");
+    add_srs_wkt (p, 2,
+		 "_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 3,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 5,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609");
+    add_srs_wkt (p, 8,
+		 "6012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambe");
+    add_srs_wkt (p, 9,
+		 "rt_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "1\",44.4],PARAMETER[\"standard_parallel_2\",42.833333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"latitude_of_origin\",42.3333333333333");
+    add_srs_wkt (p, 12,
+		 "4],PARAMETER[\"central_meridian\",-100.3333333333333],PA");
+    add_srs_wkt (p, 13,
+		 "RAMETER[\"false_easting\",1968500],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 14,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"3660\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 15, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3661, "epsg", 3661,
+		      "NAD83(NSRS2007) / Tennessee");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Tennessee\",GEOGCS[\"NAD83(NS");
+    add_srs_wkt (p, 1,
+		 "RS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syste");
+    add_srs_wkt (p, 2,
+		 "m_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4759");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_1\",36.41666666666666],PARAMETER[\"standar");
+    add_srs_wkt (p, 10,
+		 "d_parallel_2\",35.25],PARAMETER[\"latitude_of_origin\",3");
+    add_srs_wkt (p, 11,
+		 "4.33333333333334],PARAMETER[\"central_meridian\",-86],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_easting\",600000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 13,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"3661\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 14, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3662, "epsg", 3662,
+		      "NAD83(NSRS2007) / Tennessee (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Tennessee (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.41");
+    add_srs_wkt (p, 10,
+		 "666666666666],PARAMETER[\"standard_parallel_2\",35.25],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"latitude_of_origin\",34.33333333333334],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"central_meridian\",-86],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 13,
+		 "\",1968500],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 14, "EPSG\",\"3662\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3663, "epsg", 3663,
+		      "NAD83(NSRS2007) / Texas Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 3, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas Central\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_S");
+    add_srs_wkt (p, 2,
+		 "ystem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",31.88333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",30.11666666666667],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",29.66666666666667],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-100.3333333333333],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 13,
+		 ",700000],PARAMETER[\"false_northing\",3000000],AUTHORITY");
+    add_srs_wkt (p, 14,
+		 "[\"EPSG\",\"3663\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3664, "epsg", 3664,
+		      "NAD83(NSRS2007) / Texas Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84");
+    add_proj4text (p, 3, "=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas Central (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 8,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 9,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 10,
+		 "1.88333333333333],PARAMETER[\"standard_parallel_2\",30.1");
+    add_srs_wkt (p, 11,
+		 "1666666666667],PARAMETER[\"latitude_of_origin\",29.66666");
+    add_srs_wkt (p, 12,
+		 "666666667],PARAMETER[\"central_meridian\",-100.333333333");
+    add_srs_wkt (p, 13,
+		 "3333],PARAMETER[\"false_easting\",2296583.333],PARAMETER");
+    add_srs_wkt (p, 14,
+		 "[\"false_northing\",9842500.000000002],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 15, ",\"3664\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3665, "epsg", 3665,
+		      "NAD83(NSRS2007) / Texas Centric Albers Equal Area");
+    add_proj4text (p, 0,
+		   "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x");
+    add_proj4text (p, 1,
+		   "_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas Centric Albers Equal Ar");
+    add_srs_wkt (p, 1,
+		 "ea\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_S");
+    add_srs_wkt (p, 2,
+		 "patial_Reference_System_2007\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 3,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84");
+    add_srs_wkt (p, 4,
+		 "[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 5,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 6,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 8,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"standard_parallel_1\",27.5],PARAMETER[\"st");
+    add_srs_wkt (p, 10,
+		 "andard_parallel_2\",35],PARAMETER[\"latitude_of_center\"");
+    add_srs_wkt (p, 11,
+		 ",18],PARAMETER[\"longitude_of_center\",-100],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",1500000],PARAMETER[\"false_northing\",60");
+    add_srs_wkt (p, 13,
+		 "00000],AUTHORITY[\"EPSG\",\"3665\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3666, "epsg", 3666,
+		      "NAD83(NSRS2007) / Texas Centric Lambert Conformal");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x");
+    add_proj4text (p, 1,
+		   "_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas Centric Lambert Conform");
+    add_srs_wkt (p, 1,
+		 "al\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_S");
+    add_srs_wkt (p, 2,
+		 "patial_Reference_System_2007\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 3,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84");
+    add_srs_wkt (p, 4,
+		 "[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 5,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 6,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 8,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 9,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",27.5],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"standard_parallel_2\",35],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 11,
+		 "in\",18],PARAMETER[\"central_meridian\",-100],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",1500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "5000000],AUTHORITY[\"EPSG\",\"3666\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 14, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3667, "epsg", 3667,
+		      "NAD83(NSRS2007) / Texas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas North\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",36.18333333333333],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",34.65],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",34],PARAMETER[\"central_meridian\",-101.5],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",200000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 13,
+		 "0000],AUTHORITY[\"EPSG\",\"3667\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 14, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3668, "epsg", 3668,
+		      "NAD83(NSRS2007) / Texas North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.99989");
+    add_proj4text (p, 2,
+		   "83998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.18");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",34.65],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"latitude_of_origin\",34],PARAMETER[\"central_");
+    add_srs_wkt (p, 12,
+		 "meridian\",-101.5],PARAMETER[\"false_easting\",656166.66");
+    add_srs_wkt (p, 13,
+		 "7],PARAMETER[\"false_northing\",3280833.333],AUTHORITY[\"");
+    add_srs_wkt (p, 14, "EPSG\",\"3668\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3669, "epsg", 3669,
+		      "NAD83(NSRS2007) / Texas North Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas North Central\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_1\",33.96666666666667],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"standard_parallel_2\",32.13333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",31.66666666666667],PARAMETER[\"cent");
+    add_srs_wkt (p, 12,
+		 "ral_meridian\",-98.5],PARAMETER[\"false_easting\",600000");
+    add_srs_wkt (p, 13,
+		 "],PARAMETER[\"false_northing\",2000000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 14, "\",\"3669\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3670, "epsg", 3670,
+		      "NAD83(NSRS2007) / Texas North Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 3, "units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas North Central (ftUS)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatia");
+    add_srs_wkt (p, 2,
+		 "l_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 3,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060");
+    add_srs_wkt (p, 8,
+		 "96012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 9,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 10,
+		 "_1\",33.96666666666667],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 11,
+		 ",32.13333333333333],PARAMETER[\"latitude_of_origin\",31.");
+    add_srs_wkt (p, 12,
+		 "66666666666667],PARAMETER[\"central_meridian\",-98.5],PA");
+    add_srs_wkt (p, 13,
+		 "RAMETER[\"false_easting\",1968500],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 14,
+		 "thing\",6561666.667],AUTHORITY[\"EPSG\",\"3670\"],AXIS[\"");
+    add_srs_wkt (p, 15, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3671, "epsg", 3671,
+		      "NAD83(NSRS2007) / Texas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y");
+    add_proj4text (p, 2,
+		   "_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas South\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",27.83333333333333],PARAMETER[\"stand");
+    add_srs_wkt (p, 10,
+		 "ard_parallel_2\",26.16666666666667],PARAMETER[\"latitude");
+    add_srs_wkt (p, 11,
+		 "_of_origin\",25.66666666666667],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 12,
+		 "dian\",-98.5],PARAMETER[\"false_easting\",300000],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",5000000],AUTHORITY[\"EPSG\",\"367");
+    add_srs_wkt (p, 14, "1\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3672, "epsg", 3672,
+		      "NAD83(NSRS2007) / Texas South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.00");
+    add_proj4text (p, 2,
+		   "00000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 3, "0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",27.83");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",26.16666");
+    add_srs_wkt (p, 11,
+		 "666666667],PARAMETER[\"latitude_of_origin\",25.666666666");
+    add_srs_wkt (p, 12,
+		 "66667],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_easting\",984250.0000000002],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 14,
+		 "thing\",16404166.667],AUTHORITY[\"EPSG\",\"3672\"],AXIS[");
+    add_srs_wkt (p, 15, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3673, "epsg", 3673,
+		      "NAD83(NSRS2007) / Texas South Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas South Central\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_1\",30.28333333333333],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"standard_parallel_2\",28.38333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",27.83333333333333],PARAMETER[\"cent");
+    add_srs_wkt (p, 12,
+		 "ral_meridian\",-99],PARAMETER[\"false_easting\",600000],");
+    add_srs_wkt (p, 13,
+		 "PARAMETER[\"false_northing\",4000000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"3673\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3674, "epsg", 3674,
+		      "NAD83(NSRS2007) / Texas South Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +un");
+    add_proj4text (p, 3, "its=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Texas South Central (ftUS)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatia");
+    add_srs_wkt (p, 2,
+		 "l_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 3,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060");
+    add_srs_wkt (p, 8,
+		 "96012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 9,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 10,
+		 "_1\",30.28333333333333],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 11,
+		 ",28.38333333333333],PARAMETER[\"latitude_of_origin\",27.");
+    add_srs_wkt (p, 12,
+		 "83333333333333],PARAMETER[\"central_meridian\",-99],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_easting\",1968500],PARAMETER[\"false_north");
+    add_srs_wkt (p, 14,
+		 "ing\",13123333.333],AUTHORITY[\"EPSG\",\"3674\"],AXIS[\"");
+    add_srs_wkt (p, 15, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3675, "epsg", 3675,
+		      "NAD83(NSRS2007) / Utah Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 ");
+    add_proj4text (p, 2,
+		   "+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah Central\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_1\",40.65],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 10,
+		 "l_2\",39.01666666666667],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",38.33333333333334],PARAMETER[\"central_meridian\",-111.");
+    add_srs_wkt (p, 12,
+		 "5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",2000000],AUTHORITY[\"EPSG\",\"3675\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3676, "epsg", 3676,
+		      "NAD83(NSRS2007) / Utah Central (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=");
+    add_proj4text (p, 2,
+		   "1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 3, "s=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah Central (ft)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "02\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"standard_parallel_1\",40.65],PARAMETER[\"standard");
+    add_srs_wkt (p, 10,
+		 "_parallel_2\",39.01666666666667],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 11,
+		 "_origin\",38.33333333333334],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 12,
+		 "n\",-111.5],PARAMETER[\"false_easting\",1640419.948],PAR");
+    add_srs_wkt (p, 13,
+		 "AMETER[\"false_northing\",6561679.79],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"3676\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3677, "epsg", 3677,
+		      "NAD83(NSRS2007) / Utah Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0");
+    add_proj4text (p, 2,
+		   "=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 3, "nits=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah Central (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Con");
+    add_srs_wkt (p, 9,
+		 "formal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40");
+    add_srs_wkt (p, 10,
+		 ".65],PARAMETER[\"standard_parallel_2\",39.01666666666667");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"latitude_of_origin\",38.33333333333334],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"central_meridian\",-111.5],PARAMETER[\"false_e");
+    add_srs_wkt (p, 13,
+		 "asting\",1640416.6667],PARAMETER[\"false_northing\",6561");
+    add_srs_wkt (p, 14,
+		 "666.666700001],AUTHORITY[\"EPSG\",\"3677\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 15, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3678, "epsg", 3678,
+		      "NAD83(NSRS2007) / Utah North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +");
+    add_proj4text (p, 2,
+		   "y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah North\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",41.78333333333333],PARAMETER[\"standa");
+    add_srs_wkt (p, 10,
+		 "rd_parallel_2\",40.71666666666667],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 11,
+		 "of_origin\",40.33333333333334],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 12,
+		 "ian\",-111.5],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"367");
+    add_srs_wkt (p, 14, "8\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3679, "epsg", 3679,
+		      "NAD83(NSRS2007) / Utah North (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 3, "0,0,0,0,0 +units=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah North (ft)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "2\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_1\",41.78333333333333],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"standard_parallel_2\",40.71666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",40.33333333333334],PARAMETER[\"cent");
+    add_srs_wkt (p, 12,
+		 "ral_meridian\",-111.5],PARAMETER[\"false_easting\",16404");
+    add_srs_wkt (p, 13,
+		 "19.948],PARAMETER[\"false_northing\",3280839.895],AUTHOR");
+    add_srs_wkt (p, 14,
+		 "ITY[\"EPSG\",\"3679\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 15, "]]");
+    p = add_epsg_def (first, last, 3680, "epsg", 3680,
+		      "NAD83(NSRS2007) / Utah North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "0001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0");
+    add_proj4text (p, 3, ",0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.78");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",40.71666");
+    add_srs_wkt (p, 11,
+		 "666666667],PARAMETER[\"latitude_of_origin\",40.333333333");
+    add_srs_wkt (p, 12,
+		 "33334],PARAMETER[\"central_meridian\",-111.5],PARAMETER[");
+    add_srs_wkt (p, 13,
+		 "\"false_easting\",1640416.6667],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 14,
+		 "ng\",3280833.333300001],AUTHORITY[\"EPSG\",\"3680\"],AXI");
+    add_srs_wkt (p, 15, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3681, "epsg", 3681,
+		      "NAD83(NSRS2007) / Utah South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 ");
+    add_proj4text (p, 2,
+		   "+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah South\",GEOGCS[\"NAD83(N");
+    add_srs_wkt (p, 1,
+		 "SRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Syst");
+    add_srs_wkt (p, 2,
+		 "em_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"475");
+    add_srs_wkt (p, 7,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_1\",38.35],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 10,
+		 "2\",37.21666666666667],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 11,
+		 "36.66666666666666],PARAMETER[\"central_meridian\",-111.5");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 13,
+		 "northing\",3000000],AUTHORITY[\"EPSG\",\"3681\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3682, "epsg", 3682,
+		      "NAD83(NSRS2007) / Utah South (ft)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=");
+    add_proj4text (p, 2,
+		   "2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 3, "s=ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah South (ft)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"foot\",0.3048,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "2\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_1\",38.35],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",37.21666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",36.66666666666666],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-111.5],PARAMETER[\"false_easting\",1640419.948],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",9842519.685],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"3682\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3683, "epsg", 3683,
+		      "NAD83(NSRS2007) / Utah South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0");
+    add_proj4text (p, 2,
+		   "=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Utah South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.35");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"standard_parallel_2\",37.21666666666667],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"latitude_of_origin\",36.66666666666666],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"central_meridian\",-111.5],PARAMETER[\"false_east");
+    add_srs_wkt (p, 13,
+		 "ing\",1640416.6667],PARAMETER[\"false_northing\",9842500");
+    add_srs_wkt (p, 14,
+		 ".000000002],AUTHORITY[\"EPSG\",\"3683\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 15, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3684, "epsg", 3684,
+		      "NAD83(NSRS2007) / Vermont");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0");
+    add_proj4text (p, 1,
+		   "=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Vermont\",GEOGCS[\"NAD83(NSRS");
+    add_srs_wkt (p, 1,
+		 "2007)\",DATUM[\"NAD83_National_Spatial_Reference_System_");
+    add_srs_wkt (p, 2,
+		 "2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4759\"]");
+    add_srs_wkt (p, 7,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",42.5],PARAMETER[\"central_meridian\",-72.5],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",0.999964286],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"3684\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3685, "epsg", 3685,
+		      "NAD83(NSRS2007) / Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +");
+    add_proj4text (p, 2,
+		   "ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Virginia North\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",39.2],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 10,
+		 "l_2\",38.03333333333333],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",37.66666666666666],PARAMETER[\"central_meridian\",-78.5");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",3500000],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",2000000],AUTHORITY[\"EPSG\",\"3685\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3686, "epsg", 3686,
+		      "NAD83(NSRS2007) / Virginia North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2");
+    add_proj4text (p, 2,
+		   "000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 3, "s=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Virginia North (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "39.2],PARAMETER[\"standard_parallel_2\",38.0333333333333");
+    add_srs_wkt (p, 11,
+		 "3],PARAMETER[\"latitude_of_origin\",37.66666666666666],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"central_meridian\",-78.5],PARAMETER[\"false_e");
+    add_srs_wkt (p, 13,
+		 "asting\",11482916.667],PARAMETER[\"false_northing\",6561");
+    add_srs_wkt (p, 14,
+		 "666.667],AUTHORITY[\"EPSG\",\"3686\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 15, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3687, "epsg", 3687,
+		      "NAD83(NSRS2007) / Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +");
+    add_proj4text (p, 2,
+		   "y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Virginia South\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",37.96666666666667],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",36.76666666666667],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",36.33333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 12,
+		 "ridian\",-78.5],PARAMETER[\"false_easting\",3500000],PAR");
+    add_srs_wkt (p, 13,
+		 "AMETER[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 14, "3687\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3688, "epsg", 3688,
+		      "NAD83(NSRS2007) / Virginia South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0");
+    add_proj4text (p, 2,
+		   "001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,");
+    add_proj4text (p, 3, "0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Virginia South (ftUS)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Ref");
+    add_srs_wkt (p, 2,
+		 "erence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "37.96666666666667],PARAMETER[\"standard_parallel_2\",36.");
+    add_srs_wkt (p, 11,
+		 "76666666666667],PARAMETER[\"latitude_of_origin\",36.3333");
+    add_srs_wkt (p, 12,
+		 "3333333334],PARAMETER[\"central_meridian\",-78.5],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_easting\",11482916.667],PARAMETER[\"false_no");
+    add_srs_wkt (p, 14,
+		 "rthing\",3280833.333],AUTHORITY[\"EPSG\",\"3688\"],AXIS[");
+    add_srs_wkt (p, 15, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3689, "epsg", 3689,
+		      "NAD83(NSRS2007) / Washington North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47");
+    add_proj4text (p, 1,
+		   " +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Washington North\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",48.73333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",47.5],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 11,
+		 "in\",47],PARAMETER[\"central_meridian\",-120.83333333333");
+    add_srs_wkt (p, 12,
+		 "33],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 13,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3689\"],AXIS[\"X\",");
+    add_srs_wkt (p, 14, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3690, "epsg", 3690,
+		      "NAD83(NSRS2007) / Washington North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47");
+    add_proj4text (p, 1,
+		   " +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0");
+    add_proj4text (p, 2,
+		   " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_de");
+    add_proj4text (p, 3, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Washington North (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 8,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 9,
+		 "Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 10,
+		 ",48.73333333333333],PARAMETER[\"standard_parallel_2\",47");
+    add_srs_wkt (p, 11,
+		 ".5],PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"cen");
+    add_srs_wkt (p, 12,
+		 "tral_meridian\",-120.8333333333333],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 13,
+		 "sting\",1640416.667],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 14,
+		 "HORITY[\"EPSG\",\"3690\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 15, "RTH]]");
+    p = add_epsg_def (first, last, 3691, "epsg", 3691,
+		      "NAD83(NSRS2007) / Washington South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +");
+    add_proj4text (p, 2,
+		   "y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Washington South\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",47.33333333333334],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "standard_parallel_2\",45.83333333333334],PARAMETER[\"lat");
+    add_srs_wkt (p, 11,
+		 "itude_of_origin\",45.33333333333334],PARAMETER[\"central");
+    add_srs_wkt (p, 12,
+		 "_meridian\",-120.5],PARAMETER[\"false_easting\",500000],");
+    add_srs_wkt (p, 13,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"369");
+    add_srs_wkt (p, 14, "1\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3692, "epsg", 3692,
+		      "NAD83(NSRS2007) / Washington South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0");
+    add_proj4text (p, 2,
+		   "001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +un");
+    add_proj4text (p, 3, "its=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Washington South (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_R");
+    add_srs_wkt (p, 2,
+		 "eference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 8,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 9,
+		 "Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 10,
+		 ",47.33333333333334],PARAMETER[\"standard_parallel_2\",45");
+    add_srs_wkt (p, 11,
+		 ".83333333333334],PARAMETER[\"latitude_of_origin\",45.333");
+    add_srs_wkt (p, 12,
+		 "33333333334],PARAMETER[\"central_meridian\",-120.5],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_easting\",1640416.667],PARAMETER[\"false_n");
+    add_srs_wkt (p, 14,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3692\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 15, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3693, "epsg", 3693,
+		      "NAD83(NSRS2007) / West Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / West Virginia North\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_1\",40.25],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",39],PARAMETER[\"latitude_of_origin\",38.5],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"central_meridian\",-79.5],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "easting\",600000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 13,
+		 "ITY[\"EPSG\",\"3693\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 3694, "epsg", 3694,
+		      "NAD83(NSRS2007) / West Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / West Virginia South\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_1\",38.88333333333333],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"standard_parallel_2\",37.48333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",37],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 12,
+		 "-81],PARAMETER[\"false_easting\",600000],PARAMETER[\"fal");
+    add_srs_wkt (p, 13,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"3694\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3695, "epsg", 3695,
+		      "NAD83(NSRS2007) / Wisconsin Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wisconsin Central\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",45.5],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 10,
+		 "llel_2\",44.25],PARAMETER[\"latitude_of_origin\",43.8333");
+    add_srs_wkt (p, 11,
+		 "3333333334],PARAMETER[\"central_meridian\",-90],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",600000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"3695\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3696, "epsg", 3696,
+		      "NAD83(NSRS2007) / Wisconsin Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wisconsin Central (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",45.5],PARAMETER[\"standard_parallel_2\",44.25],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"latitude_of_origin\",43.83333333333334],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"central_meridian\",-90],PARAMETER[\"false_easting\",19");
+    add_srs_wkt (p, 13,
+		 "68500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 14, ",\"3696\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3697, "epsg", 3697,
+		      "NAD83(NSRS2007) / Wisconsin North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wisconsin North\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_1\",46.76666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "tandard_parallel_2\",45.56666666666667],PARAMETER[\"lati");
+    add_srs_wkt (p, 11,
+		 "tude_of_origin\",45.16666666666666],PARAMETER[\"central_");
+    add_srs_wkt (p, 12,
+		 "meridian\",-90],PARAMETER[\"false_easting\",600000],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3697\"]");
+    add_srs_wkt (p, 14, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3698, "epsg", 3698,
+		      "NAD83(NSRS2007) / Wisconsin North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_");
+    add_proj4text (p, 3, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wisconsin North (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "46.76666666666667],PARAMETER[\"standard_parallel_2\",45.");
+    add_srs_wkt (p, 11,
+		 "56666666666667],PARAMETER[\"latitude_of_origin\",45.1666");
+    add_srs_wkt (p, 12,
+		 "6666666666],PARAMETER[\"central_meridian\",-90],PARAMETE");
+    add_srs_wkt (p, 13,
+		 "R[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 14,
+		 ",0],AUTHORITY[\"EPSG\",\"3698\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 15, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3699, "epsg", 3699,
+		      "NAD83(NSRS2007) / Wisconsin South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wisconsin South\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 8,
+		 "],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_1\",44.06666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "tandard_parallel_2\",42.73333333333333],PARAMETER[\"lati");
+    add_srs_wkt (p, 11,
+		 "tude_of_origin\",42],PARAMETER[\"central_meridian\",-90]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_easting\",600000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 13,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3699\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 14, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3700, "epsg", 3700,
+		      "NAD83(NSRS2007) / Wisconsin South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wisconsin South (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "44.06666666666667],PARAMETER[\"standard_parallel_2\",42.");
+    add_srs_wkt (p, 11,
+		 "73333333333333],PARAMETER[\"latitude_of_origin\",42],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"central_meridian\",-90],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 13,
+		 "ng\",1968500],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 14,
+		 "\"EPSG\",\"3700\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3701, "epsg", 3701,
+		      "NAD83(NSRS2007) / Wisconsin Transverse Mercator");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y");
+    add_proj4text (p, 1,
+		   "_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wisconsin Transverse Mercator");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spa");
+    add_srs_wkt (p, 2,
+		 "tial_Reference_System_2007\",SPHEROID[\"GRS 1980\",63781");
+    add_srs_wkt (p, 3,
+		 "37,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 5,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 6,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 8,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",-90],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",520000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 12,
+		 "-4480000],AUTHORITY[\"EPSG\",\"3701\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3702, "epsg", 3702,
+		      "NAD83(NSRS2007) / Wyoming East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 2, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming East\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",40.5],PARAMETER[\"central_meridian\",-105.16");
+    add_srs_wkt (p, 10,
+		 "66666666667],PARAMETER[\"scale_factor\",0.9999375],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",200000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"3702\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3703, "epsg", 3703,
+		      "NAD83(NSRS2007) / Wyoming East Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0");
+    add_proj4text (p, 2, ",0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming East Central\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",40.5],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-107.3333333333333],PARAMETER[\"scale_factor\",0.999937");
+    add_srs_wkt (p, 11,
+		 "5],PARAMETER[\"false_easting\",400000],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_northing\",100000],AUTHORITY[\"EPSG\",\"3703\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3704, "epsg", 3704,
+		      "NAD83(NSRS2007) / Wyoming West Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0");
+    add_proj4text (p, 1,
+		   "=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming West Central\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refe");
+    add_srs_wkt (p, 2,
+		 "rence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 3,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",40.5],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-108.75],PARAMETER[\"scale_factor\",0.9999375],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_easting\",600000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3704\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3705, "epsg", 3705,
+		      "NAD83(NSRS2007) / Wyoming West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0");
+    add_proj4text (p, 2, ",0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming West\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",40.5],PARAMETER[\"central_meridian\",-110.08");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",0.9999375],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",800000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",100000],AUTHORITY[\"EPSG\",\"3705\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_13 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 3706, "epsg", 3706,
+		      "NAD83(NSRS2007) / UTM zone 59N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 59N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",171],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3706\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3707, "epsg", 3707,
+		      "NAD83(NSRS2007) / UTM zone 60N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 60N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",177],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3707\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3708, "epsg", 3708,
+		      "NAD83(NSRS2007) / UTM zone 1N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 1N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-177],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3708\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3709, "epsg", 3709,
+		      "NAD83(NSRS2007) / UTM zone 2N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 2N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-171],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3709\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3710, "epsg", 3710,
+		      "NAD83(NSRS2007) / UTM zone 3N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 3N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-165],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3710\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3711, "epsg", 3711,
+		      "NAD83(NSRS2007) / UTM zone 4N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 4N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-159],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3711\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3712, "epsg", 3712,
+		      "NAD83(NSRS2007) / UTM zone 5N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 5N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-153],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3712\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3713, "epsg", 3713,
+		      "NAD83(NSRS2007) / UTM zone 6N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 6N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-147],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3713\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3714, "epsg", 3714,
+		      "NAD83(NSRS2007) / UTM zone 7N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 7N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-141],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3714\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3715, "epsg", 3715,
+		      "NAD83(NSRS2007) / UTM zone 8N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 8N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-135],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3715\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3716, "epsg", 3716,
+		      "NAD83(NSRS2007) / UTM zone 9N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 9N\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sys");
+    add_srs_wkt (p, 2,
+		 "tem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 7,
+		 "59\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",-129],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3716\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3717, "epsg", 3717,
+		      "NAD83(NSRS2007) / UTM zone 10N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 10N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-123],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3717\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3718, "epsg", 3718,
+		      "NAD83(NSRS2007) / UTM zone 11N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 11N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-117],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3718\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3719, "epsg", 3719,
+		      "NAD83(NSRS2007) / UTM zone 12N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 12N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-111],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3719\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3720, "epsg", 3720,
+		      "NAD83(NSRS2007) / UTM zone 13N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 13N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-105],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12,
+		 "PSG\",\"3720\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3721, "epsg", 3721,
+		      "NAD83(NSRS2007) / UTM zone 14N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 14N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3721\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3722, "epsg", 3722,
+		      "NAD83(NSRS2007) / UTM zone 15N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 15N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-93],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3722\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3723, "epsg", 3723,
+		      "NAD83(NSRS2007) / UTM zone 16N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 16N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-87],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3723\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3724, "epsg", 3724,
+		      "NAD83(NSRS2007) / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 17N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3724\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3725, "epsg", 3725,
+		      "NAD83(NSRS2007) / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 18N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3725\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3726, "epsg", 3726,
+		      "NAD83(NSRS2007) / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / UTM zone 19N\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",-69],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12,
+		 "G\",\"3726\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3727, "epsg", 3727,
+		      "Reunion 1947 / TM Reunion");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Reunion 1947 / TM Reunion\",GEOGCS[\"Reunion 19");
+    add_srs_wkt (p, 1,
+		 "47\",DATUM[\"Reunion_1947\",SPHEROID[\"International 192");
+    add_srs_wkt (p, 2,
+		 "4\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6626\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4626\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",-21.11666666666667],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "55.53333333333333],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",160000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",50000],AUTHORITY[\"EPSG\",\"3727\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3728, "epsg", 3728,
+		      "NAD83(NSRS2007) / Ohio North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Ohio North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.7]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"standard_parallel_2\",40.43333333333333],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"latitude_of_origin\",39.66666666666666],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"central_meridian\",-82.5],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 13,
+		 "g\",1968500],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 14, "EPSG\",\"3728\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3729, "epsg", 3729,
+		      "NAD83(NSRS2007) / Ohio South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Ohio South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 9,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.03");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",38.73333");
+    add_srs_wkt (p, 11,
+		 "333333333],PARAMETER[\"latitude_of_origin\",38],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"central_meridian\",-82.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 13,
+		 ",1968500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 14, "SG\",\"3729\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3730, "epsg", 3730,
+		      "NAD83(NSRS2007) / Wyoming East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84");
+    add_proj4text (p, 2, "=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming East (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"central_meridian\",-105.1666666666667],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "656166.6667],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13, "EPSG\",\"3730\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3731, "epsg", 3731,
+		      "NAD83(NSRS2007) / Wyoming East Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellp");
+    add_proj4text (p, 2,
+		   "s=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming East Central (ftUS)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spati");
+    add_srs_wkt (p, 2,
+		 "al_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006");
+    add_srs_wkt (p, 8,
+		 "096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Tra");
+    add_srs_wkt (p, 9,
+		 "nsverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"central_meridian\",-107.3333333333333],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"scale_factor\",0.9999375],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 12,
+		 "sting\",1312333.3333],PARAMETER[\"false_northing\",32808");
+    add_srs_wkt (p, 13,
+		 "3.3333],AUTHORITY[\"EPSG\",\"3731\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 14, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3732, "epsg", 3732,
+		      "NAD83(NSRS2007) / Wyoming West Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0");
+    add_proj4text (p, 1,
+		   "=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 2, "s=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming West Central (ftUS)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spati");
+    add_srs_wkt (p, 2,
+		 "al_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006");
+    add_srs_wkt (p, 8,
+		 "096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Tra");
+    add_srs_wkt (p, 9,
+		 "nsverse_Mercator\"],PARAMETER[\"latitude_of_origin\",40.");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"central_meridian\",-108.75],PARAMETER[\"s");
+    add_srs_wkt (p, 11,
+		 "cale_factor\",0.9999375],PARAMETER[\"false_easting\",196");
+    add_srs_wkt (p, 12,
+		 "8500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"3732\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3733, "epsg", 3733,
+		      "NAD83(NSRS2007) / Wyoming West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +el");
+    add_proj4text (p, 2,
+		   "lps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Wyoming West (ftUS)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4759\"]],UNIT[\"US survey foot\",0.304800609601219");
+    add_srs_wkt (p, 8,
+		 "2,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 9,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"central_meridian\",-110.0833333333333],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"scale_factor\",0.9999375],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "2624666.6667],PARAMETER[\"false_northing\",328083.3333],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"3733\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 3734, "epsg", 3734,
+		      "NAD83 / Ohio North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Ohio North (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",41.7],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"standard_parallel_2\",40.43333333333333],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"latitude_of_origin\",39.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-82.5],PARAMETER[\"false_easting\",19");
+    add_srs_wkt (p, 12,
+		 "68500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"3734\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3735, "epsg", 3735,
+		      "NAD83 / Ohio South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Ohio South (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",40.0333333");
+    add_srs_wkt (p, 9,
+		 "3333333],PARAMETER[\"standard_parallel_2\",38.7333333333");
+    add_srs_wkt (p, 10,
+		 "3333],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"c");
+    add_srs_wkt (p, 11,
+		 "entral_meridian\",-82.5],PARAMETER[\"false_easting\",196");
+    add_srs_wkt (p, 12,
+		 "8500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"3735\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3736, "epsg", 3736,
+		      "NAD83 / Wyoming East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=N");
+    add_proj4text (p, 2, "AD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming East (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-105.1666666666667],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999375],PARAMETER[\"false_easting\",656166.");
+    add_srs_wkt (p, 11,
+		 "6667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"3736\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3737, "epsg", 3737,
+		      "NAD83 / Wyoming East Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming East Central (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transvers");
+    add_srs_wkt (p, 8,
+		 "e_Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",-107.3333333333333],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9999375],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",1312333.3333],PARAMETER[\"false_northing\",328083.3333]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"3737\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 3738, "epsg", 3738,
+		      "NAD83 / Wyoming West Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0");
+    add_proj4text (p, 1,
+		   "=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming West Central (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transvers");
+    add_srs_wkt (p, 8,
+		 "e_Mercator\"],PARAMETER[\"latitude_of_origin\",40.5],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",-108.75],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",0.9999375],PARAMETER[\"false_easting\",1968500],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"373");
+    add_srs_wkt (p, 12, "8\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3739, "epsg", 3739,
+		      "NAD83 / Wyoming West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +el");
+    add_proj4text (p, 2, "lps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming West (ftUS)\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercato");
+    add_srs_wkt (p, 8,
+		 "r\"],PARAMETER[\"latitude_of_origin\",40.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-110.0833333333333],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9999375],PARAMETER[\"false_easting\",2624666");
+    add_srs_wkt (p, 11,
+		 ".6667],PARAMETER[\"false_northing\",328083.3333],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"3739\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 13, "]");
+    p = add_epsg_def (first, last, 3740, "epsg", 3740,
+		      "NAD83(HARN) / UTM zone 10N");
+    add_proj4text (p, 0, "+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 10N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-123],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3740\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3741, "epsg", 3741,
+		      "NAD83(HARN) / UTM zone 11N");
+    add_proj4text (p, 0, "+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 11N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3741\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3742, "epsg", 3742,
+		      "NAD83(HARN) / UTM zone 12N");
+    add_proj4text (p, 0, "+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 12N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3742\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3743, "epsg", 3743,
+		      "NAD83(HARN) / UTM zone 13N");
+    add_proj4text (p, 0, "+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 13N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-105],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3743\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3744, "epsg", 3744,
+		      "NAD83(HARN) / UTM zone 14N");
+    add_proj4text (p, 0, "+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 14N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3744\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3745, "epsg", 3745,
+		      "NAD83(HARN) / UTM zone 15N");
+    add_proj4text (p, 0, "+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 15N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3745\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3746, "epsg", 3746,
+		      "NAD83(HARN) / UTM zone 16N");
+    add_proj4text (p, 0, "+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 16N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3746\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3747, "epsg", 3747,
+		      "NAD83(HARN) / UTM zone 17N");
+    add_proj4text (p, 0, "+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 17N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3747\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3748, "epsg", 3748,
+		      "NAD83(HARN) / UTM zone 18N");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 18N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3748\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3749, "epsg", 3749,
+		      "NAD83(HARN) / UTM zone 19N");
+    add_proj4text (p, 0, "+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 19N\",GEOGCS[\"NAD83(HAR");
+    add_srs_wkt (p, 1,
+		 "N)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"3749\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3750, "epsg", 3750,
+		      "NAD83(HARN) / UTM zone 4N");
+    add_proj4text (p, 0, "+proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 4N\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-159],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"3750\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3751, "epsg", 3751,
+		      "NAD83(HARN) / UTM zone 5N");
+    add_proj4text (p, 0, "+proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / UTM zone 5N\",GEOGCS[\"NAD83(HARN");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-153],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"3751\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3752, "epsg", 3752,
+		      "WGS 84 / Mercator 41 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=W");
+    add_proj4text (p, 1, "GS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Mercator 41 (deprecated)\",GEOGCS[\"WG");
+    add_srs_wkt (p, 1,
+		 "S 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,29");
+    add_srs_wkt (p, 2,
+		 "8.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Mercator_1SP\"],PARAMETER[\"latitude_of_origin\",-41],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"central_meridian\",100],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"3752\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 11, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3753, "epsg", 3753,
+		      "NAD83(HARN) / Ohio North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Ohio North (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",41.7],PARAMETER[\"standard_parallel_2\",40.43");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"latitude_of_origin\",39.666666");
+    add_srs_wkt (p, 11,
+		 "66666666],PARAMETER[\"central_meridian\",-82.5],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",1968500],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"3753\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3754, "epsg", 3754,
+		      "NAD83(HARN) / Ohio South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Ohio South (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",40.03333333333333],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",38.73333333333333],PARAMETER[\"latitude_of_origi");
+    add_srs_wkt (p, 11,
+		 "n\",38],PARAMETER[\"central_meridian\",-82.5],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",1968500],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "0],AUTHORITY[\"EPSG\",\"3754\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3755, "epsg", 3755,
+		      "NAD83(HARN) / Wyoming East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +units=u");
+    add_proj4text (p, 2, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming East (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",40.5],PARAMETER[\"central_meridian\",-105.16666666");
+    add_srs_wkt (p, 10,
+		 "66667],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",656166.6667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3755\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3756, "epsg", 3756,
+		      "NAD83(HARN) / Wyoming East Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming East Central (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional");
+    add_srs_wkt (p, 2,
+		 "_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",40.5],PARAMETER[\"central_meridian\",-107.3");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"scale_factor\",0.9999375],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",1312333.3333],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",328083.3333],AUTHORITY[\"EPSG\",\"3756\"],AXI");
+    add_srs_wkt (p, 13, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3757, "epsg", 3757,
+		      "NAD83(HARN) / Wyoming West Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0");
+    add_proj4text (p, 1, "=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming West Central (ftUS)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional");
+    add_srs_wkt (p, 2,
+		 "_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",40.5],PARAMETER[\"central_meridian\",-108.7");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_easting\",1968500],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 12,
+		 "THORITY[\"EPSG\",\"3757\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3758, "epsg", 3758,
+		      "NAD83(HARN) / Wyoming West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +el");
+    add_proj4text (p, 2, "lps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Wyoming West (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",40.5],PARAMETER[\"central_meridian\",-110.08333333");
+    add_srs_wkt (p, 10,
+		 "33333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",2624666.6667],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",328083.3333],AUTHORITY[\"EPSG\",\"3758\"],AXIS[\"X\",");
+    add_srs_wkt (p, 13, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3759, "epsg", 3759,
+		      "NAD83 / Hawaii zone 3 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99");
+    add_proj4text (p, 1,
+		   "999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD8");
+    add_proj4text (p, 2, "3 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Hawaii zone 3 (ftUS)\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",21.16666666666667");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-158],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99999],PARAMETER[\"false_easting\",1640416.6");
+    add_srs_wkt (p, 11,
+		 "667],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"3759\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3760, "epsg", 3760,
+		      "NAD83(HARN) / Hawaii zone 3 (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99");
+    add_proj4text (p, 1,
+		   "999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Hawaii zone 3 (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Networ");
+    add_srs_wkt (p, 2,
+		 "k\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",21.16666666666667],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-158],PARAMETER[\"scale_factor\",0.99999],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1640416.6667],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"3760\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3761, "epsg", 3761,
+		      "NAD83(CSRS) / UTM zone 22N");
+    add_proj4text (p, 0, "+proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / UTM zone 22N\",GEOGCS[\"NAD83(CSR");
+    add_srs_wkt (p, 1,
+		 "S)\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-51],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"3761\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3762, "epsg", 3762,
+		      "WGS 84 / South Georgia Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37");
+    add_proj4text (p, 1,
+		   " +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / South Georgia Lambert\",GEOGCS[\"WGS 8");
+    add_srs_wkt (p, 1,
+		 "4\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.2");
+    add_srs_wkt (p, 2,
+		 "57223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 7,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 8,
+		 "_1\",-54],PARAMETER[\"standard_parallel_2\",-54.75],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"latitude_of_origin\",-55],PARAMETER[\"central_me");
+    add_srs_wkt (p, 10,
+		 "ridian\",-37],PARAMETER[\"false_easting\",0],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3762\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3763, "epsg", 3763,
+		      "ETRS89 / Portugal TM06");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333");
+    add_proj4text (p, 1,
+		   "333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Portugal TM06\",GEOGCS[\"ETRS89\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"European_Terrestrial_Reference_System_1989\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",39.66825833333333],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-8.133108333333334],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3763\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3764, "epsg", 3764,
+		      "NZGD2000 / Chatham Island Circuit 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y");
+    add_proj4text (p, 1,
+		   "_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Chatham Island Circuit 2000\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NZGD2000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "-44],PARAMETER[\"central_meridian\",-176.5],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",400000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",800000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3764\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3765, "epsg", 3765, "HTRS96 / Croatia TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +");
+    add_proj4text (p, 1,
+		   "y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"HTRS96 / Croatia TM\",GEOGCS[\"HTRS96\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Croatian_Terrestrial_Reference_System\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6761\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4761\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",16.5],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "9],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"3765\"],AXIS[\"Easti");
+    add_srs_wkt (p, 12, "ng\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3766, "epsg", 3766, "HTRS96 / Croatia LCC");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +tow");
+    add_proj4text (p, 2, "gs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"HTRS96 / Croatia LCC\",GEOGCS[\"HTRS96\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"Croatian_Terrestrial_Reference_System\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6761\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4761\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conform");
+    add_srs_wkt (p, 8,
+		 "al_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.916");
+    add_srs_wkt (p, 9,
+		 "66666666666],PARAMETER[\"standard_parallel_2\",43.083333");
+    add_srs_wkt (p, 10,
+		 "33333334],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"central_meridian\",16.5],PARAMETER[\"false_easting\",0");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 13,
+		 "766\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3767, "epsg", 3767, "HTRS96 / UTM zone 33N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"HTRS96 / UTM zone 33N\",GEOGCS[\"HTRS96\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Croatian_Terrestrial_Reference_System\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6761\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4761\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",15],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3767\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3768, "epsg", 3768, "HTRS96 / UTM zone 34N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"HTRS96 / UTM zone 34N\",GEOGCS[\"HTRS96\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Croatian_Terrestrial_Reference_System\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6761\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4761\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",21],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3768\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3769, "epsg", 3769,
+		      "Bermuda 1957 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bermuda 1957 / UTM zone 20N\",GEOGCS[\"Bermuda ");
+    add_srs_wkt (p, 1,
+		 "1957\",DATUM[\"Bermuda_1957\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6216\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4216\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-63],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"3769\"],AXIS[\"Easting\",EAST],AXIS[\"Northin");
+    add_srs_wkt (p, 12, "g\",NORTH]]");
+    p = add_epsg_def (first, last, 3770, "epsg", 3770,
+		      "BDA2000 / Bermuda 2000 National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_");
+    add_proj4text (p, 1,
+		   "0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"BDA2000 / Bermuda 2000 National Grid\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "BDA2000\",DATUM[\"Bermuda_2000\",SPHEROID[\"WGS 84\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6762\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4762\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",32],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",-64.75],PARAMETER[\"scale_factor\",1],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",550000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",100000],AUTHORITY[\"EPSG\",\"3770\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3771, "epsg", 3771,
+		      "NAD27 / Alberta 3TM ref merid 111 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alberta 3TM ref merid 111 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-111],PARAMETER[\"scale_factor\",0.9999],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",0],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"3771\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3772, "epsg", 3772,
+		      "NAD27 / Alberta 3TM ref merid 114 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alberta 3TM ref merid 114 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-114],PARAMETER[\"scale_factor\",0.9999],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",0],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"3772\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3773, "epsg", 3773,
+		      "NAD27 / Alberta 3TM ref merid 117 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alberta 3TM ref merid 117 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-117],PARAMETER[\"scale_factor\",0.9999],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",0],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"3773\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3774, "epsg", 3774,
+		      "NAD27 / Alberta 3TM ref merid 120 W (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alberta 3TM ref merid 120 W (deprecated");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Clarke 1866\",6378206.4,294.9786982139006,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4267\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-120],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"3774\"],AXIS[\"Easting");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3775, "epsg", 3775,
+		      "NAD83 / Alberta 3TM ref merid 111 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alberta 3TM ref merid 111 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "111],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3775\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 3776, "epsg", 3776,
+		      "NAD83 / Alberta 3TM ref merid 114 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alberta 3TM ref merid 114 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "114],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3776\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 3777, "epsg", 3777,
+		      "NAD83 / Alberta 3TM ref merid 117 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alberta 3TM ref merid 117 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "117],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3777\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 3778, "epsg", 3778,
+		      "NAD83 / Alberta 3TM ref merid 120 W (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alberta 3TM ref merid 120 W (deprecated");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-120],PARAMETER[\"scale_factor\",0.9999],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",0],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"3778\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3779, "epsg", 3779,
+		      "NAD83(CSRS) / Alberta 3TM ref merid 111 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Alberta 3TM ref merid 111 W\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"614");
+    add_srs_wkt (p, 4,
+		 "0\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3779\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3780, "epsg", 3780,
+		      "NAD83(CSRS) / Alberta 3TM ref merid 114 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Alberta 3TM ref merid 114 W\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"614");
+    add_srs_wkt (p, 4,
+		 "0\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-114],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3780\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3781, "epsg", 3781,
+		      "NAD83(CSRS) / Alberta 3TM ref merid 117 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Alberta 3TM ref merid 117 W\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"614");
+    add_srs_wkt (p, 4,
+		 "0\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-117],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3781\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3782, "epsg", 3782,
+		      "NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Alberta 3TM ref merid 120 W (depr");
+    add_srs_wkt (p, 1,
+		 "ecated)\",GEOGCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_");
+    add_srs_wkt (p, 2,
+		 "Spatial_Reference_System\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",-120],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.9999],PARAMETER[\"false_easting\",0],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3782\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3783, "epsg", 3783,
+		      "Pitcairn 2006 / Pitcairn TM 2006");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.112967");
+    add_proj4text (p, 1,
+		   "1111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84");
+    add_proj4text (p, 2, "=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pitcairn 2006 / Pitcairn TM 2006\",GEOGCS[\"Pit");
+    add_srs_wkt (p, 1,
+		 "cairn 2006\",DATUM[\"Pitcairn_2006\",SPHEROID[\"WGS 84\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6763\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4763\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",-25.06855261111111],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",-130.1129671111111],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",1420");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",15500],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"3783\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 3784, "epsg", 3784,
+		      "Pitcairn 1967 / UTM zone 9S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42");
+    add_proj4text (p, 1, ",0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pitcairn 1967 / UTM zone 9S\",GEOGCS[\"Pitcairn");
+    add_srs_wkt (p, 1,
+		 " 1967\",DATUM[\"Pitcairn_1967\",SPHEROID[\"International");
+    add_srs_wkt (p, 2,
+		 " 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS8");
+    add_srs_wkt (p, 3,
+		 "4[185,165,42,0,0,0,0],AUTHORITY[\"EPSG\",\"6729\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4729\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 11,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"3784\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3785, "epsg", 3785,
+		      "Popular Visualisation CRS / Mercator (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 ");
+    add_proj4text (p, 1,
+		   "+x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext ");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Popular Visualisation CRS / Mercator (deprecate");
+    add_srs_wkt (p, 1,
+		 "d)\",GEOGCS[\"Popular Visualisation CRS\",DATUM[\"Popula");
+    add_srs_wkt (p, 2,
+		 "r_Visualisation_Datum\",SPHEROID[\"Popular Visualisation");
+    add_srs_wkt (p, 3,
+		 " Sphere\",6378137,0,AUTHORITY[\"EPSG\",\"7059\"]],TOWGS8");
+    add_srs_wkt (p, 4,
+		 "4[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6055\"]],PRIMEM[\"");
+    add_srs_wkt (p, 5,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 6,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"4055\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 8,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",0],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=637");
+    add_srs_wkt (p, 12,
+		 "8137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +unit");
+    add_srs_wkt (p, 13,
+		 "s=m +nadgrids=@null +wktext  +no_defs\"],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 14, "G\",\"3785\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3786, "epsg", 3786,
+		      "World Equidistant Cylindrical (Sphere) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6");
+    add_proj4text (p, 1, "371007 +b=6371007 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"World Equidistant Cylindrical (Sphere) (depreca");
+    add_srs_wkt (p, 1,
+		 "ted)\",GEOGCS[\"Unspecified datum based upon the GRS 198");
+    add_srs_wkt (p, 2,
+		 "0 Authalic Sphere\",DATUM[\"Not_specified_based_on_GRS_1");
+    add_srs_wkt (p, 3,
+		 "980_Authalic_Sphere\",SPHEROID[\"GRS 1980 Authalic Spher");
+    add_srs_wkt (p, 4,
+		 "e\",6371007,0,AUTHORITY[\"EPSG\",\"7048\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"6047\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4047\"]],U");
+    add_srs_wkt (p, 8,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 9,
+		 "[\"Equirectangular\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12, "PSG\",\"3786\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3787, "epsg", 3787,
+		      "MGI / Slovene National Grid (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Slovene National Grid (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137");
+    add_srs_wkt (p, 4,
+		 ",1.474,5.297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIME");
+    add_srs_wkt (p, 5,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 6,
+		 "egree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",15],PARAMETER[\"scale_factor\",0.9999],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",-5000000],AUTHORITY[\"EPSG\",\"3787\"],AXIS[\"Y\",E");
+    add_srs_wkt (p, 13, "AST],AXIS[\"X\",NORTH]]");
+    p = add_epsg_def (first, last, 3788, "epsg", 3788,
+		      "NZGD2000 / Auckland Islands TM 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=1");
+    add_proj4text (p, 1,
+		   "0000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Auckland Islands TM 2000\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NZGD2000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",166],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 10,
+		 "tor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"3788\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3789, "epsg", 3789,
+		      "NZGD2000 / Campbell Island TM 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=1");
+    add_proj4text (p, 1,
+		   "0000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Campbell Island TM 2000\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "ZGD2000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",169],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 10,
+		 "tor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"3789\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3790, "epsg", 3790,
+		      "NZGD2000 / Antipodes Islands TM 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=1");
+    add_proj4text (p, 1,
+		   "0000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Antipodes Islands TM 2000\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NZGD2000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",179],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 10,
+		 "tor\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"3790\"");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3791, "epsg", 3791,
+		      "NZGD2000 / Raoul Island TM 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=");
+    add_proj4text (p, 1,
+		   "10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Raoul Island TM 2000\",GEOGCS[\"NZGD");
+    add_srs_wkt (p, 1,
+		 "2000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metr");
+    add_srs_wkt (p, 7,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 8,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"central_meridian\",-178],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 10,
+		 "r\",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"3791\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3793, "epsg", 3793,
+		      "NZGD2000 / Chatham Islands TM 2000");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / Chatham Islands TM 2000\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "ZGD2000\",DATUM[\"New_Zealand_Geodetic_Datum_2000\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",-176.5],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",1],PARAMETER[\"false_easting\",3500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"379");
+    add_srs_wkt (p, 12,
+		 "3\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 3794, "epsg", 3794,
+		      "Slovenia 1996 / Slovene National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Slovenia 1996 / Slovene National Grid\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Slovenia 1996\",DATUM[\"Slovenia_Geodetic_Datum_1996\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6765\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4765\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",-5000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "3794\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 3795, "epsg", 3795, "NAD27 / Cuba Norte");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 ");
+    add_proj4text (p, 1,
+		   "+x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +");
+    add_proj4text (p, 2, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Cuba Norte\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",23],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 9,
+		 "2\",21.7],PARAMETER[\"latitude_of_origin\",22.35],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"central_meridian\",-81],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",280296.016],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"3795\"],AXIS[\"Y\",NORTH],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 3796, "epsg", 3796, "NAD27 / Cuba Sur");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20");
+    add_proj4text (p, 1,
+		   ".71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y");
+    add_proj4text (p, 2,
+		   "_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_de");
+    add_proj4text (p, 3, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Cuba Sur\",GEOGCS[\"NAD27\",DATUM[\"Nor");
+    add_srs_wkt (p, 1,
+		 "th_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637820");
+    add_srs_wkt (p, 2,
+		 "6.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "67\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",21.3],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 9,
+		 "2\",20.13333333333333],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 10,
+		 "20.71666666666667],PARAMETER[\"central_meridian\",-76.83");
+    add_srs_wkt (p, 11,
+		 "333333333333],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_northing\",229126.939],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3796\"],AXIS[\"Y\",NORTH],AXIS[\"X\",EAST]]");
+    p = add_epsg_def (first, last, 3797, "epsg", 3797, "NAD27 / MTQ Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=");
+    add_proj4text (p, 1,
+		   "800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / MTQ Lambert\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",50],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 9,
+		 "2\",46],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",-70],PARAMETER[\"false_easting\",8000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "3797\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3798, "epsg", 3798, "NAD83 / MTQ Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=");
+    add_proj4text (p, 1,
+		   "800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTQ Lambert\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",50],PARAMETER[\"standard_parallel_2\",46],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"central");
+    add_srs_wkt (p, 10,
+		 "_meridian\",-70],PARAMETER[\"false_easting\",800000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3798\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3799, "epsg", 3799,
+		      "NAD83(CSRS) / MTQ Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=");
+    add_proj4text (p, 1, "800000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTQ Lambert\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",50],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",46],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 10,
+		 "\",44],PARAMETER[\"central_meridian\",-70],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",800000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"3799\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3800, "epsg", 3800,
+		      "NAD27 / Alberta 3TM ref merid 120 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alberta 3TM ref merid 120 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-120],PARAMETER[\"scale_factor\",0.9999],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",0],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"3800\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3801, "epsg", 3801,
+		      "NAD83 / Alberta 3TM ref merid 120 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alberta 3TM ref merid 120 W\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "120],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3801\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 3802, "epsg", 3802,
+		      "NAD83(CSRS) / Alberta 3TM ref merid 120 W");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Alberta 3TM ref merid 120 W\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Refer");
+    add_srs_wkt (p, 2,
+		 "ence_System\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"614");
+    add_srs_wkt (p, 4,
+		 "0\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-120],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"3802\"],AXIS[\"East");
+    add_srs_wkt (p, 12, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3812, "epsg", 3812,
+		      "ETRS89 / Belgian Lambert 2008");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=64932");
+    add_proj4text (p, 2, "8 +y_0=665262 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / Belgian Lambert 2008\",GEOGCS[\"ETRS89");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"European_Terrestrial_Reference_System_1989\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",49.8333333333333");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"standard_parallel_2\",51.16666666666666],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",50.797815],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",4.359215833333333],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "easting\",649328],PARAMETER[\"false_northing\",665262],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"3812\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 14, "NORTH]]");
+    p = add_epsg_def (first, last, 3814, "epsg", 3814,
+		      "NAD83 / Mississippi TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=");
+    add_proj4text (p, 1,
+		   "500000 +y_0=1300000 +ellps=GRS80 +datum=NAD83 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Mississippi TM\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",32.5],PARAMETER[\"central_meridian\",-89.75],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9998335],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",1300000],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"3814\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 3815, "epsg", 3815,
+		      "NAD83(HARN) / Mississippi TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=");
+    add_proj4text (p, 1, "500000 +y_0=1300000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Mississippi TM\",GEOGCS[\"NAD83(H");
+    add_srs_wkt (p, 1,
+		 "ARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"central");
+    add_srs_wkt (p, 9,
+		 "_meridian\",-89.75],PARAMETER[\"scale_factor\",0.9998335");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",1300000],AUTHORITY[\"EPSG\",\"3815\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3816, "epsg", 3816,
+		      "NAD83(NSRS2007) / Mississippi TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=");
+    add_proj4text (p, 1,
+		   "500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Mississippi TM\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference_");
+    add_srs_wkt (p, 2,
+		 "System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",32.5],PARAMETER[\"central_meridian\",-89.75");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9998335],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",1300000");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"3816\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 13, "\",NORTH]]");
+    p = add_epsg_def (first, last, 3819, "epsg", 3819, "HD1909");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.3");
+    add_proj4text (p, 1, "5,4.115,-2.9383,0.853,-3.408 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"HD1909\",DATUM[\"Hungarian_Datum_1909\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7004\"]],TOWGS84[595.48,121.69,515.35,4.115,-2.93");
+    add_srs_wkt (p, 3,
+		 "83,0.853,-3.408],AUTHORITY[\"EPSG\",\"1024\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6, "THORITY[\"EPSG\",\"3819\"]]");
+    p = add_epsg_def (first, last, 3821, "epsg", 3821, "TWD67");
+    add_proj4text (p, 0, "+proj=longlat +ellps=aust_SA +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"TWD67\",DATUM[\"Taiwan_Datum_1967\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "GRS 1967 Modified\",6378160,298.25,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7050\"]],AUTHORITY[\"EPSG\",\"1025\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"3821\"]]");
+    p = add_epsg_def (first, last, 3824, "epsg", 3824, "TWD97");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"TWD97\",DATUM[\"Taiwan_Datum_1997\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1026\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"3824\"]]");
+    p = add_epsg_def (first, last, 3825, "epsg", 3825, "TWD97 / TM2 zone 119");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TWD97 / TM2 zone 119\",GEOGCS[\"TWD97\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Taiwan_Datum_1997\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 2,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"1026\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"3824\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",11");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",250000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3825\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 3826, "epsg", 3826, "TWD97 / TM2 zone 121");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TWD97 / TM2 zone 121\",GEOGCS[\"TWD97\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Taiwan_Datum_1997\",SPHEROID[\"GRS 1980\",6378137,298.25");
+    add_srs_wkt (p, 2,
+		 "7222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"1026\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"3824\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",12");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",250000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3826\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 3827, "epsg", 3827, "TWD67 / TM2 zone 119");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TWD67 / TM2 zone 119\",GEOGCS[\"TWD67\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Taiwan_Datum_1967\",SPHEROID[\"GRS 1967 Modified\",63781");
+    add_srs_wkt (p, 2,
+		 "60,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"1025\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3821\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 7,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",119],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",250000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3827\"");
+    add_srs_wkt (p, 11, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3828, "epsg", 3828, "TWD67 / TM2 zone 121");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TWD67 / TM2 zone 121\",GEOGCS[\"TWD67\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Taiwan_Datum_1967\",SPHEROID[\"GRS 1967 Modified\",63781");
+    add_srs_wkt (p, 2,
+		 "60,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"1025\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3821\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 7,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",121],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",250000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3828\"");
+    add_srs_wkt (p, 11, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3829, "epsg", 3829,
+		      "Hu Tzu Shan / UTM zone 51N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0");
+    add_proj4text (p, 1, ",0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Hu Tzu Shan / UTM zone 51N\",GEOGCS[\"Hu Tzu Sh");
+    add_srs_wkt (p, 1,
+		 "an 1950\",DATUM[\"Hu_Tzu_Shan_1950\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[-637,-549,-203,0,0,0,0],AUTHORITY[\"EPSG\",\"6236");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4236\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",123],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3829\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3832, "epsg", 3832, "WGS 84 / PDC Mercator");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 1, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / PDC Mercator\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercator_1SP\"");
+    add_srs_wkt (p, 7,
+		 "],PARAMETER[\"central_meridian\",150],PARAMETER[\"scale_");
+    add_srs_wkt (p, 8,
+		 "factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"f");
+    add_srs_wkt (p, 9,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"3832\"],AXIS[\"E");
+    add_srs_wkt (p, 10, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3833, "epsg", 3833,
+		      "Pulkovo 1942(58) / Gauss-Kruger zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Gauss-Kruger zone 2\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",2500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3833\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3834, "epsg", 3834,
+		      "Pulkovo 1942(83) / Gauss-Kruger zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / Gauss-Kruger zone 2\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",2500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"3834\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3835, "epsg", 3835,
+		      "Pulkovo 1942(83) / Gauss-Kruger zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / Gauss-Kruger zone 3\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",3500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3835\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3836, "epsg", 3836,
+		      "Pulkovo 1942(83) / Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / Gauss-Kruger zone 4\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",21],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",4500000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"3836\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 3837, "epsg", 3837,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",3500000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"3837\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3838, "epsg", 3838,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",4500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3838\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3839, "epsg", 3839,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",27],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",9500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3839\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3840, "epsg", 3840,
+		      "Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 1");
+    add_srs_wkt (p, 1,
+		 "0\",GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4179\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",30],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",10500000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"3840\"],AXIS[\"X\",NORTH],AXIS[\"Y");
+    add_srs_wkt (p, 12, "\",EAST]]");
+    p = add_epsg_def (first, last, 3841, "epsg", 3841,
+		      "Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",6500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3841\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3842, "epsg", 3842,
+		      "Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",6500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3842\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3843, "epsg", 3843,
+		      "Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4178\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",6500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"3843\"],AXIS[\"X\",NORTH],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",EAST]]");
+    p = add_epsg_def (first, last, 3844, "epsg", 3844,
+		      "Pulkovo 1942(58) / Stereo70");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=500000 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942(58) / Stereo70\",GEOGCS[\"Pulkovo ");
+    add_srs_wkt (p, 1,
+		 "1942(58)\",DATUM[\"Pulkovo_1942_58\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4179\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",46],PARAMETER[\"central_meridian\",25],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",0.99975],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",500000],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"3844\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAS");
+    add_srs_wkt (p, 12, "T]]");
+    p = add_epsg_def (first, last, 3845, "epsg", 3845,
+		      "SWEREF99 / RT90 7.5 gon V emulation");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=15");
+    add_proj4text (p, 1,
+		   "00025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 / RT90 7.5 gon V emulation\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "SWEREF99\",DATUM[\"SWEREF99\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6619\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4619\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",11.30625],PARAMETER[\"scale_factor\",1.000006],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",1500025.141],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",-667.282],AUTHORITY[\"EPSG\",\"3845\"],AXIS[");
+    add_srs_wkt (p, 12, "\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3846, "epsg", 3846,
+		      "SWEREF99 / RT90 5 gon V emulation");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.00000");
+    add_proj4text (p, 1,
+		   "58 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0");
+    add_proj4text (p, 2, ",0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 / RT90 5 gon V emulation\",GEOGCS[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",DATUM[\"SWEREF99\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6619\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4619\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",13.55626666666667],PARAMETER[\"scale_factor\",1.00");
+    add_srs_wkt (p, 10,
+		 "00058],PARAMETER[\"false_easting\",1500044.695],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",-667.13],AUTHORITY[\"EPSG\",\"3846\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3847, "epsg", 3847,
+		      "SWEREF99 / RT90 2.5 gon V emulation");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000");
+    add_proj4text (p, 1,
+		   "561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towg");
+    add_proj4text (p, 2, "s84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 / RT90 2.5 gon V emulation\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "SWEREF99\",DATUM[\"SWEREF99\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6619\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4619\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",15.80628452944445],PARAMETER[\"scale_factor\",1.0");
+    add_srs_wkt (p, 10,
+		 "0000561024],PARAMETER[\"false_easting\",1500064.274],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",-667.711],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "3847\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3848, "epsg", 3848,
+		      "SWEREF99 / RT90 0 gon emulation");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=15");
+    add_proj4text (p, 1,
+		   "00083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 / RT90 0 gon emulation\",GEOGCS[\"SWER");
+    add_srs_wkt (p, 1,
+		 "EF99\",DATUM[\"SWEREF99\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 2,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6619\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4619\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",18.0563],PARAMETER[\"scale_factor\",1.0000054],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",1500083.521],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",-668.844],AUTHORITY[\"EPSG\",\"3848\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3849, "epsg", 3849,
+		      "SWEREF99 / RT90 2.5 gon O emulation");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.00000");
+    add_proj4text (p, 1,
+		   "52 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 / RT90 2.5 gon O emulation\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "SWEREF99\",DATUM[\"SWEREF99\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6619\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4619\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",20.30631666666667],PARAMETER[\"scale_factor\",1.0");
+    add_srs_wkt (p, 10,
+		 "000052],PARAMETER[\"false_easting\",1500102.765],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",-670.706],AUTHORITY[\"EPSG\",\"384");
+    add_srs_wkt (p, 12, "9\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3850, "epsg", 3850,
+		      "SWEREF99 / RT90 5 gon O emulation");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.00000");
+    add_proj4text (p, 1,
+		   "49 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SWEREF99 / RT90 5 gon O emulation\",GEOGCS[\"SW");
+    add_srs_wkt (p, 1,
+		 "EREF99\",DATUM[\"SWEREF99\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6619\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4619\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",22.55633333333333],PARAMETER[\"scale_factor\",1.00");
+    add_srs_wkt (p, 10,
+		 "00049],PARAMETER[\"false_easting\",1500121.846],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",-672.557],AUTHORITY[\"EPSG\",\"3850");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3851, "epsg", 3851, "NZGD2000 / NZCS2000");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=17");
+    add_proj4text (p, 1,
+		   "3 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,");
+    add_proj4text (p, 2, "0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD2000 / NZCS2000\",GEOGCS[\"NZGD2000\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"New_Zealand_Geodetic_Datum_2000\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6167\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4167\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",-37.5],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_2\",-44.5],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",-41],PARAMETER[\"central_meridian\",173],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",3000000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",7000000],AUTHORITY[\"EPSG\",\"3851\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_14 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 3852, "epsg", 3852, "RSRGD2000 / DGLC2000");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.333333333");
+    add_proj4text (p, 1,
+		   "33333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RSRGD2000 / DGLC2000\",GEOGCS[\"RSRGD2000\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Ross_Sea_Region_Geodetic_Datum_2000\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6764\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4764\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Confo");
+    add_srs_wkt (p, 8,
+		 "rmal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",-76.");
+    add_srs_wkt (p, 9,
+		 "66666666666667],PARAMETER[\"standard_parallel_2\",-79.33");
+    add_srs_wkt (p, 10,
+		 "333333333333],PARAMETER[\"latitude_of_origin\",-90],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",157],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"3852\"],AXIS[\"Northing\",NORTH],AXIS[\"Easting");
+    add_srs_wkt (p, 14, "\",EAST]]");
+    p = add_epsg_def (first, last, 3854, "epsg", 3854, "County ST74");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=");
+    add_proj4text (p, 1,
+		   "100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0");
+    add_proj4text (p, 2, ",0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"County ST74\",GEOGCS[\"SWEREF99\",DATUM[\"SWERE");
+    add_srs_wkt (p, 1,
+		 "F99\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6619\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4619\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",18.05787],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",0.99999506],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",100182.7406],PARAMETER[\"false_northing\",-6500620.");
+    add_srs_wkt (p, 11,
+		 "1207],AUTHORITY[\"EPSG\",\"3854\"],AXIS[\"x\",NORTH],AXI");
+    add_srs_wkt (p, 12, "S[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 3857, "epsg", 3857,
+		      "WGS 84 / Pseudo-Mercator");
+    add_proj4text (p, 0,
+		   "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 ");
+    add_proj4text (p, 1,
+		   "+x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext ");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Pseudo-Mercator\",GEOGCS[\"WGS 84\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.2572235");
+    add_srs_wkt (p, 2,
+		 "63,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"63");
+    add_srs_wkt (p, 3,
+		 "26\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercator_1");
+    add_srs_wkt (p, 7,
+		 "SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scal");
+    add_srs_wkt (p, 8,
+		 "e_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "false_northing\",0],EXTENSION[\"PROJ4\",\"+proj=merc +a=");
+    add_srs_wkt (p, 10,
+		 "6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=");
+    add_srs_wkt (p, 11,
+		 "0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs\"],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"3857\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 3889, "epsg", 3889, "IGRS");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGRS\",DATUM[\"Iraqi_Geospatial_Reference_Syste");
+    add_srs_wkt (p, 1,
+		 "m\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"1029\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3889\"]]");
+    p = add_epsg_def (first, last, 3890, "epsg", 3890, "IGRS / UTM zone 37N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGRS / UTM zone 37N\",GEOGCS[\"IGRS\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "raqi_Geospatial_Reference_System\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1029\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"3889\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3890\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3891, "epsg", 3891, "IGRS / UTM zone 38N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGRS / UTM zone 38N\",GEOGCS[\"IGRS\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "raqi_Geospatial_Reference_System\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1029\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"3889\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3891\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3892, "epsg", 3892, "IGRS / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"IGRS / UTM zone 39N\",GEOGCS[\"IGRS\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "raqi_Geospatial_Reference_System\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1029\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"3889\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 9,
+		 "l_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"3892\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3893, "epsg", 3893,
+		      "ED50 / Iraq National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.99");
+    add_proj4text (p, 1, "94 +x_0=800000 +y_0=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / Iraq National Grid\",GEOGCS[\"ED50\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"European_Datum_1950\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",29.02626833333333],PARAMETER[\"central_meridian\",46.");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9994],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",800000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"3893\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 12, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 3906, "epsg", 3906, "MGI 1901");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"MGI 1901\",DATUM[\"MGI_1901\",SPHEROID[\"Bessel");
+    add_srs_wkt (p, 1,
+		 " 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 2,
+		 "4\"]],AUTHORITY[\"EPSG\",\"1031\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"3906\"]]");
+    p = add_epsg_def (first, last, 3907, "epsg", 3907,
+		      "MGI 1901 / Balkans zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI 1901 / Balkans zone 5\",GEOGCS[\"MGI 1901\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"MGI_1901\",SPHEROID[\"Bessel 1841\",6377397.155");
+    add_srs_wkt (p, 2,
+		 ",299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"1031\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3906\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",5500000],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3907");
+    add_srs_wkt (p, 11, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3908, "epsg", 3908,
+		      "MGI 1901 / Balkans zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI 1901 / Balkans zone 6\",GEOGCS[\"MGI 1901\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"MGI_1901\",SPHEROID[\"Bessel 1841\",6377397.155");
+    add_srs_wkt (p, 2,
+		 ",299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"1031\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3906\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",18],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",6500000],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3908");
+    add_srs_wkt (p, 11, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3909, "epsg", 3909,
+		      "MGI 1901 / Balkans zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI 1901 / Balkans zone 7\",GEOGCS[\"MGI 1901\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"MGI_1901\",SPHEROID[\"Bessel 1841\",6377397.155");
+    add_srs_wkt (p, 2,
+		 ",299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"1031\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3906\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",7500000],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3909");
+    add_srs_wkt (p, 11, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3910, "epsg", 3910,
+		      "MGI 1901 / Balkans zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI 1901 / Balkans zone 8\",GEOGCS[\"MGI 1901\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"MGI_1901\",SPHEROID[\"Bessel 1841\",6377397.155");
+    add_srs_wkt (p, 2,
+		 ",299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"1031\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3906\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",24],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9999],PARAMETER[\"false_easting\",8500000],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3910");
+    add_srs_wkt (p, 11, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3911, "epsg", 3911,
+		      "MGI 1901 / Slovenia Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI 1901 / Slovenia Grid\",GEOGCS[\"MGI 1901\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"MGI_1901\",SPHEROID[\"Bessel 1841\",6377397.155,");
+    add_srs_wkt (p, 2,
+		 "299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"1031\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3906\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3911\"");
+    add_srs_wkt (p, 11, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 3912, "epsg", 3912,
+		      "MGI 1901 / Slovene National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=-5000000 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI 1901 / Slovene National Grid\",GEOGCS[\"MGI");
+    add_srs_wkt (p, 1,
+		 " 1901\",DATUM[\"MGI_1901\",SPHEROID[\"Bessel 1841\",6377");
+    add_srs_wkt (p, 2,
+		 "397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"1031\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"3906");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",0],PARAMETER[\"central_meridian\",15],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",-5000000],AUTHORITY[\"");
+    add_srs_wkt (p, 11, "EPSG\",\"3912\"],AXIS[\"Y\",EAST],AXIS[\"X\",NORTH]]");
+    p = add_epsg_def (first, last, 3920, "epsg", 3920,
+		      "Puerto Rico / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Puerto Rico / UTM zone 20N\",GEOGCS[\"Puerto Ri");
+    add_srs_wkt (p, 1,
+		 "co\",DATUM[\"Puerto_Rico\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[11,72,-101,0,0,0,0],AUTHORITY[\"EPSG\",\"6139\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4139\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-63],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"3920\"],AXIS[\"Easti");
+    add_srs_wkt (p, 12, "ng\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3942, "epsg", 3942, "RGF93 / CC42");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC42\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",41.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",42.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",42],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",120");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3942\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3943, "epsg", 3943, "RGF93 / CC43");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC43\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",42.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",43.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",43],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",220");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3943\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3944, "epsg", 3944, "RGF93 / CC44");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC44\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",43.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",44.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",44],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",320");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3944\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3945, "epsg", 3945, "RGF93 / CC45");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC45\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",44.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",45.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",45],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",420");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3945\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3946, "epsg", 3946, "RGF93 / CC46");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC46\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",45.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",46.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",46],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",520");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3946\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3947, "epsg", 3947, "RGF93 / CC47");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC47\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",46.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",47.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",47],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",620");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3947\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3948, "epsg", 3948, "RGF93 / CC48");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC48\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",47.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",48.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",48],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",720");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3948\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3949, "epsg", 3949, "RGF93 / CC49");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC49\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",48.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",49.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",49],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",820");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3949\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3950, "epsg", 3950, "RGF93 / CC50");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +");
+    add_proj4text (p, 1,
+		   "x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0");
+    add_proj4text (p, 2, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGF93 / CC50\",GEOGCS[\"RGF93\",DATUM[\"Reseau_");
+    add_srs_wkt (p, 1,
+		 "Geodesique_Francais_1993\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6171\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"standard_parallel_1\",49.25],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "tandard_parallel_2\",50.75],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",50],PARAMETER[\"central_meridian\",3],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",1700000],PARAMETER[\"false_northing\",920");
+    add_srs_wkt (p, 12,
+		 "0000],AUTHORITY[\"EPSG\",\"3950\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3968, "epsg", 3968,
+		      "NAD83 / Virginia Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +");
+    add_proj4text (p, 1,
+		   "x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Virginia Lambert\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 8,
+		 "ndard_parallel_1\",37],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 9,
+		 ",39.5],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",-79.5],PARAMETER[\"false_easting\",0]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"39");
+    add_srs_wkt (p, 12, "68\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3969, "epsg", 3969,
+		      "NAD83(HARN) / Virginia Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +");
+    add_proj4text (p, 1, "x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Virginia Lambert\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",37],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",39.5],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",36],PARAMETER[\"central_meridian\",-79.5],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",0],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 12,
+		 "THORITY[\"EPSG\",\"3969\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 3970, "epsg", 3970,
+		      "NAD83(NSRS2007) / Virginia Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +");
+    add_proj4text (p, 1,
+		   "x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Virginia Lambert\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referenc");
+    add_srs_wkt (p, 2,
+		 "e_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.257222");
+    add_srs_wkt (p, 3,
+		 "101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",37],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 10,
+		 "el_2\",39.5],PARAMETER[\"latitude_of_origin\",36],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-79.5],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"3970\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3975, "epsg", 3975,
+		      "WGS 84 / NSIDC EASE-Grid Global");
+    add_proj4text (p, 0,
+		   "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +ellps=WGS84");
+    add_proj4text (p, 1, " +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / NSIDC EASE-Grid Global\",GEOGCS[\"WGS ");
+    add_srs_wkt (p, 1,
+		 "84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.");
+    add_srs_wkt (p, 2,
+		 "257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"C");
+    add_srs_wkt (p, 7,
+		 "ylindrical_Equal_Area\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 8,
+		 "\",30],PARAMETER[\"central_meridian\",0],PARAMETER[\"fal");
+    add_srs_wkt (p, 9,
+		 "se_easting\",0],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 10,
+		 "Y[\"EPSG\",\"3975\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 11, "");
+    p = add_epsg_def (first, last, 3976, "epsg", 3976,
+		      "WGS 84 / NSIDC Sea Ice Polar Stereographic South");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / NSIDC Sea Ice Polar Stereographic Sout");
+    add_srs_wkt (p, 1,
+		 "h\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS ");
+    add_srs_wkt (p, 2,
+		 "84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4326\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Polar_Stereographic\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",-70],PARAMETER[\"central_meridian\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "3976\"],AXIS[\"X\",UNKNOWN],AXIS[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3978, "epsg", 3978,
+		      "NAD83 / Canada Atlas Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=");
+    add_proj4text (p, 1,
+		   "0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Canada Atlas Lambert\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",49],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 9,
+		 "2\",77],PARAMETER[\"latitude_of_origin\",49],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "central_meridian\",-95],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3978");
+    add_srs_wkt (p, 12, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3979, "epsg", 3979,
+		      "NAD83(CSRS) / Canada Atlas Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=");
+    add_proj4text (p, 1, "0 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / Canada Atlas Lambert\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Reference_Sy");
+    add_srs_wkt (p, 2,
+		 "stem\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conforma");
+    add_srs_wkt (p, 8,
+		 "l_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",49],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"standard_parallel_2\",77],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 10,
+		 "of_origin\",49],PARAMETER[\"central_meridian\",-95],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",0],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"3979\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 13, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 3985, "epsg", 3985,
+		      "Katanga 1955 / Katanga Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x");
+    add_proj4text (p, 1,
+		   "_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9");
+    add_proj4text (p, 2, ".614,-255.95,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Katanga 1955 / Katanga Lambert\",GEOGCS[\"Katan");
+    add_srs_wkt (p, 1,
+		 "ga 1955\",DATUM[\"Katanga_1955\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4695\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 9,
+		 "arallel_1\",-6.5],PARAMETER[\"standard_parallel_2\",-11.");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"latitude_of_origin\",9],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",26],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "3985\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3986, "epsg", 3986,
+		      "Katanga 1955 / Katanga Gauss zone A");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=50");
+    add_proj4text (p, 1,
+		   "0000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Katanga 1955 / Katanga Gauss zone A\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Katanga 1955\",DATUM[\"Katanga_1955\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7008\"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4695");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",-9],PARAMETER[\"central_meridian\",30],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",200000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"3986\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3987, "epsg", 3987,
+		      "Katanga 1955 / Katanga Gauss zone B");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=50");
+    add_proj4text (p, 1,
+		   "0000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Katanga 1955 / Katanga Gauss zone B\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Katanga 1955\",DATUM[\"Katanga_1955\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7008\"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4695");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",-9],PARAMETER[\"central_meridian\",28],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",200000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"3987\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3988, "epsg", 3988,
+		      "Katanga 1955 / Katanga Gauss zone C");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=50");
+    add_proj4text (p, 1,
+		   "0000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Katanga 1955 / Katanga Gauss zone C\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Katanga 1955\",DATUM[\"Katanga_1955\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7008\"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4695");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",-9],PARAMETER[\"central_meridian\",26],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",200000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"3988\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3989, "epsg", 3989,
+		      "Katanga 1955 / Katanga Gauss zone D");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=50");
+    add_proj4text (p, 1,
+		   "0000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,");
+    add_proj4text (p, 2, "0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Katanga 1955 / Katanga Gauss zone D\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Katanga 1955\",DATUM[\"Katanga_1955\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7008\"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4695");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",-9],PARAMETER[\"central_meridian\",24],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",200000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"3989\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3991, "epsg", 3991,
+		      "Puerto Rico State Plane CS of 1927");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +");
+    add_proj4text (p, 2,
+		   "x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,7");
+    add_proj4text (p, 3, "2,-101,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Puerto Rico State Plane CS of 1927\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "uerto Rico\",DATUM[\"Puerto_Rico\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "139\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4139\"]],UNIT[\"US s");
+    add_srs_wkt (p, 7,
+		 "urvey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "3\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"standard_parallel_1\",18.43333333333333],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"standard_parallel_2\",18.03333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "latitude_of_origin\",17.83333333333333],PARAMETER[\"cent");
+    add_srs_wkt (p, 12,
+		 "ral_meridian\",-66.43333333333334],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 13,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 14,
+		 "[\"EPSG\",\"3991\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3992, "epsg", 3992,
+		      "Puerto Rico / St. Croix");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +");
+    add_proj4text (p, 2,
+		   "x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk");
+    add_proj4text (p, 3,
+		   "66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Puerto Rico / St. Croix\",GEOGCS[\"Puerto Rico\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Puerto_Rico\",SPHEROID[\"Clarke 1866\",6378206.");
+    add_srs_wkt (p, 2,
+		 "4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],TOWGS8");
+    add_srs_wkt (p, 3,
+		 "4[11,72,-101,0,0,0,0],AUTHORITY[\"EPSG\",\"6139\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4139\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",18.43333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",18.03333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",17.83333333333333],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-66.43333333333334],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 13,
+		 "0],PARAMETER[\"false_northing\",100000],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 14, "\",\"3992\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3994, "epsg", 3994, "WGS 84 / Mercator 41");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=100 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +d");
+    add_proj4text (p, 1, "atum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Mercator 41\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercator_1SP\"");
+    add_srs_wkt (p, 7,
+		 "],PARAMETER[\"central_meridian\",100],PARAMETER[\"scale_");
+    add_srs_wkt (p, 8,
+		 "factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"f");
+    add_srs_wkt (p, 9,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"3994\"],AXIS[\"X");
+    add_srs_wkt (p, 10, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 3995, "epsg", 3995,
+		      "WGS 84 / Arctic Polar Stereographic");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Arctic Polar Stereographic\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,");
+    add_srs_wkt (p, 2,
+		 "298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",71],PARAMETER[\"central_meridian\",0],PARAMETER[\"sca");
+    add_srs_wkt (p, 9,
+		 "le_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"3995\"],AXIS[");
+    add_srs_wkt (p, 11, "\"X\",UNKNOWN],AXIS[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3996, "epsg", 3996,
+		      "WGS 84 / IBCAO Polar Stereographic");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / IBCAO Polar Stereographic\",GEOGCS[\"W");
+    add_srs_wkt (p, 1,
+		 "GS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,2");
+    add_srs_wkt (p, 2,
+		 "98.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Polar_Stereographic\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",75],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"3996\"],AXIS[\"");
+    add_srs_wkt (p, 11, "X\",UNKNOWN],AXIS[\"Y\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 3997, "epsg", 3997,
+		      "WGS 84 / Dubai Local TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Dubai Local TM\",GEOGCS[\"WGS 84\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.25722356");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"632");
+    add_srs_wkt (p, 3,
+		 "6\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",55.33333333333334],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3997\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 4001, "epsg", 4001,
+		      "Unknown datum based upon the Airy 1830 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=airy +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Airy 1830 ellipsoi");
+    add_srs_wkt (p, 1,
+		 "d\",DATUM[\"Not_specified_based_on_Airy_1830_ellipsoid\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Airy 1830\",6377563.396,299.3249646,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7001\"]],AUTHORITY[\"EPSG\",\"6001\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6, "]],AUTHORITY[\"EPSG\",\"4001\"]]");
+    p = add_epsg_def (first, last, 4002, "epsg", 4002,
+		      "Unknown datum based upon the Airy Modified 1849 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=mod_airy +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Airy Modified 1849");
+    add_srs_wkt (p, 1,
+		 " ellipsoid\",DATUM[\"Not_specified_based_on_Airy_Modifie");
+    add_srs_wkt (p, 2,
+		 "d_1849_ellipsoid\",SPHEROID[\"Airy Modified 1849\",63773");
+    add_srs_wkt (p, 3,
+		 "40.189,299.3249646,AUTHORITY[\"EPSG\",\"7002\"]],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6002\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4002\"");
+    add_srs_wkt (p, 7, "]]");
+    p = add_epsg_def (first, last, 4003, "epsg", 4003,
+		      "Unknown datum based upon the Australian National Spheroid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=aust_SA +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Australian Nationa");
+    add_srs_wkt (p, 1,
+		 "l Spheroid\",DATUM[\"Not_specified_based_on_Australian_N");
+    add_srs_wkt (p, 2,
+		 "ational_Spheroid\",SPHEROID[\"Australian National Sphero");
+    add_srs_wkt (p, 3,
+		 "id\",6378160,298.25,AUTHORITY[\"EPSG\",\"7003\"]],AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"6003\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4003");
+    add_srs_wkt (p, 7, "\"]]");
+    p = add_epsg_def (first, last, 4004, "epsg", 4004,
+		      "Unknown datum based upon the Bessel 1841 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Bessel 1841 ellips");
+    add_srs_wkt (p, 1,
+		 "oid\",DATUM[\"Not_specified_based_on_Bessel_1841_ellipso");
+    add_srs_wkt (p, 2,
+		 "id\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6004\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "9122\"]],AUTHORITY[\"EPSG\",\"4004\"]]");
+    p = add_epsg_def (first, last, 4005, "epsg", 4005,
+		      "Unknown datum based upon the Bessel Modified ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Bessel Modified el");
+    add_srs_wkt (p, 1,
+		 "lipsoid\",DATUM[\"Not_specified_based_on_Bessel_Modified");
+    add_srs_wkt (p, 2,
+		 "_ellipsoid\",SPHEROID[\"Bessel Modified\",6377492.018,29");
+    add_srs_wkt (p, 3,
+		 "9.1528128,AUTHORITY[\"EPSG\",\"7005\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6005\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4005\"]]");
+    p = add_epsg_def (first, last, 4006, "epsg", 4006,
+		      "Unknown datum based upon the Bessel Namibia ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bess_nam +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Bessel Namibia ell");
+    add_srs_wkt (p, 1,
+		 "ipsoid\",DATUM[\"Not_specified_based_on_Bessel_Namibia_e");
+    add_srs_wkt (p, 2,
+		 "llipsoid\",SPHEROID[\"Bessel Namibia (GLM)\",6377483.865");
+    add_srs_wkt (p, 3,
+		 "280419,299.1528128,AUTHORITY[\"EPSG\",\"7046\"]],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6006\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4006\"");
+    add_srs_wkt (p, 7, "]]");
+    p = add_epsg_def (first, last, 4007, "epsg", 4007,
+		      "Unknown datum based upon the Clarke 1858 ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1858 ellips");
+    add_srs_wkt (p, 1,
+		 "oid\",DATUM[\"Not_specified_based_on_Clarke_1858_ellipso");
+    add_srs_wkt (p, 2,
+		 "id\",SPHEROID[\"Clarke 1858\",6378293.645208759,294.2606");
+    add_srs_wkt (p, 3,
+		 "763692569,AUTHORITY[\"EPSG\",\"7007\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6007\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4007\"]]");
+    p = add_epsg_def (first, last, 4008, "epsg", 4008,
+		      "Unknown datum based upon the Clarke 1866 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1866 ellips");
+    add_srs_wkt (p, 1,
+		 "oid\",DATUM[\"Not_specified_based_on_Clarke_1866_ellipso");
+    add_srs_wkt (p, 2,
+		 "id\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213900");
+    add_srs_wkt (p, 3,
+		 "6,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"600");
+    add_srs_wkt (p, 4,
+		 "8\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4008\"]]");
+    p = add_epsg_def (first, last, 4009, "epsg", 4009,
+		      "Unknown datum based upon the Clarke 1866 Michigan ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1866 Michig");
+    add_srs_wkt (p, 1,
+		 "an ellipsoid\",DATUM[\"Not_specified_based_on_Clarke_186");
+    add_srs_wkt (p, 2,
+		 "6_Michigan_ellipsoid\",SPHEROID[\"Clarke 1866 Michigan\"");
+    add_srs_wkt (p, 3,
+		 ",6378450.047548896,294.9786971646739,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"7009\"]],AUTHORITY[\"EPSG\",\"6009\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7, "Y[\"EPSG\",\"4009\"]]");
+    p = add_epsg_def (first, last, 4010, "epsg", 4010,
+		      "Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1880 (Benoi");
+    add_srs_wkt (p, 1,
+		 "t) ellipsoid\",DATUM[\"Not_specified_based_on_Clarke_188");
+    add_srs_wkt (p, 2,
+		 "0_Benoit_ellipsoid\",SPHEROID[\"Clarke 1880 (Benoit)\",6");
+    add_srs_wkt (p, 3,
+		 "378300.789,293.4663155389802,AUTHORITY[\"EPSG\",\"7010\"");
+    add_srs_wkt (p, 4,
+		 "]],AUTHORITY[\"EPSG\",\"6010\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 6,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7, "\",\"4010\"]]");
+    p = add_epsg_def (first, last, 4011, "epsg", 4011,
+		      "Unknown datum based upon the Clarke 1880 (IGN) ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1880 (IGN) ");
+    add_srs_wkt (p, 1,
+		 "ellipsoid\",DATUM[\"Not_specified_based_on_Clarke_1880_I");
+    add_srs_wkt (p, 2,
+		 "GN_ellipsoid\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,");
+    add_srs_wkt (p, 3,
+		 "293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"6011\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4011\"]");
+    add_srs_wkt (p, 7, "]");
+    p = add_epsg_def (first, last, 4012, "epsg", 4012,
+		      "Unknown datum based upon the Clarke 1880 (RGS) ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1880 (RGS) ");
+    add_srs_wkt (p, 1,
+		 "ellipsoid\",DATUM[\"Not_specified_based_on_Clarke_1880_R");
+    add_srs_wkt (p, 2,
+		 "GS_ellipsoid\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6012\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4012\"]]");
+    p = add_epsg_def (first, last, 4013, "epsg", 4013,
+		      "Unknown datum based upon the Clarke 1880 (Arc) ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1880 (Arc) ");
+    add_srs_wkt (p, 1,
+		 "ellipsoid\",DATUM[\"Not_specified_based_on_Clarke_1880_A");
+    add_srs_wkt (p, 2,
+		 "rc_ellipsoid\",SPHEROID[\"Clarke 1880 (Arc)\",6378249.14");
+    add_srs_wkt (p, 3,
+		 "5,293.4663077,AUTHORITY[\"EPSG\",\"7013\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6013\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4013\"]]");
+    p = add_epsg_def (first, last, 4014, "epsg", 4014,
+		      "Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1880 (SGA 1");
+    add_srs_wkt (p, 1,
+		 "922) ellipsoid\",DATUM[\"Not_specified_based_on_Clarke_1");
+    add_srs_wkt (p, 2,
+		 "880_SGA_1922_ellipsoid\",SPHEROID[\"Clarke 1880 (SGA 192");
+    add_srs_wkt (p, 3,
+		 "2)\",6378249.2,293.46598,AUTHORITY[\"EPSG\",\"7014\"]],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6014\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7, "4014\"]]");
+    p = add_epsg_def (first, last, 4015, "epsg", 4015,
+		      "Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Everest 1830 (1937");
+    add_srs_wkt (p, 1,
+		 " Adjustment) ellipsoid\",DATUM[\"Not_specified_based_on_");
+    add_srs_wkt (p, 2,
+		 "Everest_1830_1937_Adjustment_ellipsoid\",SPHEROID[\"Ever");
+    add_srs_wkt (p, 3,
+		 "est 1830 (1937 Adjustment)\",6377276.345,300.8017,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6015\"]],PR");
+    add_srs_wkt (p, 5,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 7, "\"]],AUTHORITY[\"EPSG\",\"4015\"]]");
+    p = add_epsg_def (first, last, 4016, "epsg", 4016,
+		      "Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=evrstSS +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Everest 1830 (1967");
+    add_srs_wkt (p, 1,
+		 " Definition) ellipsoid\",DATUM[\"Not_specified_based_on_");
+    add_srs_wkt (p, 2,
+		 "Everest_1830_1967_Definition_ellipsoid\",SPHEROID[\"Ever");
+    add_srs_wkt (p, 3,
+		 "est 1830 (1967 Definition)\",6377298.556,300.8017,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"7016\"]],AUTHORITY[\"EPSG\",\"6016\"]],PR");
+    add_srs_wkt (p, 5,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 7, "\"]],AUTHORITY[\"EPSG\",\"4016\"]]");
+    p = add_epsg_def (first, last, 4018, "epsg", 4018,
+		      "Unknown datum based upon the Everest 1830 Modified ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Everest 1830 Modif");
+    add_srs_wkt (p, 1,
+		 "ied ellipsoid\",DATUM[\"Not_specified_based_on_Everest_1");
+    add_srs_wkt (p, 2,
+		 "830_Modified_ellipsoid\",SPHEROID[\"Everest 1830 Modifie");
+    add_srs_wkt (p, 3,
+		 "d\",6377304.063,300.8017,AUTHORITY[\"EPSG\",\"7018\"]],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6018\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7, "4018\"]]");
+    p = add_epsg_def (first, last, 4019, "epsg", 4019,
+		      "Unknown datum based upon the GRS 1980 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the GRS 1980 ellipsoid");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Not_specified_based_on_GRS_1980_ellipsoid\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6019\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6, "THORITY[\"EPSG\",\"4019\"]]");
+    p = add_epsg_def (first, last, 4020, "epsg", 4020,
+		      "Unknown datum based upon the Helmert 1906 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=helmert +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Helmert 1906 ellip");
+    add_srs_wkt (p, 1,
+		 "soid\",DATUM[\"Not_specified_based_on_Helmert_1906_ellip");
+    add_srs_wkt (p, 2,
+		 "soid\",SPHEROID[\"Helmert 1906\",6378200,298.3,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7020\"]],AUTHORITY[\"EPSG\",\"6020\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6, "],AUTHORITY[\"EPSG\",\"4020\"]]");
+    p = add_epsg_def (first, last, 4021, "epsg", 4021,
+		      "Unknown datum based upon the Indonesian National Spheroid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Indonesian Nationa");
+    add_srs_wkt (p, 1,
+		 "l Spheroid\",DATUM[\"Not_specified_based_on_Indonesian_N");
+    add_srs_wkt (p, 2,
+		 "ational_Spheroid\",SPHEROID[\"Indonesian National Sphero");
+    add_srs_wkt (p, 3,
+		 "id\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6021\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"402");
+    add_srs_wkt (p, 7, "1\"]]");
+    p = add_epsg_def (first, last, 4022, "epsg", 4022,
+		      "Unknown datum based upon the International 1924 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the International 1924");
+    add_srs_wkt (p, 1,
+		 " ellipsoid\",DATUM[\"Not_specified_based_on_Internationa");
+    add_srs_wkt (p, 2,
+		 "l_1924_ellipsoid\",SPHEROID[\"International 1924\",63783");
+    add_srs_wkt (p, 3,
+		 "88,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6022\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4022\"]]");
+    p = add_epsg_def (first, last, 4023, "epsg", 4023, "MOLDREF99");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"MOLDREF99\",DATUM[\"MOLDREF99\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 1,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 2,
+		 "]],AUTHORITY[\"EPSG\",\"1032\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 4,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5, "\",\"4023\"]]");
+    p = add_epsg_def (first, last, 4024, "epsg", 4024,
+		      "Unknown datum based upon the Krassowsky 1940 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=krass +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Krassowsky 1940 el");
+    add_srs_wkt (p, 1,
+		 "lipsoid\",DATUM[\"Not_specified_based_on_Krassowsky_1940");
+    add_srs_wkt (p, 2,
+		 "_ellipsoid\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6024\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "9122\"]],AUTHORITY[\"EPSG\",\"4024\"]]");
+    p = add_epsg_def (first, last, 4025, "epsg", 4025,
+		      "Unknown datum based upon the NWL 9D ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the NWL 9D ellipsoid\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Not_specified_based_on_NWL_9D_ellipsoid\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"NWL 9D\",6378145,298.25,AUTHORITY[\"EPSG\",\"7025\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6025\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6, "\",\"4025\"]]");
+    p = add_epsg_def (first, last, 4026, "epsg", 4026,
+		      "MOLDREF99 / Moldova TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +");
+    add_proj4text (p, 1,
+		   "x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MOLDREF99 / Moldova TM\",GEOGCS[\"MOLDREF99\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"MOLDREF99\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 2,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"1032\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4023\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",28.4],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 9,
+		 "ctor\",0.99994],PARAMETER[\"false_easting\",200000],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_northing\",-5000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "4026\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 4027, "epsg", 4027,
+		      "Unknown datum based upon the Plessis 1817 ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Plessis 1817 ellip");
+    add_srs_wkt (p, 1,
+		 "soid\",DATUM[\"Not_specified_based_on_Plessis_1817_ellip");
+    add_srs_wkt (p, 2,
+		 "soid\",SPHEROID[\"Plessis 1817\",6376523,308.64,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7027\"]],AUTHORITY[\"EPSG\",\"6027\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6, "]],AUTHORITY[\"EPSG\",\"4027\"]]");
+    p = add_epsg_def (first, last, 4028, "epsg", 4028,
+		      "Unknown datum based upon the Struve 1860 ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Struve 1860 ellips");
+    add_srs_wkt (p, 1,
+		 "oid\",DATUM[\"Not_specified_based_on_Struve_1860_ellipso");
+    add_srs_wkt (p, 2,
+		 "id\",SPHEROID[\"Struve 1860\",6378298.3,294.73,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7028\"]],AUTHORITY[\"EPSG\",\"6028\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6, "],AUTHORITY[\"EPSG\",\"4028\"]]");
+    p = add_epsg_def (first, last, 4029, "epsg", 4029,
+		      "Unknown datum based upon the War Office ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the War Office ellipso");
+    add_srs_wkt (p, 1,
+		 "id\",DATUM[\"Not_specified_based_on_War_Office_ellipsoid");
+    add_srs_wkt (p, 2,
+		 "\",SPHEROID[\"War Office\",6378300,296,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7029\"]],AUTHORITY[\"EPSG\",\"6029\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6, "TY[\"EPSG\",\"4029\"]]");
+    p = add_epsg_def (first, last, 4030, "epsg", 4030,
+		      "Unknown datum based upon the WGS 84 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS84 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the WGS 84 ellipsoid\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Not_specified_based_on_WGS_84_ellipsoid\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7030\"]],AUTHORITY[\"EPSG\",\"6030\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6, "Y[\"EPSG\",\"4030\"]]");
+    p = add_epsg_def (first, last, 4031, "epsg", 4031,
+		      "Unknown datum based upon the GEM 10C ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS84 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the GEM 10C ellipsoid\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Not_specified_based_on_GEM_10C_ellipsoid\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GEM 10C\",6378137,298.257223563,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7031\"]],AUTHORITY[\"EPSG\",\"6031\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6, "TY[\"EPSG\",\"4031\"]]");
+    p = add_epsg_def (first, last, 4032, "epsg", 4032,
+		      "Unknown datum based upon the OSU86F ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the OSU86F ellipsoid\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Not_specified_based_on_OSU86F_ellipsoid\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"OSU86F\",6378136.2,298.257223563,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7032\"]],AUTHORITY[\"EPSG\",\"6032\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6, "TY[\"EPSG\",\"4032\"]]");
+    p = add_epsg_def (first, last, 4033, "epsg", 4033,
+		      "Unknown datum based upon the OSU91A ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the OSU91A ellipsoid\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Not_specified_based_on_OSU91A_ellipsoid\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"OSU91A\",6378136.3,298.257223563,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7033\"]],AUTHORITY[\"EPSG\",\"6033\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6, "TY[\"EPSG\",\"4033\"]]");
+    p = add_epsg_def (first, last, 4034, "epsg", 4034,
+		      "Unknown datum based upon the Clarke 1880 ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.144808011 +b=6356514.966204134 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Clarke 1880 ellips");
+    add_srs_wkt (p, 1,
+		 "oid\",DATUM[\"Not_specified_based_on_Clarke_1880_ellipso");
+    add_srs_wkt (p, 2,
+		 "id\",SPHEROID[\"Clarke 1880\",6378249.144808011,293.4663");
+    add_srs_wkt (p, 3,
+		 "076556349,AUTHORITY[\"EPSG\",\"7034\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6034\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4034\"]]");
+    p = add_epsg_def (first, last, 4035, "epsg", 4035,
+		      "Unknown datum based upon the Authalic Sphere");
+    add_proj4text (p, 0, "+proj=longlat +a=6371000 +b=6371000 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Authalic Sphere\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Not_specified_based_on_Authalic_Sphere\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Sphere\",6371000,0,AUTHORITY[\"EPSG\",\"7035\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6035\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "33,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"40");
+    add_srs_wkt (p, 6, "35\"]]");
+    p = add_epsg_def (first, last, 4036, "epsg", 4036,
+		      "Unknown datum based upon the GRS 1967 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS67 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the GRS 1967 ellipsoid");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Not_specified_based_on_GRS_1967_ellipsoid\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1967\",6378160,298.247167427,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7036\"]],AUTHORITY[\"EPSG\",\"6036\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6, "THORITY[\"EPSG\",\"4036\"]]");
+    p = add_epsg_def (first, last, 4037, "epsg", 4037, "WGS 84 / TMzn35N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / TMzn35N\",GEOGCS[\"WGS 84\",DATUM[\"WG");
+    add_srs_wkt (p, 1,
+		 "S_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 7,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 8,
+		 "entral_meridian\",27],PARAMETER[\"scale_factor\",0.9996]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 10,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"4037\"],AXIS[\"Northin");
+    add_srs_wkt (p, 11, "g\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 4038, "epsg", 4038, "WGS 84 / TMzn36N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / TMzn36N\",GEOGCS[\"WGS 84\",DATUM[\"WG");
+    add_srs_wkt (p, 1,
+		 "S_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 7,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 8,
+		 "entral_meridian\",33],PARAMETER[\"scale_factor\",0.9996]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 10,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"4038\"],AXIS[\"Northin");
+    add_srs_wkt (p, 11, "g\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 4041, "epsg", 4041,
+		      "Unknown datum based upon the Average Terrestrial System 1977 ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Average Terrestria");
+    add_srs_wkt (p, 1,
+		 "l System 1977 ellipsoid\",DATUM[\"Not_specified_based_on");
+    add_srs_wkt (p, 2,
+		 "_Average_Terrestrial_System_1977_ellipsoid\",SPHEROID[\"");
+    add_srs_wkt (p, 3,
+		 "Average Terrestrial System 1977\",6378135,298.257,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"7041\"]],AUTHORITY[\"EPSG\",\"6041\"]],PR");
+    add_srs_wkt (p, 5,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 7, "\"]],AUTHORITY[\"EPSG\",\"4041\"]]");
+    p = add_epsg_def (first, last, 4042, "epsg", 4042,
+		      "Unknown datum based upon the Everest (1830 Definition) ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Everest (1830 Defi");
+    add_srs_wkt (p, 1,
+		 "nition) ellipsoid\",DATUM[\"Not_specified_based_on_Evere");
+    add_srs_wkt (p, 2,
+		 "st_1830_Definition_ellipsoid\",SPHEROID[\"Everest (1830 ");
+    add_srs_wkt (p, 3,
+		 "Definition)\",6377299.36559538,300.8017255433552,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"7042\"]],AUTHORITY[\"EPSG\",\"6042\"]],PRI");
+    add_srs_wkt (p, 5,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 6,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 7, "]],AUTHORITY[\"EPSG\",\"4042\"]]");
+    p = add_epsg_def (first, last, 4043, "epsg", 4043,
+		      "Unknown datum based upon the WGS 72 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS72 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the WGS 72 ellipsoid\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Not_specified_based_on_WGS_72_ellipsoid\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6043\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6, "\",\"4043\"]]");
+    p = add_epsg_def (first, last, 4044, "epsg", 4044,
+		      "Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Everest 1830 (1962");
+    add_srs_wkt (p, 1,
+		 " Definition) ellipsoid\",DATUM[\"Not_specified_based_on_");
+    add_srs_wkt (p, 2,
+		 "Everest_1830_1962_Definition_ellipsoid\",SPHEROID[\"Ever");
+    add_srs_wkt (p, 3,
+		 "est 1830 (1962 Definition)\",6377301.243,300.8017255,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"7044\"]],AUTHORITY[\"EPSG\",\"6044\"]]");
+    add_srs_wkt (p, 5,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7, "122\"]],AUTHORITY[\"EPSG\",\"4044\"]]");
+    p = add_epsg_def (first, last, 4045, "epsg", 4045,
+		      "Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unknown datum based upon the Everest 1830 (1975");
+    add_srs_wkt (p, 1,
+		 " Definition) ellipsoid\",DATUM[\"Not_specified_based_on_");
+    add_srs_wkt (p, 2,
+		 "Everest_1830_1975_Definition_ellipsoid\",SPHEROID[\"Ever");
+    add_srs_wkt (p, 3,
+		 "est 1830 (1975 Definition)\",6377299.151,300.8017255,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"7045\"]],AUTHORITY[\"EPSG\",\"6045\"]]");
+    add_srs_wkt (p, 5,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7, "122\"]],AUTHORITY[\"EPSG\",\"4045\"]]");
+    p = add_epsg_def (first, last, 4046, "epsg", 4046, "RGRDC 2005");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RGRDC 2005\",DATUM[\"Reseau_Geodesique_de_la_RD");
+    add_srs_wkt (p, 1,
+		 "C_2005\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046");
+    add_srs_wkt (p, 6, "\"]]");
+    p = add_epsg_def (first, last, 4047, "epsg", 4047,
+		      "Unspecified datum based upon the GRS 1980 Authalic Sphere");
+    add_proj4text (p, 0, "+proj=longlat +a=6371007 +b=6371007 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unspecified datum based upon the GRS 1980 Autha");
+    add_srs_wkt (p, 1,
+		 "lic Sphere\",DATUM[\"Not_specified_based_on_GRS_1980_Aut");
+    add_srs_wkt (p, 2,
+		 "halic_Sphere\",SPHEROID[\"GRS 1980 Authalic Sphere\",637");
+    add_srs_wkt (p, 3,
+		 "1007,0,AUTHORITY[\"EPSG\",\"7048\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6047\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4047\"]]");
+    p = add_epsg_def (first, last, 4048, "epsg", 4048,
+		      "RGRDC 2005 / Congo TM zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 12\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",12],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4048\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4049, "epsg", 4049,
+		      "RGRDC 2005 / Congo TM zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 14\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",14],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4049\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4050, "epsg", 4050,
+		      "RGRDC 2005 / Congo TM zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 16\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",16],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4050\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4051, "epsg", 4051,
+		      "RGRDC 2005 / Congo TM zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 18\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",18],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4051\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4052, "epsg", 4052,
+		      "Unspecified datum based upon the Clarke 1866 Authalic Sphere");
+    add_proj4text (p, 0, "+proj=longlat +a=6370997 +b=6370997 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unspecified datum based upon the Clarke 1866 Au");
+    add_srs_wkt (p, 1,
+		 "thalic Sphere\",DATUM[\"Not_specified_based_on_Clarke_18");
+    add_srs_wkt (p, 2,
+		 "66_Authalic_Sphere\",SPHEROID[\"Clarke 1866 Authalic Sph");
+    add_srs_wkt (p, 3,
+		 "ere\",6370997,0,AUTHORITY[\"EPSG\",\"7052\"]],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6052\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4052\"]]");
+    add_srs_wkt (p, 7, "");
+    p = add_epsg_def (first, last, 4053, "epsg", 4053,
+		      "Unspecified datum based upon the International 1924 Authalic Sphere");
+    add_proj4text (p, 0, "+proj=longlat +a=6371228 +b=6371228 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unspecified datum based upon the International ");
+    add_srs_wkt (p, 1,
+		 "1924 Authalic Sphere\",DATUM[\"Not_specified_based_on_In");
+    add_srs_wkt (p, 2,
+		 "ternational_1924_Authalic_Sphere\",SPHEROID[\"Internatio");
+    add_srs_wkt (p, 3,
+		 "nal 1924 Authalic Sphere\",6371228,0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"7057\"]],AUTHORITY[\"EPSG\",\"6053\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7, "Y[\"EPSG\",\"4053\"]]");
+    p = add_epsg_def (first, last, 4054, "epsg", 4054,
+		      "Unspecified datum based upon the Hughes 1980 ellipsoid");
+    add_proj4text (p, 0, "+proj=longlat +a=6378273 +b=6356889.449 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Unspecified datum based upon the Hughes 1980 el");
+    add_srs_wkt (p, 1,
+		 "lipsoid\",DATUM[\"Not_specified_based_on_Hughes_1980_ell");
+    add_srs_wkt (p, 2,
+		 "ipsoid\",SPHEROID[\"Hughes 1980\",6378273,298.2794111230");
+    add_srs_wkt (p, 3,
+		 "61,AUTHORITY[\"EPSG\",\"7058\"]],AUTHORITY[\"EPSG\",\"60");
+    add_srs_wkt (p, 4,
+		 "54\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4054\"]]");
+    p = add_epsg_def (first, last, 4055, "epsg", 4055,
+		      "Popular Visualisation CRS");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 1, ",0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Popular Visualisation CRS\",DATUM[\"Popular_Vis");
+    add_srs_wkt (p, 1,
+		 "ualisation_Datum\",SPHEROID[\"Popular Visualisation Sphe");
+    add_srs_wkt (p, 2,
+		 "re\",6378137,0,AUTHORITY[\"EPSG\",\"7059\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6055\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6, "TY[\"EPSG\",\"4055\"]]");
+    p = add_epsg_def (first, last, 4056, "epsg", 4056,
+		      "RGRDC 2005 / Congo TM zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 20\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",20],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4056\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4057, "epsg", 4057,
+		      "RGRDC 2005 / Congo TM zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 22\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",22],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4057\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4058, "epsg", 4058,
+		      "RGRDC 2005 / Congo TM zone 24");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 24\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",24],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4058\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4059, "epsg", 4059,
+		      "RGRDC 2005 / Congo TM zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 26\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",26],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4059\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4060, "epsg", 4060,
+		      "RGRDC 2005 / Congo TM zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / Congo TM zone 28\",GEOGCS[\"RGRDC ");
+    add_srs_wkt (p, 1,
+		 "2005\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "1033\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",28],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9999],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"4060\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4061, "epsg", 4061,
+		      "RGRDC 2005 / UTM zone 33S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / UTM zone 33S\",GEOGCS[\"RGRDC 2005");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1033\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",15],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"4061\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4062, "epsg", 4062,
+		      "RGRDC 2005 / UTM zone 34S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / UTM zone 34S\",GEOGCS[\"RGRDC 2005");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1033\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",21],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"4062\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4063, "epsg", 4063,
+		      "RGRDC 2005 / UTM zone 35S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RGRDC 2005 / UTM zone 35S\",GEOGCS[\"RGRDC 2005");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Reseau_Geodesique_de_la_RDC_2005\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "19\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1033\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4046\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",27],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"4063\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 4071, "epsg", 4071, "Chua / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Chua / UTM zone 23S\",GEOGCS[\"Chua\",DATUM[\"C");
+    add_srs_wkt (p, 1,
+		 "hua\",SPHEROID[\"International 1924\",6378388,297,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6224\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5,
+		 "\"]],AUTHORITY[\"EPSG\",\"4224\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 6,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 7,
+		 "or\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"ce");
+    add_srs_wkt (p, 8,
+		 "ntral_meridian\",-45],PARAMETER[\"scale_factor\",0.9996]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 10,
+		 "orthing\",10000000],AUTHORITY[\"EPSG\",\"4071\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 4075, "epsg", 4075, "SREF98");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"SREF98\",DATUM[\"Serbian_Reference_Network_1998");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"1034\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4075\"]]");
+    p = add_epsg_def (first, last, 4081, "epsg", 4081, "REGCAN95");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"REGCAN95\",DATUM[\"Red_Geodesica_de_Canarias_19");
+    add_srs_wkt (p, 1,
+		 "95\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"1035\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4081\"]]");
+    add_srs_wkt (p, 6, "");
+    p = add_epsg_def (first, last, 4082, "epsg", 4082,
+		      "REGCAN95 / UTM zone 27N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"REGCAN95 / UTM zone 27N\",GEOGCS[\"REGCAN95\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Red_Geodesica_de_Canarias_1995\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1035\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4081\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-21],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"4082\"],AXIS[\"Eastin");
+    add_srs_wkt (p, 12, "g\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 4083, "epsg", 4083,
+		      "REGCAN95 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"REGCAN95 / UTM zone 28N\",GEOGCS[\"REGCAN95\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Red_Geodesica_de_Canarias_1995\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 2,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"1035\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4081\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-15],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"4083\"],AXIS[\"Eastin");
+    add_srs_wkt (p, 12, "g\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 4120, "epsg", 4120, "Greek");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Greek\",DATUM[\"Greek\",SPHEROID[\"Bessel 1841\"");
+    add_srs_wkt (p, 1,
+		 ",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"6120\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 4,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "4120\"]]");
+    p = add_epsg_def (first, last, 4121, "epsg", 4121, "GGRS87");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +datum=GGRS87 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"GGRS87\",DATUM[\"Greek_Geodetic_Reference_Syste");
+    add_srs_wkt (p, 1,
+		 "m_1987\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7019\"]],TOWGS84[-199.87,74.79,246.62,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6121\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6, "\"EPSG\",\"4121\"]]");
+    p = add_epsg_def (first, last, 4122, "epsg", 4122, "ATS77");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ATS77\",DATUM[\"Average_Terrestrial_System_1977");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"Average Terrestrial System 1977\",6378135,");
+    add_srs_wkt (p, 2,
+		 "298.257,AUTHORITY[\"EPSG\",\"7041\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6122\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4122\"]]");
+    p = add_epsg_def (first, last, 4123, "epsg", 4123, "KKJ");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"KKJ\",DATUM[\"Kartastokoordinaattijarjestelma_1");
+    add_srs_wkt (p, 1,
+		 "966\",SPHEROID[\"International 1924\",6378388,297,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6123\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4123\"]]");
+    p = add_epsg_def (first, last, 4124, "epsg", 4124, "RT90");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RT90\",DATUM[\"Rikets_koordinatsystem_1990\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6124\"]],PRIME");
+    add_srs_wkt (p, 3,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 4,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 5, "],AUTHORITY[\"EPSG\",\"4124\"]]");
+    p = add_epsg_def (first, last, 4125, "epsg", 4125, "Samboja");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.4");
+    add_proj4text (p, 1, "7,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Samboja\",DATUM[\"Samboja\",SPHEROID[\"Bessel 1");
+    add_srs_wkt (p, 1,
+		 "841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[-404.78,685.68,45.47,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6125\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY");
+    add_srs_wkt (p, 5, "[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4125\"]]");
+    p = add_epsg_def (first, last, 4126, "epsg", 4126, "LKS94 (ETRS89)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"LKS94 (ETRS89)\",DATUM[\"Lithuania_1994_ETRS89\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6126\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4126\"]]");
+    p = add_epsg_def (first, last, 4127, "epsg", 4127, "Tete");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tete\",DATUM[\"Tete\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 1,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 2,
+		 "],AUTHORITY[\"EPSG\",\"6127\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 4,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4127\"]]");
+    p = add_epsg_def (first, last, 4128, "epsg", 4128, "Madzansua");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Madzansua\",DATUM[\"Madzansua\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 1,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7008\"]],AUTHORITY[\"EPSG\",\"6128\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4128\"]]");
+    p = add_epsg_def (first, last, 4129, "epsg", 4129, "Observatario");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Observatario\",DATUM[\"Observatario\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6129\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4129\"]]");
+    p = add_epsg_def (first, last, 4130, "epsg", 4130, "Moznet");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Moznet\",DATUM[\"Moznet_ITRF94\",SPHEROID[\"WGS");
+    add_srs_wkt (p, 1,
+		 " 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]");
+    add_srs_wkt (p, 2,
+		 "],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY[\"EPSG\",\"6130\"]");
+    add_srs_wkt (p, 3,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4130\"]]");
+    p = add_epsg_def (first, last, 4131, "epsg", 4131, "Indian 1960");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Indian 1960\",DATUM[\"Indian_1960\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Everest 1830 (1937 Adjustment)\",6377276.345,300.8017,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6131\"]");
+    add_srs_wkt (p, 3,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4131\"]]");
+    p = add_epsg_def (first, last, 4132, "epsg", 4132, "FD58");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"FD58\",DATUM[\"Final_Datum_1958\",SPHEROID[\"Cl");
+    add_srs_wkt (p, 1,
+		 "arke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7012\"]],AUTHORITY[\"EPSG\",\"6132\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4132\"]]");
+    p = add_epsg_def (first, last, 4133, "epsg", 4133, "EST92");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,");
+    add_proj4text (p, 1, "0.0183,-0.0003,-0.007,-0.014 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"EST92\",DATUM[\"Estonia_1992\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 1,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 2,
+		 "],TOWGS84[0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.0");
+    add_srs_wkt (p, 3,
+		 "14],AUTHORITY[\"EPSG\",\"6133\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 5,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6, "G\",\"4133\"]]");
+    p = add_epsg_def (first, last, 4134, "epsg", 4134, "PSD93");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"PSD93\",DATUM[\"PDO_Survey_Datum_1993\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6134\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4134\"]]");
+    p = add_epsg_def (first, last, 4135, "epsg", 4135, "Old Hawaiian");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Old Hawaiian\",DATUM[\"Old_Hawaiian\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6135\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4135\"]]");
+    p = add_epsg_def (first, last, 4136, "epsg", 4136, "St. Lawrence Island");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"St. Lawrence Island\",DATUM[\"St_Lawrence_Islan");
+    add_srs_wkt (p, 1,
+		 "d\",SPHEROID[\"Clarke 1866\",6378206.4,294.9786982139006");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6136");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4136\"]]");
+    p = add_epsg_def (first, last, 4137, "epsg", 4137, "St. Paul Island");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"St. Paul Island\",DATUM[\"St_Paul_Island\",SPHE");
+    add_srs_wkt (p, 1,
+		 "ROID[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6137\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5, "]],AUTHORITY[\"EPSG\",\"4137\"]]");
+    p = add_epsg_def (first, last, 4138, "epsg", 4138, "St. George Island");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"St. George Island\",DATUM[\"St_George_Island\",");
+    add_srs_wkt (p, 1,
+		 "SPHEROID[\"Clarke 1866\",6378206.4,294.9786982139006,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6138\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 4,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 5, "122\"]],AUTHORITY[\"EPSG\",\"4138\"]]");
+    p = add_epsg_def (first, last, 4139, "epsg", 4139, "Puerto Rico");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Puerto Rico\",DATUM[\"Puerto_Rico\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7008\"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6139\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4139\"]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_15 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 4140, "epsg", 4140, "NAD83(CSRS98)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD83(CSRS98)\",DATUM[\"NAD83_Canadian_Spatial_");
+    add_srs_wkt (p, 1,
+		 "Reference_System\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 2,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 5,
+		 "925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6, "\",\"4140\"]]");
+    p = add_epsg_def (first, last, 4141, "epsg", 4141, "Israel");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Israel\",DATUM[\"Israel\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 1,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 2,
+		 "GS84[-48,55,52,0,0,0,0],AUTHORITY[\"EPSG\",\"6141\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4141\"]]");
+    p = add_epsg_def (first, last, 4142, "epsg", 4142, "Locodjo 1965");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Locodjo 1965\",DATUM[\"Locodjo_1965\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6142\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4142\"]]");
+    p = add_epsg_def (first, last, 4143, "epsg", 4143, "Abidjan 1987");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0");
+    add_proj4text (p, 1, ",0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Abidjan 1987\",DATUM[\"Abidjan_1987\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6143\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 6, "3\"]]");
+    p = add_epsg_def (first, last, 4144, "epsg", 4144, "Kalianpur 1937");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kalianpur 1937\",DATUM[\"Kalianpur_1937\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Everest 1830 (1937 Adjustment)\",6377276.345,300.8");
+    add_srs_wkt (p, 2,
+		 "017,AUTHORITY[\"EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "144\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5, "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4144\"]]");
+    p = add_epsg_def (first, last, 4145, "epsg", 4145, "Kalianpur 1962");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kalianpur 1962\",DATUM[\"Kalianpur_1962\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Everest 1830 (1962 Definition)\",6377301.243,300.8");
+    add_srs_wkt (p, 2,
+		 "017255,AUTHORITY[\"EPSG\",\"7044\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6145\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4145\"]]");
+    p = add_epsg_def (first, last, 4146, "epsg", 4146, "Kalianpur 1975");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs");
+    add_proj4text (p, 1, "84=295,736,257,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kalianpur 1975\",DATUM[\"Kalianpur_1975\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Everest 1830 (1975 Definition)\",6377299.151,300.8");
+    add_srs_wkt (p, 2,
+		 "017255,AUTHORITY[\"EPSG\",\"7045\"]],TOWGS84[295,736,257");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 4,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 5,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 6, "[\"EPSG\",\"4146\"]]");
+    p = add_epsg_def (first, last, 4147, "epsg", 4147, "Hanoi 1972");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.3");
+    add_proj4text (p, 1, "9,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hanoi 1972\",DATUM[\"Hanoi_1972\",SPHEROID[\"Kr");
+    add_srs_wkt (p, 1,
+		 "assowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6147\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4147\"]]");
+    p = add_epsg_def (first, last, 4148, "epsg", 4148, "Hartebeesthoek94");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hartebeesthoek94\",DATUM[\"Hartebeesthoek94\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6148\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4148\"]]");
+    p = add_epsg_def (first, last, 4149, "epsg", 4149, "CH1903");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.");
+    add_proj4text (p, 1, "346,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"CH1903\",DATUM[\"CH1903\",SPHEROID[\"Bessel 184");
+    add_srs_wkt (p, 1,
+		 "1\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]");
+    add_srs_wkt (p, 2,
+		 "],TOWGS84[674.374,15.056,405.346,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6149\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4149\"]]");
+    p = add_epsg_def (first, last, 4150, "epsg", 4150, "CH1903+");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.");
+    add_proj4text (p, 1, "346,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"CH1903+\",DATUM[\"CH1903\",SPHEROID[\"Bessel 18");
+    add_srs_wkt (p, 1,
+		 "41\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[674.374,15.056,405.346,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6150\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4150\"]]");
+    p = add_epsg_def (first, last, 4151, "epsg", 4151, "CHTRF95");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"CHTRF95\",DATUM[\"Swiss_Terrestrial_Reference_F");
+    add_srs_wkt (p, 1,
+		 "rame_1995\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6151\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6, "151\"]]");
+    p = add_epsg_def (first, last, 4152, "epsg", 4152, "NAD83(HARN)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regio");
+    add_srs_wkt (p, 1,
+		 "nal_Network\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 2,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"615");
+    add_srs_wkt (p, 3,
+		 "2\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]]");
+    p = add_epsg_def (first, last, 4153, "epsg", 4153, "Rassadiran");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.6");
+    add_proj4text (p, 1, "2,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Rassadiran\",DATUM[\"Rassadiran\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],TOWGS84[-133.63,-157.5,-158.62,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6153\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4153\"]]");
+    p = add_epsg_def (first, last, 4154, "epsg", 4154, "ED50(ED77)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ED50(ED77)\",DATUM[\"European_Datum_1950_1977\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6154\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4154\"]]");
+    p = add_epsg_def (first, last, 4155, "epsg", 4155, "Dabola 1981");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,12");
+    add_proj4text (p, 1, "4,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Dabola 1981\",DATUM[\"Dabola_1981\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7011\"]],TOWGS84[-83,37,124,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6155\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4155");
+    add_srs_wkt (p, 6, "\"]]");
+    p = add_epsg_def (first, last, 4156, "epsg", 4156, "S-JTSK");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"S-JTSK\",DATUM[\"Jednotne_Trigonometricke_Site_");
+    add_srs_wkt (p, 1,
+		 "Katastralni\",SPHEROID[\"Bessel 1841\",6377397.155,299.1");
+    add_srs_wkt (p, 2,
+		 "528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6156\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4156\"]]");
+    p = add_epsg_def (first, last, 4157, "epsg", 4157, "Mount Dillon");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mount Dillon\",DATUM[\"Mount_Dillon\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1858\",6378293.645208759,294.2606763692569,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7007\"]],AUTHORITY[\"EPSG\",\"6157\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5, "22\"]],AUTHORITY[\"EPSG\",\"4157\"]]");
+    p = add_epsg_def (first, last, 4158, "epsg", 4158, "Naparima 1955");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Naparima 1955\",DATUM[\"Naparima_1955\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7022\"]],AUTHORITY[\"EPSG\",\"6158\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 3,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 4,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4158\"]]");
+    p = add_epsg_def (first, last, 4159, "epsg", 4159, "ELD79");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ELD79\",DATUM[\"European_Libyan_Datum_1979\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"International 1924\",6378388,297,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6159\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 3,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 4,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4159\"]]");
+    p = add_epsg_def (first, last, 4160, "epsg", 4160, "Chos Malal 1914");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Chos Malal 1914\",DATUM[\"Chos_Malal_1914\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6160\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4160\"]]");
+    p = add_epsg_def (first, last, 4161, "epsg", 4161, "Pampa del Castillo");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pampa del Castillo\",DATUM[\"Pampa_del_Castillo");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],TOWGS84[27.5,14,186.4,0,0,0,0],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6161\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"41");
+    add_srs_wkt (p, 6, "61\"]]");
+    p = add_epsg_def (first, last, 4162, "epsg", 4162, "Korean 1985");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Korean 1985\",DATUM[\"Korean_Datum_1985\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6162\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4162\"]]");
+    p = add_epsg_def (first, last, 4163, "epsg", 4163, "Yemen NGN96");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Yemen NGN96\",DATUM[\"Yemen_National_Geodetic_N");
+    add_srs_wkt (p, 1,
+		 "etwork_1996\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6163\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6, "163\"]]");
+    p = add_epsg_def (first, last, 4164, "epsg", 4164, "South Yemen");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"South Yemen\",DATUM[\"South_Yemen\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 2,
+		 "4\"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6164\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4164\"]]");
+    p = add_epsg_def (first, last, 4165, "epsg", 4165, "Bissau");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bissau\",DATUM[\"Bissau\",SPHEROID[\"Internatio");
+    add_srs_wkt (p, 1,
+		 "nal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOW");
+    add_srs_wkt (p, 2,
+		 "GS84[-173,253,27,0,0,0,0],AUTHORITY[\"EPSG\",\"6165\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5, "22\"]],AUTHORITY[\"EPSG\",\"4165\"]]");
+    p = add_epsg_def (first, last, 4166, "epsg", 4166, "Korean 1995");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Korean 1995\",DATUM[\"Korean_Datum_1995\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "166\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5, "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4166\"]]");
+    p = add_epsg_def (first, last, 4167, "epsg", 4167, "NZGD2000");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NZGD2000\",DATUM[\"New_Zealand_Geodetic_Datum_2");
+    add_srs_wkt (p, 1,
+		 "000\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6167\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4167\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4168, "epsg", 4168, "Accra");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Accra\",DATUM[\"Accra\",SPHEROID[\"War Office\"");
+    add_srs_wkt (p, 1,
+		 ",6378300,296,AUTHORITY[\"EPSG\",\"7029\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"6168\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 4, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4168\"]]");
+    p = add_epsg_def (first, last, 4169, "epsg", 4169, "American Samoa 1962");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"American Samoa 1962\",DATUM[\"American_Samoa_19");
+    add_srs_wkt (p, 1,
+		 "62\",SPHEROID[\"Clarke 1866\",6378206.4,294.978698213900");
+    add_srs_wkt (p, 2,
+		 "6,AUTHORITY[\"EPSG\",\"7008\"]],TOWGS84[-115,118,426,0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6169\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6, "PSG\",\"4169\"]]");
+    p = add_epsg_def (first, last, 4170, "epsg", 4170, "SIRGAS 1995");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"SIRGAS 1995\",DATUM[\"Sistema_de_Referencia_Geo");
+    add_srs_wkt (p, 1,
+		 "centrico_para_America_del_Sur_1995\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6170\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6, "]],AUTHORITY[\"EPSG\",\"4170\"]]");
+    p = add_epsg_def (first, last, 4171, "epsg", 4171, "RGF93");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RGF93\",DATUM[\"Reseau_Geodesique_Francais_1993");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6171\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4171\"]]");
+    p = add_epsg_def (first, last, 4172, "epsg", 4172, "POSGAR");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"POSGAR\",DATUM[\"Posiciones_Geodesicas_Argentin");
+    add_srs_wkt (p, 1,
+		 "as\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6172\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4172\"]]");
+    p = add_epsg_def (first, last, 4173, "epsg", 4173, "IRENET95");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IRENET95\",DATUM[\"IRENET95\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 1,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 2,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6173\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4173\"]]");
+    p = add_epsg_def (first, last, 4174, "epsg", 4174, "Sierra Leone 1924");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Sierra Leone 1924\",DATUM[\"Sierra_Leone_Colony");
+    add_srs_wkt (p, 1,
+		 "_1924\",SPHEROID[\"War Office\",6378300,296,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7029\"]],AUTHORITY[\"EPSG\",\"6174\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4174\"]]");
+    p = add_epsg_def (first, last, 4175, "epsg", 4175, "Sierra Leone 1968");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Sierra Leone 1968\",DATUM[\"Sierra_Leone_1968\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7012\"]],TOWGS84[-88,4,101,0,0,0,0],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6175\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6, "175\"]]");
+    p = add_epsg_def (first, last, 4176, "epsg", 4176, "Australian Antarctic");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Australian Antarctic\",DATUM[\"Australian_Antar");
+    add_srs_wkt (p, 1,
+		 "ctic_Datum_1998\",SPHEROID[\"GRS 1980\",6378137,298.2572");
+    add_srs_wkt (p, 2,
+		 "22101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0],AUTHORITY[\"EPSG\",\"6176\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6, "\",\"4176\"]]");
+    p = add_epsg_def (first, last, 4178, "epsg", 4178, "Pulkovo 1942(83)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.");
+    add_proj4text (p, 1, "25,-0.13,1.1 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pulkovo 1942(83)\",DATUM[\"Pulkovo_1942_83\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7024\"]],AUTHORITY[\"EPSG\",\"6178\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4178\"]]");
+    p = add_epsg_def (first, last, 4179, "epsg", 4179, "Pulkovo 1942(58)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0");
+    add_proj4text (p, 1, ".359,-0.053,0.844,-0.84 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pulkovo 1942(58)\",DATUM[\"Pulkovo_1942_58\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7024\"]],AUTHORITY[\"EPSG\",\"6179\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4179\"]]");
+    p = add_epsg_def (first, last, 4180, "epsg", 4180, "EST97");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"EST97\",DATUM[\"Estonia_1997\",SPHEROID[\"GRS 1");
+    add_srs_wkt (p, 1,
+		 "980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]");
+    add_srs_wkt (p, 2,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6180\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5, "2\"]],AUTHORITY[\"EPSG\",\"4180\"]]");
+    p = add_epsg_def (first, last, 4181, "epsg", 4181, "Luxembourg 1930");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41");
+    add_proj4text (p, 1, ",-2.933,2.688,0.43 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Luxembourg 1930\",DATUM[\"Luxembourg_1930\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],TOWGS84[-193,13.7,-39.3,-0.41,-2.933,2.68");
+    add_srs_wkt (p, 3,
+		 "8,0.43],AUTHORITY[\"EPSG\",\"6181\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6, "EPSG\",\"4181\"]]");
+    p = add_epsg_def (first, last, 4182, "epsg", 4182,
+		      "Azores Occidental 1939");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Azores Occidental 1939\",DATUM[\"Azores_Occiden");
+    add_srs_wkt (p, 1,
+		 "tal_Islands_1939\",SPHEROID[\"International 1924\",63783");
+    add_srs_wkt (p, 2,
+		 "88,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6182\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4182\"]]");
+    p = add_epsg_def (first, last, 4183, "epsg", 4183, "Azores Central 1948");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Azores Central 1948\",DATUM[\"Azores_Central_Is");
+    add_srs_wkt (p, 1,
+		 "lands_1948\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-104,167,-38,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"6183\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6, "SG\",\"4183\"]]");
+    p = add_epsg_def (first, last, 4184, "epsg", 4184, "Azores Oriental 1940");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Azores Oriental 1940\",DATUM[\"Azores_Oriental_");
+    add_srs_wkt (p, 1,
+		 "Islands_1940\",SPHEROID[\"International 1924\",6378388,2");
+    add_srs_wkt (p, 2,
+		 "97,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-203,141,53,0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6184\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6, "PSG\",\"4184\"]]");
+    p = add_epsg_def (first, last, 4185, "epsg", 4185, "Madeira 1936");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Madeira 1936\",DATUM[\"Madeira_1936\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6185\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "74532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4185\"]]");
+    p = add_epsg_def (first, last, 4188, "epsg", 4188, "OSNI 1952");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1");
+    add_proj4text (p, 1, ".042,-0.214,-0.631,8.15 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"OSNI 1952\",DATUM[\"OSNI_1952\",SPHEROID[\"Airy");
+    add_srs_wkt (p, 1,
+		 " 1830\",6377563.396,299.3249646,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 2,
+		 "1\"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.");
+    add_srs_wkt (p, 3,
+		 "15],AUTHORITY[\"EPSG\",\"6188\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 5,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6, "G\",\"4188\"]]");
+    p = add_epsg_def (first, last, 4189, "epsg", 4189, "REGVEN");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"REGVEN\",DATUM[\"Red_Geodesica_Venezolana\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6189\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4189\"]]");
+    p = add_epsg_def (first, last, 4190, "epsg", 4190, "POSGAR 98");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"POSGAR 98\",DATUM[\"Posiciones_Geodesicas_Argen");
+    add_srs_wkt (p, 1,
+		 "tinas_1998\",SPHEROID[\"GRS 1980\",6378137,298.257222101");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6190");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4190\"]]");
+    p = add_epsg_def (first, last, 4191, "epsg", 4191, "Albanian 1987");
+    add_proj4text (p, 0, "+proj=longlat +ellps=krass +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Albanian 1987\",DATUM[\"Albanian_1987\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7024\"]],AUTHORITY[\"EPSG\",\"6191\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4191\"]]");
+    p = add_epsg_def (first, last, 4192, "epsg", 4192, "Douala 1948");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0");
+    add_proj4text (p, 1, ",0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Douala 1948\",DATUM[\"Douala_1948\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6192\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4192\"]]");
+    p = add_epsg_def (first, last, 4193, "epsg", 4193, "Manoca 1962");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-15");
+    add_proj4text (p, 1, "1.8,-41.4,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Manoca 1962\",DATUM[\"Manoca_1962\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7011\"]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6193\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"4193\"]]");
+    p = add_epsg_def (first, last, 4194, "epsg", 4194, "Qornoq 1927");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Qornoq 1927\",DATUM[\"Qornoq_1927\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6194\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4194\"]]");
+    p = add_epsg_def (first, last, 4195, "epsg", 4195, "Scoresbysund 1952");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.");
+    add_proj4text (p, 1, "814,-0.6 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Scoresbysund 1952\",DATUM[\"Scoresbysund_1952\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],TOWGS84[105,326,-102.5,0,0,0.814,-0.6]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6195\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"4195\"]]");
+    p = add_epsg_def (first, last, 4196, "epsg", 4196, "Ammassalik 1958");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.6 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Ammassalik 1958\",DATUM[\"Ammassalik_1958\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],TOWGS84[-45,417,-3.5,0,0,0.814,-0.6],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6196\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"41");
+    add_srs_wkt (p, 6, "96\"]]");
+    p = add_epsg_def (first, last, 4197, "epsg", 4197, "Garoua");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Garoua\",DATUM[\"Garoua\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 1,
+		 "0 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"");
+    add_srs_wkt (p, 2,
+		 "]],AUTHORITY[\"EPSG\",\"6197\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 4,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5, "\",\"4197\"]]");
+    p = add_epsg_def (first, last, 4198, "epsg", 4198, "Kousseri");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kousseri\",DATUM[\"Kousseri\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "012\"]],AUTHORITY[\"EPSG\",\"6198\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4198\"]]");
+    p = add_epsg_def (first, last, 4199, "epsg", 4199, "Egypt 1930");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Egypt 1930\",DATUM[\"Egypt_1930\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],AUTHORITY[\"EPSG\",\"6199\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 3,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 4,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"4199\"]]");
+    p = add_epsg_def (first, last, 4200, "epsg", 4200, "Pulkovo 1995");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66");
+    add_proj4text (p, 1, ",-0,-0,0.16,-0.12 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "4200\"]]");
+    p = add_epsg_def (first, last, 4201, "epsg", 4201, "Adindan");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Adindan\",DATUM[\"Adindan\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 1,
+		 "880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 2,
+		 "2\"]],AUTHORITY[\"EPSG\",\"6201\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4201\"]]");
+    p = add_epsg_def (first, last, 4202, "epsg", 4202, "AGD66");
+    add_proj4text (p, 0, "+proj=longlat +ellps=aust_SA +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"AGD66\",DATUM[\"Australian_Geodetic_Datum_1966\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Australian National Spheroid\",6378160,298.2");
+    add_srs_wkt (p, 2,
+		 "5,AUTHORITY[\"EPSG\",\"7003\"]],AUTHORITY[\"EPSG\",\"620");
+    add_srs_wkt (p, 3,
+		 "2\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4202\"]]");
+    p = add_epsg_def (first, last, 4203, "epsg", 4203, "AGD84");
+    add_proj4text (p, 0, "+proj=longlat +ellps=aust_SA +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"AGD84\",DATUM[\"Australian_Geodetic_Datum_1984\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Australian National Spheroid\",6378160,298.2");
+    add_srs_wkt (p, 2,
+		 "5,AUTHORITY[\"EPSG\",\"7003\"]],AUTHORITY[\"EPSG\",\"620");
+    add_srs_wkt (p, 3,
+		 "3\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4203\"]]");
+    p = add_epsg_def (first, last, 4204, "epsg", 4204, "Ain el Abd");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Ain el Abd\",DATUM[\"Ain_el_Abd_1970\",SPHEROID");
+    add_srs_wkt (p, 1,
+		 "[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4204\"]]");
+    p = add_epsg_def (first, last, 4205, "epsg", 4205, "Afgooye");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Afgooye\",DATUM[\"Afgooye\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 1,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 2,
+		 "WGS84[-43,-163,45,0,0,0,0],AUTHORITY[\"EPSG\",\"6205\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 4,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 5, "122\"]],AUTHORITY[\"EPSG\",\"4205\"]]");
+    p = add_epsg_def (first, last, 4206, "epsg", 4206, "Agadez");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Agadez\",DATUM[\"Agadez\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 1,
+		 "0 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7011\"]],AUTHORITY[\"EPSG\",\"6206\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4206\"]]");
+    p = add_epsg_def (first, last, 4207, "epsg", 4207, "Lisbon");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lisbon\",DATUM[\"Lisbon_1937\",SPHEROID[\"Inter");
+    add_srs_wkt (p, 1,
+		 "national 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]");
+    add_srs_wkt (p, 2,
+		 "],AUTHORITY[\"EPSG\",\"6207\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 4,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4207\"]]");
+    p = add_epsg_def (first, last, 4208, "epsg", 4208, "Aratu");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Aratu\",DATUM[\"Aratu\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 1,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"6208\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 4,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"420");
+    add_srs_wkt (p, 5, "8\"]]");
+    p = add_epsg_def (first, last, 4209, "epsg", 4209, "Arc 1950");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Arc 1950\",DATUM[\"Arc_1950\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (Arc)\",6378249.145,293.4663077,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7013\"]],AUTHORITY[\"EPSG\",\"6209\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4209\"]]");
+    p = add_epsg_def (first, last, 4210, "epsg", 4210, "Arc 1960");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Arc 1960\",DATUM[\"Arc_1960\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "012\"]],AUTHORITY[\"EPSG\",\"6210\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4210\"]]");
+    p = add_epsg_def (first, last, 4211, "epsg", 4211, "Batavia");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Batavia\",DATUM[\"Batavia\",SPHEROID[\"Bessel 1");
+    add_srs_wkt (p, 1,
+		 "841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 2,
+		 "]],AUTHORITY[\"EPSG\",\"6211\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 4,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5, "\",\"4211\"]]");
+    p = add_epsg_def (first, last, 4212, "epsg", 4212, "Barbados 1938");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19");
+    add_proj4text (p, 1, ",0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Barbados 1938\",DATUM[\"Barbados_1938\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7012\"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6212\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "4212\"]]");
+    p = add_epsg_def (first, last, 4213, "epsg", 4213, "Beduaram");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,");
+    add_proj4text (p, 1, "188,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Beduaram\",DATUM[\"Beduaram\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7011\"]],TOWGS84[-106,-87,188,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6213\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4213\"]]");
+    add_srs_wkt (p, 6, "");
+    p = add_epsg_def (first, last, 4214, "epsg", 4214, "Beijing 1954");
+    add_proj4text (p, 0, "+proj=longlat +ellps=krass +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4214\"]]");
+    p = add_epsg_def (first, last, 4215, "epsg", 4215, "Belge 1950");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Belge 1950\",DATUM[\"Reseau_National_Belge_1950");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6215\"]],PRIME");
+    add_srs_wkt (p, 3,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 4,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 5, "],AUTHORITY[\"EPSG\",\"4215\"]]");
+    p = add_epsg_def (first, last, 4216, "epsg", 4216, "Bermuda 1957");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bermuda 1957\",DATUM[\"Bermuda_1957\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6216\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4216\"]]");
+    p = add_epsg_def (first, last, 4218, "epsg", 4218, "Bogota 1975");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bogota 1975\",DATUM[\"Bogota_1975\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6218\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4218\"]]");
+    p = add_epsg_def (first, last, 4219, "epsg", 4219, "Bukit Rimpah");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bukit Rimpah\",DATUM[\"Bukit_Rimpah\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 2,
+		 "\",\"7004\"]],TOWGS84[-384,664,-48,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6219\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4219\"]]");
+    p = add_epsg_def (first, last, 4220, "epsg", 4220, "Camacupa");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Camacupa\",DATUM[\"Camacupa\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "012\"]],AUTHORITY[\"EPSG\",\"6220\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4220\"]]");
+    p = add_epsg_def (first, last, 4221, "epsg", 4221, "Campo Inchauspe");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Campo Inchauspe\",DATUM[\"Campo_Inchauspe\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4221\"]]");
+    p = add_epsg_def (first, last, 4222, "epsg", 4222, "Cape");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Cape\",DATUM[\"Cape\",SPHEROID[\"Clarke 1880 (A");
+    add_srs_wkt (p, 1,
+		 "rc)\",6378249.145,293.4663077,AUTHORITY[\"EPSG\",\"7013\"");
+    add_srs_wkt (p, 2,
+		 "]],AUTHORITY[\"EPSG\",\"6222\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 4,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5, "\",\"4222\"]]");
+    p = add_epsg_def (first, last, 4223, "epsg", 4223, "Carthage");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +datum=carthage +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Carthage\",DATUM[\"Carthage\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6223\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 3,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 4,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4223\"]]");
+    p = add_epsg_def (first, last, 4224, "epsg", 4224, "Chua");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Chua\",DATUM[\"Chua\",SPHEROID[\"International ");
+    add_srs_wkt (p, 1,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"6224\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4224\"");
+    add_srs_wkt (p, 5, "]]");
+    p = add_epsg_def (first, last, 4225, "epsg", 4225, "Corrego Alegre");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Corrego Alegre\",DATUM[\"Corrego_Alegre\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7022\"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6225\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4225\"]]");
+    p = add_epsg_def (first, last, 4226, "epsg", 4226, "Cote d'Ivoire");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Cote d'Ivoire\",DATUM[\"Cote_d_Ivoire\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6226\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"910");
+    add_srs_wkt (p, 5, "8\"]],AUTHORITY[\"EPSG\",\"4226\"]]");
+    p = add_epsg_def (first, last, 4227, "epsg", 4227, "Deir ez Zor");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Deir ez Zor\",DATUM[\"Deir_ez_Zor\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6227\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5, "]],AUTHORITY[\"EPSG\",\"4227\"]]");
+    p = add_epsg_def (first, last, 4228, "epsg", 4228, "Douala");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Douala\",DATUM[\"Douala\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 1,
+		 "0 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7011\"]],AUTHORITY[\"EPSG\",\"6228\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4228\"]]");
+    p = add_epsg_def (first, last, 4229, "epsg", 4229, "Egypt 1907");
+    add_proj4text (p, 0, "+proj=longlat +ellps=helmert +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Egypt 1907\",DATUM[\"Egypt_1907\",SPHEROID[\"He");
+    add_srs_wkt (p, 1,
+		 "lmert 1906\",6378200,298.3,AUTHORITY[\"EPSG\",\"7020\"]]");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"6229\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 4,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4229\"]]");
+    p = add_epsg_def (first, last, 4230, "epsg", 4230, "ED50");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4230\"]]");
+    p = add_epsg_def (first, last, 4231, "epsg", 4231, "ED87");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ED87\",DATUM[\"European_Datum_1987\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6231\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4231\"]]");
+    p = add_epsg_def (first, last, 4232, "epsg", 4232, "Fahud");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Fahud\",DATUM[\"Fahud\",SPHEROID[\"Clarke 1880 ");
+    add_srs_wkt (p, 1,
+		 "(RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]");
+    add_srs_wkt (p, 2,
+		 "],AUTHORITY[\"EPSG\",\"6232\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 4,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4232\"]]");
+    p = add_epsg_def (first, last, 4233, "epsg", 4233, "Gandajika 1970");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Gandajika 1970\",DATUM[\"Gandajika_1970\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7022\"]],TOWGS84[-133,-321,50,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6233\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4233\"]]");
+    p = add_epsg_def (first, last, 4234, "epsg", 4234, "Garoua");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Garoua\",DATUM[\"Garoua\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 1,
+		 "0 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7011\"]],AUTHORITY[\"EPSG\",\"6234\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4234\"]]");
+    p = add_epsg_def (first, last, 4235, "epsg", 4235, "Guyane Francaise");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Guyane Francaise\",DATUM[\"Guyane_Francaise\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"International 1924\",6378388,297,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6235\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4235\"]]");
+    p = add_epsg_def (first, last, 4236, "epsg", 4236, "Hu Tzu Shan 1950");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hu Tzu Shan 1950\",DATUM[\"Hu_Tzu_Shan_1950\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"International 1924\",6378388,297,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7022\"]],TOWGS84[-637,-549,-203,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6236\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4236\"");
+    add_srs_wkt (p, 6, "]]");
+    p = add_epsg_def (first, last, 4237, "epsg", 4237, "HD72");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS67 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"HD72\",DATUM[\"Hungarian_Datum_1972\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"GRS 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7036\"]],AUTHORITY[\"EPSG\",\"6237\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4237\"]]");
+    p = add_epsg_def (first, last, 4238, "epsg", 4238, "ID74");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ID74\",DATUM[\"Indonesian_Datum_1974\",SPHEROID");
+    add_srs_wkt (p, 1,
+		 "[\"Indonesian National Spheroid\",6378160,298.247,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7021\"]],AUTHORITY[\"EPSG\",\"6238\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4238\"]]");
+    p = add_epsg_def (first, last, 4239, "epsg", 4239, "Indian 1954");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs8");
+    add_proj4text (p, 1, "4=217,823,299,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Indian 1954\",DATUM[\"Indian_1954\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Everest 1830 (1937 Adjustment)\",6377276.345,300.8017,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7015\"]],TOWGS84[217,823,299,0,0,0,0]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6239\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"4239\"]]");
+    p = add_epsg_def (first, last, 4240, "epsg", 4240, "Indian 1975");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Indian 1975\",DATUM[\"Indian_1975\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Everest 1830 (1937 Adjustment)\",6377276.345,300.8017,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6240\"]");
+    add_srs_wkt (p, 3,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4240\"]]");
+    p = add_epsg_def (first, last, 4241, "epsg", 4241, "Jamaica 1875");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.144808011 +b=6356514.966204134 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Jamaica 1875\",DATUM[\"Jamaica_1875\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880\",6378249.144808011,293.4663076556349,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7034\"]],AUTHORITY[\"EPSG\",\"6241\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5, "22\"]],AUTHORITY[\"EPSG\",\"4241\"]]");
+    p = add_epsg_def (first, last, 4242, "epsg", 4242, "JAD69");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"JAD69\",DATUM[\"Jamaica_1969\",SPHEROID[\"Clark");
+    add_srs_wkt (p, 1,
+		 "e 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7008\"]],AUTHORITY[\"EPSG\",\"6242\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 3,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 4,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4242\"]]");
+    p = add_epsg_def (first, last, 4243, "epsg", 4243, "Kalianpur 1880");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kalianpur 1880\",DATUM[\"Kalianpur_1880\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Everest (1830 Definition)\",6377299.36559538,300.8");
+    add_srs_wkt (p, 2,
+		 "017255433552,AUTHORITY[\"EPSG\",\"7042\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6243\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4243\"]]");
+    p = add_epsg_def (first, last, 4244, "epsg", 4244, "Kandawala");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs8");
+    add_proj4text (p, 1, "4=-97,787,86,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kandawala\",DATUM[\"Kandawala\",SPHEROID[\"Ever");
+    add_srs_wkt (p, 1,
+		 "est 1830 (1937 Adjustment)\",6377276.345,300.8017,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7015\"]],TOWGS84[-97,787,86,0,0,0,0],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6244\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6, "44\"]]");
+    p = add_epsg_def (first, last, 4245, "epsg", 4245, "Kertau 1968");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs");
+    add_proj4text (p, 1, "84=-11,851,5,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kertau 1968\",DATUM[\"Kertau_1968\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Everest 1830 Modified\",6377304.063,300.8017,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7018\"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6245\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4245\"]]");
+    p = add_epsg_def (first, last, 4246, "epsg", 4246, "KOC");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5");
+    add_proj4text (p, 1, ",0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"KOC\",DATUM[\"Kuwait_Oil_Company\",SPHEROID[\"C");
+    add_srs_wkt (p, 1,
+		 "larke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7012\"]],TOWGS84[-294.7,-200.1,525.5,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6246\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4246\"");
+    add_srs_wkt (p, 6, "]]");
+    p = add_epsg_def (first, last, 4247, "epsg", 4247, "La Canoa");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0");
+    add_proj4text (p, 1, ",0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"La Canoa\",DATUM[\"La_Canoa\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 1,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 2,
+		 ",TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6247\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4247\"]]");
+    p = add_epsg_def (first, last, 4248, "epsg", 4248, "PSAD56");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"PSAD56\",DATUM[\"Provisional_South_American_Dat");
+    add_srs_wkt (p, 1,
+		 "um_1956\",SPHEROID[\"International 1924\",6378388,297,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6248\"]");
+    add_srs_wkt (p, 3,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4248\"]]");
+    p = add_epsg_def (first, last, 4249, "epsg", 4249, "Lake");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lake\",DATUM[\"Lake\",SPHEROID[\"International ");
+    add_srs_wkt (p, 1,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"6249\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4249\"");
+    add_srs_wkt (p, 5, "]]");
+    p = add_epsg_def (first, last, 4250, "epsg", 4250, "Leigon");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Leigon\",DATUM[\"Leigon\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 1,
+		 "0 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[-130,29,364,0,0,0,0],AUTHORITY[\"EPSG\",\"625");
+    add_srs_wkt (p, 3,
+		 "0\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4250\"]]");
+    p = add_epsg_def (first, last, 4251, "epsg", 4251, "Liberia 1964");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Liberia 1964\",DATUM[\"Liberia_1964\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],TOWGS84[-90,40,88,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6251\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4251\"]]");
+    p = add_epsg_def (first, last, 4252, "epsg", 4252, "Lome");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lome\",DATUM[\"Lome\",SPHEROID[\"Clarke 1880 (I");
+    add_srs_wkt (p, 1,
+		 "GN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "011\"]],AUTHORITY[\"EPSG\",\"6252\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4252\"]]");
+    p = add_epsg_def (first, last, 4253, "epsg", 4253, "Luzon 1911");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Luzon 1911\",DATUM[\"Luzon_1911\",SPHEROID[\"Cl");
+    add_srs_wkt (p, 1,
+		 "arke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 2,
+		 "\",\"7008\"]],AUTHORITY[\"EPSG\",\"6253\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 3,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4253\"]]");
+    p = add_epsg_def (first, last, 4254, "epsg", 4254, "Hito XVIII 1963");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hito XVIII 1963\",DATUM[\"Hito_XVIII_1963\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6254\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4254\"]]");
+    p = add_epsg_def (first, last, 4255, "epsg", 4255, "Herat North");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Herat North\",DATUM[\"Herat_North\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],TOWGS84[-333,-222,114,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6255\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4255\"]]");
+    p = add_epsg_def (first, last, 4256, "epsg", 4256, "Mahe 1971");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mahe 1971\",DATUM[\"Mahe_1971\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 1,
+		 "ke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7012\"]],TOWGS84[41,-220,-134,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6256\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4256\"]]");
+    p = add_epsg_def (first, last, 4257, "epsg", 4257, "Makassar");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.7");
+    add_proj4text (p, 1, "6,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Makassar\",DATUM[\"Makassar\",SPHEROID[\"Bessel");
+    add_srs_wkt (p, 1,
+		 " 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 2,
+		 "4\"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6257\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4257\"]]");
+    p = add_epsg_def (first, last, 4258, "epsg", 4258, "ETRS89");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference");
+    add_srs_wkt (p, 1,
+		 "_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 2,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 3,
+		 "58\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]]");
+    p = add_epsg_def (first, last, 4259, "epsg", 4259, "Malongo 1987");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Malongo 1987\",DATUM[\"Malongo_1987\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6259\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4259\"]]");
+    p = add_epsg_def (first, last, 4260, "epsg", 4260, "Manoca");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,");
+    add_proj4text (p, 1, "0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Manoca\",DATUM[\"Manoca\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 1,
+		 "0 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6260\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4260\"]]");
+    p = add_epsg_def (first, last, 4261, "epsg", 4261, "Merchich");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47");
+    add_proj4text (p, 1, ",0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Merchich\",DATUM[\"Merchich\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7011\"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6261\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4261\"]]");
+    p = add_epsg_def (first, last, 4262, "epsg", 4262, "Massawa");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Massawa\",DATUM[\"Massawa\",SPHEROID[\"Bessel 1");
+    add_srs_wkt (p, 1,
+		 "841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[639,405,60,0,0,0,0],AUTHORITY[\"EPSG\",\"6262");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4262\"]]");
+    p = add_epsg_def (first, last, 4263, "epsg", 4263, "Minna");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Minna\",DATUM[\"Minna\",SPHEROID[\"Clarke 1880 ");
+    add_srs_wkt (p, 1,
+		 "(RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]");
+    add_srs_wkt (p, 2,
+		 "],AUTHORITY[\"EPSG\",\"6263\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 4,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4263\"]]");
+    p = add_epsg_def (first, last, 4264, "epsg", 4264, "Mhast");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,");
+    add_proj4text (p, 1, "0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mhast\",DATUM[\"Mhast\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 1,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS");
+    add_srs_wkt (p, 2,
+		 "84[-252.95,-4.11,-96.38,0,0,0,0],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 3,
+		 "64\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4264\"]]");
+    p = add_epsg_def (first, last, 4265, "epsg", 4265, "Monte Mario");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Monte Mario\",DATUM[\"Monte_Mario\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6265\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4265\"]]");
+    p = add_epsg_def (first, last, 4266, "epsg", 4266, "M'poraloko");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"M'poraloko\",DATUM[\"M_poraloko\",SPHEROID[\"Cl");
+    add_srs_wkt (p, 1,
+		 "arke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[");
+    add_srs_wkt (p, 2,
+		 "\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6266\"]],PRIMEM");
+    add_srs_wkt (p, 3,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 4,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 5, ",AUTHORITY[\"EPSG\",\"4266\"]]");
+    p = add_epsg_def (first, last, 4267, "epsg", 4267, "NAD27");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4267\"]]");
+    p = add_epsg_def (first, last, 4268, "epsg", 4268, "NAD27 Michigan");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD27 Michigan\",DATUM[\"NAD_Michigan\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1866 Michigan\",6378450.047548896,294.9786971");
+    add_srs_wkt (p, 2,
+		 "646739,AUTHORITY[\"EPSG\",\"7009\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6268\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4268\"]]");
+    p = add_epsg_def (first, last, 4269, "epsg", 4269, "NAD83");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4269\"]]");
+    p = add_epsg_def (first, last, 4270, "epsg", 4270, "Nahrwan 1967");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Nahrwan 1967\",DATUM[\"Nahrwan_1967\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6270\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 3,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 4,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4270\"]]");
+    p = add_epsg_def (first, last, 4271, "epsg", 4271, "Naparima 1972");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Naparima 1972\",DATUM[\"Naparima_1972\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7022\"]],AUTHORITY[\"EPSG\",\"6271\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 3,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 4,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4271\"]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_16 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+    struct epsg_defs *p;
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    p = add_epsg_def (first, last, 4272, "epsg", 4272, "NZGD49");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +datum=nzgd49 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_194");
+    add_srs_wkt (p, 1,
+		 "9\",SPHEROID[\"International 1924\",6378388,297,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0");
+    add_srs_wkt (p, 3,
+		 ".1,1.024,-4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6, "THORITY[\"EPSG\",\"4272\"]]");
+    p = add_epsg_def (first, last, 4273, "epsg", 4273, "NGO 1948");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs");
+    add_proj4text (p, 1, "84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NGO 1948\",DATUM[\"NGO_1948\",SPHEROID[\"Bessel");
+    add_srs_wkt (p, 1,
+		 " Modified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7005\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6273\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "4273\"]]");
+    p = add_epsg_def (first, last, 4274, "epsg", 4274, "Datum 73");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Datum 73\",DATUM[\"Datum_73\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 1,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"6274\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 4,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4274\"]]");
+    p = add_epsg_def (first, last, 4275, "epsg", 4275, "NTF");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,");
+    add_proj4text (p, 1, "320,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NTF\",DATUM[\"Nouvelle_Triangulation_Francaise\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936");
+    add_srs_wkt (p, 2,
+		 "265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,320,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6275\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6, "EPSG\",\"4275\"]]");
+    p = add_epsg_def (first, last, 4276, "epsg", 4276, "NSWC 9Z-2");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NSWC 9Z-2\",DATUM[\"NSWC_9Z_2\",SPHEROID[\"NWL ");
+    add_srs_wkt (p, 1,
+		 "9D\",6378145,298.25,AUTHORITY[\"EPSG\",\"7025\"]],AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"6276\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4276");
+    add_srs_wkt (p, 5, "\"]]");
+    p = add_epsg_def (first, last, 4277, "epsg", 4277, "OSGB 1936");
+    add_proj4text (p, 0, "+proj=longlat +ellps=airy +datum=OSGB36 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"OSGB 1936\",DATUM[\"OSGB_1936\",SPHEROID[\"Airy");
+    add_srs_wkt (p, 1,
+		 " 1830\",6377563.396,299.3249646,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 2,
+		 "1\"]],AUTHORITY[\"EPSG\",\"6277\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4277\"]]");
+    p = add_epsg_def (first, last, 4278, "epsg", 4278, "OSGB70");
+    add_proj4text (p, 0, "+proj=longlat +ellps=airy +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"OSGB70\",DATUM[\"OSGB_1970_SN\",SPHEROID[\"Airy");
+    add_srs_wkt (p, 1,
+		 " 1830\",6377563.396,299.3249646,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 2,
+		 "1\"]],AUTHORITY[\"EPSG\",\"6278\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4278\"]]");
+    p = add_epsg_def (first, last, 4279, "epsg", 4279, "OS(SN)80");
+    add_proj4text (p, 0, "+proj=longlat +ellps=airy +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"OS(SN)80\",DATUM[\"OS_SN_1980\",SPHEROID[\"Airy");
+    add_srs_wkt (p, 1,
+		 " 1830\",6377563.396,299.3249646,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 2,
+		 "1\"]],AUTHORITY[\"EPSG\",\"6279\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4279\"]]");
+    p = add_epsg_def (first, last, 4280, "epsg", 4280, "Padang");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Padang\",DATUM[\"Padang_1884\",SPHEROID[\"Besse");
+    add_srs_wkt (p, 1,
+		 "l 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "04\"]],AUTHORITY[\"EPSG\",\"6280\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4280\"]]");
+    p = add_epsg_def (first, last, 4281, "epsg", 4281, "Palestine 1923");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-27");
+    add_proj4text (p, 1,
+		   "5.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Palestine 1923\",DATUM[\"Palestine_1923\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Clarke 1880 (Benoit)\",6378300.789,293.46631553898");
+    add_srs_wkt (p, 2,
+		 "02,AUTHORITY[\"EPSG\",\"7010\"]],TOWGS84[-275.722,94.782");
+    add_srs_wkt (p, 3,
+		 "4,340.894,-8.001,-4.42,-11.821,1],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 4,
+		 "281\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 5,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6, "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4281\"]]");
+    p = add_epsg_def (first, last, 4282, "epsg", 4282, "Pointe Noire");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pointe Noire\",DATUM[\"Congo_1960_Pointe_Noire\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936");
+    add_srs_wkt (p, 2,
+		 "265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "282\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5, "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4282\"]]");
+    p = add_epsg_def (first, last, 4283, "epsg", 4283, "GDA94");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"GDA94\",DATUM[\"Geocentric_Datum_of_Australia_1");
+    add_srs_wkt (p, 1,
+		 "994\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6283\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4283\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4284, "epsg", 4284, "Pulkovo 1942");
+    add_proj4text (p, 0, "+proj=longlat +ellps=krass +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "4284\"]]");
+    p = add_epsg_def (first, last, 4285, "epsg", 4285, "Qatar 1974");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Qatar 1974\",DATUM[\"Qatar_1974\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],AUTHORITY[\"EPSG\",\"6285\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 3,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 4,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"4285\"]]");
+    p = add_epsg_def (first, last, 4286, "epsg", 4286, "Qatar 1948");
+    add_proj4text (p, 0, "+proj=longlat +ellps=helmert +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Qatar 1948\",DATUM[\"Qatar_1948\",SPHEROID[\"He");
+    add_srs_wkt (p, 1,
+		 "lmert 1906\",6378200,298.3,AUTHORITY[\"EPSG\",\"7020\"]]");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"6286\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 4,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4286\"]]");
+    p = add_epsg_def (first, last, 4287, "epsg", 4287, "Qornoq");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Qornoq\",DATUM[\"Qornoq\",SPHEROID[\"Internatio");
+    add_srs_wkt (p, 1,
+		 "nal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOW");
+    add_srs_wkt (p, 2,
+		 "GS84[164,138,-189,0,0,0,0],AUTHORITY[\"EPSG\",\"6287\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 4,
+		 "IT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5, "08\"]],AUTHORITY[\"EPSG\",\"4287\"]]");
+    p = add_epsg_def (first, last, 4288, "epsg", 4288, "Loma Quintana");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Loma Quintana\",DATUM[\"Loma_Quintana\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7022\"]],AUTHORITY[\"EPSG\",\"6288\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 3,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 4,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4288\"]]");
+    p = add_epsg_def (first, last, 4289, "epsg", 4289, "Amersfoort");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Amersfoort\",DATUM[\"Amersfoort\",SPHEROID[\"Be");
+    add_srs_wkt (p, 1,
+		 "ssel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7004\"]],AUTHORITY[\"EPSG\",\"6289\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4289\"]]");
+    p = add_epsg_def (first, last, 4291, "epsg", 4291, "SAD69");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS67 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"SAD69\",DATUM[\"South_American_Datum_1969\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"GRS 1967\",6378160,298.247167427,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7036\"]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"4291\"]]");
+    p = add_epsg_def (first, last, 4292, "epsg", 4292, "Sapper Hill 1943");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Sapper Hill 1943\",DATUM[\"Sapper_Hill_1943\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"International 1924\",6378388,297,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7022\"]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6292\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4292\"]]");
+    p = add_epsg_def (first, last, 4293, "epsg", 4293, "Schwarzeck");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bess_nam +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Schwarzeck\",DATUM[\"Schwarzeck\",SPHEROID[\"Be");
+    add_srs_wkt (p, 1,
+		 "ssel Namibia (GLM)\",6377483.865280419,299.1528128,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7046\"]],AUTHORITY[\"EPSG\",\"6293\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5, "2\"]],AUTHORITY[\"EPSG\",\"4293\"]]");
+    p = add_epsg_def (first, last, 4294, "epsg", 4294, "Segora");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Segora\",DATUM[\"Segora\",SPHEROID[\"Bessel 184");
+    add_srs_wkt (p, 1,
+		 "1\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]");
+    add_srs_wkt (p, 2,
+		 "],AUTHORITY[\"EPSG\",\"6294\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 4,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4294\"]]");
+    p = add_epsg_def (first, last, 4295, "epsg", 4295, "Serindung");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Serindung\",DATUM[\"Serindung\",SPHEROID[\"Bess");
+    add_srs_wkt (p, 1,
+		 "el 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "004\"]],AUTHORITY[\"EPSG\",\"6295\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4295\"]]");
+    p = add_epsg_def (first, last, 4296, "epsg", 4296, "Sudan");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Sudan\",DATUM[\"Sudan\",SPHEROID[\"Clarke 1880 ");
+    add_srs_wkt (p, 1,
+		 "(IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7011\"]],AUTHORITY[\"EPSG\",\"6296\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "74532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4296\"]]");
+    p = add_epsg_def (first, last, 4297, "epsg", 4297, "Tananarive");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tananarive\",DATUM[\"Tananarive_1925\",SPHEROID");
+    add_srs_wkt (p, 1,
+		 "[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6297\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4297\"]]");
+    p = add_epsg_def (first, last, 4298, "epsg", 4298, "Timbalai 1948");
+    add_proj4text (p, 0, "+proj=longlat +ellps=evrstSS +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Timbalai 1948\",DATUM[\"Timbalai_1948\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Everest 1830 (1967 Definition)\",6377298.556,300.801");
+    add_srs_wkt (p, 2,
+		 "7,AUTHORITY[\"EPSG\",\"7016\"]],AUTHORITY[\"EPSG\",\"629");
+    add_srs_wkt (p, 3,
+		 "8\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4298\"]]");
+    p = add_epsg_def (first, last, 4299, "epsg", 4299, "TM65");
+    add_proj4text (p, 0, "+proj=longlat +ellps=mod_airy +datum=ire65 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"TM65\",DATUM[\"TM65\",SPHEROID[\"Airy Modified ");
+    add_srs_wkt (p, 1,
+		 "1849\",6377340.189,299.3249646,AUTHORITY[\"EPSG\",\"7002");
+    add_srs_wkt (p, 2,
+		 "\"]],AUTHORITY[\"EPSG\",\"6299\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 3,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 4,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"4299\"]]");
+    p = add_epsg_def (first, last, 4300, "epsg", 4300, "TM75");
+    add_proj4text (p, 0, "+proj=longlat +ellps=mod_airy +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"TM75\",DATUM[\"Geodetic_Datum_of_1965\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Airy Modified 1849\",6377340.189,299.3249646,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7002\"]],AUTHORITY[\"EPSG\",\"6300\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5, "]],AUTHORITY[\"EPSG\",\"4300\"]]");
+    p = add_epsg_def (first, last, 4301, "epsg", 4301, "Tokyo");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\"");
+    add_srs_wkt (p, 1,
+		 ",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 4,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "4301\"]]");
+    p = add_epsg_def (first, last, 4302, "epsg", 4302, "Trinidad 1903");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Trinidad 1903\",DATUM[\"Trinidad_1903\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1858\",6378293.645208759,294.2606763692569,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7007\"]],AUTHORITY[\"EPSG\",\"6302\"]");
+    add_srs_wkt (p, 3,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4302\"]]");
+    p = add_epsg_def (first, last, 4303, "epsg", 4303, "TC(1948)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=helmert +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"TC(1948)\",DATUM[\"Trucial_Coast_1948\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Helmert 1906\",6378200,298.3,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "20\"]],AUTHORITY[\"EPSG\",\"6303\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4303\"]]");
+    p = add_epsg_def (first, last, 4304, "epsg", 4304, "Voirol 1875");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,");
+    add_proj4text (p, 1, "227,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Voirol 1875\",DATUM[\"Voirol_1875\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7011\"]],TOWGS84[-73,-247,227,0,0,0,0],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6304\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"43");
+    add_srs_wkt (p, 6, "04\"]]");
+    p = add_epsg_def (first, last, 4306, "epsg", 4306, "Bern 1938");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bern 1938\",DATUM[\"Bern_1938\",SPHEROID[\"Bess");
+    add_srs_wkt (p, 1,
+		 "el 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "004\"]],AUTHORITY[\"EPSG\",\"6306\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4306\"]]");
+    p = add_epsg_def (first, last, 4307, "epsg", 4307, "Nord Sahara 1959");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Nord Sahara 1959\",DATUM[\"Nord_Sahara_1959\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6307\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4307\"]]");
+    p = add_epsg_def (first, last, 4308, "epsg", 4308, "RT38");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RT38\",DATUM[\"Stockholm_1938\",SPHEROID[\"Bess");
+    add_srs_wkt (p, 1,
+		 "el 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "004\"]],AUTHORITY[\"EPSG\",\"6308\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4308\"]]");
+    p = add_epsg_def (first, last, 4309, "epsg", 4309, "Yacare");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Yacare\",DATUM[\"Yacare\",SPHEROID[\"Internatio");
+    add_srs_wkt (p, 1,
+		 "nal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOW");
+    add_srs_wkt (p, 2,
+		 "GS84[-155,171,37,0,0,0,0],AUTHORITY[\"EPSG\",\"6309\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5, "22\"]],AUTHORITY[\"EPSG\",\"4309\"]]");
+    p = add_epsg_def (first, last, 4310, "epsg", 4310, "Yoff");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Yoff\",DATUM[\"Yoff\",SPHEROID[\"Clarke 1880 (I");
+    add_srs_wkt (p, 1,
+		 "GN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "011\"]],AUTHORITY[\"EPSG\",\"6310\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4310\"]]");
+    p = add_epsg_def (first, last, 4311, "epsg", 4311, "Zanderij");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Zanderij\",DATUM[\"Zanderij\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 1,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 2,
+		 ",TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY[\"EPSG\",\"631");
+    add_srs_wkt (p, 3,
+		 "1\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4311\"]]");
+    p = add_epsg_def (first, last, 4312, "epsg", 4312, "MGI");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +datum=hermannskogel +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"MGI\",DATUM[\"Militar_Geographische_Institute\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7004\"]],TOWGS84[577.326,90.129,463.919,5");
+    add_srs_wkt (p, 3,
+		 ".137,1.474,5.297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108");
+    add_srs_wkt (p, 6, "\"]],AUTHORITY[\"EPSG\",\"4312\"]]");
+    p = add_epsg_def (first, last, 4313, "epsg", 4313, "Belge 1972");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.");
+    add_proj4text (p, 1, "724,-0.33657,0.456955,-1.84218,1 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Belge 1972\",DATUM[\"Reseau_National_Belge_1972");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],TOWGS84[106.869,-52.2978,103.724,-0");
+    add_srs_wkt (p, 3,
+		 ".33657,0.456955,-1.84218,1],AUTHORITY[\"EPSG\",\"6313\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "9122\"]],AUTHORITY[\"EPSG\",\"4313\"]]");
+    p = add_epsg_def (first, last, 4314, "epsg", 4314, "DHDN");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +datum=potsdam +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIME");
+    add_srs_wkt (p, 3,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 4,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 5, "],AUTHORITY[\"EPSG\",\"4314\"]]");
+    p = add_epsg_def (first, last, 4315, "epsg", 4315, "Conakry 1905");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-");
+    add_proj4text (p, 1, "9,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Conakry 1905\",DATUM[\"Conakry_1905\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7011\"]],TOWGS84[-23,259,-9,0,0,0,0],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6315\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"43");
+    add_srs_wkt (p, 6, "15\"]]");
+    p = add_epsg_def (first, last, 4316, "epsg", 4316, "Dealul Piscului 1930");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Dealul Piscului 1930\",DATUM[\"Dealul_Piscului_");
+    add_srs_wkt (p, 1,
+		 "1930\",SPHEROID[\"International 1924\",6378388,297,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6316\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5, "2\"]],AUTHORITY[\"EPSG\",\"4316\"]]");
+    p = add_epsg_def (first, last, 4317, "epsg", 4317, "Dealul Piscului 1970");
+    add_proj4text (p, 0, "+proj=longlat +ellps=krass +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Dealul Piscului 1970\",DATUM[\"Dealul_Piscului_");
+    add_srs_wkt (p, 1,
+		 "1970\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6317\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4317\"]]");
+    p = add_epsg_def (first, last, 4318, "epsg", 4318, "NGN");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NGN\",DATUM[\"National_Geodetic_Network\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7030\"]],TOWGS84[-3.2,-5.7,2.8,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6318\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4318\"]]");
+    p = add_epsg_def (first, last, 4319, "epsg", 4319, "KUDAMS");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"KUDAMS\",DATUM[\"Kuwait_Utility\",SPHEROID[\"GR");
+    add_srs_wkt (p, 1,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 2,
+		 "\"]],AUTHORITY[\"EPSG\",\"6319\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 3,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 4,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"4319\"]]");
+    p = add_epsg_def (first, last, 4322, "epsg", 4322, "WGS 72");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS72 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"WGS 72\",DATUM[\"WGS_1972\",SPHEROID[\"WGS 72\"");
+    add_srs_wkt (p, 1,
+		 ",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],AUTHORITY[");
+    add_srs_wkt (p, 2,
+		 "\"EPSG\",\"6322\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4322\"]]");
+    add_srs_wkt (p, 5, "");
+    p = add_epsg_def (first, last, 4324, "epsg", 4324, "WGS 72BE");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0");
+    add_proj4text (p, 1, ".38 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"WGS 72BE\",DATUM[\"WGS_1972_Transit_Broadcast_E");
+    add_srs_wkt (p, 1,
+		 "phemeris\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORITY[");
+    add_srs_wkt (p, 2,
+		 "\"EPSG\",\"7043\"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6324\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6, "324\"]]");
+
+#endif /* loading unconditionally the 4326 EPSG def */
+    p = add_epsg_def (first, last, 4326, "epsg", 4326, "WGS 84");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\"");
+    add_srs_wkt (p, 1,
+		 ",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 4,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 5, "326\"]]");
+#ifndef OMIT_EPSG		/* resuming conditional EPSG initialization */
+
+    p = add_epsg_def (first, last, 4600, "epsg", 4600, "Anguilla 1957");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Anguilla 1957\",DATUM[\"Anguilla_1957\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6600\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4600\"]]");
+    p = add_epsg_def (first, last, 4601, "epsg", 4601, "Antigua 1943");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Antigua 1943\",DATUM[\"Antigua_1943\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6601\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 3,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 4,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4601\"]]");
+    p = add_epsg_def (first, last, 4602, "epsg", 4602, "Dominica 1945");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Dominica 1945\",DATUM[\"Dominica_1945\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7012\"]],TOWGS84[725,685,536,0,0,0,0],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6602\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4602\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4603, "epsg", 4603, "Grenada 1953");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Grenada 1953\",DATUM[\"Grenada_1953\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],TOWGS84[72,213.7,93,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6603\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4603\"]]");
+    p = add_epsg_def (first, last, 4604, "epsg", 4604, "Montserrat 1958");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Montserrat 1958\",DATUM[\"Montserrat_1958\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7012\"]],TOWGS84[174,359,365,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6604\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"460");
+    add_srs_wkt (p, 6, "4\"]]");
+    p = add_epsg_def (first, last, 4605, "epsg", 4605, "St. Kitts 1955");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"St. Kitts 1955\",DATUM[\"St_Kitts_1955\",SPHERO");
+    add_srs_wkt (p, 1,
+		 "ID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6605\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4605\"]]");
+    p = add_epsg_def (first, last, 4606, "epsg", 4606, "St. Lucia 1955");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"St. Lucia 1955\",DATUM[\"St_Lucia_1955\",SPHERO");
+    add_srs_wkt (p, 1,
+		 "ID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7012\"]],TOWGS84[-149,128,296,0,0,0,0],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6606\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4606\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4607, "epsg", 4607, "St. Vincent 1945");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274");
+    add_proj4text (p, 1, ".607,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"St. Vincent 1945\",DATUM[\"St_Vincent_1945\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7012\"]],TOWGS84[195.671,332.517,274.607,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6607\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6, "EPSG\",\"4607\"]]");
+    p = add_epsg_def (first, last, 4608, "epsg", 4608, "NAD27(76)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD27(76)\",DATUM[\"North_American_Datum_1927_1");
+    add_srs_wkt (p, 1,
+		 "976\",SPHEROID[\"Clarke 1866\",6378206.4,294.97869821390");
+    add_srs_wkt (p, 2,
+		 "06,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"66");
+    add_srs_wkt (p, 3,
+		 "08\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4608\"]]");
+    p = add_epsg_def (first, last, 4609, "epsg", 4609, "NAD27(CGQ77)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD27(CGQ77)\",DATUM[\"North_American_Datum_192");
+    add_srs_wkt (p, 1,
+		 "7_CGQ77\",SPHEROID[\"Clarke 1866\",6378206.4,294.9786982");
+    add_srs_wkt (p, 2,
+		 "139006,AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6609\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4609\"]]");
+    p = add_epsg_def (first, last, 4610, "epsg", 4610, "Xian 1980");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Xian 1980\",DATUM[\"Xian_1980\",SPHEROID[\"Xian");
+    add_srs_wkt (p, 1,
+		 " 1980\",6378140,298.257,AUTHORITY[\"EPSG\",\"7049\"]],AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"6610\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 4,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "4610\"]]");
+    p = add_epsg_def (first, last, 4611, "epsg", 4611, "Hong Kong 1980");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-16");
+    add_proj4text (p, 1, "1.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hong Kong 1980\",DATUM[\"Hong_Kong_1980\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7022\"]],TOWGS84[-162.619,-276.959,-161.764,0.067753,");
+    add_srs_wkt (p, 3,
+		 "-2.24365,-1.15883,-1.09425],AUTHORITY[\"EPSG\",\"6611\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "9122\"]],AUTHORITY[\"EPSG\",\"4611\"]]");
+    p = add_epsg_def (first, last, 4612, "epsg", 4612, "JGD2000");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"JGD2000\",DATUM[\"Japanese_Geodetic_Datum_2000\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6612\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4612\"]]");
+    p = add_epsg_def (first, last, 4613, "epsg", 4613, "Segara");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Segara\",DATUM[\"Gunung_Segara\",SPHEROID[\"Bes");
+    add_srs_wkt (p, 1,
+		 "sel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7004\"]],AUTHORITY[\"EPSG\",\"6613\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4613\"]]");
+    p = add_epsg_def (first, last, 4614, "epsg", 4614, "QND95");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11");
+    add_proj4text (p, 1, ".0006,1.1643,0.174458,1.09626,3.65706 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"QND95\",DATUM[\"Qatar_National_Datum_1995\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],TOWGS84[-119.425,-303.659,-11.0006,1.1643");
+    add_srs_wkt (p, 3,
+		 ",0.174458,1.09626,3.65706],AUTHORITY[\"EPSG\",\"6614\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6, "122\"]],AUTHORITY[\"EPSG\",\"4614\"]]");
+    p = add_epsg_def (first, last, 4615, "epsg", 4615, "Porto Santo");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Porto Santo\",DATUM[\"Porto_Santo_1936\",SPHERO");
+    add_srs_wkt (p, 1,
+		 "ID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7022\"]],TOWGS84[-499,-249,314,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6615\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4615\"]]");
+    p = add_epsg_def (first, last, 4616, "epsg", 4616, "Selvagem Grande");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Selvagem Grande\",DATUM[\"Selvagem_Grande\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6616\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4616\"]]");
+    p = add_epsg_def (first, last, 4617, "epsg", 4617, "NAD83(CSRS)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD83(CSRS)\",DATUM[\"NAD83_Canadian_Spatial_Re");
+    add_srs_wkt (p, 1,
+		 "ference_System\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 2,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6140\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4617\"]]");
+    p = add_epsg_def (first, last, 4618, "epsg", 4618, "SAD69");
+    add_proj4text (p, 0, "+proj=longlat +ellps=aust_SA +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"SAD69\",DATUM[\"South_American_Datum_1969\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"GRS 1967 Modified\",6378160,298.25,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7050\"]],AUTHORITY[\"EPSG\",\"6618\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4618\"]]");
+    p = add_epsg_def (first, last, 4619, "epsg", 4619, "SWEREF99");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"SWEREF99\",DATUM[\"SWEREF99\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 1,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 2,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6619\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4619\"]]");
+    p = add_epsg_def (first, last, 4620, "epsg", 4620, "Point 58");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0");
+    add_proj4text (p, 1, ",0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Point 58\",DATUM[\"Point_58\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 1,
+		 " 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "012\"]],TOWGS84[-106,-129,165,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6620\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4620\"]]");
+    p = add_epsg_def (first, last, 4621, "epsg", 4621, "Fort Marigot");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Fort Marigot\",DATUM[\"Fort_Marigot\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],TOWGS84[137,248,-430,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6621\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4621\"]]");
+    p = add_epsg_def (first, last, 4622, "epsg", 4622, "Guadeloupe 1948");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Guadeloupe 1948\",DATUM[\"Guadeloupe_1948\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6622\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4622\"]]");
+    p = add_epsg_def (first, last, 4623, "epsg", 4623, "CSG67");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"CSG67\",DATUM[\"Centre_Spatial_Guyanais_1967\",");
+    add_srs_wkt (p, 1,
+		 "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],TOWGS84[-186,230,110,0,0,0,0],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6623\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4623\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4624, "epsg", 4624, "RGFG95");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_d");
+    add_proj4text (p, 1, "efs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RGFG95\",DATUM[\"Reseau_Geodesique_Francais_Guy");
+    add_srs_wkt (p, 1,
+		 "ane_1995\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[2,2,-2,0,0,0,0],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6624\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6, "624\"]]");
+    p = add_epsg_def (first, last, 4625, "epsg", 4625, "Martinique 1938");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Martinique 1938\",DATUM[\"Martinique_1938\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6625\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4625\"]]");
+    p = add_epsg_def (first, last, 4626, "epsg", 4626, "Reunion 1947");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Reunion 1947\",DATUM[\"Reunion_1947\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6626\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4626\"]]");
+    p = add_epsg_def (first, last, 4627, "epsg", 4627, "RGR92");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RGR92\",DATUM[\"Reseau_Geodesique_de_la_Reunion");
+    add_srs_wkt (p, 1,
+		 "_1992\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6627\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4627\"");
+    add_srs_wkt (p, 6, "]]");
+    p = add_epsg_def (first, last, 4628, "epsg", 4628, "Tahiti 52");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tahiti 52\",DATUM[\"Tahiti_52\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 1,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[162,117,154,0,0,0,0],AUTHORITY[\"EPSG\",\"662");
+    add_srs_wkt (p, 3,
+		 "8\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4628\"]]");
+    p = add_epsg_def (first, last, 4629, "epsg", 4629, "Tahaa 54");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tahaa 54\",DATUM[\"Tahaa_54\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 1,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"6629\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 4,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4629\"]]");
+    p = add_epsg_def (first, last, 4630, "epsg", 4630, "IGN72 Nuku Hiva");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN72 Nuku Hiva\",DATUM[\"IGN72_Nuku_Hiva\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6630\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4630\"]]");
+    p = add_epsg_def (first, last, 4631, "epsg", 4631, "K0 1949");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"K0 1949\",DATUM[\"K0_1949\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 1,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 2,
+		 "OWGS84[145,-187,103,0,0,0,0],AUTHORITY[\"EPSG\",\"6631\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4631\"]]");
+    p = add_epsg_def (first, last, 4632, "epsg", 4632, "Combani 1950");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Combani 1950\",DATUM[\"Combani_1950\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],TOWGS84[-382,-59,-262,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6632\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4632\"]]");
+    p = add_epsg_def (first, last, 4633, "epsg", 4633, "IGN56 Lifou");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN56 Lifou\",DATUM[\"IGN56_Lifou\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6633\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4633\"]]");
+    p = add_epsg_def (first, last, 4634, "epsg", 4634, "IGN72 Grand Terre");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN72 Grand Terre\",DATUM[\"IGN72_Grande_Terre\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6634\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4634\"]]");
+    p = add_epsg_def (first, last, 4635, "epsg", 4635, "ST87 Ouvea");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103");
+    add_proj4text (p, 1, ".344,3.5107,-4.9668,-5.7047,4.4798 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ST87 Ouvea\",DATUM[\"ST87_Ouvea\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],TOWGS84[-122.383,-188.696,103.344,3.5107,-4.9668,-5");
+    add_srs_wkt (p, 3,
+		 ".7047,4.4798],AUTHORITY[\"EPSG\",\"6635\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6, "RITY[\"EPSG\",\"4635\"]]");
+    p = add_epsg_def (first, last, 4636, "epsg", 4636, "Petrels 1972");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Petrels 1972\",DATUM[\"Petrels_1972\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],TOWGS84[365,194,166,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6636\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4636\"]]");
+    p = add_epsg_def (first, last, 4637, "epsg", 4637, "Perroud 1950");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Perroud 1950\",DATUM[\"Pointe_Geologie_Perroud_");
+    add_srs_wkt (p, 1,
+		 "1950\",SPHEROID[\"International 1924\",6378388,297,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7022\"]],TOWGS84[325,154,172,0,0,0,0],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6637\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "4637\"]]");
+    p = add_epsg_def (first, last, 4638, "epsg", 4638,
+		      "Saint Pierre et Miquelon 1950");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Saint Pierre et Miquelon 1950\",DATUM[\"Saint_P");
+    add_srs_wkt (p, 1,
+		 "ierre_et_Miquelon_1950\",SPHEROID[\"Clarke 1866\",637820");
+    add_srs_wkt (p, 2,
+		 "6.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],TOWG");
+    add_srs_wkt (p, 3,
+		 "S84[30,430,368,0,0,0,0],AUTHORITY[\"EPSG\",\"6638\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6, "\"]],AUTHORITY[\"EPSG\",\"4638\"]]");
+    p = add_epsg_def (first, last, 4639, "epsg", 4639, "MOP78");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"MOP78\",DATUM[\"MOP78\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 1,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"6639\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 4,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"463");
+    add_srs_wkt (p, 5, "9\"]]");
+    p = add_epsg_def (first, last, 4640, "epsg", 4640, "RRAF 1991");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RRAF 1991\",DATUM[\"Reseau_de_Reference_des_Ant");
+    add_srs_wkt (p, 1,
+		 "illes_Francaises_1991\",SPHEROID[\"WGS 84\",6378137,298.");
+    add_srs_wkt (p, 2,
+		 "257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6640\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6, "PSG\",\"4640\"]]");
+    p = add_epsg_def (first, last, 4641, "epsg", 4641, "IGN53 Mare");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN53 Mare\",DATUM[\"IGN53_Mare\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],AUTHORITY[\"EPSG\",\"6641\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 3,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 4,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"4641\"]]");
+    p = add_epsg_def (first, last, 4642, "epsg", 4642, "ST84 Ile des Pins");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ST84 Ile des Pins\",DATUM[\"ST84_Ile_des_Pins\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6642\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4642\"]]");
+    p = add_epsg_def (first, last, 4643, "epsg", 4643, "ST71 Belep");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.");
+    add_proj4text (p, 1, "429,16.3119,20.1721,-4.0349,-111.7 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ST71 Belep\",DATUM[\"ST71_Belep\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],TOWGS84[-480.26,-438.32,-643.429,16.3119,20.1721,-4");
+    add_srs_wkt (p, 3,
+		 ".0349,-111.7],AUTHORITY[\"EPSG\",\"6643\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6, "RITY[\"EPSG\",\"4643\"]]");
+    p = add_epsg_def (first, last, 4644, "epsg", 4644, "NEA74 Noumea");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NEA74 Noumea\",DATUM[\"NEA74_Noumea\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6644\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4644\"]]");
+    p = add_epsg_def (first, last, 4645, "epsg", 4645, "RGNC 1991");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RGNC 1991\",DATUM[\"Reseau_Geodesique_Nouvelle_");
+    add_srs_wkt (p, 1,
+		 "Caledonie_1991\",SPHEROID[\"International 1924\",6378388");
+    add_srs_wkt (p, 2,
+		 ",297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6645\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"4645\"]]");
+    p = add_epsg_def (first, last, 4646, "epsg", 4646, "Grand Comoros");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Grand Comoros\",DATUM[\"Grand_Comoros\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7022\"]],AUTHORITY[\"EPSG\",\"6646\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 3,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 4,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4646\"]]");
+    p = add_epsg_def (first, last, 4657, "epsg", 4657, "Reykjavik 1900");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28");
+    add_proj4text (p, 1, ",199,5,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Reykjavik 1900\",DATUM[\"Reykjavik_1900\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Danish 1876\",6377019.27,300,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7051\"]],TOWGS84[-28,199,5,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6657\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4657\"]]");
+    p = add_epsg_def (first, last, 4658, "epsg", 4658, "Hjorsey 1955");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hjorsey 1955\",DATUM[\"Hjorsey_1955\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6658\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4658\"]]");
+    p = add_epsg_def (first, last, 4659, "epsg", 4659, "ISN93");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ISN93\",DATUM[\"Islands_Network_1993\",SPHEROID");
+    add_srs_wkt (p, 1,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"665");
+    add_srs_wkt (p, 3,
+		 "9\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4659\"]]");
+    p = add_epsg_def (first, last, 4660, "epsg", 4660, "Helle 1954");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.");
+    add_proj4text (p, 1, "873,32.3934,-153.257,-96.2266,16.805 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Helle 1954\",DATUM[\"Helle_1954\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],TOWGS84[982.609,552.753,-540.873,32.3934,-153.257,-");
+    add_srs_wkt (p, 3,
+		 "96.2266,16.805],AUTHORITY[\"EPSG\",\"6660\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6, "HORITY[\"EPSG\",\"4660\"]]");
+    p = add_epsg_def (first, last, 4661, "epsg", 4661, "LKS92");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"LKS92\",DATUM[\"Latvia_1992\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 1,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 2,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6661\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 4,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 5, "\"]],AUTHORITY[\"EPSG\",\"4661\"]]");
+    p = add_epsg_def (first, last, 4662, "epsg", 4662, "IGN72 Grande Terre");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN72 Grande Terre\",DATUM[\"IGN72_Grande_Terre");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6634\"]],PRIME");
+    add_srs_wkt (p, 3,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 4,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 5, "],AUTHORITY[\"EPSG\",\"4662\"]]");
+    p = add_epsg_def (first, last, 4663, "epsg", 4663, "Porto Santo 1995");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Porto Santo 1995\",DATUM[\"Porto_Santo_1995\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"International 1924\",6378388,297,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6663\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 4,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 5, "THORITY[\"EPSG\",\"4663\"]]");
+    p = add_epsg_def (first, last, 4664, "epsg", 4664, "Azores Oriental 1995");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Azores Oriental 1995\",DATUM[\"Azores_Oriental_");
+    add_srs_wkt (p, 1,
+		 "Islands_1995\",SPHEROID[\"International 1924\",6378388,2");
+    add_srs_wkt (p, 2,
+		 "97,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"66");
+    add_srs_wkt (p, 3,
+		 "64\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4664\"]]");
+    p = add_epsg_def (first, last, 4665, "epsg", 4665, "Azores Central 1995");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Azores Central 1995\",DATUM[\"Azores_Central_Is");
+    add_srs_wkt (p, 1,
+		 "lands_1995\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6665");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4665\"]]");
+    p = add_epsg_def (first, last, 4666, "epsg", 4666, "Lisbon 1890");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lisbon 1890\",DATUM[\"Lisbon_1890\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7004\"]],AUTHORITY[\"EPSG\",\"6666\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4666\"]]");
+    p = add_epsg_def (first, last, 4667, "epsg", 4667, "IKBD-92");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IKBD-92\",DATUM[\"Iraq_Kuwait_Boundary_Datum_19");
+    add_srs_wkt (p, 1,
+		 "92\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6667\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4667\"]]");
+    p = add_epsg_def (first, last, 4668, "epsg", 4668, "ED79");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ED79\",DATUM[\"European_Datum_1979\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],TOWGS84[-86,-98,-119,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6668\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4668\"]]");
+    p = add_epsg_def (first, last, 4669, "epsg", 4669, "LKS94");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"LKS94\",DATUM[\"Lithuania_1994_ETRS89\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "126\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5, "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4669\"]]");
+    p = add_epsg_def (first, last, 4670, "epsg", 4670, "IGM95");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGM95\",DATUM[\"Istituto_Geografico_Militaire_1");
+    add_srs_wkt (p, 1,
+		 "995\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6670\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4670\"]]");
+    p = add_epsg_def (first, last, 4671, "epsg", 4671, "Voirol 1879");
+    add_proj4text (p, 0, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Voirol 1879\",DATUM[\"Voirol_1879\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Clarke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6671\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5, "]],AUTHORITY[\"EPSG\",\"4671\"]]");
+    p = add_epsg_def (first, last, 4672, "epsg", 4672, "Chatham Islands 1971");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Chatham Islands 1971\",DATUM[\"Chatham_Islands_");
+    add_srs_wkt (p, 1,
+		 "Datum_1971\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[175,-38,113,0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0],AUTHORITY[\"EPSG\",\"6672\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 5,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6, "G\",\"4672\"]]");
+    p = add_epsg_def (first, last, 4673, "epsg", 4673, "Chatham Islands 1979");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,");
+    add_proj4text (p, 1, "-0,-0,0.554,0.2263 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Chatham Islands 1979\",DATUM[\"Chatham_Islands_");
+    add_srs_wkt (p, 1,
+		 "Datum_1979\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[174.05,-25.49,112");
+    add_srs_wkt (p, 3,
+		 ".57,-0,-0,0.554,0.2263],AUTHORITY[\"EPSG\",\"6673\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6, "\"]],AUTHORITY[\"EPSG\",\"4673\"]]");
+    p = add_epsg_def (first, last, 4674, "epsg", 4674, "SIRGAS 2000");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"SIRGAS 2000\",DATUM[\"Sistema_de_Referencia_Geo");
+    add_srs_wkt (p, 1,
+		 "centrico_para_America_del_Sur_2000\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6674\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6, "]],AUTHORITY[\"EPSG\",\"4674\"]]");
+    p = add_epsg_def (first, last, 4675, "epsg", 4675, "Guam 1963");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0");
+    add_proj4text (p, 1, ",0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Guam 1963\",DATUM[\"Guam_1963\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 1,
+		 "ke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7008\"]],TOWGS84[-100,-248,259,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6675\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4675\"]]");
+    p = add_epsg_def (first, last, 4676, "epsg", 4676, "Vientiane 1982");
+    add_proj4text (p, 0, "+proj=longlat +ellps=krass +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Vientiane 1982\",DATUM[\"Vientiane_1982\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7024\"]],AUTHORITY[\"EPSG\",\"6676\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4676\"]]");
+    p = add_epsg_def (first, last, 4677, "epsg", 4677, "Lao 1993");
+    add_proj4text (p, 0, "+proj=longlat +ellps=krass +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lao 1993\",DATUM[\"Lao_1993\",SPHEROID[\"Krasso");
+    add_srs_wkt (p, 1,
+		 "wsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"6677\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 4,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5, "\"4677\"]]");
+    p = add_epsg_def (first, last, 4678, "epsg", 4678, "Lao 1997");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.");
+    add_proj4text (p, 1, "544,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lao 1997\",DATUM[\"Lao_National_Datum_1997\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7024\"]],TOWGS84[44.585,-131.212,-39.544,0,0,0,0],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6678\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6, "\"4678\"]]");
+    p = add_epsg_def (first, last, 4679, "epsg", 4679, "Jouik 1961");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.1");
+    add_proj4text (p, 1, "9,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Jouik 1961\",DATUM[\"Jouik_1961\",SPHEROID[\"Cl");
+    add_srs_wkt (p, 1,
+		 "arke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7012\"]],TOWGS84[-80.01,253.26,291.19,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6679\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4679");
+    add_srs_wkt (p, 6, "\"]]");
+    p = add_epsg_def (first, last, 4680, "epsg", 4680, "Nouakchott 1965");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,");
+    add_proj4text (p, 1, "0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Nouakchott 1965\",DATUM[\"Nouakchott_1965\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7012\"]],TOWGS84[124.5,-63.5,-281,0,0,0,0],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6680\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6, "\"4680\"]]");
+    p = add_epsg_def (first, last, 4681, "epsg", 4681, "Mauritania 1999");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mauritania 1999\",DATUM[\"Mauritania_1999\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6681\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5, "]],AUTHORITY[\"EPSG\",\"4681\"]]");
+    p = add_epsg_def (first, last, 4682, "epsg", 4682, "Gulshan 303");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Gulshan 303\",DATUM[\"Gulshan_303\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Everest 1830 (1937 Adjustment)\",6377276.345,300.8017,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6682\"]");
+    add_srs_wkt (p, 3,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4682\"]]");
+    p = add_epsg_def (first, last, 4683, "epsg", 4683, "PRS92");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.");
+    add_proj4text (p, 1, "04,-3.068,4.903,1.578,-1.06 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"PRS92\",DATUM[\"Philippine_Reference_System_199");
+    add_srs_wkt (p, 1,
+		 "2\",SPHEROID[\"Clarke 1866\",6378206.4,294.9786982139006");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7008\"]],TOWGS84[-127.62,-67.24,-4");
+    add_srs_wkt (p, 3,
+		 "7.04,-3.068,4.903,1.578,-1.06],AUTHORITY[\"EPSG\",\"6683");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4683\"]]");
+    p = add_epsg_def (first, last, 4684, "epsg", 4684, "Gan 1970");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Gan 1970\",DATUM[\"Gan_1970\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 1,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 2,
+		 ",TOWGS84[-133,-321,50,0,0,0,0],AUTHORITY[\"EPSG\",\"6684");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4684\"]]");
+    p = add_epsg_def (first, last, 4685, "epsg", 4685, "Gandajika");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Gandajika\",DATUM[\"Gandajika\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 1,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 2,
+		 "]],AUTHORITY[\"EPSG\",\"6685\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 4,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5, "\",\"4685\"]]");
+    p = add_epsg_def (first, last, 4686, "epsg", 4686, "MAGNA-SIRGAS");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"MAGNA-SIRGAS\",DATUM[\"Marco_Geocentrico_Nacion");
+    add_srs_wkt (p, 1,
+		 "al_de_Referencia\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 2,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0],AUTHORITY[\"EPSG\",\"6686\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 5,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6, "G\",\"4686\"]]");
+    p = add_epsg_def (first, last, 4687, "epsg", 4687, "RGPF");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RGPF\",DATUM[\"Reseau_Geodesique_de_la_Polynesi");
+    add_srs_wkt (p, 1,
+		 "e_Francaise\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 2,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"668");
+    add_srs_wkt (p, 3,
+		 "7\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4687\"]]");
+    p = add_epsg_def (first, last, 4688, "epsg", 4688, "Fatu Iva 72");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.");
+    add_proj4text (p, 1, "92,-33.8875,70.6773,-9.3943,186.074 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Fatu Iva 72\",DATUM[\"Fatu_Iva_72\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],TOWGS84[347.103,1078.12,2623.92,-33.8875,70.6773,");
+    add_srs_wkt (p, 3,
+		 "-9.3943,186.074],AUTHORITY[\"EPSG\",\"6688\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6, "THORITY[\"EPSG\",\"4688\"]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_17 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 4689, "epsg", 4689, "IGN63 Hiva Oa");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN63 Hiva Oa\",DATUM[\"IGN63_Hiva_Oa\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7022\"]],AUTHORITY[\"EPSG\",\"6689\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 3,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 4,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4689\"]]");
+    p = add_epsg_def (first, last, 4690, "epsg", 4690, "Tahiti 79");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tahiti 79\",DATUM[\"Tahiti_79\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 1,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 2,
+		 "]],AUTHORITY[\"EPSG\",\"6690\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 4,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5, "\",\"4690\"]]");
+    p = add_epsg_def (first, last, 4691, "epsg", 4691, "Moorea 87");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.2");
+    add_proj4text (p, 1, "29,-3.2624,-1.692,-1.1571,10.4773 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Moorea 87\",DATUM[\"Moorea_87\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 1,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[215.525,149.593,176.229,-3.2624,-1.692,-1.157");
+    add_srs_wkt (p, 3,
+		 "1,10.4773],AUTHORITY[\"EPSG\",\"6691\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6, "Y[\"EPSG\",\"4691\"]]");
+    p = add_epsg_def (first, last, 4692, "epsg", 4692, "Maupiti 83");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956");
+    add_proj4text (p, 1, ",0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Maupiti 83\",DATUM[\"Maupiti_83\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],TOWGS84[217.037,86.959,23.956,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6692\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4692\"]]");
+    p = add_epsg_def (first, last, 4693, "epsg", 4693, "Nakhl-e Ghanem");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Nakhl-e Ghanem\",DATUM[\"Nakhl_e_Ghanem\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7030\"]],TOWGS84[0,-0.15,0.68,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6693\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4693\"]]");
+    p = add_epsg_def (first, last, 4694, "epsg", 4694, "POSGAR 94");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"POSGAR 94\",DATUM[\"Posiciones_Geodesicas_Argen");
+    add_srs_wkt (p, 1,
+		 "tinas_1994\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6694\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"46");
+    add_srs_wkt (p, 6, "94\"]]");
+    p = add_epsg_def (first, last, 4695, "epsg", 4695, "Katanga 1955");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-25");
+    add_proj4text (p, 1, "5.95,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Katanga 1955\",DATUM[\"Katanga_1955\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7008\"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,");
+    add_srs_wkt (p, 3,
+		 "0],AUTHORITY[\"EPSG\",\"6695\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6, "\",\"4695\"]]");
+    p = add_epsg_def (first, last, 4696, "epsg", 4696, "Kasai 1953");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kasai 1953\",DATUM[\"Kasai_1953\",SPHEROID[\"Cl");
+    add_srs_wkt (p, 1,
+		 "arke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7012\"]],AUTHORITY[\"EPSG\",\"6696\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4696\"]]");
+    p = add_epsg_def (first, last, 4697, "epsg", 4697,
+		      "IGC 1962 6th Parallel South");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGC 1962 6th Parallel South\",DATUM[\"IGC_1962_");
+    add_srs_wkt (p, 1,
+		 "Arc_of_the_6th_Parallel_South\",SPHEROID[\"Clarke 1880 (");
+    add_srs_wkt (p, 2,
+		 "RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6697\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"4697\"]]");
+    p = add_epsg_def (first, last, 4698, "epsg", 4698, "IGN 1962 Kerguelen");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN 1962 Kerguelen\",DATUM[\"IGN_1962_Kerguelen");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],TOWGS84[145,-187,103,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6698\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"469");
+    add_srs_wkt (p, 6, "8\"]]");
+    p = add_epsg_def (first, last, 4699, "epsg", 4699, "Le Pouce 1934");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2");
+    add_proj4text (p, 1, ",0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Le Pouce 1934\",DATUM[\"Le_Pouce_1934\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7012\"]],TOWGS84[-770.1,158.4,-498.2,0,0,0,0],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6699\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "4699\"]]");
+    p = add_epsg_def (first, last, 4700, "epsg", 4700, "IGN Astro 1960");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGN Astro 1960\",DATUM[\"IGN_Astro_1960\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[");
+    add_srs_wkt (p, 2,
+		 "\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6700\"]],PRIMEM");
+    add_srs_wkt (p, 3,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 4,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 5, ",AUTHORITY[\"EPSG\",\"4700\"]]");
+    p = add_epsg_def (first, last, 4701, "epsg", 4701, "IGCB 1955");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0");
+    add_proj4text (p, 1, ",0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"IGCB 1955\",DATUM[\"Institut_Geographique_du_Co");
+    add_srs_wkt (p, 1,
+		 "ngo_Belge_1955\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.");
+    add_srs_wkt (p, 2,
+		 "145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],TOWGS84[-79.9,");
+    add_srs_wkt (p, 3,
+		 "-158,-168.9,0,0,0,0],AUTHORITY[\"EPSG\",\"6701\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6, "],AUTHORITY[\"EPSG\",\"4701\"]]");
+    p = add_epsg_def (first, last, 4702, "epsg", 4702, "Mauritania 1999");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mauritania 1999\",DATUM[\"Mauritania_1999\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6702\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4702\"]]");
+    p = add_epsg_def (first, last, 4703, "epsg", 4703, "Mhast 1951");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mhast 1951\",DATUM[\"Missao_Hidrografico_Angola");
+    add_srs_wkt (p, 1,
+		 "_y_Sao_Tome_1951\",SPHEROID[\"Clarke 1880 (RGS)\",637824");
+    add_srs_wkt (p, 2,
+		 "9.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6703\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4703\"]]");
+    p = add_epsg_def (first, last, 4704, "epsg", 4704, "Mhast (onshore)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mhast (onshore)\",DATUM[\"Mhast_onshore\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7022\"]],AUTHORITY[\"EPSG\",\"6704\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4704\"]]");
+    p = add_epsg_def (first, last, 4705, "epsg", 4705, "Mhast (offshore)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Mhast (offshore)\",DATUM[\"Mhast_offshore\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],AUTHORITY[\"EPSG\",\"6705\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 3,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 4,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4705\"]]");
+    p = add_epsg_def (first, last, 4706, "epsg", 4706,
+		      "Egypt Gulf of Suez S-650 TL");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.0");
+    add_proj4text (p, 1, "5,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Egypt Gulf of Suez S-650 TL\",DATUM[\"Egypt_Gul");
+    add_srs_wkt (p, 1,
+		 "f_of_Suez_S_650_TL\",SPHEROID[\"Helmert 1906\",6378200,2");
+    add_srs_wkt (p, 2,
+		 "98.3,AUTHORITY[\"EPSG\",\"7020\"]],TOWGS84[-146.21,112.6");
+    add_srs_wkt (p, 3,
+		 "3,4.05,0,0,0,0],AUTHORITY[\"EPSG\",\"6706\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6, "HORITY[\"EPSG\",\"4706\"]]");
+    p = add_epsg_def (first, last, 4707, "epsg", 4707, "Tern Island 1961");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tern Island 1961\",DATUM[\"Tern_Island_1961\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"International 1924\",6378388,297,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7022\"]],TOWGS84[114,-116,-333,0,0,0,0],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6707\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4707\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4708, "epsg", 4708, "Cocos Islands 1965");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0");
+    add_proj4text (p, 1, ",0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Cocos Islands 1965\",DATUM[\"Cocos_Islands_1965");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"Australian National Spheroid\",6378160,298");
+    add_srs_wkt (p, 2,
+		 ".25,AUTHORITY[\"EPSG\",\"7003\"]],TOWGS84[-491,-22,435,0");
+    add_srs_wkt (p, 3,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6708\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6, "EPSG\",\"4708\"]]");
+    p = add_epsg_def (first, last, 4709, "epsg", 4709, "Iwo Jima 1945");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Iwo Jima 1945\",DATUM[\"Iwo_Jima_1945\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7022\"]],TOWGS84[145,75,-272,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6709\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4709\"]]");
+    p = add_epsg_def (first, last, 4710, "epsg", 4710, "St. Helena 1971");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"St. Helena 1971\",DATUM[\"St_Helena_1971\",SPHE");
+    add_srs_wkt (p, 1,
+		 "ROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 2,
+		 "\",\"7022\"]],TOWGS84[-320,550,-494,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6710\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4710\"]]");
+    p = add_epsg_def (first, last, 4711, "epsg", 4711, "Marcus Island 1952");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Marcus Island 1952\",DATUM[\"Marcus_Island_1952");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],TOWGS84[124,-234,-25,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6711\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"471");
+    add_srs_wkt (p, 6, "1\"]]");
+    p = add_epsg_def (first, last, 4712, "epsg", 4712, "Ascension Island 1958");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Ascension Island 1958\",DATUM[\"Ascension_Islan");
+    add_srs_wkt (p, 1,
+		 "d_1958\",SPHEROID[\"International 1924\",6378388,297,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7022\"]],TOWGS84[-205,107,53,0,0,0,0],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6712\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6, "\"4712\"]]");
+    p = add_epsg_def (first, last, 4713, "epsg", 4713, "Ayabelle Lighthouse");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Ayabelle Lighthouse\",DATUM[\"Ayabelle_Lighthou");
+    add_srs_wkt (p, 1,
+		 "se\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7012\"]],TOWGS84[-79,-129,145,0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0],AUTHORITY[\"EPSG\",\"6713\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 5,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 6, "G\",\"4713\"]]");
+    p = add_epsg_def (first, last, 4714, "epsg", 4714, "Bellevue");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bellevue\",DATUM[\"Bellevue\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 1,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 2,
+		 ",TOWGS84[-127,-769,472,0,0,0,0],AUTHORITY[\"EPSG\",\"671");
+    add_srs_wkt (p, 3,
+		 "4\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4714\"]]");
+    p = add_epsg_def (first, last, 4715, "epsg", 4715, "Camp Area Astro");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Camp Area Astro\",DATUM[\"Camp_Area_Astro\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"International 1924\",6378388,297,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7022\"]],TOWGS84[-104,-129,239,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6715\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4715\"]]");
+    add_srs_wkt (p, 6, "");
+    p = add_epsg_def (first, last, 4716, "epsg", 4716, "Phoenix Islands 1966");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Phoenix Islands 1966\",DATUM[\"Phoenix_Islands_");
+    add_srs_wkt (p, 1,
+		 "1966\",SPHEROID[\"International 1924\",6378388,297,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7022\"]],TOWGS84[298,-304,-375,0,0,0,0],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6716\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6, "\"4716\"]]");
+    p = add_epsg_def (first, last, 4717, "epsg", 4717, "Cape Canaveral");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Cape Canaveral\",DATUM[\"Cape_Canaveral\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7008\"]],TOWGS84[-2,151,181,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6717\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4717");
+    add_srs_wkt (p, 6, "\"]]");
+    p = add_epsg_def (first, last, 4718, "epsg", 4718, "Solomon 1968");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Solomon 1968\",DATUM[\"Solomon_1968\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6718\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4718\"]]");
+    p = add_epsg_def (first, last, 4719, "epsg", 4719, "Easter Island 1967");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Easter Island 1967\",DATUM[\"Easter_Island_1967");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],TOWGS84[211,147,111,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6719\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4719");
+    add_srs_wkt (p, 6, "\"]]");
+    p = add_epsg_def (first, last, 4720, "epsg", 4720, "Fiji 1986");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS72 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Fiji 1986\",DATUM[\"Fiji_Geodetic_Datum_1986\",");
+    add_srs_wkt (p, 1,
+		 "SPHEROID[\"WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7043\"]],AUTHORITY[\"EPSG\",\"6720\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 3,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 4,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 5, "\"EPSG\",\"4720\"]]");
+    p = add_epsg_def (first, last, 4721, "epsg", 4721, "Fiji 1956");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.");
+    add_proj4text (p, 1, "046,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Fiji 1956\",DATUM[\"Fiji_1956\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 1,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[265.025,384.929,-194.046,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6721\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4721\"]]");
+    p = add_epsg_def (first, last, 4722, "epsg", 4722, "South Georgia 1968");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"South Georgia 1968\",DATUM[\"South_Georgia_1968");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7022\"]],TOWGS84[-794,119,-298,0,0,0,0],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6722\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 6, "22\"]]");
+    p = add_epsg_def (first, last, 4723, "epsg", 4723, "Grand Cayman 1959");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,");
+    add_proj4text (p, 1, "0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Grand Cayman 1959\",DATUM[\"Grand_Cayman_1959\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Clarke 1866\",6378206.4,294.9786982139006,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7008\"]],TOWGS84[67.8,106.1,138.8,0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6723\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6, "PSG\",\"4723\"]]");
+    p = add_epsg_def (first, last, 4724, "epsg", 4724, "Diego Garcia 1969");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Diego Garcia 1969\",DATUM[\"Diego_Garcia_1969\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],TOWGS84[208,-435,-229,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6724\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4724\"");
+    add_srs_wkt (p, 6, "]]");
+    p = add_epsg_def (first, last, 4725, "epsg", 4725, "Johnston Island 1961");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Johnston Island 1961\",DATUM[\"Johnston_Island_");
+    add_srs_wkt (p, 1,
+		 "1961\",SPHEROID[\"International 1924\",6378388,297,AUTHO");
+    add_srs_wkt (p, 2,
+		 "RITY[\"EPSG\",\"7022\"]],TOWGS84[189,-79,-202,0,0,0,0],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6725\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6, "4725\"]]");
+    p = add_epsg_def (first, last, 4726, "epsg", 4726, "Little Cayman 1961");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Little Cayman 1961\",DATUM[\"Little_Cayman_1961");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"Clarke 1866\",6378206.4,294.9786982139006,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6726\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4726\"]]");
+    p = add_epsg_def (first, last, 4727, "epsg", 4727, "Midway 1961");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Midway 1961\",DATUM[\"Midway_1961\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6727\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4727\"]]");
+    p = add_epsg_def (first, last, 4728, "epsg", 4728,
+		      "Pico de las Nieves 1984");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pico de las Nieves 1984\",DATUM[\"Pico_de_las_N");
+    add_srs_wkt (p, 1,
+		 "ieves_1984\",SPHEROID[\"International 1924\",6378388,297");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-307,-92,127,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"6728\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6, "SG\",\"4728\"]]");
+    p = add_epsg_def (first, last, 4729, "epsg", 4729, "Pitcairn 1967");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pitcairn 1967\",DATUM[\"Pitcairn_1967\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7022\"]],TOWGS84[185,165,42,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6729\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4729\"]]");
+    p = add_epsg_def (first, last, 4730, "epsg", 4730, "Santo 1965");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Santo 1965\",DATUM[\"Santo_1965\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],TOWGS84[170,42,84,0,0,0,0],AUTHORITY[\"EPSG\",\"673");
+    add_srs_wkt (p, 3,
+		 "0\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4730\"]]");
+    p = add_epsg_def (first, last, 4731, "epsg", 4731, "Viti Levu 1916");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Viti Levu 1916\",DATUM[\"Viti_Levu_1916\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[");
+    add_srs_wkt (p, 2,
+		 "\"EPSG\",\"7012\"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6731\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4731\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4732, "epsg", 4732, "Marshall Islands 1960");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=1");
+    add_proj4text (p, 1, "02,52,-38,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Marshall Islands 1960\",DATUM[\"Marshall_Island");
+    add_srs_wkt (p, 1,
+		 "s_1960\",SPHEROID[\"Hough 1960\",6378270,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7053\"]],TOWGS84[102,52,-38,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6732\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4732\"]]");
+    add_srs_wkt (p, 6, "");
+    p = add_epsg_def (first, last, 4733, "epsg", 4733, "Wake Island 1952");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Wake Island 1952\",DATUM[\"Wake_Island_1952\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"International 1924\",6378388,297,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7022\"]],TOWGS84[276,-57,149,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6733\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4733\"]]");
+    add_srs_wkt (p, 6, "");
+    p = add_epsg_def (first, last, 4734, "epsg", 4734, "Tristan 1968");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tristan 1968\",DATUM[\"Tristan_1968\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7022\"]],TOWGS84[-632,438,-609,0,0,0,0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6734\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5, "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4734\"]]");
+    p = add_epsg_def (first, last, 4735, "epsg", 4735, "Kusaie 1951");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kusaie 1951\",DATUM[\"Kusaie_1951\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "22\"]],TOWGS84[647,1777,-1124,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6735\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4735\"]]");
+    p = add_epsg_def (first, last, 4736, "epsg", 4736, "Deception Island");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0");
+    add_proj4text (p, 1, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Deception Island\",DATUM[\"Deception_Island\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7012\"]],TOWGS84[260,12,-147,0,0,0,0],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6736\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6, "736\"]]");
+    p = add_epsg_def (first, last, 4737, "epsg", 4737, "Korea 2000");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Korea 2000\",DATUM[\"Geocentric_datum_of_Korea\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6737\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4737\"]]");
+    p = add_epsg_def (first, last, 4738, "epsg", 4738, "Hong Kong 1963");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hong Kong 1963\",DATUM[\"Hong_Kong_1963\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Clarke 1858\",6378293.645208759,294.2606763692569,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7007\"]],AUTHORITY[\"EPSG\",\"6738\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4738\"]]");
+    p = add_epsg_def (first, last, 4739, "epsg", 4739, "Hong Kong 1963(67)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,");
+    add_proj4text (p, 1, "0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Hong Kong 1963(67)\",DATUM[\"Hong_Kong_1963_67\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],TOWGS84[-156,-271,-189,0,0,0,0],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6739\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4739");
+    add_srs_wkt (p, 6, "\"]]");
+    p = add_epsg_def (first, last, 4740, "epsg", 4740, "PZ-90");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378136 +b=6356751.361745712 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"PZ-90\",DATUM[\"Parametrop_Zemp_1990\",SPHEROID");
+    add_srs_wkt (p, 1,
+		 "[\"PZ-90\",6378136,298.257839303,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 2,
+		 "54\"]],AUTHORITY[\"EPSG\",\"6740\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 3,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 4,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"4740\"]]");
+    p = add_epsg_def (first, last, 4741, "epsg", 4741, "FD54");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"FD54\",DATUM[\"Faroe_Datum_1954\",SPHEROID[\"In");
+    add_srs_wkt (p, 1,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 2,
+		 "\"]],AUTHORITY[\"EPSG\",\"6741\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 3,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 4,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"4741\"]]");
+    p = add_epsg_def (first, last, 4742, "epsg", 4742, "GDM2000");
+    add_proj4text (p, 0, "+proj=longlat +ellps=GRS80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"GDM2000\",DATUM[\"Geodetic_Datum_of_Malaysia_20");
+    add_srs_wkt (p, 1,
+		 "00\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6742\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5, "]],AUTHORITY[\"EPSG\",\"4742\"]]");
+    p = add_epsg_def (first, last, 4743, "epsg", 4743, "Karbala 1979");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0");
+    add_proj4text (p, 1, ",0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Karbala 1979\",DATUM[\"Karbala_1979\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6743\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"474");
+    add_srs_wkt (p, 6, "3\"]]");
+    p = add_epsg_def (first, last, 4744, "epsg", 4744, "Nahrwan 1934");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Nahrwan 1934\",DATUM[\"Nahrwan_1934\",SPHEROID[");
+    add_srs_wkt (p, 1,
+		 "\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6744\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 3,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 4,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 5, "HORITY[\"EPSG\",\"4744\"]]");
+    p = add_epsg_def (first, last, 4745, "epsg", 4745, "RD/83");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RD/83\",DATUM[\"Rauenberg_Datum_83\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7004\"]],AUTHORITY[\"EPSG\",\"6745\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 3,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 4,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 5, "TY[\"EPSG\",\"4745\"]]");
+    p = add_epsg_def (first, last, 4746, "epsg", 4746, "PD/83");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"PD/83\",DATUM[\"Potsdam_Datum_83\",SPHEROID[\"B");
+    add_srs_wkt (p, 1,
+		 "essel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 2,
+		 "\"7004\"]],AUTHORITY[\"EPSG\",\"6746\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 3,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 4,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"4746\"]]");
+    p = add_epsg_def (first, last, 4747, "epsg", 4747, "GR96");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"GR96\",DATUM[\"Greenland_1996\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 1,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6747\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5, "22\"]],AUTHORITY[\"EPSG\",\"4747\"]]");
+    p = add_epsg_def (first, last, 4748, "epsg", 4748, "Vanua Levu 1915");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51");
+    add_proj4text (p, 1, ",391,-36,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Vanua Levu 1915\",DATUM[\"Vanua_Levu_1915\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"Clarke 1880 (international foot)\",6378306.3696,");
+    add_srs_wkt (p, 2,
+		 "293.4663076556349,AUTHORITY[\"EPSG\",\"7055\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "51,391,-36,0,0,0,0],AUTHORITY[\"EPSG\",\"6748\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6, ",AUTHORITY[\"EPSG\",\"4748\"]]");
+    p = add_epsg_def (first, last, 4749, "epsg", 4749, "RGNC91-93");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RGNC91-93\",DATUM[\"Reseau_Geodesique_de_Nouvel");
+    add_srs_wkt (p, 1,
+		 "le_Caledonie_91_93\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 2,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6749\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6, "PSG\",\"4749\"]]");
+    p = add_epsg_def (first, last, 4750, "epsg", 4750, "ST87 Ouvea");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.8");
+    add_proj4text (p, 1, "56,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"ST87 Ouvea\",DATUM[\"ST87_Ouvea\",SPHEROID[\"WG");
+    add_srs_wkt (p, 1,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 2,
+		 "]],TOWGS84[-56.263,16.136,-22.856,0,0,0,0],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6750\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5, "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4750\"]]");
+    p = add_epsg_def (first, last, 4751, "epsg", 4751, "Kertau (RSO)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Kertau (RSO)\",DATUM[\"Kertau_RSO\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "Everest 1830 (RSO 1969)\",6377295.664,300.8017,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7056\"]],AUTHORITY[\"EPSG\",\"6751\"]],PRIME");
+    add_srs_wkt (p, 3,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 4,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 5, "],AUTHORITY[\"EPSG\",\"4751\"]]");
+    p = add_epsg_def (first, last, 4752, "epsg", 4752, "Viti Levu 1912");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51");
+    add_proj4text (p, 1, ",391,-36,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Viti Levu 1912\",DATUM[\"Viti_Levu_1912\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Clarke 1880 (international foot)\",6378306.3696,29");
+    add_srs_wkt (p, 2,
+		 "3.4663076556349,AUTHORITY[\"EPSG\",\"7055\"]],TOWGS84[51");
+    add_srs_wkt (p, 3,
+		 ",391,-36,0,0,0,0],AUTHORITY[\"EPSG\",\"6752\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6, "THORITY[\"EPSG\",\"4752\"]]");
+    p = add_epsg_def (first, last, 4753, "epsg", 4753, "fk89");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"fk89\",DATUM[\"fk89\",SPHEROID[\"International ");
+    add_srs_wkt (p, 1,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"6753\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4753\"");
+    add_srs_wkt (p, 5, "]]");
+    p = add_epsg_def (first, last, 4754, "epsg", 4754, "LGD2006");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.");
+    add_proj4text (p, 1, "5764,0,0,0,0 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"LGD2006\",DATUM[\"Libyan_Geodetic_Datum_2006\",");
+    add_srs_wkt (p, 1,
+		 "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"6754\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6, "SG\",\"4754\"]]");
+    p = add_epsg_def (first, last, 4755, "epsg", 4755, "DGN95");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"DGN95\",DATUM[\"Datum_Geodesi_Nasional_1995\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 2,
+		 "G\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6755\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4755\"]]");
+    p = add_epsg_def (first, last, 4756, "epsg", 4756, "VN-2000");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS84 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"VN-2000\",DATUM[\"Vietnam_2000\",SPHEROID[\"WGS");
+    add_srs_wkt (p, 1,
+		 " 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]");
+    add_srs_wkt (p, 2,
+		 "],AUTHORITY[\"EPSG\",\"6756\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 4,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"4756\"]]");
+    p = add_epsg_def (first, last, 4757, "epsg", 4757, "SVY21");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS84 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"SVY21\",DATUM[\"SVY21\",SPHEROID[\"WGS 84\",637");
+    add_srs_wkt (p, 1,
+		 "8137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"6757\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4757\"");
+    add_srs_wkt (p, 5, "]]");
+    p = add_epsg_def (first, last, 4758, "epsg", 4758, "JAD2001");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"JAD2001\",DATUM[\"Jamaica_2001\",SPHEROID[\"WGS");
+    add_srs_wkt (p, 1,
+		 " 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]");
+    add_srs_wkt (p, 2,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6758\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5, "2\"]],AUTHORITY[\"EPSG\",\"4758\"]]");
+    p = add_epsg_def (first, last, 4759, "epsg", 4759, "NAD83(NSRS2007)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatia");
+    add_srs_wkt (p, 1,
+		 "l_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 2,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6, "Y[\"EPSG\",\"4759\"]]");
+    p = add_epsg_def (first, last, 4760, "epsg", 4760, "WGS 66");
+    add_proj4text (p, 0, "+proj=longlat +ellps=WGS66 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"WGS 66\",DATUM[\"World_Geodetic_System_1966\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"NWL 9D\",6378145,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 2,
+		 "025\"]],AUTHORITY[\"EPSG\",\"6760\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 3,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 4,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"4760\"]]");
+    p = add_epsg_def (first, last, 4761, "epsg", 4761, "HTRS96");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"HTRS96\",DATUM[\"Croatian_Terrestrial_Reference");
+    add_srs_wkt (p, 1,
+		 "_System\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6761\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"476");
+    add_srs_wkt (p, 6, "1\"]]");
+    p = add_epsg_def (first, last, 4762, "epsg", 4762, "BDA2000");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"BDA2000\",DATUM[\"Bermuda_2000\",SPHEROID[\"WGS");
+    add_srs_wkt (p, 1,
+		 " 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]");
+    add_srs_wkt (p, 2,
+		 "],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6762\"]],P");
+    add_srs_wkt (p, 3,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 4,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 5, "2\"]],AUTHORITY[\"EPSG\",\"4762\"]]");
+    p = add_epsg_def (first, last, 4763, "epsg", 4763, "Pitcairn 2006");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Pitcairn 2006\",DATUM[\"Pitcairn_2006\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 2,
+		 "7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"676");
+    add_srs_wkt (p, 3,
+		 "3\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4763\"]]");
+    p = add_epsg_def (first, last, 4764, "epsg", 4764, "RSRGD2000");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RSRGD2000\",DATUM[\"Ross_Sea_Region_Geodetic_Da");
+    add_srs_wkt (p, 1,
+		 "tum_2000\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6764\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"47");
+    add_srs_wkt (p, 6, "64\"]]");
+    p = add_epsg_def (first, last, 4765, "epsg", 4765, "Slovenia 1996");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Slovenia 1996\",DATUM[\"Slovenia_Geodetic_Datum");
+    add_srs_wkt (p, 1,
+		 "_1996\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6765\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4765\"");
+    add_srs_wkt (p, 6, "]]");
+    p = add_epsg_def (first, last, 4801, "epsg", 4801, "Bern 1898 (Bern)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=bern +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bern 1898 (Bern)\",DATUM[\"CH1903_Bern\",SPHERO");
+    add_srs_wkt (p, 1,
+		 "ID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"E");
+    add_srs_wkt (p, 2,
+		 "PSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6801\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Bern\",7.439583333333333,AUTHORITY[\"EPSG\",\"8907\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4801\"]]");
+    p = add_epsg_def (first, last, 4802, "epsg", 4802, "Bogota 1975 (Bogota)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +pm=bogota +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Bogota 1975 (Bogota)\",DATUM[\"Bogota_1975_Bogo");
+    add_srs_wkt (p, 1,
+		 "ta\",SPHEROID[\"International 1924\",6378388,297,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6802\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Bogota\",-74.08091666666667,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 4,
+		 "904\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4802\"]]");
+    p = add_epsg_def (first, last, 4803, "epsg", 4803, "Lisbon (Lisbon)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +pm=lisbon +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lisbon (Lisbon)\",DATUM[\"Lisbon_1937_Lisbon\",");
+    add_srs_wkt (p, 1,
+		 "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6803\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Lisbon\",-9.131906111111112,AUTHORITY[\"EPSG\",\"8902\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9122\"]],AUTHORITY[\"EPSG\",\"4803\"]]");
+    p = add_epsg_def (first, last, 4804, "epsg", 4804, "Makassar (Jakarta)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.7");
+    add_proj4text (p, 1, "6,0,0,0,0 +pm=jakarta +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Makassar (Jakarta)\",DATUM[\"Makassar_Jakarta\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7004\"]],TOWGS84[-587.8,519.75,145.76,0,0");
+    add_srs_wkt (p, 3,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6804\"]],PRIMEM[\"Jakarta\",1");
+    add_srs_wkt (p, 4,
+		 "06.8077194444444,AUTHORITY[\"EPSG\",\"8908\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6, ",AUTHORITY[\"EPSG\",\"4804\"]]");
+    p = add_epsg_def (first, last, 4805, "epsg", 4805, "MGI (Ferro)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=ferro +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"MGI (Ferro)\",DATUM[\"Militar_Geographische_Ins");
+    add_srs_wkt (p, 1,
+		 "titut_Ferro\",SPHEROID[\"Bessel 1841\",6377397.155,299.1");
+    add_srs_wkt (p, 2,
+		 "528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"6805\"]],PRIMEM[\"Ferro\",-17.66666666666667,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8909\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805");
+    add_srs_wkt (p, 6, "\"]]");
+    p = add_epsg_def (first, last, 4806, "epsg", 4806, "Monte Mario (Rome)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +pm=rome +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Monte Mario (Rome)\",DATUM[\"Monte_Mario_Rome\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 2,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6806\"]],PRIMEM[\"");
+    add_srs_wkt (p, 3,
+		 "Rome\",12.45233333333333,AUTHORITY[\"EPSG\",\"8906\"]],U");
+    add_srs_wkt (p, 4,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4806\"]]");
+    p = add_epsg_def (first, last, 4807, "epsg", 4807, "NTF (Paris)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,");
+    add_proj4text (p, 1, "320,0,0,0,0 +pm=paris +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Fr");
+    add_srs_wkt (p, 1,
+		 "ancaise_Paris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2");
+    add_srs_wkt (p, 2,
+		 ",293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[-168,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Paris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"grad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6, "05\"]],AUTHORITY[\"EPSG\",\"4807\"]]");
+    p = add_epsg_def (first, last, 4808, "epsg", 4808, "Padang (Jakarta)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Padang (Jakarta)\",DATUM[\"Padang_1884_Jakarta\"");
+    add_srs_wkt (p, 1,
+		 ",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6808\"]],PR");
+    add_srs_wkt (p, 3,
+		 "IMEM[\"Jakarta\",106.8077194444444,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8908\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4808\"]]");
+    p = add_epsg_def (first, last, 4809, "epsg", 4809, "Belge 1950 (Brussels)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=intl +pm=brussels +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Belge 1950 (Brussels)\",DATUM[\"Reseau_National");
+    add_srs_wkt (p, 1,
+		 "_Belge_1950_Brussels\",SPHEROID[\"International 1924\",6");
+    add_srs_wkt (p, 2,
+		 "378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6809\"]],PRIMEM[\"Brussels\",4.367975,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8910\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4809\"]");
+    add_srs_wkt (p, 6, "]");
+    p = add_epsg_def (first, last, 4810, "epsg", 4810, "Tananarive (Paris)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0");
+    add_proj4text (p, 1, " +pm=paris +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Tananarive (Paris)\",DATUM[\"Tananarive_1925_Pa");
+    add_srs_wkt (p, 1,
+		 "ris\",SPHEROID[\"International 1924\",6378388,297,AUTHOR");
+    add_srs_wkt (p, 2,
+		 "ITY[\"EPSG\",\"7022\"]],TOWGS84[-189,-242,-91,0,0,0,0],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6810\"]],PRIMEM[\"Paris\",2.33722917");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.015707963");
+    add_srs_wkt (p, 5,
+		 "26794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6, ",\"4810\"]]");
+    p = add_epsg_def (first, last, 4811, "epsg", 4811, "Voirol 1875 (Paris)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,");
+    add_proj4text (p, 1, "227,0,0,0,0 +pm=paris +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Voirol 1875 (Paris)\",DATUM[\"Voirol_1875_Paris");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.46602129");
+    add_srs_wkt (p, 2,
+		 "36265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-73,-247,227");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6811\"]],PRIMEM[\"Paris\"");
+    add_srs_wkt (p, 4,
+		 ",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",");
+    add_srs_wkt (p, 5,
+		 "0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHOR");
+    add_srs_wkt (p, 6, "ITY[\"EPSG\",\"4811\"]]");
+    p = add_epsg_def (first, last, 4813, "epsg", 4813, "Batavia (Jakarta)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Batavia (Jakarta)\",DATUM[\"Batavia_Jakarta\",S");
+    add_srs_wkt (p, 1,
+		 "PHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6813\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Jakarta\",106.8077194444444,AUTHORITY[\"EPSG\",\"89");
+    add_srs_wkt (p, 4,
+		 "08\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"E");
+    add_srs_wkt (p, 5, "PSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4813\"]]");
+    p = add_epsg_def (first, last, 4814, "epsg", 4814, "RT38 (Stockholm)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=stockholm +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"RT38 (Stockholm)\",DATUM[\"Stockholm_1938_Stock");
+    add_srs_wkt (p, 1,
+		 "holm\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6814\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Stockholm\",18.05827777777778,AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"8911\"]],UNIT[\"degree\",0.01745329251994328,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4814\"]]");
+    p = add_epsg_def (first, last, 4815, "epsg", 4815, "Greek (Athens)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=athens +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Greek (Athens)\",DATUM[\"Greek_Athens\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6815\"]],PRIMEM[\"A");
+    add_srs_wkt (p, 3,
+		 "thens\",23.7163375,AUTHORITY[\"EPSG\",\"8912\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5, "]],AUTHORITY[\"EPSG\",\"4815\"]]");
+    p = add_epsg_def (first, last, 4816, "epsg", 4816, "Carthage (Paris)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Carthage (Paris)\",DATUM[\"Carthage_Paris\",SPH");
+    add_srs_wkt (p, 1,
+		 "EROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936265,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6816\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Paris\",2.33722917,AUTHORITY[\"EPSG\",\"8903");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"grad\",0.01570796326794897,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5, ",\"9105\"]],AUTHORITY[\"EPSG\",\"4816\"]]");
+    p = add_epsg_def (first, last, 4817, "epsg", 4817, "NGO 1948 (Oslo)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs");
+    add_proj4text (p, 1,
+		   "84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NGO 1948 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHER");
+    add_srs_wkt (p, 1,
+		 "OID[\"Bessel Modified\",6377492.018,299.1528128,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7005\"]],TOWGS84[278.3,93,474.5,7.889,0.05,");
+    add_srs_wkt (p, 3,
+		 "-6.61,6.21],AUTHORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\"");
+    add_srs_wkt (p, 4,
+		 ",10.72291666666667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6, "]],AUTHORITY[\"EPSG\",\"4817\"]]");
+    p = add_epsg_def (first, last, 4818, "epsg", 4818, "S-JTSK (Ferro)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=ferro +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"S-JTSK (Ferro)\",DATUM[\"S_JTSK_Ferro\",SPHEROI");
+    add_srs_wkt (p, 1,
+		 "D[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EP");
+    add_srs_wkt (p, 2,
+		 "SG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6818\"]],PRIMEM[\"F");
+    add_srs_wkt (p, 3,
+		 "erro\",-17.66666666666667,AUTHORITY[\"EPSG\",\"8909\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5, "9122\"]],AUTHORITY[\"EPSG\",\"4818\"]]");
+    p = add_epsg_def (first, last, 4819, "epsg", 4819,
+		      "Nord Sahara 1959 (Paris)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=clrk80 +pm=paris +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Nord Sahara 1959 (Paris)\",DATUM[\"Nord_Sahara_");
+    add_srs_wkt (p, 1,
+		 "1959_Paris\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,");
+    add_srs_wkt (p, 2,
+		 "293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6819\"]],PRIMEM[\"Paris\",2.33722917,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8903\"]],UNIT[\"grad\",0.01570796326794897,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9105\"]],AUTHORITY[\"EPSG\",\"4819\"]]");
+    p = add_epsg_def (first, last, 4820, "epsg", 4820, "Segara (Jakarta)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Segara (Jakarta)\",DATUM[\"Gunung_Segara_Jakart");
+    add_srs_wkt (p, 1,
+		 "a\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6820\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Jakarta\",106.8077194444444,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8908\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4820\"]]");
+    p = add_epsg_def (first, last, 4821, "epsg", 4821, "Voirol 1879 (Paris)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Voirol 1879 (Paris)\",DATUM[\"Voirol_1879_Paris");
+    add_srs_wkt (p, 1,
+		 "\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.46602129");
+    add_srs_wkt (p, 2,
+		 "36265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6821\"]],PRIMEM[\"Paris\",2.33722917,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8903\"]],UNIT[\"grad\",0.01570796326794897,AUTHORITY[\"");
+    add_srs_wkt (p, 5, "EPSG\",\"9105\"]],AUTHORITY[\"EPSG\",\"4821\"]]");
+    p = add_epsg_def (first, last, 4901, "epsg", 4901, "unnamed ellipse");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372");
+    add_proj4text (p, 1, "291666985 +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"");
+    add_srs_wkt (p, 1,
+		 "unnamed\",6376523,308.6399999999991]],PRIMEM[\"unnamed\"");
+    add_srs_wkt (p, 2,
+		 ",2.3372291666985],UNIT[\"degree\",0.0174532925199433],AU");
+    add_srs_wkt (p, 3, "THORITY[\"EPSG\",\"4901\"]]");
+    p = add_epsg_def (first, last, 4902, "epsg", 4902, "NDG (Paris)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris ");
+    add_proj4text (p, 1, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"NDG (Paris)\",DATUM[\"Nord_de_Guerre_Paris\",SP");
+    add_srs_wkt (p, 1,
+		 "HEROID[\"Plessis 1817\",6376523,308.64,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 2,
+		 ",\"7027\"]],AUTHORITY[\"EPSG\",\"6902\"]],PRIMEM[\"Paris");
+    add_srs_wkt (p, 3,
+		 "\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\"");
+    add_srs_wkt (p, 4,
+		 ",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHO");
+    add_srs_wkt (p, 5, "RITY[\"EPSG\",\"4902\"]]");
+    p = add_epsg_def (first, last, 4903, "epsg", 4903, "Madrid 1870 (Madrid)");
+    add_proj4text (p, 0,
+		   "+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madr");
+    add_proj4text (p, 1, "id +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Madrid 1870 (Madrid)\",DATUM[\"Madrid_1870_Madr");
+    add_srs_wkt (p, 1,
+		 "id\",SPHEROID[\"Struve 1860\",6378298.3,294.73,AUTHORITY");
+    add_srs_wkt (p, 2,
+		 "[\"EPSG\",\"7028\"]],AUTHORITY[\"EPSG\",\"6903\"]],PRIME");
+    add_srs_wkt (p, 3,
+		 "M[\"Madrid\",-3.687938888888889,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "5\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5, "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4903\"]]");
+    p = add_epsg_def (first, last, 4904, "epsg", 4904, "Lisbon 1890 (Lisbon)");
+    add_proj4text (p, 0, "+proj=longlat +ellps=bessel +pm=lisbon +no_defs");
+    add_srs_wkt (p, 0,
+		 "GEOGCS[\"Lisbon 1890 (Lisbon)\",DATUM[\"Lisbon_1890_Lisb");
+    add_srs_wkt (p, 1,
+		 "on\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AU");
+    add_srs_wkt (p, 2,
+		 "THORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6904\"]");
+    add_srs_wkt (p, 3,
+		 "],PRIMEM[\"Lisbon\",-9.131906111111112,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8902\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5, "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4904\"]]");
+    p = add_epsg_def (first, last, 20004, "epsg", 20004,
+		      "Pulkovo 1995 / Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 4\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",4500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20004\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20005, "epsg", 20005,
+		      "Pulkovo 1995 / Gauss-Kruger zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 5\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",5500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20005\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20006, "epsg", 20006,
+		      "Pulkovo 1995 / Gauss-Kruger zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 6\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",6500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20006\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20007, "epsg", 20007,
+		      "Pulkovo 1995 / Gauss-Kruger zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 7\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",7500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20007\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20008, "epsg", 20008,
+		      "Pulkovo 1995 / Gauss-Kruger zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 8\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",8500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20008\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20009, "epsg", 20009,
+		      "Pulkovo 1995 / Gauss-Kruger zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 9\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",9500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20009\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20010, "epsg", 20010,
+		      "Pulkovo 1995 / Gauss-Kruger zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 10\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",10500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "0\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20011, "epsg", 20011,
+		      "Pulkovo 1995 / Gauss-Kruger zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 11\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",11500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "1\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20012, "epsg", 20012,
+		      "Pulkovo 1995 / Gauss-Kruger zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 12\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",12500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "2\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20013, "epsg", 20013,
+		      "Pulkovo 1995 / Gauss-Kruger zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 13\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",13500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "3\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20014, "epsg", 20014,
+		      "Pulkovo 1995 / Gauss-Kruger zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 14\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",14500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "4\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20015, "epsg", 20015,
+		      "Pulkovo 1995 / Gauss-Kruger zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 15\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",15500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "5\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20016, "epsg", 20016,
+		      "Pulkovo 1995 / Gauss-Kruger zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 16\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",16500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "6\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20017, "epsg", 20017,
+		      "Pulkovo 1995 / Gauss-Kruger zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 17\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",17500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2001");
+    add_srs_wkt (p, 12, "7\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20018, "epsg", 20018,
+		      "Pulkovo 1995 / Gauss-Kruger zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 18\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",18500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "18\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20019, "epsg", 20019,
+		      "Pulkovo 1995 / Gauss-Kruger zone 19");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 19\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",19500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "19\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20020, "epsg", 20020,
+		      "Pulkovo 1995 / Gauss-Kruger zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 20\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",20500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "20\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20021, "epsg", 20021,
+		      "Pulkovo 1995 / Gauss-Kruger zone 21");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 21\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",21500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "21\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20022, "epsg", 20022,
+		      "Pulkovo 1995 / Gauss-Kruger zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 22\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",22500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "22\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20023, "epsg", 20023,
+		      "Pulkovo 1995 / Gauss-Kruger zone 23");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 23\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",23500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "23\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20024, "epsg", 20024,
+		      "Pulkovo 1995 / Gauss-Kruger zone 24");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 24\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",24500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "24\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20025, "epsg", 20025,
+		      "Pulkovo 1995 / Gauss-Kruger zone 25");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 25\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",25500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "25\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20026, "epsg", 20026,
+		      "Pulkovo 1995 / Gauss-Kruger zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 26\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",26500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "26\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20027, "epsg", 20027,
+		      "Pulkovo 1995 / Gauss-Kruger zone 27");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 27\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",27500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "27\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20028, "epsg", 20028,
+		      "Pulkovo 1995 / Gauss-Kruger zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 28\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",28500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "28\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20029, "epsg", 20029,
+		      "Pulkovo 1995 / Gauss-Kruger zone 29");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 29\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",29500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "29\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20030, "epsg", 20030,
+		      "Pulkovo 1995 / Gauss-Kruger zone 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=");
+    add_proj4text (p, 1,
+		   "0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,");
+    add_proj4text (p, 2, "-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 30\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",30500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "30\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_18 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 20031, "epsg", 20031,
+		      "Pulkovo 1995 / Gauss-Kruger zone 31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16");
+    add_proj4text (p, 2, ",-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 31\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",31500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "31\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20032, "epsg", 20032,
+		      "Pulkovo 1995 / Gauss-Kruger zone 32");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16");
+    add_proj4text (p, 2, ",-0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger zone 32\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4200\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",1],PARAMETER[\"false_easting\",32500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"200");
+    add_srs_wkt (p, 12, "32\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20064, "epsg", 20064,
+		      "Pulkovo 1995 / Gauss-Kruger 4N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 4N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",21],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "20064\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20065, "epsg", 20065,
+		      "Pulkovo 1995 / Gauss-Kruger 5N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 5N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",27],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "20065\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20066, "epsg", 20066,
+		      "Pulkovo 1995 / Gauss-Kruger 6N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 6N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",33],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "20066\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20067, "epsg", 20067,
+		      "Pulkovo 1995 / Gauss-Kruger 7N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 7N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",39],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "20067\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20068, "epsg", 20068,
+		      "Pulkovo 1995 / Gauss-Kruger 8N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 8N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",45],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "20068\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20069, "epsg", 20069,
+		      "Pulkovo 1995 / Gauss-Kruger 9N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 9N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",51],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",5000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "20069\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20070, "epsg", 20070,
+		      "Pulkovo 1995 / Gauss-Kruger 10N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 10N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20070\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20071, "epsg", 20071,
+		      "Pulkovo 1995 / Gauss-Kruger 11N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 11N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20071\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20072, "epsg", 20072,
+		      "Pulkovo 1995 / Gauss-Kruger 12N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 12N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20072\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20073, "epsg", 20073,
+		      "Pulkovo 1995 / Gauss-Kruger 13N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 13N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20073\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20074, "epsg", 20074,
+		      "Pulkovo 1995 / Gauss-Kruger 14N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 14N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20074\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20075, "epsg", 20075,
+		      "Pulkovo 1995 / Gauss-Kruger 15N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 15N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20075\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20076, "epsg", 20076,
+		      "Pulkovo 1995 / Gauss-Kruger 16N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 16N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20076\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20077, "epsg", 20077,
+		      "Pulkovo 1995 / Gauss-Kruger 17N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1,
+		   "ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.");
+    add_proj4text (p, 2, "12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 17N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"20077\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20078, "epsg", 20078,
+		      "Pulkovo 1995 / Gauss-Kruger 18N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 18N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20078\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20079, "epsg", 20079,
+		      "Pulkovo 1995 / Gauss-Kruger 19N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 19N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20079\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20080, "epsg", 20080,
+		      "Pulkovo 1995 / Gauss-Kruger 20N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 20N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20080\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20081, "epsg", 20081,
+		      "Pulkovo 1995 / Gauss-Kruger 21N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 21N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20081\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20082, "epsg", 20082,
+		      "Pulkovo 1995 / Gauss-Kruger 22N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 22N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20082\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20083, "epsg", 20083,
+		      "Pulkovo 1995 / Gauss-Kruger 23N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 23N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20083\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20084, "epsg", 20084,
+		      "Pulkovo 1995 / Gauss-Kruger 24N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 24N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",141],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20084\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20085, "epsg", 20085,
+		      "Pulkovo 1995 / Gauss-Kruger 25N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 25N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",147],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20085\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20086, "epsg", 20086,
+		      "Pulkovo 1995 / Gauss-Kruger 26N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 26N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",153],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20086\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20087, "epsg", 20087,
+		      "Pulkovo 1995 / Gauss-Kruger 27N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 27N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",159],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20087\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20088, "epsg", 20088,
+		      "Pulkovo 1995 / Gauss-Kruger 28N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 28N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",165],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20088\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20089, "epsg", 20089,
+		      "Pulkovo 1995 / Gauss-Kruger 29N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 29N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",171],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20089\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20090, "epsg", 20090,
+		      "Pulkovo 1995 / Gauss-Kruger 30N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0");
+    add_proj4text (p, 2, ".12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 30N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",177],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20090\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20091, "epsg", 20091,
+		      "Pulkovo 1995 / Gauss-Kruger 31N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 31N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-177],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20091\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20092, "epsg", 20092,
+		      "Pulkovo 1995 / Gauss-Kruger 32N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1,
+		   " +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-");
+    add_proj4text (p, 2, "0.12 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1995 / Gauss-Kruger 32N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1995\",DATUM[\"Pulkovo_1995\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6200\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4200\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-171],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"20092\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 20135, "epsg", 20135,
+		      "Adindan / UTM zone 35N");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Adindan / UTM zone 35N\",GEOGCS[\"Adindan\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Adindan\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 2,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6201\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4201\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 7,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 9,
+		 "actor\",0.9996],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20135\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20136, "epsg", 20136,
+		      "Adindan / UTM zone 36N");
+    add_proj4text (p, 0, "+proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Adindan / UTM zone 36N\",GEOGCS[\"Adindan\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Adindan\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 2,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6201\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4201\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 7,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 9,
+		 "actor\",0.9996],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20136\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20137, "epsg", 20137,
+		      "Adindan / UTM zone 37N");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Adindan / UTM zone 37N\",GEOGCS[\"Adindan\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Adindan\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 2,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6201\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4201\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 7,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 9,
+		 "actor\",0.9996],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20137\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20138, "epsg", 20138,
+		      "Adindan / UTM zone 38N");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Adindan / UTM zone 38N\",GEOGCS[\"Adindan\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Adindan\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.14");
+    add_srs_wkt (p, 2,
+		 "5,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"6201\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4201\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 7,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"central_meridian\",45],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 9,
+		 "actor\",0.9996],PARAMETER[\"false_easting\",500000],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"20138\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20248, "epsg", 20248, "AGD66 / AMG zone 48");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 48\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "05],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20248\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20249, "epsg", 20249, "AGD66 / AMG zone 49");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 49\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "11],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20249\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20250, "epsg", 20250, "AGD66 / AMG zone 50");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 50\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "17],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20250\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20251, "epsg", 20251, "AGD66 / AMG zone 51");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 51\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "23],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20251\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20252, "epsg", 20252, "AGD66 / AMG zone 52");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 52\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "29],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20252\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20253, "epsg", 20253, "AGD66 / AMG zone 53");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 53\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "35],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20253\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20254, "epsg", 20254, "AGD66 / AMG zone 54");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 54\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "41],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20254\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20255, "epsg", 20255, "AGD66 / AMG zone 55");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 55\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "47],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20255\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20256, "epsg", 20256, "AGD66 / AMG zone 56");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 56\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "53],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20256\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20257, "epsg", 20257, "AGD66 / AMG zone 57");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 57\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "59],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20257\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20258, "epsg", 20258, "AGD66 / AMG zone 58");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD66 / AMG zone 58\",GEOGCS[\"AGD66\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1966\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6202\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4202\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "65],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20258\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20348, "epsg", 20348, "AGD84 / AMG zone 48");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 48\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "05],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20348\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20349, "epsg", 20349, "AGD84 / AMG zone 49");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 49\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "11],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20349\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20350, "epsg", 20350, "AGD84 / AMG zone 50");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 50\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "17],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20350\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20351, "epsg", 20351, "AGD84 / AMG zone 51");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 51\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "23],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20351\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20352, "epsg", 20352, "AGD84 / AMG zone 52");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 52\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "29],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20352\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20353, "epsg", 20353, "AGD84 / AMG zone 53");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 53\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "35],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20353\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20354, "epsg", 20354, "AGD84 / AMG zone 54");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 54\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "41],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20354\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20355, "epsg", 20355, "AGD84 / AMG zone 55");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 55\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "47],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20355\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20356, "epsg", 20356, "AGD84 / AMG zone 56");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 56\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "53],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20356\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20357, "epsg", 20357, "AGD84 / AMG zone 57");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 57\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "59],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20357\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20358, "epsg", 20358, "AGD84 / AMG zone 58");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"AGD84 / AMG zone 58\",GEOGCS[\"AGD84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Australian_Geodetic_Datum_1984\",SPHEROID[\"Australian N");
+    add_srs_wkt (p, 2,
+		 "ational Spheroid\",6378160,298.25,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "003\"]],AUTHORITY[\"EPSG\",\"6203\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4203\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "65],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",10000000");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"20358\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20436, "epsg", 20436,
+		      "Ain el Abd / UTM zone 36N");
+    add_proj4text (p, 0, "+proj=utm +zone=36 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Ain el Abd / UTM zone 36N\",GEOGCS[\"Ain el Abd");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Ain_el_Abd_1970\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4204\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "20436\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 20437, "epsg", 20437,
+		      "Ain el Abd / UTM zone 37N");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Ain el Abd / UTM zone 37N\",GEOGCS[\"Ain el Abd");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Ain_el_Abd_1970\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4204\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "20437\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 20438, "epsg", 20438,
+		      "Ain el Abd / UTM zone 38N");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Ain el Abd / UTM zone 38N\",GEOGCS[\"Ain el Abd");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Ain_el_Abd_1970\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4204\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "20438\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 20439, "epsg", 20439,
+		      "Ain el Abd / UTM zone 39N");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Ain el Abd / UTM zone 39N\",GEOGCS[\"Ain el Abd");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Ain_el_Abd_1970\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4204\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "20439\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 20440, "epsg", 20440,
+		      "Ain el Abd / UTM zone 40N");
+    add_proj4text (p, 0, "+proj=utm +zone=40 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Ain el Abd / UTM zone 40N\",GEOGCS[\"Ain el Abd");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Ain_el_Abd_1970\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4204\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "20440\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 20499, "epsg", 20499,
+		      "Ain el Abd / Bahrain Grid");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Ain el Abd / Bahrain Grid\",GEOGCS[\"Ain el Abd");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Ain_el_Abd_1970\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6204\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4204\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "20499\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 20538, "epsg", 20538,
+		      "Afgooye / UTM zone 38N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Afgooye / UTM zone 38N\",GEOGCS[\"Afgooye\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Afgooye\",SPHEROID[\"Krassowsky 1940\",6378245,298.");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[-43,-163,45,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"6205\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4205\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",45");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"20538\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 12, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 20539, "epsg", 20539,
+		      "Afgooye / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Afgooye / UTM zone 39N\",GEOGCS[\"Afgooye\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Afgooye\",SPHEROID[\"Krassowsky 1940\",6378245,298.");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7024\"]],TOWGS84[-43,-163,45,0,0,");
+    add_srs_wkt (p, 3,
+		 "0,0],AUTHORITY[\"EPSG\",\"6205\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4205\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",51");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"20539\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 12, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 20790, "epsg", 20790,
+		      "Lisbon (Lisbon) / Portuguese National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_d");
+    add_proj4text (p, 2, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lisbon (Lisbon) / Portuguese National Grid\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"Lisbon (Lisbon)\",DATUM[\"Lisbon_1937_Lisbon\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"International 1924\",6378388,297,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6803\"]],PRIMEM[\"L");
+    add_srs_wkt (p, 4,
+		 "isbon\",-9.131906111111112,AUTHORITY[\"EPSG\",\"8902\"]]");
+    add_srs_wkt (p, 5,
+		 ",UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"9122\"]],AUTHORITY[\"EPSG\",\"4803\"]],UNIT[\"metre\",");
+    add_srs_wkt (p, 7,
+		 "1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_");
+    add_srs_wkt (p, 8,
+		 "Mercator\"],PARAMETER[\"latitude_of_origin\",39.66666666");
+    add_srs_wkt (p, 9,
+		 "666666],PARAMETER[\"central_meridian\",1],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",200000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",300000],AUTHORITY[\"EPSG\",\"20");
+    add_srs_wkt (p, 12, "790\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 20791, "epsg", 20791,
+		      "Lisbon (Lisbon) / Portuguese Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=");
+    add_proj4text (p, 1, "0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lisbon (Lisbon) / Portuguese Grid\",GEOGCS[\"Li");
+    add_srs_wkt (p, 1,
+		 "sbon (Lisbon)\",DATUM[\"Lisbon_1937_Lisbon\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6803\"]],PRIMEM[\"Lisbon\",-");
+    add_srs_wkt (p, 4,
+		 "9.131906111111112,AUTHORITY[\"EPSG\",\"8902\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4803\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",39.66666666666666],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"central_meridian\",1],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"20791\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 20822, "epsg", 20822,
+		      "Aratu / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Aratu / UTM zone 22S\",GEOGCS[\"Aratu\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Aratu\",SPHEROID[\"International 1924\",6378388,297,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6208\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4208\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 7,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "central_meridian\",-51],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"20822\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20823, "epsg", 20823,
+		      "Aratu / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Aratu / UTM zone 23S\",GEOGCS[\"Aratu\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Aratu\",SPHEROID[\"International 1924\",6378388,297,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6208\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4208\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 7,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "central_meridian\",-45],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"20823\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20824, "epsg", 20824,
+		      "Aratu / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Aratu / UTM zone 24S\",GEOGCS[\"Aratu\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Aratu\",SPHEROID[\"International 1924\",6378388,297,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6208\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4208\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 7,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "central_meridian\",-39],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"20824\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 20934, "epsg", 20934,
+		      "Arc 1950 / UTM zone 34S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.9663");
+    add_proj4text (p, 1, "98753 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1950 / UTM zone 34S\",GEOGCS[\"Arc 1950\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1950\",SPHEROID[\"Clarke 1880 (Arc)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.4663077,AUTHORITY[\"EPSG\",\"7013\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6209\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4209\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"20934\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 20935, "epsg", 20935,
+		      "Arc 1950 / UTM zone 35S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.9663");
+    add_proj4text (p, 1, "98753 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1950 / UTM zone 35S\",GEOGCS[\"Arc 1950\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1950\",SPHEROID[\"Clarke 1880 (Arc)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.4663077,AUTHORITY[\"EPSG\",\"7013\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6209\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4209\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"20935\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 20936, "epsg", 20936,
+		      "Arc 1950 / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.9663");
+    add_proj4text (p, 1, "98753 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1950 / UTM zone 36S\",GEOGCS[\"Arc 1950\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1950\",SPHEROID[\"Clarke 1880 (Arc)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.4663077,AUTHORITY[\"EPSG\",\"7013\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6209\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4209\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"20936\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 21035, "epsg", 21035,
+		      "Arc 1960 / UTM zone 35S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1960 / UTM zone 35S\",GEOGCS[\"Arc 1960\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1960\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6210\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4210\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"21035\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 21036, "epsg", 21036,
+		      "Arc 1960 / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1960 / UTM zone 36S\",GEOGCS[\"Arc 1960\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1960\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6210\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4210\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"21036\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 21037, "epsg", 21037,
+		      "Arc 1960 / UTM zone 37S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1960 / UTM zone 37S\",GEOGCS[\"Arc 1960\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1960\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6210\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4210\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"21037\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 21095, "epsg", 21095,
+		      "Arc 1960 / UTM zone 35N");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1960 / UTM zone 35N\",GEOGCS[\"Arc 1960\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1960\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6210\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4210\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"21095");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21096, "epsg", 21096,
+		      "Arc 1960 / UTM zone 36N");
+    add_proj4text (p, 0, "+proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1960 / UTM zone 36N\",GEOGCS[\"Arc 1960\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1960\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6210\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4210\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"21096");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21097, "epsg", 21097,
+		      "Arc 1960 / UTM zone 37N");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Arc 1960 / UTM zone 37N\",GEOGCS[\"Arc 1960\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Arc_1960\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6210\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4210\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"21097");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21100, "epsg", 21100,
+		      "Batavia (Jakarta) / NEIEZ (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 ");
+    add_proj4text (p, 1, "+ellps=bessel +pm=jakarta +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Batavia (Jakarta) / NEIEZ (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Batavia (Jakarta)\",DATUM[\"Batavia_Jakarta\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6813\"]],PRIMEM[\"J");
+    add_srs_wkt (p, 4,
+		 "akarta\",106.8077194444444,AUTHORITY[\"EPSG\",\"8908\"]]");
+    add_srs_wkt (p, 5,
+		 ",UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"9122\"]],AUTHORITY[\"EPSG\",\"4813\"]],UNIT[\"metre\",");
+    add_srs_wkt (p, 7,
+		 "1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Mercator_1S");
+    add_srs_wkt (p, 8,
+		 "P\"],PARAMETER[\"central_meridian\",110],PARAMETER[\"sca");
+    add_srs_wkt (p, 9,
+		 "le_factor\",0.997],PARAMETER[\"false_easting\",3900000],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"false_northing\",900000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"21100\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 21148, "epsg", 21148,
+		      "Batavia / UTM zone 48S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=bessel +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Batavia / UTM zone 48S\",GEOGCS[\"Batavia\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Batavia\",SPHEROID[\"Bessel 1841\",6377397.155,299.");
+    add_srs_wkt (p, 2,
+		 "1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6211\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4211\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",105],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 9,
+		 "tor\",0.9996],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"21");
+    add_srs_wkt (p, 11,
+		 "148\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21149, "epsg", 21149,
+		      "Batavia / UTM zone 49S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=bessel +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Batavia / UTM zone 49S\",GEOGCS[\"Batavia\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Batavia\",SPHEROID[\"Bessel 1841\",6377397.155,299.");
+    add_srs_wkt (p, 2,
+		 "1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6211\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4211\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",111],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 9,
+		 "tor\",0.9996],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"21");
+    add_srs_wkt (p, 11,
+		 "149\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21150, "epsg", 21150,
+		      "Batavia / UTM zone 50S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=bessel +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Batavia / UTM zone 50S\",GEOGCS[\"Batavia\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Batavia\",SPHEROID[\"Bessel 1841\",6377397.155,299.");
+    add_srs_wkt (p, 2,
+		 "1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6211\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4211\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",117],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 9,
+		 "tor\",0.9996],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"21");
+    add_srs_wkt (p, 11,
+		 "150\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21291, "epsg", 21291,
+		      "Barbados 1938 / British West Indies Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x");
+    add_proj4text (p, 1,
+		   "_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419");
+    add_proj4text (p, 2, ".19,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Barbados 1938 / British West Indies Grid\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Barbados 1938\",DATUM[\"Barbados_1938\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7012\"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6212\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"421");
+    add_srs_wkt (p, 7,
+		 "2\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",-62],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",0.9995],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "400000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12,
+		 "\",\"21291\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+    p = add_epsg_def (first, last, 21292, "epsg", 21292,
+		      "Barbados 1938 / Barbados National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222");
+    add_proj4text (p, 1,
+		   "222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 ");
+    add_proj4text (p, 2,
+		   "+towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Barbados 1938 / Barbados National Grid\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Barbados 1938\",DATUM[\"Barbados_1938\",SPHEROID[\"Cl");
+    add_srs_wkt (p, 2,
+		 "arke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7012\"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"6212\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 5,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4212\"");
+    add_srs_wkt (p, 7,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 9,
+		 "igin\",13.17638888888889],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 10,
+		 ",-59.55972222222222],PARAMETER[\"scale_factor\",0.999998");
+    add_srs_wkt (p, 11,
+		 "6],PARAMETER[\"false_easting\",30000],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",75000],AUTHORITY[\"EPSG\",\"21292\"],AXIS[\"E");
+    add_srs_wkt (p, 13, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21413, "epsg", 21413,
+		      "Beijing 1954 / Gauss-Kruger zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 13\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",135");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21413\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21414, "epsg", 21414,
+		      "Beijing 1954 / Gauss-Kruger zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 14\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",145");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21414\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21415, "epsg", 21415,
+		      "Beijing 1954 / Gauss-Kruger zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 15\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",155");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21415\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21416, "epsg", 21416,
+		      "Beijing 1954 / Gauss-Kruger zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 16\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",165");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21416\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21417, "epsg", 21417,
+		      "Beijing 1954 / Gauss-Kruger zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 17\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",175");
+    add_srs_wkt (p, 10,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21417\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21418, "epsg", 21418,
+		      "Beijing 1954 / Gauss-Kruger zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 18\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",18");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"21418\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21419, "epsg", 21419,
+		      "Beijing 1954 / Gauss-Kruger zone 19");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 19\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",19");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"21419\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21420, "epsg", 21420,
+		      "Beijing 1954 / Gauss-Kruger zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 20\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",20");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"21420\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21421, "epsg", 21421,
+		      "Beijing 1954 / Gauss-Kruger zone 21");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 21\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",21");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"21421\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21422, "epsg", 21422,
+		      "Beijing 1954 / Gauss-Kruger zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 22\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",22");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"21422\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21423, "epsg", 21423,
+		      "Beijing 1954 / Gauss-Kruger zone 23");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger zone 23\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",23");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"21423\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21453, "epsg", 21453,
+		      "Beijing 1954 / Gauss-Kruger CM 75E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 75E\",GEOGCS[\"B");
+    add_srs_wkt (p, 1,
+		 "eijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"21453\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21454, "epsg", 21454,
+		      "Beijing 1954 / Gauss-Kruger CM 81E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 81E\",GEOGCS[\"B");
+    add_srs_wkt (p, 1,
+		 "eijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"21454\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21455, "epsg", 21455,
+		      "Beijing 1954 / Gauss-Kruger CM 87E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 87E\",GEOGCS[\"B");
+    add_srs_wkt (p, 1,
+		 "eijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"21455\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21456, "epsg", 21456,
+		      "Beijing 1954 / Gauss-Kruger CM 93E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 93E\",GEOGCS[\"B");
+    add_srs_wkt (p, 1,
+		 "eijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"21456\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21457, "epsg", 21457,
+		      "Beijing 1954 / Gauss-Kruger CM 99E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 99E\",GEOGCS[\"B");
+    add_srs_wkt (p, 1,
+		 "eijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 10,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"21457\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21458, "epsg", 21458,
+		      "Beijing 1954 / Gauss-Kruger CM 105E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 105E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21458\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21459, "epsg", 21459,
+		      "Beijing 1954 / Gauss-Kruger CM 111E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 111E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21459\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21460, "epsg", 21460,
+		      "Beijing 1954 / Gauss-Kruger CM 117E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 117E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21460\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21461, "epsg", 21461,
+		      "Beijing 1954 / Gauss-Kruger CM 123E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 123E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21461\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21462, "epsg", 21462,
+		      "Beijing 1954 / Gauss-Kruger CM 129E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 129E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21462\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21463, "epsg", 21463,
+		      "Beijing 1954 / Gauss-Kruger CM 135E");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger CM 135E\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"21463\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21473, "epsg", 21473,
+		      "Beijing 1954 / Gauss-Kruger 13N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 13N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",7");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"21473\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21474, "epsg", 21474,
+		      "Beijing 1954 / Gauss-Kruger 14N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 14N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"21474\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21475, "epsg", 21475,
+		      "Beijing 1954 / Gauss-Kruger 15N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 15N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"21475\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21476, "epsg", 21476,
+		      "Beijing 1954 / Gauss-Kruger 16N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 16N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"21476\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21477, "epsg", 21477,
+		      "Beijing 1954 / Gauss-Kruger 17N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 17N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"21477\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21478, "epsg", 21478,
+		      "Beijing 1954 / Gauss-Kruger 18N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 18N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "05],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"21478\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21479, "epsg", 21479,
+		      "Beijing 1954 / Gauss-Kruger 19N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 19N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "11],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"21479\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21480, "epsg", 21480,
+		      "Beijing 1954 / Gauss-Kruger 20N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 20N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "17],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"21480\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21481, "epsg", 21481,
+		      "Beijing 1954 / Gauss-Kruger 21N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 21N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "23],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"21481\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21482, "epsg", 21482,
+		      "Beijing 1954 / Gauss-Kruger 22N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 22N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "29],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"21482\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21483, "epsg", 21483,
+		      "Beijing 1954 / Gauss-Kruger 23N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Beijing 1954 / Gauss-Kruger 23N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Beijing 1954\",DATUM[\"Beijing_1954\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],AUTHORITY[\"EPSG\",\"6214\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4214\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 9,
+		 "35],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"21483\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 21500, "epsg", 21500,
+		      "Belge 1950 (Brussels) / Belge Lambert 50");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=i");
+    add_proj4text (p, 2, "ntl +pm=brussels +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Belge 1950 (Brussels) / Belge Lambert 50\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Belge 1950 (Brussels)\",DATUM[\"Reseau_National_Bel");
+    add_srs_wkt (p, 2,
+		 "ge_1950_Brussels\",SPHEROID[\"International 1924\",63783");
+    add_srs_wkt (p, 3,
+		 "88,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6809\"]],PRIMEM[\"Brussels\",4.367975,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 5,
+		 "\",\"8910\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4809\"]],UN");
+    add_srs_wkt (p, 7,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",49.83333333333334],PARAMETER[\"standard_paral");
+    add_srs_wkt (p, 10,
+		 "lel_2\",51.16666666666666],PARAMETER[\"latitude_of_origi");
+    add_srs_wkt (p, 11,
+		 "n\",90],PARAMETER[\"central_meridian\",0],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",150000],PARAMETER[\"false_northing\",54000");
+    add_srs_wkt (p, 13,
+		 "00],AUTHORITY[\"EPSG\",\"21500\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 14, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 21780, "epsg", 21780,
+		      "Bern 1898 (Bern) / LV03C");
+    add_proj4text (p, 0,
+		   "+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x");
+    add_proj4text (p, 1,
+		   "_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bern 1898 (Bern) / LV03C\",GEOGCS[\"Bern 1898 (");
+    add_srs_wkt (p, 1,
+		 "Bern)\",DATUM[\"CH1903_Bern\",SPHEROID[\"Bessel 1841\",6");
+    add_srs_wkt (p, 2,
+		 "377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6801\"]],PRIMEM[\"Bern\",7.43958333333");
+    add_srs_wkt (p, 4,
+		 "3333,AUTHORITY[\"EPSG\",\"8907\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4801\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "9001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"latitude_of_center\",46.95240555555556],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "longitude_of_center\",0],PARAMETER[\"azimuth\",90],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"rectified_grid_angle\",90],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 11,
+		 "or\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"21780\"],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "EAST],AXIS[\"X\",NORTH]]");
+    p = add_epsg_def (first, last, 21781, "epsg", 21781, "CH1903 / LV03");
+    add_proj4text (p, 0,
+		   "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333");
+    add_proj4text (p, 1,
+		   "333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +tow");
+    add_proj4text (p, 2,
+		   "gs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"CH1903 / LV03\",GEOGCS[\"CH1903\",DATUM[\"CH190");
+    add_srs_wkt (p, 1,
+		 "3\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7004\"]],TOWGS84[674.374,15.056,405.34");
+    add_srs_wkt (p, 3,
+		 "6,0,0,0,0],AUTHORITY[\"EPSG\",\"6149\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4149\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_center\",46.95240555555556],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"longitude_of_center\",7.439583333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "azimuth\",90],PARAMETER[\"rectified_grid_angle\",90],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",6");
+    add_srs_wkt (p, 12,
+		 "00000],PARAMETER[\"false_northing\",200000],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"21781\"],AXIS[\"Y\",EAST],AXIS[\"X\",NORTH]]");
+    p = add_epsg_def (first, last, 21782, "epsg", 21782, "CH1903 / LV03C-G");
+    add_proj4text (p, 0,
+		   "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333");
+    add_proj4text (p, 1,
+		   "333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.3");
+    add_proj4text (p, 2, "74,15.056,405.346,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"CH1903 / LV03C-G\",GEOGCS[\"CH1903\",DATUM[\"CH");
+    add_srs_wkt (p, 1,
+		 "1903\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[674.374,15.056,405");
+    add_srs_wkt (p, 3,
+		 ".346,0,0,0,0],AUTHORITY[\"EPSG\",\"6149\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4149\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_center\",46.95240555555556],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"longitude_of_center\",7.439583333333333],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"azimuth\",90],PARAMETER[\"rectified_grid_angle\",90");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"21782\"],AXIS[\"Y\",EAST],AXIS[\"X\",NORTH]]");
+    p = add_epsg_def (first, last, 21817, "epsg", 21817,
+		      "Bogota 1975 / UTM zone 17N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / UTM zone 17N (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Bogota 1975\",DATUM[\"Bogota_1975\",SPHEROID[\"Inter");
+    add_srs_wkt (p, 2,
+		 "national 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",\"621");
+    add_srs_wkt (p, 4,
+		 "8\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"21817\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21818, "epsg", 21818,
+		      "Bogota 1975 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / UTM zone 18N\",GEOGCS[\"Bogota 19");
+    add_srs_wkt (p, 1,
+		 "75\",DATUM[\"Bogota_1975\",SPHEROID[\"International 1924");
+    add_srs_wkt (p, 2,
+		 "\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[307");
+    add_srs_wkt (p, 3,
+		 ",304,-318,0,0,0,0],AUTHORITY[\"EPSG\",\"6218\"]],PRIMEM[");
+    add_srs_wkt (p, 4,
+		 "\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"deg");
+    add_srs_wkt (p, 5,
+		 "ree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"metre\",1,AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"]");
+    add_srs_wkt (p, 8,
+		 ",PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central");
+    add_srs_wkt (p, 9,
+		 "_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",500000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"21818\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 21891, "epsg", 21891,
+		      "Bogota 1975 / Colombia West zone (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia West zone (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"Bogota 1975\",DATUM[\"Bogota_1975\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6218\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.59");
+    add_srs_wkt (p, 9,
+		 "9047222222222],PARAMETER[\"central_meridian\",-77.080916");
+    add_srs_wkt (p, 10,
+		 "66666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",1000000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"21891\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 21892, "epsg", 21892,
+		      "Bogota 1975 / Colombia Bogota zone (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia Bogota zone (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Bogota 1975\",DATUM[\"Bogota_1975\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7022\"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6218\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4.59");
+    add_srs_wkt (p, 9,
+		 "9047222222222],PARAMETER[\"central_meridian\",-74.080916");
+    add_srs_wkt (p, 10,
+		 "66666667],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",1000000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"21892\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 21893, "epsg", 21893,
+		      "Bogota 1975 / Colombia East Central zone (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia East Central zone (depre");
+    add_srs_wkt (p, 1,
+		 "cated)\",GEOGCS[\"Bogota 1975\",DATUM[\"Bogota_1975\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"International 1924\",6378388,297,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7022\"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"6218\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 5,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4218\"]]");
+    add_srs_wkt (p, 7,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 9,
+		 "in\",4.599047222222222],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 10,
+		 "71.08091666666667],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",1000000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",1000000],AUTHORITY[\"EPSG\",\"21893\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 21894, "epsg", 21894,
+		      "Bogota 1975 / Colombia East (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia East (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Bogota 1975\",DATUM[\"Bogota_1975\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 2,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 4,
+		 "18\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",4.59904722");
+    add_srs_wkt (p, 9,
+		 "2222222],PARAMETER[\"central_meridian\",-68.080916666666");
+    add_srs_wkt (p, 10,
+		 "67],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",1000000],PARAMETER[\"false_northing\",1000000],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"21894\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 13, "ORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_19 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 21896, "epsg", 21896,
+		      "Bogota 1975 / Colombia West zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia West zone\",GEOGCS[\"Bog");
+    add_srs_wkt (p, 1,
+		 "ota 1975\",DATUM[\"Bogota_1975\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 2,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS");
+    add_srs_wkt (p, 3,
+		 "84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",\"6218\"]],P");
+    add_srs_wkt (p, 4,
+		 "RIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT");
+    add_srs_wkt (p, 5,
+		 "[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"912");
+    add_srs_wkt (p, 6,
+		 "2\"]],AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"metre\",1,AUT");
+    add_srs_wkt (p, 7,
+		 "HORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merca");
+    add_srs_wkt (p, 8,
+		 "tor\"],PARAMETER[\"latitude_of_origin\",4.59904722222222");
+    add_srs_wkt (p, 9,
+		 "2],PARAMETER[\"central_meridian\",-77.08091666666667],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "1000000],PARAMETER[\"false_northing\",1000000],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"21896\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 21897, "epsg", 21897,
+		      "Bogota 1975 / Colombia Bogota zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia Bogota zone\",GEOGCS[\"B");
+    add_srs_wkt (p, 1,
+		 "ogota 1975\",DATUM[\"Bogota_1975\",SPHEROID[\"Internatio");
+    add_srs_wkt (p, 2,
+		 "nal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",\"6218\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",4.599047222222");
+    add_srs_wkt (p, 9,
+		 "222],PARAMETER[\"central_meridian\",-74.08091666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",1000000],PARAMETER[\"false_northing\",1000000],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"21897\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]");
+    add_srs_wkt (p, 13, "]");
+    p = add_epsg_def (first, last, 21898, "epsg", 21898,
+		      "Bogota 1975 / Colombia East Central zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia East Central zone\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Bogota 1975\",DATUM[\"Bogota_1975\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 2,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 4,
+		 "18\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",4.59904722");
+    add_srs_wkt (p, 9,
+		 "2222222],PARAMETER[\"central_meridian\",-71.080916666666");
+    add_srs_wkt (p, 10,
+		 "67],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",1000000],PARAMETER[\"false_northing\",1000000],AUT");
+    add_srs_wkt (p, 12,
+		 "HORITY[\"EPSG\",\"21898\"],AXIS[\"X\",NORTH],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "EAST]]");
+    p = add_epsg_def (first, last, 21899, "epsg", 21899,
+		      "Bogota 1975 / Colombia East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs");
+    add_proj4text (p, 2, "84=307,304,-318,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Bogota 1975 / Colombia East\",GEOGCS[\"Bogota 1");
+    add_srs_wkt (p, 1,
+		 "975\",DATUM[\"Bogota_1975\",SPHEROID[\"International 192");
+    add_srs_wkt (p, 2,
+		 "4\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[30");
+    add_srs_wkt (p, 3,
+		 "7,304,-318,0,0,0,0],AUTHORITY[\"EPSG\",\"6218\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4218\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",4.599047222222222],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"central_meridian\",-68.08091666666667],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",10000");
+    add_srs_wkt (p, 11,
+		 "00],PARAMETER[\"false_northing\",1000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12, "SG\",\"21899\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22032, "epsg", 22032,
+		      "Camacupa / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Camacupa / UTM zone 32S\",GEOGCS[\"Camacupa\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Camacupa\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6220\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4220\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "22032\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 22033, "epsg", 22033,
+		      "Camacupa / UTM zone 33S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_def");
+    add_proj4text (p, 1, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Camacupa / UTM zone 33S\",GEOGCS[\"Camacupa\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Camacupa\",SPHEROID[\"Clarke 1880 (RGS)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6220\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4220\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",15],PARAMETER[\"scale");
+    add_srs_wkt (p, 9,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",500000],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"22033\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 22091, "epsg", 22091,
+		      "Camacupa / TM 11.30 SE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Camacupa / TM 11.30 SE\",GEOGCS[\"Camacupa\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Camacupa\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.");
+    add_srs_wkt (p, 2,
+		 "145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6220\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4220\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",11.5],PARAMETER[\"scal");
+    add_srs_wkt (p, 9,
+		 "e_factor\",0.9996],PARAMETER[\"false_easting\",500000],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",10000000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11,
+		 ",\"22091\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 22092, "epsg", 22092, "Camacupa / TM 12 SE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=10000000 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Camacupa / TM 12 SE\",GEOGCS[\"Camacupa\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Camacupa\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145");
+    add_srs_wkt (p, 2,
+		 ",293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6220\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4220\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",12],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"220");
+    add_srs_wkt (p, 11,
+		 "92\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22171, "epsg", 22171,
+		      "POSGAR 98 / Argentina 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 98 / Argentina 1\",GEOGCS[\"POSGAR 98\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1998\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6190\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4190\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-90],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-72],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",1500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"22171\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 22172, "epsg", 22172,
+		      "POSGAR 98 / Argentina 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 98 / Argentina 2\",GEOGCS[\"POSGAR 98\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1998\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6190\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4190\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-90],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-69],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",2500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"22172\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 22173, "epsg", 22173,
+		      "POSGAR 98 / Argentina 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 98 / Argentina 3\",GEOGCS[\"POSGAR 98\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1998\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6190\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4190\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-90],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-66],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",3500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"22173\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 22174, "epsg", 22174,
+		      "POSGAR 98 / Argentina 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 98 / Argentina 4\",GEOGCS[\"POSGAR 98\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1998\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6190\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4190\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-90],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-63],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",4500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"22174\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 22175, "epsg", 22175,
+		      "POSGAR 98 / Argentina 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 98 / Argentina 5\",GEOGCS[\"POSGAR 98\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1998\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6190\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4190\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-90],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-60],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",5500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"22175\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 22176, "epsg", 22176,
+		      "POSGAR 98 / Argentina 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 98 / Argentina 6\",GEOGCS[\"POSGAR 98\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1998\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6190\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4190\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-90],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-57],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",6500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"22176\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 22177, "epsg", 22177,
+		      "POSGAR 98 / Argentina 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 98 / Argentina 7\",GEOGCS[\"POSGAR 98\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1998\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6190\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4190\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-90],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-54],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",7500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"22177\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 22181, "epsg", 22181,
+		      "POSGAR 94 / Argentina 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 94 / Argentina 1\",GEOGCS[\"POSGAR 94\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1994\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6694");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4694\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-72],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",1],PARAMETER[\"false_easting\",1500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"22181\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22182, "epsg", 22182,
+		      "POSGAR 94 / Argentina 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 94 / Argentina 2\",GEOGCS[\"POSGAR 94\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1994\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6694");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4694\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-69],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",1],PARAMETER[\"false_easting\",2500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"22182\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22183, "epsg", 22183,
+		      "POSGAR 94 / Argentina 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 94 / Argentina 3\",GEOGCS[\"POSGAR 94\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1994\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6694");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4694\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-66],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",1],PARAMETER[\"false_easting\",3500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"22183\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22184, "epsg", 22184,
+		      "POSGAR 94 / Argentina 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 94 / Argentina 4\",GEOGCS[\"POSGAR 94\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1994\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6694");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4694\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-63],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",1],PARAMETER[\"false_easting\",4500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"22184\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22185, "epsg", 22185,
+		      "POSGAR 94 / Argentina 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 94 / Argentina 5\",GEOGCS[\"POSGAR 94\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1994\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6694");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4694\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-60],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",1],PARAMETER[\"false_easting\",5500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"22185\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22186, "epsg", 22186,
+		      "POSGAR 94 / Argentina 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 94 / Argentina 6\",GEOGCS[\"POSGAR 94\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1994\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6694");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4694\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-57],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",1],PARAMETER[\"false_easting\",6500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"22186\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22187, "epsg", 22187,
+		      "POSGAR 94 / Argentina 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0");
+    add_proj4text (p, 1,
+		   "=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"POSGAR 94 / Argentina 7\",GEOGCS[\"POSGAR 94\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Posiciones_Geodesicas_Argentinas_1994\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6694");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4694\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",-90],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-54],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",1],PARAMETER[\"false_easting\",7500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"22187\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22191, "epsg", 22191,
+		      "Campo Inchauspe / Argentina 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / Argentina 1\",GEOGCS[\"Campo ");
+    add_srs_wkt (p, 1,
+		 "Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",-90],PARAMETER[\"central_meridian\",-72],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",1500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"22191\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22192, "epsg", 22192,
+		      "Campo Inchauspe / Argentina 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / Argentina 2\",GEOGCS[\"Campo ");
+    add_srs_wkt (p, 1,
+		 "Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",-90],PARAMETER[\"central_meridian\",-69],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",2500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"22192\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22193, "epsg", 22193,
+		      "Campo Inchauspe / Argentina 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / Argentina 3\",GEOGCS[\"Campo ");
+    add_srs_wkt (p, 1,
+		 "Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",-90],PARAMETER[\"central_meridian\",-66],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",3500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"22193\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22194, "epsg", 22194,
+		      "Campo Inchauspe / Argentina 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / Argentina 4\",GEOGCS[\"Campo ");
+    add_srs_wkt (p, 1,
+		 "Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",-90],PARAMETER[\"central_meridian\",-63],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",4500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"22194\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22195, "epsg", 22195,
+		      "Campo Inchauspe / Argentina 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / Argentina 5\",GEOGCS[\"Campo ");
+    add_srs_wkt (p, 1,
+		 "Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",-90],PARAMETER[\"central_meridian\",-60],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",5500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"22195\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22196, "epsg", 22196,
+		      "Campo Inchauspe / Argentina 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / Argentina 6\",GEOGCS[\"Campo ");
+    add_srs_wkt (p, 1,
+		 "Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",-90],PARAMETER[\"central_meridian\",-57],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",6500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"22196\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22197, "epsg", 22197,
+		      "Campo Inchauspe / Argentina 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Campo Inchauspe / Argentina 7\",GEOGCS[\"Campo ");
+    add_srs_wkt (p, 1,
+		 "Inchauspe\",DATUM[\"Campo_Inchauspe\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"6221\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 5,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 6,
+		 "\"4221\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]");
+    add_srs_wkt (p, 7,
+		 "],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitu");
+    add_srs_wkt (p, 8,
+		 "de_of_origin\",-90],PARAMETER[\"central_meridian\",-54],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",7500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11, "SG\",\"22197\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 22234, "epsg", 22234, "Cape / UTM zone 34S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.9663");
+    add_proj4text (p, 1, "98753 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Cape / UTM zone 34S\",GEOGCS[\"Cape\",DATUM[\"C");
+    add_srs_wkt (p, 1,
+		 "ape\",SPHEROID[\"Clarke 1880 (Arc)\",6378249.145,293.466");
+    add_srs_wkt (p, 2,
+		 "3077,AUTHORITY[\"EPSG\",\"7013\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6222\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4222\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",21],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 9,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"22234");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22235, "epsg", 22235, "Cape / UTM zone 35S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.9663");
+    add_proj4text (p, 1, "98753 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Cape / UTM zone 35S\",GEOGCS[\"Cape\",DATUM[\"C");
+    add_srs_wkt (p, 1,
+		 "ape\",SPHEROID[\"Clarke 1880 (Arc)\",6378249.145,293.466");
+    add_srs_wkt (p, 2,
+		 "3077,AUTHORITY[\"EPSG\",\"7013\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6222\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4222\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",27],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 9,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"22235");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22236, "epsg", 22236, "Cape / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.9663");
+    add_proj4text (p, 1, "98753 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Cape / UTM zone 36S\",GEOGCS[\"Cape\",DATUM[\"C");
+    add_srs_wkt (p, 1,
+		 "ape\",SPHEROID[\"Clarke 1880 (Arc)\",6378249.145,293.466");
+    add_srs_wkt (p, 2,
+		 "3077,AUTHORITY[\"EPSG\",\"7013\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6222\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4222\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",33],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 9,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_northing\",10000000],AUTHORITY[\"EPSG\",\"22236");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22332, "epsg", 22332,
+		      "Carthage / UTM zone 32N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +datum=cartha");
+    add_proj4text (p, 1, "ge +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Carthage / UTM zone 32N\",GEOGCS[\"Carthage\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"422");
+    add_srs_wkt (p, 6,
+		 "3\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11,
+		 ",\"22332\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 22391, "epsg", 22391,
+		      "Carthage / Nord Tunisie");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.99962554");
+    add_proj4text (p, 1,
+		   "4 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum");
+    add_proj4text (p, 2, "=carthage +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Carthage / Nord Tunisie\",GEOGCS[\"Carthage\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249");
+    add_srs_wkt (p, 2,
+		 ".2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"422");
+    add_srs_wkt (p, 6,
+		 "3\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",36],PARAMETER[\"central_meridian\",9.9");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.999625544],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",500000],PARAMETER[\"false_northing\",30000");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"22391\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 22392, "epsg", 22392,
+		      "Carthage / Sud Tunisie");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.9996");
+    add_proj4text (p, 1,
+		   "25769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +d");
+    add_proj4text (p, 2, "atum=carthage +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Carthage / Sud Tunisie\",GEOGCS[\"Carthage\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Carthage\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.");
+    add_srs_wkt (p, 2,
+		 "2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6223\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4223");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lati");
+    add_srs_wkt (p, 8,
+		 "tude_of_origin\",33.3],PARAMETER[\"central_meridian\",9.");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",0.999625769],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",500000],PARAMETER[\"false_northing\",3000");
+    add_srs_wkt (p, 11,
+		 "00],AUTHORITY[\"EPSG\",\"22392\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 22521, "epsg", 22521,
+		      "Corrego Alegre / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,");
+    add_proj4text (p, 1, "-6,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Corrego Alegre / UTM zone 21S\",GEOGCS[\"Correg");
+    add_srs_wkt (p, 1,
+		 "o Alegre\",DATUM[\"Corrego_Alegre\",SPHEROID[\"Internati");
+    add_srs_wkt (p, 2,
+		 "onal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[-206,172,-6,0,0,0,0],AUTHORITY[\"EPSG\",\"6225\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4225\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-57],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"22521\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22522, "epsg", 22522,
+		      "Corrego Alegre / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,");
+    add_proj4text (p, 1, "-6,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Corrego Alegre / UTM zone 22S\",GEOGCS[\"Correg");
+    add_srs_wkt (p, 1,
+		 "o Alegre\",DATUM[\"Corrego_Alegre\",SPHEROID[\"Internati");
+    add_srs_wkt (p, 2,
+		 "onal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[-206,172,-6,0,0,0,0],AUTHORITY[\"EPSG\",\"6225\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4225\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-51],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"22522\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22523, "epsg", 22523,
+		      "Corrego Alegre / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,");
+    add_proj4text (p, 1, "-6,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Corrego Alegre / UTM zone 23S\",GEOGCS[\"Correg");
+    add_srs_wkt (p, 1,
+		 "o Alegre\",DATUM[\"Corrego_Alegre\",SPHEROID[\"Internati");
+    add_srs_wkt (p, 2,
+		 "onal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[-206,172,-6,0,0,0,0],AUTHORITY[\"EPSG\",\"6225\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4225\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-45],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"22523\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22524, "epsg", 22524,
+		      "Corrego Alegre / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,");
+    add_proj4text (p, 1, "-6,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Corrego Alegre / UTM zone 24S\",GEOGCS[\"Correg");
+    add_srs_wkt (p, 1,
+		 "o Alegre\",DATUM[\"Corrego_Alegre\",SPHEROID[\"Internati");
+    add_srs_wkt (p, 2,
+		 "onal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[-206,172,-6,0,0,0,0],AUTHORITY[\"EPSG\",\"6225\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4225\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-39],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"22524\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22525, "epsg", 22525,
+		      "Corrego Alegre / UTM zone 25S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,");
+    add_proj4text (p, 1, "-6,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Corrego Alegre / UTM zone 25S\",GEOGCS[\"Correg");
+    add_srs_wkt (p, 1,
+		 "o Alegre\",DATUM[\"Corrego_Alegre\",SPHEROID[\"Internati");
+    add_srs_wkt (p, 2,
+		 "onal 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[-206,172,-6,0,0,0,0],AUTHORITY[\"EPSG\",\"6225\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 5,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 6,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4225\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-33],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"22525\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22700, "epsg", 22700,
+		      "Deir ez Zor / Levant Zone");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.");
+    add_proj4text (p, 1,
+		   "9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Deir ez Zor / Levant Zone\",GEOGCS[\"Deir ez Zo");
+    add_srs_wkt (p, 1,
+		 "r\",DATUM[\"Deir_ez_Zor\",SPHEROID[\"Clarke 1880 (IGN)\"");
+    add_srs_wkt (p, 2,
+		 ",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6227\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4227\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"latitude_of_origin\",34.65],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 9,
+		 "idian\",37.35],PARAMETER[\"scale_factor\",0.9996256],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",300000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",300000],AUTHORITY[\"EPSG\",\"22700\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 22770, "epsg", 22770,
+		      "Deir ez Zor / Syria Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.");
+    add_proj4text (p, 1,
+		   "9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Deir ez Zor / Syria Lambert\",GEOGCS[\"Deir ez ");
+    add_srs_wkt (p, 1,
+		 "Zor\",DATUM[\"Deir_ez_Zor\",SPHEROID[\"Clarke 1880 (IGN)");
+    add_srs_wkt (p, 2,
+		 "\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6227\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4227\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",34.65],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",37.35],PARAMETER[\"scale_factor\",0.9996256],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",300000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",300000],AUTHORITY[\"EPSG\",\"22770\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 22780, "epsg", 22780,
+		      "Deir ez Zor / Levant Stereographic");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=");
+    add_proj4text (p, 1, "0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Deir ez Zor / Levant Stereographic\",GEOGCS[\"D");
+    add_srs_wkt (p, 1,
+		 "eir ez Zor\",DATUM[\"Deir_ez_Zor\",SPHEROID[\"Clarke 188");
+    add_srs_wkt (p, 2,
+		 "0 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7011\"]],AUTHORITY[\"EPSG\",\"6227\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4227\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Oblique_Stereographic\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",34.2],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",39.15],PARAMETER[\"scale_factor\",0.9995341],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",0],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"22780\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 22832, "epsg", 22832,
+		      "Douala / UTM zone 32N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_");
+    add_proj4text (p, 1, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Douala / UTM zone 32N (deprecated)\",GEOGCS[\"D");
+    add_srs_wkt (p, 1,
+		 "ouala\",DATUM[\"Douala\",SPHEROID[\"Clarke 1880 (IGN)\",");
+    add_srs_wkt (p, 2,
+		 "6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6228\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4228\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",9],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"22832\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 22991, "epsg", 22991,
+		      "Egypt 1907 / Blue Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=11");
+    add_proj4text (p, 1, "00000 +ellps=helmert +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Egypt 1907 / Blue Belt\",GEOGCS[\"Egypt 1907\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Egypt_1907\",SPHEROID[\"Helmert 1906\",6378200,2");
+    add_srs_wkt (p, 2,
+		 "98.3,AUTHORITY[\"EPSG\",\"7020\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6229\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4229\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"central_meridian\",35],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_northing\",1100000],AUTHORITY[\"EPSG\",\"22991\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22992, "epsg", 22992,
+		      "Egypt 1907 / Red Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=81");
+    add_proj4text (p, 1, "0000 +ellps=helmert +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Egypt 1907 / Red Belt\",GEOGCS[\"Egypt 1907\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Egypt_1907\",SPHEROID[\"Helmert 1906\",6378200,29");
+    add_srs_wkt (p, 2,
+		 "8.3,AUTHORITY[\"EPSG\",\"7020\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "229\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4229\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 7,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",31],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 9,
+		 "\",1],PARAMETER[\"false_easting\",615000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",810000],AUTHORITY[\"EPSG\",\"22992\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22993, "epsg", 22993,
+		      "Egypt 1907 / Purple Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=20");
+    add_proj4text (p, 1, "0000 +ellps=helmert +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Egypt 1907 / Purple Belt\",GEOGCS[\"Egypt 1907\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Egypt_1907\",SPHEROID[\"Helmert 1906\",6378200,");
+    add_srs_wkt (p, 2,
+		 "298.3,AUTHORITY[\"EPSG\",\"7020\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6229\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4229\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",30],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"central_meridian\",27],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",1],PARAMETER[\"false_easting\",700000],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_northing\",200000],AUTHORITY[\"EPSG\",\"22993\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 22994, "epsg", 22994,
+		      "Egypt 1907 / Extended Purple Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=12");
+    add_proj4text (p, 1, "00000 +ellps=helmert +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Egypt 1907 / Extended Purple Belt\",GEOGCS[\"Eg");
+    add_srs_wkt (p, 1,
+		 "ypt 1907\",DATUM[\"Egypt_1907\",SPHEROID[\"Helmert 1906\"");
+    add_srs_wkt (p, 2,
+		 ",6378200,298.3,AUTHORITY[\"EPSG\",\"7020\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6229\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4229\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",30],PARAMETER[\"central_meridian\",27],PARAMETER[\"sc");
+    add_srs_wkt (p, 9,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",700000],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_northing\",1200000],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 11,
+		 "2994\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 23028, "epsg", 23028, "ED50 / UTM zone 28N");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 28N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 9,
+		 "tor\",0.9996],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23028\"],");
+    add_srs_wkt (p, 11, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23029, "epsg", 23029, "ED50 / UTM zone 29N");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 29N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",-9],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23029\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23030, "epsg", 23030, "ED50 / UTM zone 30N");
+    add_proj4text (p, 0, "+proj=utm +zone=30 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 30N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23030\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23031, "epsg", 23031, "ED50 / UTM zone 31N");
+    add_proj4text (p, 0, "+proj=utm +zone=31 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 31N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",3],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23031\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23032, "epsg", 23032, "ED50 / UTM zone 32N");
+    add_proj4text (p, 0, "+proj=utm +zone=32 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 32N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",9],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23032\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23033, "epsg", 23033, "ED50 / UTM zone 33N");
+    add_proj4text (p, 0, "+proj=utm +zone=33 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 33N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",15],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23033\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23034, "epsg", 23034, "ED50 / UTM zone 34N");
+    add_proj4text (p, 0, "+proj=utm +zone=34 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 34N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",21],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23034\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23035, "epsg", 23035, "ED50 / UTM zone 35N");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 35N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",27],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23035\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23036, "epsg", 23036, "ED50 / UTM zone 36N");
+    add_proj4text (p, 0, "+proj=utm +zone=36 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 36N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",33],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23036\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23037, "epsg", 23037, "ED50 / UTM zone 37N");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 37N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",39],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23037\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23038, "epsg", 23038, "ED50 / UTM zone 38N");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / UTM zone 38N\",GEOGCS[\"ED50\",DATUM[\"E");
+    add_srs_wkt (p, 1,
+		 "uropean_Datum_1950\",SPHEROID[\"International 1924\",637");
+    add_srs_wkt (p, 2,
+		 "8388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",45],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23038\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23090, "epsg", 23090, "ED50 / TM 0 N");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM 0 N\",GEOGCS[\"ED50\",DATUM[\"Europea");
+    add_srs_wkt (p, 1,
+		 "n_Datum_1950\",SPHEROID[\"International 1924\",6378388,2");
+    add_srs_wkt (p, 2,
+		 "97,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 3,
+		 "30\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"23090\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23095, "epsg", 23095, "ED50 / TM 5 NE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ED50 / TM 5 NE\",GEOGCS[\"ED50\",DATUM[\"Europe");
+    add_srs_wkt (p, 1,
+		 "an_Datum_1950\",SPHEROID[\"International 1924\",6378388,");
+    add_srs_wkt (p, 2,
+		 "297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 7,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"central_meridian\",5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 9,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"23095\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23239, "epsg", 23239,
+		      "Fahud / UTM zone 39N");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fahud / UTM zone 39N\",GEOGCS[\"Fahud\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Fahud\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.4");
+    add_srs_wkt (p, 2,
+		 "65,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 3,
+		 "32\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4232\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 9,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"23239\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23240, "epsg", 23240,
+		      "Fahud / UTM zone 40N");
+    add_proj4text (p, 0, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Fahud / UTM zone 40N\",GEOGCS[\"Fahud\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Fahud\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.4");
+    add_srs_wkt (p, 2,
+		 "65,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 3,
+		 "32\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4232\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 9,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"23240\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23433, "epsg", 23433,
+		      "Garoua / UTM zone 33N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_");
+    add_proj4text (p, 1, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Garoua / UTM zone 33N (deprecated)\",GEOGCS[\"G");
+    add_srs_wkt (p, 1,
+		 "aroua\",DATUM[\"Garoua\",SPHEROID[\"Clarke 1880 (IGN)\",");
+    add_srs_wkt (p, 2,
+		 "6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6234\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4234\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",15],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"23433\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 23700, "epsg", 23700, "HD72 / EOV");
+    add_proj4text (p, 0,
+		   "+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177");
+    add_proj4text (p, 1,
+		   "777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"HD72 / EOV\",GEOGCS[\"HD72\",DATUM[\"Hungarian_");
+    add_srs_wkt (p, 1,
+		 "Datum_1972\",SPHEROID[\"GRS 1967\",6378160,298.247167427");
+    add_srs_wkt (p, 2,
+		 ",AUTHORITY[\"EPSG\",\"7036\"]],AUTHORITY[\"EPSG\",\"6237");
+    add_srs_wkt (p, 3,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 4,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4237\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Hotine_Obl");
+    add_srs_wkt (p, 7,
+		 "ique_Mercator\"],PARAMETER[\"latitude_of_center\",47.144");
+    add_srs_wkt (p, 8,
+		 "39372222222],PARAMETER[\"longitude_of_center\",19.048571");
+    add_srs_wkt (p, 9,
+		 "77777778],PARAMETER[\"azimuth\",90],PARAMETER[\"rectifie");
+    add_srs_wkt (p, 10,
+		 "d_grid_angle\",90],PARAMETER[\"scale_factor\",0.99993],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",650000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",200000],AUTHORITY[\"EPSG\",\"23700\"],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"X\",NORTH]]");
+    p = add_epsg_def (first, last, 23830, "epsg", 23830,
+		      "DGN95 / Indonesia TM-3 zone 46.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +");
+    add_proj4text (p, 1,
+		   "y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 46.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",94.5],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "99],PARAMETER[\"false_easting\",200000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",1500000],AUTHORITY[\"EPSG\",\"23830\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23831, "epsg", 23831,
+		      "DGN95 / Indonesia TM-3 zone 47.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +");
+    add_proj4text (p, 1,
+		   "y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 47.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",97.5],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "99],PARAMETER[\"false_easting\",200000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",1500000],AUTHORITY[\"EPSG\",\"23831\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23832, "epsg", 23832,
+		      "DGN95 / Indonesia TM-3 zone 47.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 47.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",100.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23832\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23833, "epsg", 23833,
+		      "DGN95 / Indonesia TM-3 zone 48.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 48.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",103.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23833\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23834, "epsg", 23834,
+		      "DGN95 / Indonesia TM-3 zone 48.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 48.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",106.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23834\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23835, "epsg", 23835,
+		      "DGN95 / Indonesia TM-3 zone 49.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 49.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",109.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23835\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23836, "epsg", 23836,
+		      "DGN95 / Indonesia TM-3 zone 49.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 49.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",112.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23836\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23837, "epsg", 23837,
+		      "DGN95 / Indonesia TM-3 zone 50.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 50.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",115.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23837\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23838, "epsg", 23838,
+		      "DGN95 / Indonesia TM-3 zone 50.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 50.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",118.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23838\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23839, "epsg", 23839,
+		      "DGN95 / Indonesia TM-3 zone 51.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 51.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",121.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23839\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23840, "epsg", 23840,
+		      "DGN95 / Indonesia TM-3 zone 51.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 51.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",124.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23840\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23841, "epsg", 23841,
+		      "DGN95 / Indonesia TM-3 zone 52.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 52.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",127.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23841\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23842, "epsg", 23842,
+		      "DGN95 / Indonesia TM-3 zone 52.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 52.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",130.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23842\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23843, "epsg", 23843,
+		      "DGN95 / Indonesia TM-3 zone 53.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 53.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",133.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23843\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23844, "epsg", 23844,
+		      "DGN95 / Indonesia TM-3 zone 53.2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 53.2\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",136.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23844\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23845, "epsg", 23845,
+		      "DGN95 / Indonesia TM-3 zone 54.1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 ");
+    add_proj4text (p, 1,
+		   "+y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / Indonesia TM-3 zone 54.1\",GEOGCS[\"DGN");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Datum_Geodesi_Nasional_1995\",SPHEROID[\"WG");
+    add_srs_wkt (p, 2,
+		 "S 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 8,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",139.5],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "999],PARAMETER[\"false_easting\",200000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",1500000],AUTHORITY[\"EPSG\",\"23845\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 23846, "epsg", 23846, "ID74 / UTM zone 46N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 46N\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"23846\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 23847, "epsg", 23847, "ID74 / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 47N\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"23847\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 23848, "epsg", 23848, "ID74 / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 48N\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"23848\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 23849, "epsg", 23849, "ID74 / UTM zone 49N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 49N\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"23849\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 23850, "epsg", 23850, "ID74 / UTM zone 50N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 50N\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"23850\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 23851, "epsg", 23851, "ID74 / UTM zone 51N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 51N\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"23851\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 23852, "epsg", 23852, "ID74 / UTM zone 52N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 52N\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"23852\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 23853, "epsg", 23853,
+		      "ID74 / UTM zone 53N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 53N (deprecated)\",GEOGCS[\"ID7");
+    add_srs_wkt (p, 1,
+		 "4\",DATUM[\"Indonesian_Datum_1974\",SPHEROID[\"Indonesia");
+    add_srs_wkt (p, 2,
+		 "n National Spheroid\",6378160,298.247,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7021\"]],AUTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"23853\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23866, "epsg", 23866,
+		      "DGN95 / UTM zone 46N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 46N\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"23866\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23867, "epsg", 23867,
+		      "DGN95 / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 47N\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"23867\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23868, "epsg", 23868,
+		      "DGN95 / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 48N\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"23868\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23869, "epsg", 23869,
+		      "DGN95 / UTM zone 49N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 49N\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"23869\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23870, "epsg", 23870,
+		      "DGN95 / UTM zone 50N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 50N\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"23870\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23871, "epsg", 23871,
+		      "DGN95 / UTM zone 51N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 51N\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"23871\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23872, "epsg", 23872,
+		      "DGN95 / UTM zone 52N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 52N\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"23872\"],AXIS[\"Easting\",EAST],A");
+    add_srs_wkt (p, 12, "XIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23877, "epsg", 23877,
+		      "DGN95 / UTM zone 47S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 47S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 11,
+		 "00000],AUTHORITY[\"EPSG\",\"23877\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23878, "epsg", 23878,
+		      "DGN95 / UTM zone 48S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 48S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"23878\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23879, "epsg", 23879,
+		      "DGN95 / UTM zone 49S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 49S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"23879\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23880, "epsg", 23880,
+		      "DGN95 / UTM zone 50S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 50S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"23880\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23881, "epsg", 23881,
+		      "DGN95 / UTM zone 51S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 51S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",123],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"23881\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23882, "epsg", 23882,
+		      "DGN95 / UTM zone 52S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 52S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",129],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"23882\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23883, "epsg", 23883,
+		      "DGN95 / UTM zone 53S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 53S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",135],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"23883\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23884, "epsg", 23884,
+		      "DGN95 / UTM zone 54S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DGN95 / UTM zone 54S\",GEOGCS[\"DGN95\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Datum_Geodesi_Nasional_1995\",SPHEROID[\"WGS 84\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6755\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4755\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",141],PARAMETER[\"scale_factor\",0.9996],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "0000000],AUTHORITY[\"EPSG\",\"23884\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 12, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23886, "epsg", 23886,
+		      "ID74 / UTM zone 46S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 46S (deprecated)\",GEOGCS[\"ID7");
+    add_srs_wkt (p, 1,
+		 "4\",DATUM[\"Indonesian_Datum_1974\",SPHEROID[\"Indonesia");
+    add_srs_wkt (p, 2,
+		 "n National Spheroid\",6378160,298.247,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7021\"]],AUTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 11,
+		 "00000],AUTHORITY[\"EPSG\",\"23886\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23887, "epsg", 23887, "ID74 / UTM zone 47S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 47S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",10000000],AUTHORIT");
+    add_srs_wkt (p, 11,
+		 "Y[\"EPSG\",\"23887\"],AXIS[\"Easting\",EAST],AXIS[\"Nort");
+    add_srs_wkt (p, 12, "hing\",NORTH]]");
+    p = add_epsg_def (first, last, 23888, "epsg", 23888, "ID74 / UTM zone 48S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 48S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"23888\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 23889, "epsg", 23889, "ID74 / UTM zone 49S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 49S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"23889\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 23890, "epsg", 23890, "ID74 / UTM zone 50S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 50S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"23890\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 23891, "epsg", 23891, "ID74 / UTM zone 51S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 51S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"23891\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 23892, "epsg", 23892, "ID74 / UTM zone 52S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 52S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"23892\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 23893, "epsg", 23893, "ID74 / UTM zone 53S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 53S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"23893\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 23894, "epsg", 23894, "ID74 / UTM zone 54S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554");
+    add_proj4text (p, 1, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ID74 / UTM zone 54S\",GEOGCS[\"ID74\",DATUM[\"I");
+    add_srs_wkt (p, 1,
+		 "ndonesian_Datum_1974\",SPHEROID[\"Indonesian National Sp");
+    add_srs_wkt (p, 2,
+		 "heroid\",6378160,298.247,AUTHORITY[\"EPSG\",\"7021\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6238\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4238\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",141],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",10000000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"23894\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 23946, "epsg", 23946,
+		      "Indian 1954 / UTM zone 46N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +t");
+    add_proj4text (p, 1, "owgs84=217,823,299,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1954 / UTM zone 46N\",GEOGCS[\"Indian 19");
+    add_srs_wkt (p, 1,
+		 "54\",DATUM[\"Indian_1954\",SPHEROID[\"Everest 1830 (1937");
+    add_srs_wkt (p, 2,
+		 " Adjustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7015\"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6239\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4239\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",93],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23946\"],A");
+    add_srs_wkt (p, 12, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23947, "epsg", 23947,
+		      "Indian 1954 / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +t");
+    add_proj4text (p, 1, "owgs84=217,823,299,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1954 / UTM zone 47N\",GEOGCS[\"Indian 19");
+    add_srs_wkt (p, 1,
+		 "54\",DATUM[\"Indian_1954\",SPHEROID[\"Everest 1830 (1937");
+    add_srs_wkt (p, 2,
+		 " Adjustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7015\"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6239\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4239\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",99],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",0.9996],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23947\"],A");
+    add_srs_wkt (p, 12, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 23948, "epsg", 23948,
+		      "Indian 1954 / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +t");
+    add_proj4text (p, 1, "owgs84=217,823,299,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1954 / UTM zone 48N\",GEOGCS[\"Indian 19");
+    add_srs_wkt (p, 1,
+		 "54\",DATUM[\"Indian_1954\",SPHEROID[\"Everest 1830 (1937");
+    add_srs_wkt (p, 2,
+		 " Adjustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7015\"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6239\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4239\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",105],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 10,
+		 "tor\",0.9996],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"23948\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24047, "epsg", 24047,
+		      "Indian 1975 / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1975 / UTM zone 47N\",GEOGCS[\"Indian 19");
+    add_srs_wkt (p, 1,
+		 "75\",DATUM[\"Indian_1975\",SPHEROID[\"Everest 1830 (1937");
+    add_srs_wkt (p, 2,
+		 " Adjustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7015\"]],AUTHORITY[\"EPSG\",\"6240\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4240\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"24047\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24048, "epsg", 24048,
+		      "Indian 1975 / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Indian 1975 / UTM zone 48N\",GEOGCS[\"Indian 19");
+    add_srs_wkt (p, 1,
+		 "75\",DATUM[\"Indian_1975\",SPHEROID[\"Everest 1830 (1937");
+    add_srs_wkt (p, 2,
+		 " Adjustment)\",6377276.345,300.8017,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7015\"]],AUTHORITY[\"EPSG\",\"6240\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4240\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",105],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",500000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"24048\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24100, "epsg", 24100,
+		      "Jamaica 1875 / Jamaica (Old Grid)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167");
+    add_proj4text (p, 1,
+		   "638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356");
+    add_proj4text (p, 2, "514.966204134 +to_meter=0.3047972654 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Jamaica 1875 / Jamaica (Old Grid)\",GEOGCS[\"Ja");
+    add_srs_wkt (p, 1,
+		 "maica 1875\",DATUM[\"Jamaica_1875\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "80\",6378249.144808011,293.4663076556349,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7034\"]],AUTHORITY[\"EPSG\",\"6241\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4241\"]],UNIT[\"Clarke's foot\",0.304797");
+    add_srs_wkt (p, 7,
+		 "2654,AUTHORITY[\"EPSG\",\"9005\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 8,
+		 "Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "18],PARAMETER[\"central_meridian\",-77],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",1],PARAMETER[\"false_easting\",550000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",400000],AUTHORITY[\"EPSG\",\"2410");
+    add_srs_wkt (p, 12,
+		 "0\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24200, "epsg", 24200,
+		      "JAD69 / Jamaica National Grid");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250");
+    add_proj4text (p, 1, "000 +y_0=150000 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"JAD69 / Jamaica National Grid\",GEOGCS[\"JAD69\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Jamaica_1969\",SPHEROID[\"Clarke 1866\",6378206");
+    add_srs_wkt (p, 2,
+		 ".4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6242\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"424");
+    add_srs_wkt (p, 6,
+		 "2\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",18],PARAMETER[\"central_meridian\",-77");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",250000],PARAMETER[\"false_northing\",150000],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"24200\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 12, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 24305, "epsg", 24305,
+		      "Kalianpur 1937 / UTM zone 45N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1937 / UTM zone 45N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1937\",DATUM[\"Kalianpur_1937\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1937 Adjustment)\",6377276.345,300.8017,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6144\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4144\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",87],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"24305\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24306, "epsg", 24306,
+		      "Kalianpur 1937 / UTM zone 46N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +u");
+    add_proj4text (p, 1, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1937 / UTM zone 46N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1937\",DATUM[\"Kalianpur_1937\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1937 Adjustment)\",6377276.345,300.8017,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6144\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4144\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",93],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"24306\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24311, "epsg", 24311,
+		      "Kalianpur 1962 / UTM zone 41N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1962 / UTM zone 41N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1962\",DATUM[\"Kalianpur_1962\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1962 Definition)\",6377301.243,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7044\"]],AUTHORITY[\"EPSG\",\"6145\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4145\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"24311\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24312, "epsg", 24312,
+		      "Kalianpur 1962 / UTM zone 42N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1962 / UTM zone 42N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1962\",DATUM[\"Kalianpur_1962\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1962 Definition)\",6377301.243,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7044\"]],AUTHORITY[\"EPSG\",\"6145\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4145\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"24312\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24313, "epsg", 24313,
+		      "Kalianpur 1962 / UTM zone 43N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1962 / UTM zone 43N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1962\",DATUM[\"Kalianpur_1962\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1962 Definition)\",6377301.243,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7044\"]],AUTHORITY[\"EPSG\",\"6145\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4145\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"24313\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24342, "epsg", 24342,
+		      "Kalianpur 1975 / UTM zone 42N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +");
+    add_proj4text (p, 1, "towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / UTM zone 42N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1975 Definition)\",6377299.151,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",69],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"24342\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 24343, "epsg", 24343,
+		      "Kalianpur 1975 / UTM zone 43N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +");
+    add_proj4text (p, 1, "towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / UTM zone 43N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1975 Definition)\",6377299.151,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",75],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"24343\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 24344, "epsg", 24344,
+		      "Kalianpur 1975 / UTM zone 44N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +");
+    add_proj4text (p, 1, "towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / UTM zone 44N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1975 Definition)\",6377299.151,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",81],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"24344\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_20 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 24345, "epsg", 24345,
+		      "Kalianpur 1975 / UTM zone 45N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +");
+    add_proj4text (p, 1, "towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / UTM zone 45N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1975 Definition)\",6377299.151,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",87],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"24345\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 24346, "epsg", 24346,
+		      "Kalianpur 1975 / UTM zone 46N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +");
+    add_proj4text (p, 1, "towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / UTM zone 46N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1975 Definition)\",6377299.151,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",93],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"24346\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 24347, "epsg", 24347,
+		      "Kalianpur 1975 / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +");
+    add_proj4text (p, 1, "towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / UTM zone 47N\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1975 Definition)\",6377299.151,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",99],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"24347\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 24370, "epsg", 24370,
+		      "Kalianpur 1880 / India zone 0");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846");
+    add_proj4text (p, 1,
+		   "154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377");
+    add_proj4text (p, 2,
+		   "299.36559538 +b=6356098.359005156 +to_meter=0.9143985307");
+    add_proj4text (p, 3, "444408 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1880 / India zone 0\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1880\",DATUM[\"Kalianpur_1880\",SPHEROID[\"Everest (");
+    add_srs_wkt (p, 2,
+		 "1830 Definition)\",6377299.36559538,300.8017255433552,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7042\"]],AUTHORITY[\"EPSG\",\"6243\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4243\"]],UNIT[\"Indian yar");
+    add_srs_wkt (p, 7,
+		 "d\",0.9143985307444408,AUTHORITY[\"EPSG\",\"9084\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",39.5],PARAMETER[\"central_meridian\",6");
+    add_srs_wkt (p, 10,
+		 "8],PARAMETER[\"scale_factor\",0.99846154],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",2355500],PARAMETER[\"false_northing\",2590");
+    add_srs_wkt (p, 12,
+		 "000],AUTHORITY[\"EPSG\",\"24370\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24371, "epsg", 24371,
+		      "Kalianpur 1880 / India zone I");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878");
+    add_proj4text (p, 1,
+		   "641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=637");
+    add_proj4text (p, 2,
+		   "7299.36559538 +b=6356098.359005156 +to_meter=0.914398530");
+    add_proj4text (p, 3, "7444408 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1880 / India zone I\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1880\",DATUM[\"Kalianpur_1880\",SPHEROID[\"Everest (");
+    add_srs_wkt (p, 2,
+		 "1830 Definition)\",6377299.36559538,300.8017255433552,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7042\"]],AUTHORITY[\"EPSG\",\"6243\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4243\"]],UNIT[\"Indian yar");
+    add_srs_wkt (p, 7,
+		 "d\",0.9143985307444408,AUTHORITY[\"EPSG\",\"9084\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",32.5],PARAMETER[\"central_meridian\",6");
+    add_srs_wkt (p, 10,
+		 "8],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",3000000],PARAMETER[\"false_northing\",1000");
+    add_srs_wkt (p, 12,
+		 "000],AUTHORITY[\"EPSG\",\"24371\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24372, "epsg", 24372,
+		      "Kalianpur 1880 / India zone IIa");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299");
+    add_proj4text (p, 2,
+		   ".36559538 +b=6356098.359005156 +to_meter=0.9143985307444");
+    add_proj4text (p, 3, "408 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1880 / India zone IIa\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1880\",DATUM[\"Kalianpur_1880\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " (1830 Definition)\",6377299.36559538,300.8017255433552,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7042\"]],AUTHORITY[\"EPSG\",\"6243\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4243\"]],UNIT[\"Indian yar");
+    add_srs_wkt (p, 7,
+		 "d\",0.9143985307444408,AUTHORITY[\"EPSG\",\"9084\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",26],PARAMETER[\"central_meridian\",74]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",3000000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"24372\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24373, "epsg", 24373,
+		      "Kalianpur 1880 / India zone III");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299");
+    add_proj4text (p, 2,
+		   ".36559538 +b=6356098.359005156 +to_meter=0.9143985307444");
+    add_proj4text (p, 3, "408 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1880 / India zone III\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1880\",DATUM[\"Kalianpur_1880\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " (1830 Definition)\",6377299.36559538,300.8017255433552,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7042\"]],AUTHORITY[\"EPSG\",\"6243\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4243\"]],UNIT[\"Indian yar");
+    add_srs_wkt (p, 7,
+		 "d\",0.9143985307444408,AUTHORITY[\"EPSG\",\"9084\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",19],PARAMETER[\"central_meridian\",80]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",3000000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"24373\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24374, "epsg", 24374,
+		      "Kalianpur 1880 / India zone IV");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299");
+    add_proj4text (p, 2,
+		   ".36559538 +b=6356098.359005156 +to_meter=0.9143985307444");
+    add_proj4text (p, 3, "408 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1880 / India zone IV\",GEOGCS[\"Kalia");
+    add_srs_wkt (p, 1,
+		 "npur 1880\",DATUM[\"Kalianpur_1880\",SPHEROID[\"Everest ");
+    add_srs_wkt (p, 2,
+		 "(1830 Definition)\",6377299.36559538,300.8017255433552,A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"7042\"]],AUTHORITY[\"EPSG\",\"6243\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4243\"]],UNIT[\"Indian yar");
+    add_srs_wkt (p, 7,
+		 "d\",0.9143985307444408,AUTHORITY[\"EPSG\",\"9084\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",12],PARAMETER[\"central_meridian\",80]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",3000000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"24374\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24375, "epsg", 24375,
+		      "Kalianpur 1937 / India zone IIb");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075");
+    add_proj4text (p, 2, ".41314024 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1937 / India zone IIb\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1937\",DATUM[\"Kalianpur_1937\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " 1830 (1937 Adjustment)\",6377276.345,300.8017,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7015\"]],AUTHORITY[\"EPSG\",\"6144\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4144\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",90],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "99878641],PARAMETER[\"false_easting\",2743185.69],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",914395.23],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12,
+		 "4375\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 24376, "epsg", 24376,
+		      "Kalianpur 1962 / India zone I");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878");
+    add_proj4text (p, 1,
+		   "641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=63561");
+    add_proj4text (p, 2, "00.230165384 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1962 / India zone I\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1962\",DATUM[\"Kalianpur_1962\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1962 Definition)\",6377301.243,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7044\"]],AUTHORITY[\"EPSG\",\"6145\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4145\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_1SP\"],PARAMETER[\"latitude_of_origin\",32.5],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",68],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.99878641],PARAMETER[\"false_easting\",2743196.4],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",914398.8],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "24376\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 13, "]");
+    p = add_epsg_def (first, last, 24377, "epsg", 24377,
+		      "Kalianpur 1962 / India zone IIa");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.2");
+    add_proj4text (p, 2, "30165384 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1962 / India zone IIa\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1962\",DATUM[\"Kalianpur_1962\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " 1830 (1962 Definition)\",6377301.243,300.8017255,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7044\"]],AUTHORITY[\"EPSG\",\"6145\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4145\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",74],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.99878641],PARAMETER[\"false_easting\",2743196.4],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",914398.8],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12,
+		 "24377\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 13, "]");
+    p = add_epsg_def (first, last, 24378, "epsg", 24378,
+		      "Kalianpur 1975 / India zone I");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878");
+    add_proj4text (p, 1,
+		   "641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=63560");
+    add_proj4text (p, 2,
+		   "98.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / India zone I\",GEOGCS[\"Kalian");
+    add_srs_wkt (p, 1,
+		 "pur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1975 Definition)\",6377299.151,300.8017255,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"414");
+    add_srs_wkt (p, 7,
+		 "6\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",32.5],PARAMETER[\"central_meridian\",6");
+    add_srs_wkt (p, 10,
+		 "8],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",2743195.5],PARAMETER[\"false_northing\",91");
+    add_srs_wkt (p, 12,
+		 "4398.5],AUTHORITY[\"EPSG\",\"24378\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 13, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24379, "epsg", 24379,
+		      "Kalianpur 1975 / India zone IIa");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.1");
+    add_proj4text (p, 2,
+		   "45120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / India zone IIa\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " 1830 (1975 Definition)\",6377299.151,300.8017255,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "146\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",26],PARAMETER[\"central_meridian\",7");
+    add_srs_wkt (p, 10,
+		 "4],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",2743195.5],PARAMETER[\"false_northing\",91");
+    add_srs_wkt (p, 12,
+		 "4398.5],AUTHORITY[\"EPSG\",\"24379\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 13, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24380, "epsg", 24380,
+		      "Kalianpur 1975 / India zone IIb");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.1");
+    add_proj4text (p, 2,
+		   "45120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / India zone IIb\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " 1830 (1975 Definition)\",6377299.151,300.8017255,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "146\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",26],PARAMETER[\"central_meridian\",9");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",2743195.5],PARAMETER[\"false_northing\",91");
+    add_srs_wkt (p, 12,
+		 "4398.5],AUTHORITY[\"EPSG\",\"24380\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 13, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24381, "epsg", 24381,
+		      "Kalianpur 1975 / India zone III");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.1");
+    add_proj4text (p, 2,
+		   "45120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / India zone III\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " 1830 (1975 Definition)\",6377299.151,300.8017255,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "146\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",19],PARAMETER[\"central_meridian\",8");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",2743195.5],PARAMETER[\"false_northing\",91");
+    add_srs_wkt (p, 12,
+		 "4398.5],AUTHORITY[\"EPSG\",\"24381\"],AXIS[\"Easting\",E");
+    add_srs_wkt (p, 13, "AST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24382, "epsg", 24382,
+		      "Kalianpur 1880 / India zone IIb");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299");
+    add_proj4text (p, 2,
+		   ".36559538 +b=6356098.359005156 +to_meter=0.9143985307444");
+    add_proj4text (p, 3, "408 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1880 / India zone IIb\",GEOGCS[\"Kali");
+    add_srs_wkt (p, 1,
+		 "anpur 1880\",DATUM[\"Kalianpur_1880\",SPHEROID[\"Everest");
+    add_srs_wkt (p, 2,
+		 " (1830 Definition)\",6377299.36559538,300.8017255433552,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7042\"]],AUTHORITY[\"EPSG\",\"6243\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4243\"]],UNIT[\"Indian yar");
+    add_srs_wkt (p, 7,
+		 "d\",0.9143985307444408,AUTHORITY[\"EPSG\",\"9084\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",26],PARAMETER[\"central_meridian\",90]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",3000000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"24382\"],AXIS[\"Easting\",EAST],");
+    add_srs_wkt (p, 13, "AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24383, "epsg", 24383,
+		      "Kalianpur 1975 / India zone IV");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 ");
+    add_proj4text (p, 1,
+		   "+x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.1");
+    add_proj4text (p, 2,
+		   "45120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kalianpur 1975 / India zone IV\",GEOGCS[\"Kalia");
+    add_srs_wkt (p, 1,
+		 "npur 1975\",DATUM[\"Kalianpur_1975\",SPHEROID[\"Everest ");
+    add_srs_wkt (p, 2,
+		 "1830 (1975 Definition)\",6377299.151,300.8017255,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7045\"]],TOWGS84[295,736,257,0,0,0,0],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6146\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"41");
+    add_srs_wkt (p, 7,
+		 "46\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",12],PARAMETER[\"central_meridian\",80");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.99878641],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_easting\",2743195.5],PARAMETER[\"false_northing\",914");
+    add_srs_wkt (p, 12,
+		 "398.5],AUTHORITY[\"EPSG\",\"24383\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24500, "epsg", 24500,
+		      "Kertau 1968 / Singapore Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=1.287646666666667 +lon_0=103.853002222");
+    add_proj4text (p, 1,
+		   "2222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038");
+    add_proj4text (p, 2, "993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kertau 1968 / Singapore Grid\",GEOGCS[\"Kertau ");
+    add_srs_wkt (p, 1,
+		 "1968\",DATUM[\"Kertau_1968\",SPHEROID[\"Everest 1830 Mod");
+    add_srs_wkt (p, 2,
+		 "ified\",6377304.063,300.8017,AUTHORITY[\"EPSG\",\"7018\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY[\"EPSG\",\"6245\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4245\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Cassini_Soldn");
+    add_srs_wkt (p, 8,
+		 "er\"],PARAMETER[\"latitude_of_origin\",1.287646666666667");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",103.8530022222222],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",30000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",30000],AUTHORITY[\"EPSG\",\"24500\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24547, "epsg", 24547,
+		      "Kertau 1968 / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +");
+    add_proj4text (p, 1, "towgs84=-11,851,5,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kertau 1968 / UTM zone 47N\",GEOGCS[\"Kertau 19");
+    add_srs_wkt (p, 1,
+		 "68\",DATUM[\"Kertau_1968\",SPHEROID[\"Everest 1830 Modif");
+    add_srs_wkt (p, 2,
+		 "ied\",6377304.063,300.8017,AUTHORITY[\"EPSG\",\"7018\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[-11,851,5,0,0,0,0],AUTHORITY[\"EPSG\",\"6245\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4245\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",99],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"24547\"],AXIS[\"Eas");
+    add_srs_wkt (p, 12, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24548, "epsg", 24548,
+		      "Kertau 1968 / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +");
+    add_proj4text (p, 1, "towgs84=-11,851,5,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kertau 1968 / UTM zone 48N\",GEOGCS[\"Kertau 19");
+    add_srs_wkt (p, 1,
+		 "68\",DATUM[\"Kertau_1968\",SPHEROID[\"Everest 1830 Modif");
+    add_srs_wkt (p, 2,
+		 "ied\",6377304.063,300.8017,AUTHORITY[\"EPSG\",\"7018\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[-11,851,5,0,0,0,0],AUTHORITY[\"EPSG\",\"6245\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4245\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"24548\"],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24571, "epsg", 24571,
+		      "Kertau / R.S.O. Malaya (ch) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=");
+    add_proj4text (p, 1,
+		   "0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=");
+    add_proj4text (p, 2,
+		   "6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=2");
+    add_proj4text (p, 3, "0.11678249437587 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Kertau / R.S.O. Malaya (ch) (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Kertau 1968\",DATUM[\"Kertau_1968\",SPHEROID[\"Ever");
+    add_srs_wkt (p, 2,
+		 "est 1830 Modified\",6377304.063,300.8017,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7018\"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6245\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4245\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"British chain (Benoit 1895 B)\",20.11678249437587,AUT");
+    add_srs_wkt (p, 8,
+		 "HORITY[\"EPSG\",\"9062\"]],PROJECTION[\"Hotine_Oblique_M");
+    add_srs_wkt (p, 9,
+		 "ercator\"],PARAMETER[\"latitude_of_center\",4],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"longitude_of_center\",102.25],PARAMETER[\"azimuth\",3");
+    add_srs_wkt (p, 11,
+		 "23.0257905],PARAMETER[\"rectified_grid_angle\",323.13010");
+    add_srs_wkt (p, 12,
+		 "23611111],PARAMETER[\"scale_factor\",0.99984],PARAMETER[");
+    add_srs_wkt (p, 13,
+		 "\"false_easting\",40000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 14,
+		 ",AUTHORITY[\"EPSG\",\"24571\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 15, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24600, "epsg", 24600, "KOC Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.99878");
+    add_proj4text (p, 1,
+		   "64078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +tow");
+    add_proj4text (p, 2, "gs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KOC Lambert\",GEOGCS[\"KOC\",DATUM[\"Kuwait_Oil");
+    add_srs_wkt (p, 1,
+		 "_Company\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,29");
+    add_srs_wkt (p, 2,
+		 "3.465,AUTHORITY[\"EPSG\",\"7012\"]],TOWGS84[-294.7,-200.");
+    add_srs_wkt (p, 3,
+		 "1,525.5,0,0,0,0],AUTHORITY[\"EPSG\",\"6246\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4246\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"latitude_of_origin\",32.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",45],PARAMETER[\"scale_factor\",0.9987");
+    add_srs_wkt (p, 10,
+		 "864078],PARAMETER[\"false_easting\",1500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",1166200],AUTHORITY[\"EPSG\",\"24600\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24718, "epsg", 24718,
+		      "La Canoa / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-35");
+    add_proj4text (p, 1, "7.9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"La Canoa / UTM zone 18N\",GEOGCS[\"La Canoa\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"La_Canoa\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 2,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-273.5,110.6");
+    add_srs_wkt (p, 3,
+		 ",-357.9,0,0,0,0],AUTHORITY[\"EPSG\",\"6247\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4247\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"24718\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24719, "epsg", 24719,
+		      "La Canoa / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-35");
+    add_proj4text (p, 1, "7.9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"La Canoa / UTM zone 19N\",GEOGCS[\"La Canoa\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"La_Canoa\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 2,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-273.5,110.6");
+    add_srs_wkt (p, 3,
+		 ",-357.9,0,0,0,0],AUTHORITY[\"EPSG\",\"6247\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4247\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-69],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"24719\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24720, "epsg", 24720,
+		      "La Canoa / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-35");
+    add_proj4text (p, 1, "7.9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"La Canoa / UTM zone 20N\",GEOGCS[\"La Canoa\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"La_Canoa\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 2,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-273.5,110.6");
+    add_srs_wkt (p, 3,
+		 ",-357.9,0,0,0,0],AUTHORITY[\"EPSG\",\"6247\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4247\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-63],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"24720\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24817, "epsg", 24817,
+		      "PSAD56 / UTM zone 17N");
+    add_proj4text (p, 0, "+proj=utm +zone=17 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 17N\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-8");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"24817\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 24818, "epsg", 24818,
+		      "PSAD56 / UTM zone 18N");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 18N\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-7");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"24818\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 24819, "epsg", 24819,
+		      "PSAD56 / UTM zone 19N");
+    add_proj4text (p, 0, "+proj=utm +zone=19 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 19N\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-6");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"24819\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 24820, "epsg", 24820,
+		      "PSAD56 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 20N\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-6");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"24820\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 24821, "epsg", 24821,
+		      "PSAD56 / UTM zone 21N");
+    add_proj4text (p, 0, "+proj=utm +zone=21 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 21N\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-5");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"24821\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 24877, "epsg", 24877,
+		      "PSAD56 / UTM zone 17S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 17S\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-8");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",10000000]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"24877\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24878, "epsg", 24878,
+		      "PSAD56 / UTM zone 18S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 18S\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-7");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",10000000]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"24878\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24879, "epsg", 24879,
+		      "PSAD56 / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 19S\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-6");
+    add_srs_wkt (p, 9,
+		 "9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",10000000]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"24879\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24880, "epsg", 24880,
+		      "PSAD56 / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 20S\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-6");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",10000000]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"24880\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24881, "epsg", 24881,
+		      "PSAD56 / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 21S\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-5");
+    add_srs_wkt (p, 9,
+		 "7],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",10000000]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"24881\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24882, "epsg", 24882,
+		      "PSAD56 / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / UTM zone 22S\",GEOGCS[\"PSAD56\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Provisional_South_American_Datum_1956\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",-5");
+    add_srs_wkt (p, 9,
+		 "1],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",500000],PARAMETER[\"false_northing\",10000000]");
+    add_srs_wkt (p, 11,
+		 ",AUTHORITY[\"EPSG\",\"24882\"],AXIS[\"Easting\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 24891, "epsg", 24891,
+		      "PSAD56 / Peru west zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=22");
+    add_proj4text (p, 1, "2000 +y_0=1426834.743 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / Peru west zone\",GEOGCS[\"PSAD56\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Provisional_South_American_Datum_1956\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",-6],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-80.5],PARAMETER[\"scale_factor\",0.99983008],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",222000],PARAMETER[\"false_northing\",1");
+    add_srs_wkt (p, 11,
+		 "426834.743],AUTHORITY[\"EPSG\",\"24891\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 12, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 24892, "epsg", 24892,
+		      "PSAD56 / Peru central zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=72");
+    add_proj4text (p, 1, "0000 +y_0=1039979.159 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / Peru central zone\",GEOGCS[\"PSAD56\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"Provisional_South_American_Datum_1956\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7022\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",-9.5],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-76],PARAMETER[\"scale_factor\",0.99932994],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",720000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",1039979.159],AUTHORITY[\"EPSG\",\"24892\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 24893, "epsg", 24893,
+		      "PSAD56 / Peru east zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=");
+    add_proj4text (p, 1,
+		   "1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"PSAD56 / Peru east zone\",GEOGCS[\"PSAD56\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Provisional_South_American_Datum_1956\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],AUTHORITY[\"EPSG\",\"6248\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4248\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",-9.5],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",-70.5],PARAMETER[\"scale_factor\",0.99952992],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",1324000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",1040084.558],AUTHORITY[\"EPSG\",\"24893\"],AXIS[\"X\",E");
+    add_srs_wkt (p, 12, "AST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 25000, "epsg", 25000,
+		      "Leigon / Ghana Metre Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.9997");
+    add_proj4text (p, 1,
+		   "5 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,3");
+    add_proj4text (p, 2, "64,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Leigon / Ghana Metre Grid\",GEOGCS[\"Leigon\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Leigon\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.1");
+    add_srs_wkt (p, 2,
+		 "45,293.465,AUTHORITY[\"EPSG\",\"7012\"]],TOWGS84[-130,29");
+    add_srs_wkt (p, 3,
+		 ",364,0,0,0,0],AUTHORITY[\"EPSG\",\"6250\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4250\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",4.666666666666667],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-1],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "99975],PARAMETER[\"false_easting\",274319.51],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"25000\"],AXIS");
+    add_srs_wkt (p, 12, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25231, "epsg", 25231, "Lome / UTM zone 31N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_");
+    add_proj4text (p, 1, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Lome / UTM zone 31N\",GEOGCS[\"Lome\",DATUM[\"L");
+    add_srs_wkt (p, 1,
+		 "ome\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.46602");
+    add_srs_wkt (p, 2,
+		 "12936265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6252\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4252\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",3],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 9,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"25231\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25391, "epsg", 25391,
+		      "Luzon 1911 / Philippines zone I");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Luzon 1911 / Philippines zone I\",GEOGCS[\"Luzo");
+    add_srs_wkt (p, 1,
+		 "n 1911\",DATUM[\"Luzon_1911\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6253\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4253\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",117],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.99995],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"25391\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 25392, "epsg", 25392,
+		      "Luzon 1911 / Philippines zone II");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Luzon 1911 / Philippines zone II\",GEOGCS[\"Luz");
+    add_srs_wkt (p, 1,
+		 "on 1911\",DATUM[\"Luzon_1911\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6253\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4253\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",119],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.99995],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"25392\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 25393, "epsg", 25393,
+		      "Luzon 1911 / Philippines zone III");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Luzon 1911 / Philippines zone III\",GEOGCS[\"Lu");
+    add_srs_wkt (p, 1,
+		 "zon 1911\",DATUM[\"Luzon_1911\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6253\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4253\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 8,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",121]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"scale_factor\",0.99995],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"25393\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 25394, "epsg", 25394,
+		      "Luzon 1911 / Philippines zone IV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Luzon 1911 / Philippines zone IV\",GEOGCS[\"Luz");
+    add_srs_wkt (p, 1,
+		 "on 1911\",DATUM[\"Luzon_1911\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6253\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4253\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",123],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.99995],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"25394\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 25395, "epsg", 25395,
+		      "Luzon 1911 / Philippines zone V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +");
+    add_proj4text (p, 1, "y_0=0 +ellps=clrk66 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Luzon 1911 / Philippines zone V\",GEOGCS[\"Luzo");
+    add_srs_wkt (p, 1,
+		 "n 1911\",DATUM[\"Luzon_1911\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6253\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4253\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",125],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.99995],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"25395\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 25700, "epsg", 25700,
+		      "Makassar (Jakarta) / NEIEZ (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 ");
+    add_proj4text (p, 1,
+		   "+ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=");
+    add_proj4text (p, 2, "jakarta +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Makassar (Jakarta) / NEIEZ (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Makassar (Jakarta)\",DATUM[\"Makassar_Jakarta\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7004\"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6804\"]],PRIMEM[\"Jakarta\",106.807");
+    add_srs_wkt (p, 5,
+		 "7194444444,AUTHORITY[\"EPSG\",\"8908\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 6,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"4804\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 8,
+		 "SG\",\"9001\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",110],PARAMETER[\"scale_factor\",0.997");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",3900000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",900000],AUTHORITY[\"EPSG\",\"25700\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 25828, "epsg", 25828,
+		      "ETRS89 / UTM zone 28N");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 28N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",-15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",500000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"25828\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25829, "epsg", 25829,
+		      "ETRS89 / UTM zone 29N");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 29N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25829\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25830, "epsg", 25830,
+		      "ETRS89 / UTM zone 30N");
+    add_proj4text (p, 0, "+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 30N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25830\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25831, "epsg", 25831,
+		      "ETRS89 / UTM zone 31N");
+    add_proj4text (p, 0, "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 31N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"25831\"],AXIS[\"Easting\",EAST],AXIS[\"N");
+    add_srs_wkt (p, 12, "orthing\",NORTH]]");
+    p = add_epsg_def (first, last, 25832, "epsg", 25832,
+		      "ETRS89 / UTM zone 32N");
+    add_proj4text (p, 0, "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 32N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"25832\"],AXIS[\"Easting\",EAST],AXIS[\"N");
+    add_srs_wkt (p, 12, "orthing\",NORTH]]");
+    p = add_epsg_def (first, last, 25833, "epsg", 25833,
+		      "ETRS89 / UTM zone 33N");
+    add_proj4text (p, 0, "+proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 33N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",15],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25833\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25834, "epsg", 25834,
+		      "ETRS89 / UTM zone 34N");
+    add_proj4text (p, 0, "+proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 34N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",21],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25834\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25835, "epsg", 25835,
+		      "ETRS89 / UTM zone 35N");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 35N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",27],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25835\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25836, "epsg", 25836,
+		      "ETRS89 / UTM zone 36N");
+    add_proj4text (p, 0, "+proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 36N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",33],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25836\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25837, "epsg", 25837,
+		      "ETRS89 / UTM zone 37N");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 37N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25837\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25838, "epsg", 25838,
+		      "ETRS89 / UTM zone 38N");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / UTM zone 38N\",GEOGCS[\"ETRS89\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"European_Terrestrial_Reference_System_1989\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",45],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25838\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 25884, "epsg", 25884,
+		      "ETRS89 / TM Baltic93");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"ETRS89 / TM Baltic93\",GEOGCS[\"ETRS89\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"European_Terrestrial_Reference_System_1989\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4258\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 9,
+		 ",24],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"25884\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 25932, "epsg", 25932,
+		      "Malongo 1987 / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Malongo 1987 / UTM zone 32S\",GEOGCS[\"Malongo ");
+    add_srs_wkt (p, 1,
+		 "1987\",DATUM[\"Malongo_1987\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6259\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4259\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"s");
+    add_srs_wkt (p, 9,
+		 "cale_factor\",0.9996],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"25932\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 26191, "epsg", 26191,
+		      "Merchich / Nord Maroc");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999");
+    add_proj4text (p, 1,
+		   "625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +");
+    add_proj4text (p, 2, "towgs84=31,146,47,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Merchich / Nord Maroc\",GEOGCS[\"Merchich\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Merchich\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2");
+    add_srs_wkt (p, 2,
+		 ",293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[31,146,47,0,0,0,0],AUTHORITY[\"EPSG\",\"6261\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4261\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 8,
+		 "ic_1SP\"],PARAMETER[\"latitude_of_origin\",33.3],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-5.4],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999625769],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",300000],AUTHORITY[\"EPSG\",\"2619");
+    add_srs_wkt (p, 12, "1\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26192, "epsg", 26192,
+		      "Merchich / Sud Maroc");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.999");
+    add_proj4text (p, 1,
+		   "6155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=63");
+    add_proj4text (p, 2, "56515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Merchich / Sud Maroc\",GEOGCS[\"Merchich\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"Merchich\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,");
+    add_srs_wkt (p, 2,
+		 "293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[");
+    add_srs_wkt (p, 3,
+		 "31,146,47,0,0,0,0],AUTHORITY[\"EPSG\",\"6261\"]],PRIMEM[");
+    add_srs_wkt (p, 4,
+		 "\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"deg");
+    add_srs_wkt (p, 5,
+		 "ree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"4261\"]],UNIT[\"metre\",1,AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Coni");
+    add_srs_wkt (p, 8,
+		 "c_1SP\"],PARAMETER[\"latitude_of_origin\",29.7],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-5.4],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.999615596],PARAMETER[\"false_easting\",500000],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_northing\",300000],AUTHORITY[\"EPSG\",\"26192");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26193, "epsg", 26193,
+		      "Merchich / Sahara (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999");
+    add_proj4text (p, 1,
+		   "6 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towg");
+    add_proj4text (p, 2, "s84=31,146,47,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Merchich / Sahara (deprecated)\",GEOGCS[\"Merch");
+    add_srs_wkt (p, 1,
+		 "ich\",DATUM[\"Merchich\",SPHEROID[\"Clarke 1880 (IGN)\",");
+    add_srs_wkt (p, 2,
+		 "6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[31,146,47,0,0,0,0],AUTHORITY[\"EPSG\",\"6261\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4261\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Confo");
+    add_srs_wkt (p, 8,
+		 "rmal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",26.1]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"central_meridian\",-5.4],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",1200000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",400000],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "26193\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26194, "epsg", 26194,
+		      "Merchich / Sahara Nord");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999");
+    add_proj4text (p, 1,
+		   "616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 ");
+    add_proj4text (p, 2, "+towgs84=31,146,47,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Merchich / Sahara Nord\",GEOGCS[\"Merchich\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Merchich\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.");
+    add_srs_wkt (p, 2,
+		 "2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS8");
+    add_srs_wkt (p, 3,
+		 "4[31,146,47,0,0,0,0],AUTHORITY[\"EPSG\",\"6261\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4261\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Co");
+    add_srs_wkt (p, 8,
+		 "nic_1SP\"],PARAMETER[\"latitude_of_origin\",26.1],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"central_meridian\",-5.4],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999616304],PARAMETER[\"false_easting\",1200000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",400000],AUTHORITY[\"EPSG\",\"261");
+    add_srs_wkt (p, 12, "94\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26195, "epsg", 26195,
+		      "Merchich / Sahara Sud");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999");
+    add_proj4text (p, 1,
+		   "616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 ");
+    add_proj4text (p, 2, "+towgs84=31,146,47,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Merchich / Sahara Sud\",GEOGCS[\"Merchich\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Merchich\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2");
+    add_srs_wkt (p, 2,
+		 ",293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[31,146,47,0,0,0,0],AUTHORITY[\"EPSG\",\"6261\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4261\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 8,
+		 "ic_1SP\"],PARAMETER[\"latitude_of_origin\",22.5],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-5.4],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.999616437],PARAMETER[\"false_easting\",1500000],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_northing\",400000],AUTHORITY[\"EPSG\",\"261");
+    add_srs_wkt (p, 12, "95\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26237, "epsg", 26237,
+		      "Massawa / UTM zone 37N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0");
+    add_proj4text (p, 1, ",0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Massawa / UTM zone 37N\",GEOGCS[\"Massawa\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Massawa\",SPHEROID[\"Bessel 1841\",6377397.155,299.");
+    add_srs_wkt (p, 2,
+		 "1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOWGS84[639,405,60");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6262\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 4,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 5,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"4262\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",39],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",500000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 11,
+		 "THORITY[\"EPSG\",\"26237\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26331, "epsg", 26331,
+		      "Minna / UTM zone 31N");
+    add_proj4text (p, 0, "+proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Minna / UTM zone 31N\",GEOGCS[\"Minna\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Minna\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.4");
+    add_srs_wkt (p, 2,
+		 "65,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 3,
+		 "63\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4263\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26331\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26332, "epsg", 26332,
+		      "Minna / UTM zone 32N");
+    add_proj4text (p, 0, "+proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Minna / UTM zone 32N\",GEOGCS[\"Minna\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Minna\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,293.4");
+    add_srs_wkt (p, 2,
+		 "65,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"62");
+    add_srs_wkt (p, 3,
+		 "63\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4263\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 6,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 7,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26332\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26391, "epsg", 26391,
+		      "Minna / Nigeria West Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.2");
+    add_proj4text (p, 1, "6 +y_0=0 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Minna / Nigeria West Belt\",GEOGCS[\"Minna\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Minna\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145");
+    add_srs_wkt (p, 2,
+		 ",293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6263\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4263\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",4.5],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 9,
+		 "tor\",0.99975],PARAMETER[\"false_easting\",230738.26],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26391");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26392, "epsg", 26392,
+		      "Minna / Nigeria Mid Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.9");
+    add_proj4text (p, 1, "8 +y_0=0 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Minna / Nigeria Mid Belt\",GEOGCS[\"Minna\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Minna\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145,");
+    add_srs_wkt (p, 2,
+		 "293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6263\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4263\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",8.5],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 9,
+		 "tor\",0.99975],PARAMETER[\"false_easting\",670553.98],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26392");
+    add_srs_wkt (p, 11, "\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26393, "epsg", 26393,
+		      "Minna / Nigeria East Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369");
+    add_proj4text (p, 1, ".7 +y_0=0 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Minna / Nigeria East Belt\",GEOGCS[\"Minna\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Minna\",SPHEROID[\"Clarke 1880 (RGS)\",6378249.145");
+    add_srs_wkt (p, 2,
+		 ",293.465,AUTHORITY[\"EPSG\",\"7012\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6263\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4263\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",4],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",12.5],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 9,
+		 "ctor\",0.99975],PARAMETER[\"false_easting\",1110369.7],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2639");
+    add_srs_wkt (p, 11,
+		 "3\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26432, "epsg", 26432,
+		      "Mhast / UTM zone 32S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-");
+    add_proj4text (p, 1, "4.11,-96.38,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Mhast / UTM zone 32S (deprecated)\",GEOGCS[\"Mh");
+    add_srs_wkt (p, 1,
+		 "ast\",DATUM[\"Mhast\",SPHEROID[\"International 1924\",63");
+    add_srs_wkt (p, 2,
+		 "78388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-252.95,");
+    add_srs_wkt (p, 3,
+		 "-4.11,-96.38,0,0,0,0],AUTHORITY[\"EPSG\",\"6264\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4264\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 11,
+		 "ing\",10000000],AUTHORITY[\"EPSG\",\"26432\"],AXIS[\"Eas");
+    add_srs_wkt (p, 12, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26591, "epsg", 26591,
+		      "Monte Mario (Rome) / Italy zone 1 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 ");
+    add_proj4text (p, 1,
+		   "+x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Monte Mario (Rome) / Italy zone 1 (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"Monte Mario (Rome)\",DATUM[\"Monte_Mario_Rome\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6806\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Rome\",12.45233333333333,AUTHORITY[\"EPSG\",\"8906\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4806\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-3.45233333333333],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.9996],PARAMETER[\"false_easting\",1500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"265");
+    add_srs_wkt (p, 12, "91\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26592, "epsg", 26592,
+		      "Monte Mario (Rome) / Italy zone 2 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +");
+    add_proj4text (p, 1,
+		   "x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Monte Mario (Rome) / Italy zone 2 (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"Monte Mario (Rome)\",DATUM[\"Monte_Mario_Rome\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6806\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Rome\",12.45233333333333,AUTHORITY[\"EPSG\",\"8906\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4806\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 8,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",2.54766666666666],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.9996],PARAMETER[\"false_easting\",2520000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2659");
+    add_srs_wkt (p, 12, "2\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26632, "epsg", 26632,
+		      "M'poraloko / UTM zone 32N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_");
+    add_proj4text (p, 1, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"M'poraloko / UTM zone 32N\",GEOGCS[\"M'poraloko");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"M_poraloko\",SPHEROID[\"Clarke 1880 (IGN)\",6");
+    add_srs_wkt (p, 2,
+		 "378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6266\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4266\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",9],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26632\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26692, "epsg", 26692,
+		      "M'poraloko / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"M'poraloko / UTM zone 32S\",GEOGCS[\"M'poraloko");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"M_poraloko\",SPHEROID[\"Clarke 1880 (IGN)\",6");
+    add_srs_wkt (p, 2,
+		 "378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6266\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4266\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",9],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",10000000],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"26692\"],AXIS[\"Easting\",EAST],AXIS[\"N");
+    add_srs_wkt (p, 12, "orthing\",NORTH]]");
+    p = add_epsg_def (first, last, 26701, "epsg", 26701, "NAD27 / UTM zone 1N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 1N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-177],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26701\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26702, "epsg", 26702, "NAD27 / UTM zone 2N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 2N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-171],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26702\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26703, "epsg", 26703, "NAD27 / UTM zone 3N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 3N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-165],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26703\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26704, "epsg", 26704, "NAD27 / UTM zone 4N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 4N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-159],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26704\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26705, "epsg", 26705, "NAD27 / UTM zone 5N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 5N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-153],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26705\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26706, "epsg", 26706, "NAD27 / UTM zone 6N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 6N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-147],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26706\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26707, "epsg", 26707, "NAD27 / UTM zone 7N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 7N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-141],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26707\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26708, "epsg", 26708, "NAD27 / UTM zone 8N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 8N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-135],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26708\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26709, "epsg", 26709, "NAD27 / UTM zone 9N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 9N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-129],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26709\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26710, "epsg", 26710,
+		      "NAD27 / UTM zone 10N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 10N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-123],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26710\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26711, "epsg", 26711,
+		      "NAD27 / UTM zone 11N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 11N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-117],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26711\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26712, "epsg", 26712,
+		      "NAD27 / UTM zone 12N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 12N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-111],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26712\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26713, "epsg", 26713,
+		      "NAD27 / UTM zone 13N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 13N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-105],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9996],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26713\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26714, "epsg", 26714,
+		      "NAD27 / UTM zone 14N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 14N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26714\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26715, "epsg", 26715,
+		      "NAD27 / UTM zone 15N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 15N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-93],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26715\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26716, "epsg", 26716,
+		      "NAD27 / UTM zone 16N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 16N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-87],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26716\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26717, "epsg", 26717,
+		      "NAD27 / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 17N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26717\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26718, "epsg", 26718,
+		      "NAD27 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 18N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26718\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26719, "epsg", 26719,
+		      "NAD27 / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 19N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-69],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26719\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26720, "epsg", 26720,
+		      "NAD27 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 20N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-63],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26720\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26721, "epsg", 26721,
+		      "NAD27 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 21N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-57],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26721\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26722, "epsg", 26722,
+		      "NAD27 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +");
+    add_proj4text (p, 1, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / UTM zone 22N\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-51],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9996],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"26722\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26729, "epsg", 26729,
+		      "NAD27 / Alabama East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=");
+    add_proj4text (p, 2, "NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alabama East\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",30.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-85.83333333333333],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99996],PARAMETER[\"false_easting\",500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2672");
+    add_srs_wkt (p, 12, "9\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26730, "epsg", 26730,
+		      "NAD27 / Alabama West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=1");
+    add_proj4text (p, 1,
+		   "52400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +unit");
+    add_proj4text (p, 2, "s=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alabama West\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-87.5],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "9933333],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"26730\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26731, "epsg", 26731,
+		      "NAD27 / Alaska zone 1");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=32");
+    add_proj4text (p, 1,
+		   "3.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5");
+    add_proj4text (p, 2,
+		   "000000.001016002 +ellps=clrk66 +datum=NAD27 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 1\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Hotine_Oblique");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_center\",57],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"longitude_of_center\",-133.6666666666667],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"azimuth\",323.1301023611111],PARAMETER[\"rectified_g");
+    add_srs_wkt (p, 11,
+		 "rid_angle\",323.1301023611111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 12,
+		 ",0.9999],PARAMETER[\"false_easting\",16404166.67],PARAME");
+    add_srs_wkt (p, 13,
+		 "TER[\"false_northing\",-16404166.67],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 14, "\"26731\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26732, "epsg", 26732,
+		      "NAD27 / Alaska zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.");
+    add_proj4text (p, 1,
+		   "3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 2\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-142],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26732\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26733, "epsg", 26733,
+		      "NAD27 / Alaska zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.");
+    add_proj4text (p, 1,
+		   "3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 3\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-146],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26733\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26734, "epsg", 26734,
+		      "NAD27 / Alaska zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.");
+    add_proj4text (p, 1,
+		   "3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 4\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-150],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26734\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26735, "epsg", 26735,
+		      "NAD27 / Alaska zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.");
+    add_proj4text (p, 1,
+		   "3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 5\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-154],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26735\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26736, "epsg", 26736,
+		      "NAD27 / Alaska zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.");
+    add_proj4text (p, 1,
+		   "3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 6\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-158],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26736\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26737, "epsg", 26737,
+		      "NAD27 / Alaska zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.");
+    add_proj4text (p, 1,
+		   "4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 7\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-162],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",700000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26737\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26738, "epsg", 26738,
+		      "NAD27 / Alaska zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.");
+    add_proj4text (p, 1,
+		   "3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 8\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-166],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26738\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26739, "epsg", 26739,
+		      "NAD27 / Alaska zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.");
+    add_proj4text (p, 1,
+		   "3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 2, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 9\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",54],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-170],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9999],PARAMETER[\"false_easting\",600000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26739\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26740, "epsg", 26740,
+		      "NAD27 / Alaska zone 10");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Alaska zone 10\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",53.83");
+    add_srs_wkt (p, 9,
+		 "333333333334],PARAMETER[\"standard_parallel_2\",51.83333");
+    add_srs_wkt (p, 10,
+		 "333333334],PARAMETER[\"latitude_of_origin\",51],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-176],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",3000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"26740\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26741, "epsg", 26741,
+		      "NAD27 / California zone I");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.3");
+    add_proj4text (p, 1,
+		   "3333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 ");
+    add_proj4text (p, 2, "+ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone I\",GEOGCS[\"NAD27\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866");
+    add_srs_wkt (p, 2,
+		 "\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4267\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",4");
+    add_srs_wkt (p, 9,
+		 "1.66666666666666],PARAMETER[\"standard_parallel_2\",40],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",39.33333333333334],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-122],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"26741\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26742, "epsg", 26742,
+		      "NAD27 / California zone II");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.219");
+    add_proj4text (p, 2,
+		   "2024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone II\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "39.83333333333334],PARAMETER[\"standard_parallel_2\",38.");
+    add_srs_wkt (p, 10,
+		 "33333333333334],PARAMETER[\"latitude_of_origin\",37.6666");
+    add_srs_wkt (p, 11,
+		 "6666666666],PARAMETER[\"central_meridian\",-122],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",2000000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",0],AUTHORITY[\"EPSG\",\"26742\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26743, "epsg", 26743,
+		      "NAD27 / California zone III");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone III\",GEOGCS[\"NAD27\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "66\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "08\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "38.43333333333333],PARAMETER[\"standard_parallel_2\",37.");
+    add_srs_wkt (p, 10,
+		 "06666666666667],PARAMETER[\"latitude_of_origin\",36.5],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"central_meridian\",-120.5],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "easting\",2000000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"26743\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 26744, "epsg", 26744,
+		      "NAD27 / California zone IV");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.3333333333333");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk6");
+    add_proj4text (p, 2, "6 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone IV\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "37.25],PARAMETER[\"standard_parallel_2\",36],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",35.33333333333334],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-119],PARAMETER[\"false_easting\",2000000");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "6744\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26745, "epsg", 26745,
+		      "NAD27 / California zone V");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone V\",GEOGCS[\"NAD27\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866");
+    add_srs_wkt (p, 2,
+		 "\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4267\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 9,
+		 "5.46666666666667],PARAMETER[\"standard_parallel_2\",34.0");
+    add_srs_wkt (p, 10,
+		 "3333333333333],PARAMETER[\"latitude_of_origin\",33.5],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"central_meridian\",-118],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 12,
+		 "ting\",2000000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 13,
+		 "Y[\"EPSG\",\"26745\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 14, "]");
+    p = add_epsg_def (first, last, 26746, "epsg", 26746,
+		      "NAD27 / California zone VI");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.");
+    add_proj4text (p, 2,
+		   "2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone VI\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "33.88333333333333],PARAMETER[\"standard_parallel_2\",32.");
+    add_srs_wkt (p, 10,
+		 "78333333333333],PARAMETER[\"latitude_of_origin\",32.1666");
+    add_srs_wkt (p, 11,
+		 "6666666666],PARAMETER[\"central_meridian\",-116.25],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_easting\",2000000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 13,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"26746\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 14, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26747, "epsg", 26747,
+		      "NAD27 / California zone VII (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk6");
+    add_proj4text (p, 3, "6 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone VII (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROI");
+    add_srs_wkt (p, 2,
+		 "D[\"Clarke 1866\",6378206.4,294.9786982139006,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM");
+    add_srs_wkt (p, 4,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 5,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"4267\"]],UNIT[\"US survey foot\",0");
+    add_srs_wkt (p, 7,
+		 ".3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTI");
+    add_srs_wkt (p, 8,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 9,
+		 "_parallel_1\",34.41666666666666],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 10,
+		 "rallel_2\",33.86666666666667],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 11,
+		 "igin\",34.13333333333333],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 12,
+		 ",-118.3333333333333],PARAMETER[\"false_easting\",4186692");
+    add_srs_wkt (p, 13,
+		 ".58],PARAMETER[\"false_northing\",416926.74],AUTHORITY[\"");
+    add_srs_wkt (p, 14,
+		 "EPSG\",\"26747\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26748, "epsg", 26748,
+		      "NAD27 / Arizona East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD");
+    add_proj4text (p, 2, "27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Arizona East\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-110.1666666666667],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26748\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26749, "epsg", 26749,
+		      "NAD27 / Arizona Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD");
+    add_proj4text (p, 2, "27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Arizona Central\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-111.9166666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.9999],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12, "6749\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26750, "epsg", 26750,
+		      "NAD27 / Arizona West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0");
+    add_proj4text (p, 1,
+		   "=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +un");
+    add_proj4text (p, 2, "its=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Arizona West\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",31],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-113.75],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "999933333],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26750\"],AXI");
+    add_srs_wkt (p, 12, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26751, "epsg", 26751,
+		      "NAD27 / Arkansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192");
+    add_proj4text (p, 2,
+		   "024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Arkansas North\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.23");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",34.93333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",34.333333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-92],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",2000000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"26751\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 26752, "epsg", 26752,
+		      "NAD27 / Arkansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0");
+    add_proj4text (p, 2, " +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Arkansas South\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.76");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",33.3],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",32.66666666666666],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-92],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"26752\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26753, "epsg", 26753,
+		      "NAD27 / Colorado North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2");
+    add_proj4text (p, 2,
+		   "192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Colorado North\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.71");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",40.78333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",39.333333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-105.5],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",2000000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "0],AUTHORITY[\"EPSG\",\"26753\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26754, "epsg", 26754,
+		      "NAD27 / Colorado Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.8333333333");
+    add_proj4text (p, 1,
+		   "3334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Colorado Central\",GEOGCS[\"NAD27\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.");
+    add_srs_wkt (p, 9,
+		 "75],PARAMETER[\"standard_parallel_2\",38.45],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",37.83333333333334],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-105.5],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 12,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "26754\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26755, "epsg", 26755,
+		      "NAD27 / Colorado South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2");
+    add_proj4text (p, 2,
+		   "192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Colorado South\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.43");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",37.23333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",36.666666666");
+    add_srs_wkt (p, 11,
+		 "66666],PARAMETER[\"central_meridian\",-105.5],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",2000000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "0],AUTHORITY[\"EPSG\",\"26755\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26756, "epsg", 26756, "NAD27 / Connecticut");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40");
+    add_proj4text (p, 1,
+		   ".83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Connecticut\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.86666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",41.2],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",40.83333333333334],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-72.75],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",600000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"26756\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26757, "epsg", 26757, "NAD27 / Delaware");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=N");
+    add_proj4text (p, 2, "AD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Delaware\",GEOGCS[\"NAD27\",DATUM[\"Nor");
+    add_srs_wkt (p, 1,
+		 "th_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637820");
+    add_srs_wkt (p, 2,
+		 "6.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "67\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"cen");
+    add_srs_wkt (p, 9,
+		 "tral_meridian\",-75.41666666666667],PARAMETER[\"scale_fa");
+    add_srs_wkt (p, 10,
+		 "ctor\",0.999995],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26757\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26758, "epsg", 26758,
+		      "NAD27 / Florida East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datu");
+    add_proj4text (p, 2, "m=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Florida East\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",24.33333333333333");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.999941177],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12, "6758\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_21 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 26759, "epsg", 26759,
+		      "NAD27 / Florida West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datu");
+    add_proj4text (p, 2, "m=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Florida West\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",24.33333333333333");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-82],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.999941177],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12, "6759\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26760, "epsg", 26760,
+		      "NAD27 / Florida North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=2");
+    add_proj4text (p, 1,
+		   "9 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk");
+    add_proj4text (p, 2, "66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Florida North\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.75");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"standard_parallel_2\",29.58333333333333],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"latitude_of_origin\",29],PARAMETER[\"central_");
+    add_srs_wkt (p, 11,
+		 "meridian\",-84.5],PARAMETER[\"false_easting\",2000000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2676");
+    add_srs_wkt (p, 13, "0\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26766, "epsg", 26766,
+		      "NAD27 / Georgia East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD");
+    add_proj4text (p, 2, "27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Georgia East\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-82.16666666666667],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26766\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26767, "epsg", 26767,
+		      "NAD27 / Georgia West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD");
+    add_proj4text (p, 2, "27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Georgia West\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",30],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-84.16666666666667],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26767\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26768, "epsg", 26768, "NAD27 / Idaho East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Idaho East\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",41.66666666666666");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-112.1666666666667],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999947368],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"26768\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 26769, "epsg", 26769,
+		      "NAD27 / Idaho Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.99");
+    add_proj4text (p, 1,
+		   "99473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk");
+    add_proj4text (p, 2, "66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Idaho Central\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",41.66666666666");
+    add_srs_wkt (p, 9,
+		 "666],PARAMETER[\"central_meridian\",-114],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",0.999947368],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"26769\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26770, "epsg", 26770, "NAD27 / Idaho West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +");
+    add_proj4text (p, 2, "datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Idaho West\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",41.66666666666666");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-115.75],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",0.999933333],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"26770\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26771, "epsg", 26771,
+		      "NAD27 / Illinois East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Illinois East\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",36.66666666666");
+    add_srs_wkt (p, 9,
+		 "666],PARAMETER[\"central_meridian\",-88.33333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",0.999975],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"26771\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 26772, "epsg", 26772,
+		      "NAD27 / Illinois West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Illinois West\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",36.66666666666");
+    add_srs_wkt (p, 9,
+		 "666],PARAMETER[\"central_meridian\",-90.16666666666667],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"26772\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 13, "RTH]]");
+    p = add_epsg_def (first, last, 26773, "epsg", 26773,
+		      "NAD27 / Indiana East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +da");
+    add_proj4text (p, 2, "tum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Indiana East\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-85.66666666666667],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.999966667],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "26773\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26774, "epsg", 26774,
+		      "NAD27 / Indiana West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +da");
+    add_proj4text (p, 2, "tum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Indiana West\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",37.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-87.08333333333333],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.999966667],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "26774\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26775, "epsg", 26775, "NAD27 / Iowa North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Iowa North\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.26666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",42.06666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",41.5],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-93.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"26775\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26776, "epsg", 26776, "NAD27 / Iowa South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0");
+    add_proj4text (p, 2, " +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Iowa South\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.78333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",40.61666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",40],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-93.5],PARAMETER[\"false_easting\",20");
+    add_srs_wkt (p, 12,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"26776\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26777, "epsg", 26777,
+		      "NAD27 / Kansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192");
+    add_proj4text (p, 2,
+		   "024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Kansas North\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.78333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",38.71666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",38.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-98],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",2000000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 13,
+		 "HORITY[\"EPSG\",\"26777\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 14, "ORTH]]");
+    p = add_epsg_def (first, last, 26778, "epsg", 26778,
+		      "NAD27 / Kansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Kansas South\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.56666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",37.26666666");
+    add_srs_wkt (p, 10,
+		 "666667],PARAMETER[\"latitude_of_origin\",36.666666666666");
+    add_srs_wkt (p, 11,
+		 "66],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",2000000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"26778\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 26779, "epsg", 26779,
+		      "NAD27 / Kentucky North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Kentucky North\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.96");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",38.96666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"latitude_of_origin\",37.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-84.25],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"26779\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26780, "epsg", 26780,
+		      "NAD27 / Kentucky South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2");
+    add_proj4text (p, 2,
+		   "192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Kentucky South\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.73");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",37.93333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",36.333333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-85.75],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_easting\",2000000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 13,
+		 "0],AUTHORITY[\"EPSG\",\"26780\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 14, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26781, "epsg", 26781,
+		      "NAD27 / Louisiana North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Louisiana North\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",31.");
+    add_srs_wkt (p, 9,
+		 "16666666666667],PARAMETER[\"standard_parallel_2\",32.666");
+    add_srs_wkt (p, 10,
+		 "66666666666],PARAMETER[\"latitude_of_origin\",30.6666666");
+    add_srs_wkt (p, 11,
+		 "6666667],PARAMETER[\"central_meridian\",-92.5],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_easting\",2000000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"26781\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 14, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26782, "epsg", 26782,
+		      "NAD27 / Louisiana South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.666666666666");
+    add_proj4text (p, 1,
+		   "67 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Louisiana South\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",29.");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",30.7],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",28.66666666666667],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-91.33333333333333],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"26782\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 14, "");
+    p = add_epsg_def (first, last, 26783, "epsg", 26783, "NAD27 / Maine East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=N");
+    add_proj4text (p, 2, "AD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Maine East\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",43.83333333333334");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.9999],PARAMETER[\"false_easting\",500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2678");
+    add_srs_wkt (p, 12, "3\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26784, "epsg", 26784, "NAD27 / Maine West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Maine West\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",42.83333333333334");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-70.16666666666667],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999966667],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"26784\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 26785, "epsg", 26785, "NAD27 / Maryland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk");
+    add_proj4text (p, 2, "66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Maryland\",GEOGCS[\"NAD27\",DATUM[\"Nor");
+    add_srs_wkt (p, 1,
+		 "th_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637820");
+    add_srs_wkt (p, 2,
+		 "6.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "67\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 8,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",38.3],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"standard_parallel_2\",39.45],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",37.83333333333334],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-77],PARAMETER[\"false_easting\",800000.00000000");
+    add_srs_wkt (p, 12,
+		 "02],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "26785\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26786, "epsg", 26786,
+		      "NAD27 / Massachusetts Mainland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0");
+    add_proj4text (p, 2, " +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Massachusetts Mainland\",GEOGCS[\"NAD27");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 2,
+		 " 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 7,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 8,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 9,
+		 "\",41.71666666666667],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 10,
+		 "42.68333333333333],PARAMETER[\"latitude_of_origin\",41],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"central_meridian\",-71.5],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "easting\",600000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 13,
+		 "ITY[\"EPSG\",\"26786\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 14, "H]]");
+    p = add_epsg_def (first, last, 26787, "epsg", 26787,
+		      "NAD27 / Massachusetts Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0");
+    add_proj4text (p, 2, " +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Massachusetts Island\",GEOGCS[\"NAD27\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 2,
+		 "866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 7,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 8,
+		 "Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 9,
+		 ",41.28333333333333],PARAMETER[\"standard_parallel_2\",41");
+    add_srs_wkt (p, 10,
+		 ".48333333333333],PARAMETER[\"latitude_of_origin\",41],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"central_meridian\",-70.5],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 12,
+		 "sting\",200000],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 13,
+		 "Y[\"EPSG\",\"26787\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 14, "]");
+    p = add_epsg_def (first, last, 26791, "epsg", 26791,
+		      "NAD27 / Minnesota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Minnesota North\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.");
+    add_srs_wkt (p, 9,
+		 "03333333333333],PARAMETER[\"standard_parallel_2\",48.633");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"latitude_of_origin\",46.5],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-93.1],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"26791\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 14, "");
+    p = add_epsg_def (first, last, 26792, "epsg", 26792,
+		      "NAD27 / Minnesota Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clr");
+    add_proj4text (p, 2, "k66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Minnesota Central\",GEOGCS[\"NAD27\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866");
+    add_srs_wkt (p, 2,
+		 "\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4267\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",4");
+    add_srs_wkt (p, 9,
+		 "5.61666666666667],PARAMETER[\"standard_parallel_2\",47.0");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"cent");
+    add_srs_wkt (p, 11,
+		 "ral_meridian\",-94.25],PARAMETER[\"false_easting\",20000");
+    add_srs_wkt (p, 12,
+		 "00],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "26792\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26793, "epsg", 26793,
+		      "NAD27 / Minnesota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Minnesota South\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43.");
+    add_srs_wkt (p, 9,
+		 "78333333333333],PARAMETER[\"standard_parallel_2\",45.216");
+    add_srs_wkt (p, 10,
+		 "66666666667],PARAMETER[\"latitude_of_origin\",43],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-94],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"26793\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26794, "epsg", 26794,
+		      "NAD27 / Mississippi East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=c");
+    add_proj4text (p, 2, "lrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Mississippi East\",GEOGCS[\"NAD27\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",29.666666666");
+    add_srs_wkt (p, 9,
+		 "66667],PARAMETER[\"central_meridian\",-88.83333333333333");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.99996],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"26794\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 26795, "epsg", 26795,
+		      "NAD27 / Mississippi West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +da");
+    add_proj4text (p, 2, "tum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Mississippi West\",GEOGCS[\"NAD27\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",30.5],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"central_meridian\",-90.33333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.999941177],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"26795\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26796, "epsg", 26796,
+		      "NAD27 / Missouri East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +da");
+    add_proj4text (p, 2, "tum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Missouri East\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",35.83333333333");
+    add_srs_wkt (p, 9,
+		 "334],PARAMETER[\"central_meridian\",-90.5],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999933333],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"26796\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26797, "epsg", 26797,
+		      "NAD27 / Missouri Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +da");
+    add_proj4text (p, 2, "tum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Missouri Central\",GEOGCS[\"NAD27\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",35.833333333");
+    add_srs_wkt (p, 9,
+		 "33334],PARAMETER[\"central_meridian\",-92.5],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.999933333],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"26797\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26798, "epsg", 26798,
+		      "NAD27 / Missouri West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +da");
+    add_proj4text (p, 2, "tum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Missouri West\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",36.16666666666");
+    add_srs_wkt (p, 9,
+		 "666],PARAMETER[\"central_meridian\",-94.5],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999941177],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"26798\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26799, "epsg", 26799,
+		      "NAD27 / California zone VII");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk");
+    add_proj4text (p, 3, "66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / California zone VII\",GEOGCS[\"NAD27\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "66\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "08\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "34.41666666666666],PARAMETER[\"standard_parallel_2\",33.");
+    add_srs_wkt (p, 10,
+		 "86666666666667],PARAMETER[\"latitude_of_origin\",34.1333");
+    add_srs_wkt (p, 11,
+		 "3333333333],PARAMETER[\"central_meridian\",-118.33333333");
+    add_srs_wkt (p, 12,
+		 "33333],PARAMETER[\"false_easting\",4186692.58],PARAMETER");
+    add_srs_wkt (p, 13,
+		 "[\"false_northing\",4160926.74],AUTHORITY[\"EPSG\",\"267");
+    add_srs_wkt (p, 14, "99\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26801, "epsg", 26801,
+		      "NAD Michigan / Michigan East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548");
+    add_proj4text (p, 2, "896 +b=6356826.621488444 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD Michigan / Michigan East\",GEOGCS[\"NAD27 M");
+    add_srs_wkt (p, 1,
+		 "ichigan\",DATUM[\"NAD_Michigan\",SPHEROID[\"Clarke 1866 ");
+    add_srs_wkt (p, 2,
+		 "Michigan\",6378450.047548896,294.9786971646739,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7009\"]],AUTHORITY[\"EPSG\",\"6268\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4268\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",41.5],PARAMETER[\"central_meridian\",-83.666666666");
+    add_srs_wkt (p, 10,
+		 "66667],PARAMETER[\"scale_factor\",0.999942857],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"26801\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26802, "epsg", 26802,
+		      "NAD Michigan / Michigan Old Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_");
+    add_proj4text (p, 1,
+		   "0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=63568");
+    add_proj4text (p, 2, "26.621488444 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD Michigan / Michigan Old Central\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27 Michigan\",DATUM[\"NAD_Michigan\",SPHEROID[\"Clark");
+    add_srs_wkt (p, 2,
+		 "e 1866 Michigan\",6378450.047548896,294.9786971646739,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7009\"]],AUTHORITY[\"EPSG\",\"6268\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4268\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",41.5],PARAMETER[\"central_meridian\",-85.75");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.999909091],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",500000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 12,
+		 "THORITY[\"EPSG\",\"26802\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 26803, "epsg", 26803,
+		      "NAD Michigan / Michigan West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_");
+    add_proj4text (p, 1,
+		   "0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=63568");
+    add_proj4text (p, 2, "26.621488444 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD Michigan / Michigan West\",GEOGCS[\"NAD27 M");
+    add_srs_wkt (p, 1,
+		 "ichigan\",DATUM[\"NAD_Michigan\",SPHEROID[\"Clarke 1866 ");
+    add_srs_wkt (p, 2,
+		 "Michigan\",6378450.047548896,294.9786971646739,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7009\"]],AUTHORITY[\"EPSG\",\"6268\"]],PRIME");
+    add_srs_wkt (p, 4,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 5,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 6,
+		 "],AUTHORITY[\"EPSG\",\"4268\"]],UNIT[\"US survey foot\",");
+    add_srs_wkt (p, 7,
+		 "0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",41.5],PARAMETER[\"central_meridian\",-88.75],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.999909091],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"26803\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 26811, "epsg", 26811,
+		      "NAD Michigan / Michigan North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192");
+    add_proj4text (p, 2,
+		   "024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 ");
+    add_proj4text (p, 3, "+units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD Michigan / Michigan North\",GEOGCS[\"NAD27 ");
+    add_srs_wkt (p, 1,
+		 "Michigan\",DATUM[\"NAD_Michigan\",SPHEROID[\"Clarke 1866");
+    add_srs_wkt (p, 2,
+		 " Michigan\",6378450.047548896,294.9786971646739,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7009\"]],AUTHORITY[\"EPSG\",\"6268\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4268\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",45.48333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",47.08333333333334],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",44.78333333333333],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",-87],PARAMETER[\"false_easting\",2000000],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"26811\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26812, "epsg", 26812,
+		      "NAD Michigan / Michigan Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43");
+    add_proj4text (p, 1,
+		   ".31666666666667 +lon_0=-84.33333333333333 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +a=6378450.047548896 +b=6356826.62148844");
+    add_proj4text (p, 3, "4 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD Michigan / Michigan Central\",GEOGCS[\"NAD2");
+    add_srs_wkt (p, 1,
+		 "7 Michigan\",DATUM[\"NAD_Michigan\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "66 Michigan\",6378450.047548896,294.9786971646739,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7009\"]],AUTHORITY[\"EPSG\",\"6268\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4268\"]],UNIT[\"US survey foot");
+    add_srs_wkt (p, 7,
+		 "\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_1\",44.18333333333333],PARAMETER[\"standar");
+    add_srs_wkt (p, 10,
+		 "d_parallel_2\",45.7],PARAMETER[\"latitude_of_origin\",43");
+    add_srs_wkt (p, 11,
+		 ".31666666666667],PARAMETER[\"central_meridian\",-84.3333");
+    add_srs_wkt (p, 12,
+		 "3333333333],PARAMETER[\"false_easting\",2000000],PARAMET");
+    add_srs_wkt (p, 13,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26812\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26813, "epsg", 26813,
+		      "NAD Michigan / Michigan South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41");
+    add_proj4text (p, 1,
+		   ".5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0");
+    add_proj4text (p, 2,
+		   "=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD Michigan / Michigan South\",GEOGCS[\"NAD27 ");
+    add_srs_wkt (p, 1,
+		 "Michigan\",DATUM[\"NAD_Michigan\",SPHEROID[\"Clarke 1866");
+    add_srs_wkt (p, 2,
+		 " Michigan\",6378450.047548896,294.9786971646739,AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"7009\"]],AUTHORITY[\"EPSG\",\"6268\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4268\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",42.1],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 10,
+		 "43.66666666666666],PARAMETER[\"latitude_of_origin\",41.5");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"central_meridian\",-84.33333333333333],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_easting\",2000000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 13,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"26813\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 14, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26814, "epsg", 26814,
+		      "NAD83 / Maine East (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine East (ftUS) (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-68.5],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "99],PARAMETER[\"false_easting\",300000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"26814\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26815, "epsg", 26815,
+		      "NAD83 / Maine West (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine West (ftUS) (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",42.83333333333334],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",-70.16666666666667],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.999966667],PARAMETER[\"false_easting\",900000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12, "6815\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26819, "epsg", 26819,
+		      "NAD83 / Minnesota North (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.00");
+    add_proj4text (p, 2,
+		   "00101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +");
+    add_proj4text (p, 3, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota North (ftUS) (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",48.63333333333333]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",47.03333333333333],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-93.1],PARAMETER[\"false_easting\",800000.00");
+    add_srs_wkt (p, 12,
+		 "00101601],PARAMETER[\"false_northing\",99999.99998984],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"26819\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 26820, "epsg", 26820,
+		      "NAD83 / Minnesota Central (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.999989");
+    add_proj4text (p, 2, "84 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota Central (ftUS) (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",47.05],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_2\",45.61666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",45],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 11,
+		 "-94.25],PARAMETER[\"false_easting\",800000.0000101601],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",99999.99998984],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"26820\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26821, "epsg", 26821,
+		      "NAD83 / Minnesota South (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=999");
+    add_proj4text (p, 2,
+		   "99.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota South (ftUS) (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHE");
+    add_srs_wkt (p, 2,
+		 "ROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"standard_parallel_1\",45.21666666666667]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",43.78333333333333],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",43],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-94],PARAMETER[\"false_easting\",800000.000010");
+    add_srs_wkt (p, 12,
+		 "1601],PARAMETER[\"false_northing\",99999.99998984],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"26821\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 26822, "epsg", 26822,
+		      "NAD83 / Nebraska (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nebraska (ftUS) (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"standard_parallel_1\",43],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 9,
+		 "arallel_2\",40],PARAMETER[\"latitude_of_origin\",39.8333");
+    add_srs_wkt (p, 10,
+		 "3333333334],PARAMETER[\"central_meridian\",-100],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",500000.0000101601],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"26822\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26823, "epsg", 26823,
+		      "NAD83 / West Virginia North (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / West Virginia North (ftUS) (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",40.25],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_2\",39],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 10,
+		 "gin\",38.5],PARAMETER[\"central_meridian\",-79.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",1968500],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"26823\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26824, "epsg", 26824,
+		      "NAD83 / West Virginia South (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / West Virginia South (ftUS) (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"standard_parallel_1\",38.8833333333333");
+    add_srs_wkt (p, 9,
+		 "3],PARAMETER[\"standard_parallel_2\",37.48333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-81],PARAMETER[\"false_easting\",1968500],PA");
+    add_srs_wkt (p, 12,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26824");
+    add_srs_wkt (p, 13, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26825, "epsg", 26825,
+		      "NAD83(HARN) / Maine East (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine East (ftUS) (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regio");
+    add_srs_wkt (p, 2,
+		 "nal_Network\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"615");
+    add_srs_wkt (p, 4,
+		 "2\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",43.6666666");
+    add_srs_wkt (p, 9,
+		 "6666666],PARAMETER[\"central_meridian\",-68.5],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",30");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"26825\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26826, "epsg", 26826,
+		      "NAD83(HARN) / Maine West (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine West (ftUS) (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regio");
+    add_srs_wkt (p, 2,
+		 "nal_Network\",SPHEROID[\"GRS 1980\",6378137,298.25722210");
+    add_srs_wkt (p, 3,
+		 "1,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"615");
+    add_srs_wkt (p, 4,
+		 "2\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 5,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",42.8333333");
+    add_srs_wkt (p, 9,
+		 "3333334],PARAMETER[\"central_meridian\",-70.166666666666");
+    add_srs_wkt (p, 10,
+		 "67],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",900000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"26826\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 26830, "epsg", 26830,
+		      "NAD83(HARN) / Minnesota North (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.00");
+    add_proj4text (p, 2,
+		   "00101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_d");
+    add_proj4text (p, 3, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota North (ftUS) (deprecate");
+    add_srs_wkt (p, 1,
+		 "d)\",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_");
+    add_srs_wkt (p, 2,
+		 "Regional_Network\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6152\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 8,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_1\",48.63333333333333],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 10,
+		 ",47.03333333333333],PARAMETER[\"latitude_of_origin\",46.");
+    add_srs_wkt (p, 11,
+		 "5],PARAMETER[\"central_meridian\",-93.1],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_easting\",800000.0000101601],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 13,
+		 "ng\",99999.99998984],AUTHORITY[\"EPSG\",\"26830\"],AXIS[");
+    add_srs_wkt (p, 14, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26831, "epsg", 26831,
+		      "NAD83(HARN) / Minnesota Central (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.999989");
+    add_proj4text (p, 2, "84 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota Central (ftUS) (depreca");
+    add_srs_wkt (p, 1,
+		 "ted)\",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accurac");
+    add_srs_wkt (p, 2,
+		 "y_Regional_Network\",SPHEROID[\"GRS 1980\",6378137,298.2");
+    add_srs_wkt (p, 3,
+		 "57222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"6152\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 8,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_1\",47.05],PARAMETER[\"standard_parallel_2\",45.6166666");
+    add_srs_wkt (p, 10,
+		 "6666667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"central_meridian\",-94.25],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",800000.0000101601],PARAMETER[\"false_northing\",99999.9");
+    add_srs_wkt (p, 13,
+		 "9998984],AUTHORITY[\"EPSG\",\"26831\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 14, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26832, "epsg", 26832,
+		      "NAD83(HARN) / Minnesota South (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=999");
+    add_proj4text (p, 2, "99.99998984 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota South (ftUS) (deprecate");
+    add_srs_wkt (p, 1,
+		 "d)\",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_");
+    add_srs_wkt (p, 2,
+		 "Regional_Network\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6152\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 8,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_1\",45.21666666666667],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 10,
+		 ",43.78333333333333],PARAMETER[\"latitude_of_origin\",43]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"central_meridian\",-94],PARAMETER[\"false_e");
+    add_srs_wkt (p, 12,
+		 "asting\",800000.0000101601],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",99999.99998984],AUTHORITY[\"EPSG\",\"26832\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26833, "epsg", 26833,
+		      "NAD83(HARN) / Nebraska (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nebraska (ftUS) (deprecated)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regiona");
+    add_srs_wkt (p, 2,
+		 "l_Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 5,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Confo");
+    add_srs_wkt (p, 8,
+		 "rmal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",39.83333333333334],PARAMETER[\"central_me");
+    add_srs_wkt (p, 11,
+		 "ridian\",-100],PARAMETER[\"false_easting\",500000.000010");
+    add_srs_wkt (p, 12,
+		 "1601],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"26833\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26834, "epsg", 26834,
+		      "NAD83(HARN) / West Virginia North (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / West Virginia North (ftUS) (depre");
+    add_srs_wkt (p, 1,
+		 "cated)\",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accur");
+    add_srs_wkt (p, 2,
+		 "acy_Regional_Network\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6152\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",38.5],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-79.5],PARAMETER[\"false_easting\",1968500],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"268");
+    add_srs_wkt (p, 13, "34\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26835, "epsg", 26835,
+		      "NAD83(HARN) / West Virginia South (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / West Virginia South (ftUS) (depre");
+    add_srs_wkt (p, 1,
+		 "cated)\",GEOGCS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accur");
+    add_srs_wkt (p, 2,
+		 "acy_Regional_Network\",SPHEROID[\"GRS 1980\",6378137,298");
+    add_srs_wkt (p, 3,
+		 ".257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"6152\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_1\",38.88333333333333],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 10,
+		 "l_2\",37.48333333333333],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",37],PARAMETER[\"central_meridian\",-81],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_easting\",1968500],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 13,
+		 "THORITY[\"EPSG\",\"26835\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 14, "NORTH]]");
+    p = add_epsg_def (first, last, 26836, "epsg", 26836,
+		      "NAD83(NSRS2007) / Maine East (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0");
+    add_proj4text (p, 2, ",0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine East (ftUS) (deprecated");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Sp");
+    add_srs_wkt (p, 2,
+		 "atial_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 3,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 5,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 6,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 8,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"latitude_of_origin\",43.66666666666666],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"central_meridian\",-68.5],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",0.9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"26836\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26837, "epsg", 26837,
+		      "NAD83(NSRS2007) / Maine West (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine West (ftUS) (deprecated");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Sp");
+    add_srs_wkt (p, 2,
+		 "atial_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 3,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 5,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 6,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 8,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"latitude_of_origin\",42.83333333333334],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"central_meridian\",-70.16666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 11,
+		 "cale_factor\",0.999966667],PARAMETER[\"false_easting\",9");
+    add_srs_wkt (p, 12,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"26837\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26841, "epsg", 26841,
+		      "NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.00");
+    add_proj4text (p, 2,
+		   "00101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0");
+    add_proj4text (p, 3, ",0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota North (ftUS) (depre");
+    add_srs_wkt (p, 1,
+		 "cated)\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_Nation");
+    add_srs_wkt (p, 2,
+		 "al_Spatial_Reference_System_2007\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 3,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 4,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM");
+    add_srs_wkt (p, 5,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 6,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 9,
+		 "ic_2SP\"],PARAMETER[\"standard_parallel_1\",48.633333333");
+    add_srs_wkt (p, 10,
+		 "33333],PARAMETER[\"standard_parallel_2\",47.033333333333");
+    add_srs_wkt (p, 11,
+		 "33],PARAMETER[\"latitude_of_origin\",46.5],PARAMETER[\"c");
+    add_srs_wkt (p, 12,
+		 "entral_meridian\",-93.1],PARAMETER[\"false_easting\",800");
+    add_srs_wkt (p, 13,
+		 "000.0000101601],PARAMETER[\"false_northing\",99999.99998");
+    add_srs_wkt (p, 14,
+		 "984],AUTHORITY[\"EPSG\",\"26841\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 15, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26842, "epsg", 26842,
+		      "NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.999989");
+    add_proj4text (p, 2,
+		   "84 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota Central (ftUS) (dep");
+    add_srs_wkt (p, 1,
+		 "recated)\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_Nati");
+    add_srs_wkt (p, 2,
+		 "onal_Spatial_Reference_System_2007\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 3,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 4,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIM");
+    add_srs_wkt (p, 5,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 6,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 7,
+		 "]],AUTHORITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 8,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 9,
+		 "onic_2SP\"],PARAMETER[\"standard_parallel_1\",47.05],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"standard_parallel_2\",45.61666666666667],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"latitude_of_origin\",45],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 12,
+		 "ian\",-94.25],PARAMETER[\"false_easting\",800000.0000101");
+    add_srs_wkt (p, 13,
+		 "601],PARAMETER[\"false_northing\",99999.99998984],AUTHOR");
+    add_srs_wkt (p, 14,
+		 "ITY[\"EPSG\",\"26842\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 15, "H]]");
+    p = add_epsg_def (first, last, 26843, "epsg", 26843,
+		      "NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=999");
+    add_proj4text (p, 2,
+		   "99.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota South (ftUS) (depre");
+    add_srs_wkt (p, 1,
+		 "cated)\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_Nation");
+    add_srs_wkt (p, 2,
+		 "al_Spatial_Reference_System_2007\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 3,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOW");
+    add_srs_wkt (p, 4,
+		 "GS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM");
+    add_srs_wkt (p, 5,
+		 "[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"de");
+    add_srs_wkt (p, 6,
+		 "gree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 9,
+		 "ic_2SP\"],PARAMETER[\"standard_parallel_1\",45.216666666");
+    add_srs_wkt (p, 10,
+		 "66667],PARAMETER[\"standard_parallel_2\",43.783333333333");
+    add_srs_wkt (p, 11,
+		 "33],PARAMETER[\"latitude_of_origin\",43],PARAMETER[\"cen");
+    add_srs_wkt (p, 12,
+		 "tral_meridian\",-94],PARAMETER[\"false_easting\",800000.");
+    add_srs_wkt (p, 13,
+		 "0000101601],PARAMETER[\"false_northing\",99999.99998984]");
+    add_srs_wkt (p, 14,
+		 ",AUTHORITY[\"EPSG\",\"26843\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 15, "\",NORTH]]");
+    p = add_epsg_def (first, last, 26844, "epsg", 26844,
+		      "NAD83(NSRS2007) / Nebraska (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nebraska (ftUS) (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spati");
+    add_srs_wkt (p, 2,
+		 "al_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 3,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 5,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 6,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"standard_parallel_1\",43],PARAMETER[\"stan");
+    add_srs_wkt (p, 10,
+		 "dard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",3");
+    add_srs_wkt (p, 11,
+		 "9.83333333333334],PARAMETER[\"central_meridian\",-100],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_easting\",500000.0000101601],PARAMETER[");
+    add_srs_wkt (p, 13,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"26844\"],AXIS");
+    add_srs_wkt (p, 14, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26845, "epsg", 26845,
+		      "NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,");
+    add_proj4text (p, 2, "0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / West Virginia North (ftUS) (d");
+    add_srs_wkt (p, 1,
+		 "eprecated)\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_Na");
+    add_srs_wkt (p, 2,
+		 "tional_Spatial_Reference_System_2007\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 3,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 4,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PR");
+    add_srs_wkt (p, 5,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 7,
+		 "\"]],AUTHORITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 8,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 9,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.25],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"standard_parallel_2\",39],PARAMETER[\"latitud");
+    add_srs_wkt (p, 11,
+		 "e_of_origin\",38.5],PARAMETER[\"central_meridian\",-79.5");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",1968500],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"26845\"],AXIS[\"X\",");
+    add_srs_wkt (p, 14, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26846, "epsg", 26846,
+		      "NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS8");
+    add_proj4text (p, 2, "0 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / West Virginia South (ftUS) (d");
+    add_srs_wkt (p, 1,
+		 "eprecated)\",GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_Na");
+    add_srs_wkt (p, 2,
+		 "tional_Spatial_Reference_System_2007\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 3,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 4,
+		 ",TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PR");
+    add_srs_wkt (p, 5,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 7,
+		 "\"]],AUTHORITY[\"EPSG\",\"4759\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 8,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 9,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.88333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"standard_parallel_2\",37.48333333");
+    add_srs_wkt (p, 11,
+		 "333333],PARAMETER[\"latitude_of_origin\",37],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "central_meridian\",-81],PARAMETER[\"false_easting\",1968");
+    add_srs_wkt (p, 13,
+		 "500],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 14, "\"26846\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26847, "epsg", 26847,
+		      "NAD83 / Maine East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine East (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",43.66666666666666],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9999],PARAMETER[\"false_easting\",984250.0000");
+    add_srs_wkt (p, 11,
+		 "000002],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"26847\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26848, "epsg", 26848,
+		      "NAD83 / Maine West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine West (ftUS)\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",42.83333333333334],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"central_meridian\",-70.16666666666667],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.999966667],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",2952750],PARAMETER[\"false_northing\",0],AUTHORIT");
+    add_srs_wkt (p, 12,
+		 "Y[\"EPSG\",\"26848\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 13, "]");
+    p = add_epsg_def (first, last, 26849, "epsg", 26849,
+		      "NAD83 / Minnesota North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.00");
+    add_proj4text (p, 2,
+		   "00101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD8");
+    add_proj4text (p, 3, "3 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota North (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.63");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",47.03333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",46.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-93.1],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",2624666.6667],PARAMETER[\"false_northing\",328083.33");
+    add_srs_wkt (p, 13,
+		 "33],AUTHORITY[\"EPSG\",\"26849\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 14, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26850, "epsg", 26850,
+		      "NAD83 / Minnesota Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.999989");
+    add_proj4text (p, 2,
+		   "83997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota Central (ftUS)\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.");
+    add_srs_wkt (p, 9,
+		 "05],PARAMETER[\"standard_parallel_2\",45.61666666666667]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"centra");
+    add_srs_wkt (p, 11,
+		 "l_meridian\",-94.25],PARAMETER[\"false_easting\",2624666");
+    add_srs_wkt (p, 12,
+		 ".6667],PARAMETER[\"false_northing\",328083.3333],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"26850\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 26851, "epsg", 26851,
+		      "NAD83 / Minnesota South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=999");
+    add_proj4text (p, 2,
+		   "99.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota South (ftUS)\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.21");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",43.78333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",43],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-94],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "2624666.6667],PARAMETER[\"false_northing\",328083.3333],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"26851\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 26852, "epsg", 26852,
+		      "NAD83 / Nebraska (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +dat");
+    add_proj4text (p, 2, "um=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nebraska (ftUS)\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 8,
+		 "ic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"standard_parallel_2\",40],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 10,
+		 "igin\",39.83333333333334],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-100],PARAMETER[\"false_easting\",1640416.6667],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26852\"],A");
+    add_srs_wkt (p, 13, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26853, "epsg", 26853,
+		      "NAD83 / West Virginia North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us");
+    add_proj4text (p, 2, "-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / West Virginia North (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4269\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",4");
+    add_srs_wkt (p, 9,
+		 "0.25],PARAMETER[\"standard_parallel_2\",39],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",38.5],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-79.5],PARAMETER[\"false_easting\",1968500],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"26853\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26854, "epsg", 26854,
+		      "NAD83 / West Virginia South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / West Virginia South (ftUS)\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "AD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GR");
+    add_srs_wkt (p, 2,
+		 "S 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4269\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",3");
+    add_srs_wkt (p, 9,
+		 "8.88333333333333],PARAMETER[\"standard_parallel_2\",37.4");
+    add_srs_wkt (p, 10,
+		 "8333333333333],PARAMETER[\"latitude_of_origin\",37],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"central_meridian\",-81],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",1968500],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"26854\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26855, "epsg", 26855,
+		      "NAD83(HARN) / Maine East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us");
+    add_proj4text (p, 2, "-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine East (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",43.66666666666666],PARAMETER[\"central_meridian\",-68.5");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",984250.0000000002],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"26855\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26856, "epsg", 26856,
+		      "NAD83(HARN) / Maine West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +u");
+    add_proj4text (p, 2, "nits=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Maine West (ftUS)\",GEOGCS[\"NAD8");
+    add_srs_wkt (p, 1,
+		 "3(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 9,
+		 ",42.83333333333334],PARAMETER[\"central_meridian\",-70.1");
+    add_srs_wkt (p, 10,
+		 "6666666666667],PARAMETER[\"scale_factor\",0.999966667],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",2952750],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"26856\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26857, "epsg", 26857,
+		      "NAD83(HARN) / Minnesota North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.00");
+    add_proj4text (p, 2,
+		   "00101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-f");
+    add_proj4text (p, 3, "t +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota North (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",48.63333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",47.03333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",46.5],PARAMETER[\"central_meridian\",-93.1],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_easting\",2624666.6667],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",328083.3333],AUTHORITY[\"EPSG\",\"26857\"],A");
+    add_srs_wkt (p, 14, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26858, "epsg", 26858,
+		      "NAD83(HARN) / Minnesota Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.999989");
+    add_proj4text (p, 2, "83997 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota Central (ftUS)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Ne");
+    add_srs_wkt (p, 2,
+		 "twork\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],");
+    add_srs_wkt (p, 4,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 5,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 6,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey fo");
+    add_srs_wkt (p, 7,
+		 "ot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 9,
+		 "andard_parallel_1\",47.05],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 10,
+		 "_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 11,
+		 ",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",2624666.6667],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",328083.3333],AUTHORITY[\"EPSG\",\"26858\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26859, "epsg", 26859,
+		      "NAD83(HARN) / Minnesota South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=999");
+    add_proj4text (p, 2, "99.99998983997 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Minnesota South (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Netwo");
+    add_srs_wkt (p, 2,
+		 "rk\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRI");
+    add_srs_wkt (p, 4,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\"");
+    add_srs_wkt (p, 7,
+		 ",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJEC");
+    add_srs_wkt (p, 8,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_1\",45.21666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 10,
+		 "parallel_2\",43.78333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 11,
+		 "origin\",43],PARAMETER[\"central_meridian\",-94],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",2624666.6667],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 13,
+		 "thing\",328083.3333],AUTHORITY[\"EPSG\",\"26859\"],AXIS[");
+    add_srs_wkt (p, 14, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26860, "epsg", 26860,
+		      "NAD83(HARN) / Nebraska (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +uni");
+    add_proj4text (p, 2, "ts=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / Nebraska (ftUS)\",GEOGCS[\"NAD83(");
+    add_srs_wkt (p, 1,
+		 "HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_Network\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey foot\",0.30");
+    add_srs_wkt (p, 7,
+		 "48006096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[");
+    add_srs_wkt (p, 8,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"latitude_of_origin\",39.83333333333334],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"central_meridian\",-100],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",1640416.6667],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"26860\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 14, "");
+    p = add_epsg_def (first, last, 26861, "epsg", 26861,
+		      "NAD83(HARN) / West Virginia North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / West Virginia North (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_");
+    add_srs_wkt (p, 2,
+		 "Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",40.25],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 10,
+		 "el_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-79.5],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",1968500],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"26861\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26862, "epsg", 26862,
+		      "NAD83(HARN) / West Virginia South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(HARN) / West Virginia South (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(HARN)\",DATUM[\"NAD83_High_Accuracy_Regional_");
+    add_srs_wkt (p, 2,
+		 "Network\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6152\"]");
+    add_srs_wkt (p, 4,
+		 "],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],U");
+    add_srs_wkt (p, 5,
+		 "NIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4152\"]],UNIT[\"US survey ");
+    add_srs_wkt (p, 7,
+		 "foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_1\",38.88333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 10,
+		 "ndard_parallel_2\",37.48333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 11,
+		 "de_of_origin\",37],PARAMETER[\"central_meridian\",-81],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_easting\",1968500],PARAMETER[\"false_no");
+    add_srs_wkt (p, 13,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"26862\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 14, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26863, "epsg", 26863,
+		      "NAD83(NSRS2007) / Maine East (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=");
+    add_proj4text (p, 2, "0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine East (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 9,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",43.66666666666");
+    add_srs_wkt (p, 10,
+		 "666],PARAMETER[\"central_meridian\",-68.5],PARAMETER[\"s");
+    add_srs_wkt (p, 11,
+		 "cale_factor\",0.9999],PARAMETER[\"false_easting\",984250");
+    add_srs_wkt (p, 12,
+		 ".0000000002],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"26863\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26864, "epsg", 26864,
+		      "NAD83(NSRS2007) / Maine West (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +t");
+    add_proj4text (p, 2, "owgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Maine West (ftUS)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Referen");
+    add_srs_wkt (p, 2,
+		 "ce_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.25722");
+    add_srs_wkt (p, 3,
+		 "2101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 8,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 9,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",42.83333333333");
+    add_srs_wkt (p, 10,
+		 "334],PARAMETER[\"central_meridian\",-70.16666666666667],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"scale_factor\",0.999966667],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",2952750],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 13,
+		 "HORITY[\"EPSG\",\"26864\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 14, "ORTH]]");
+    p = add_epsg_def (first, last, 26865, "epsg", 26865,
+		      "NAD83(NSRS2007) / Minnesota North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.00");
+    add_proj4text (p, 2,
+		   "00101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,");
+    add_proj4text (p, 3, "0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota North (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "48.63333333333333],PARAMETER[\"standard_parallel_2\",47.");
+    add_srs_wkt (p, 11,
+		 "03333333333333],PARAMETER[\"latitude_of_origin\",46.5],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"central_meridian\",-93.1],PARAMETER[\"false_e");
+    add_srs_wkt (p, 13,
+		 "asting\",2624666.6667],PARAMETER[\"false_northing\",3280");
+    add_srs_wkt (p, 14,
+		 "83.3333],AUTHORITY[\"EPSG\",\"26865\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 15, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26866, "epsg", 26866,
+		      "NAD83(NSRS2007) / Minnesota Central (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.999989");
+    add_proj4text (p, 2,
+		   "83997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota Central (ftUS)\",GE");
+    add_srs_wkt (p, 1,
+		 "OGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_");
+    add_srs_wkt (p, 2,
+		 "Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 3,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 5,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 8,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 9,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 10,
+		 "\",47.05],PARAMETER[\"standard_parallel_2\",45.616666666");
+    add_srs_wkt (p, 11,
+		 "66667],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "central_meridian\",-94.25],PARAMETER[\"false_easting\",2");
+    add_srs_wkt (p, 13,
+		 "624666.6667],PARAMETER[\"false_northing\",328083.3333],A");
+    add_srs_wkt (p, 14,
+		 "UTHORITY[\"EPSG\",\"26866\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 15, ",NORTH]]");
+    p = add_epsg_def (first, last, 26867, "epsg", 26867,
+		      "NAD83(NSRS2007) / Minnesota South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=999");
+    add_proj4text (p, 2,
+		   "99.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +unit");
+    add_proj4text (p, 3, "s=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Minnesota South (ftUS)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Re");
+    add_srs_wkt (p, 2,
+		 "ference_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.");
+    add_srs_wkt (p, 3,
+		 "257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 5,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 6,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 7,
+		 "PSG\",\"4759\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 8,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 9,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 10,
+		 "45.21666666666667],PARAMETER[\"standard_parallel_2\",43.");
+    add_srs_wkt (p, 11,
+		 "78333333333333],PARAMETER[\"latitude_of_origin\",43],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"central_meridian\",-94],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 13,
+		 "ng\",2624666.6667],PARAMETER[\"false_northing\",328083.3");
+    add_srs_wkt (p, 14,
+		 "333],AUTHORITY[\"EPSG\",\"26867\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 15, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26868, "epsg", 26868,
+		      "NAD83(NSRS2007) / Nebraska (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +tow");
+    add_proj4text (p, 2, "gs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / Nebraska (ftUS)\",GEOGCS[\"NA");
+    add_srs_wkt (p, 1,
+		 "D83(NSRS2007)\",DATUM[\"NAD83_National_Spatial_Reference");
+    add_srs_wkt (p, 2,
+		 "_System_2007\",SPHEROID[\"GRS 1980\",6378137,298.2572221");
+    add_srs_wkt (p, 3,
+		 "01,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 7,
+		 "\"4759\"]],UNIT[\"US survey foot\",0.3048006096012192,AU");
+    add_srs_wkt (p, 8,
+		 "THORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conform");
+    add_srs_wkt (p, 9,
+		 "al_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",43],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"standard_parallel_2\",40],PARAMETER[\"latitude");
+    add_srs_wkt (p, 11,
+		 "_of_origin\",39.83333333333334],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 12,
+		 "dian\",-100],PARAMETER[\"false_easting\",1640416.6667],P");
+    add_srs_wkt (p, 13,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2686");
+    add_srs_wkt (p, 14, "8\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26869, "epsg", 26869,
+		      "NAD83(NSRS2007) / West Virginia North (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0");
+    add_proj4text (p, 2, " +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / West Virginia North (ftUS)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatia");
+    add_srs_wkt (p, 2,
+		 "l_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 3,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060");
+    add_srs_wkt (p, 8,
+		 "96012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 9,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 10,
+		 "_1\",40.25],PARAMETER[\"standard_parallel_2\",39],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"latitude_of_origin\",38.5],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 12,
+		 "idian\",-79.5],PARAMETER[\"false_easting\",1968500],PARA");
+    add_srs_wkt (p, 13,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26869\"");
+    add_srs_wkt (p, 14, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26870, "epsg", 26870,
+		      "NAD83(NSRS2007) / West Virginia South (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(NSRS2007) / West Virginia South (ftUS)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"NAD83(NSRS2007)\",DATUM[\"NAD83_National_Spatia");
+    add_srs_wkt (p, 2,
+		 "l_Reference_System_2007\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 3,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6759\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 5,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 6,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4759\"]],UNIT[\"US survey foot\",0.30480060");
+    add_srs_wkt (p, 8,
+		 "96012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamb");
+    add_srs_wkt (p, 9,
+		 "ert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 10,
+		 "_1\",38.88333333333333],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 11,
+		 ",37.48333333333333],PARAMETER[\"latitude_of_origin\",37]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"central_meridian\",-81],PARAMETER[\"false_e");
+    add_srs_wkt (p, 13,
+		 "asting\",1968500],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 14,
+		 "ITY[\"EPSG\",\"26870\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 15, "H]]");
+    p = add_epsg_def (first, last, 26891, "epsg", 26891,
+		      "NAD83(CSRS) / MTM zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 11\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-82.5],PARAMETER[\"scale_factor\",0.9999],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",304800],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"26891\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26892, "epsg", 26892,
+		      "NAD83(CSRS) / MTM zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 12\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-81],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"26892\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26893, "epsg", 26893,
+		      "NAD83(CSRS) / MTM zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 13\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-84],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"26893\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26894, "epsg", 26894,
+		      "NAD83(CSRS) / MTM zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 14\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-87],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"26894\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26895, "epsg", 26895,
+		      "NAD83(CSRS) / MTM zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 15\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-90],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"26895\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26896, "epsg", 26896,
+		      "NAD83(CSRS) / MTM zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 16\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-93],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"26896\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26897, "epsg", 26897,
+		      "NAD83(CSRS) / MTM zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 17\",GEOGCS[\"NAD83(CSRS");
+    add_srs_wkt (p, 1,
+		 ")\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SP");
+    add_srs_wkt (p, 2,
+		 "HEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",-96],PARAMETER[\"scale_factor\",0.9999],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",304800],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"26897\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 26898, "epsg", 26898,
+		      "NAD83(CSRS) / MTM zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 1\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-53],PARAMETER[\"scale_factor\",0.9999],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",304800],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"26898\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 26899, "epsg", 26899,
+		      "NAD83(CSRS) / MTM zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83(CSRS) / MTM zone 2\",GEOGCS[\"NAD83(CSRS)");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"NAD83_Canadian_Spatial_Reference_System\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7019\"]],AUTHORITY[\"EPSG\",\"6140\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4617\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",0],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 9,
+		 "dian\",-56],PARAMETER[\"scale_factor\",0.9999],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",304800],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"26899\"],AXIS[\"E(X)\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 26901, "epsg", 26901, "NAD83 / UTM zone 1N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 1N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26901\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26902, "epsg", 26902, "NAD83 / UTM zone 2N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 2N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26902\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26903, "epsg", 26903, "NAD83 / UTM zone 3N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 3N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-165],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26903\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26904, "epsg", 26904, "NAD83 / UTM zone 4N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 4N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-159],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26904\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26905, "epsg", 26905, "NAD83 / UTM zone 5N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 5N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-153],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26905\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26906, "epsg", 26906, "NAD83 / UTM zone 6N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 6N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-147],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26906\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26907, "epsg", 26907, "NAD83 / UTM zone 7N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 7N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-141],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26907\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26908, "epsg", 26908, "NAD83 / UTM zone 8N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 8N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-135],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26908\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26909, "epsg", 26909, "NAD83 / UTM zone 9N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 9N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-129],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26909\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26910, "epsg", 26910,
+		      "NAD83 / UTM zone 10N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 10N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-123],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26910\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26911, "epsg", 26911,
+		      "NAD83 / UTM zone 11N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26911\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26912, "epsg", 26912,
+		      "NAD83 / UTM zone 12N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 12N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26912\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26913, "epsg", 26913,
+		      "NAD83 / UTM zone 13N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 13N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-105],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26913\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26914, "epsg", 26914,
+		      "NAD83 / UTM zone 14N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 14N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26914\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26915, "epsg", 26915,
+		      "NAD83 / UTM zone 15N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 15N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26915\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26916, "epsg", 26916,
+		      "NAD83 / UTM zone 16N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 16N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26916\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26917, "epsg", 26917,
+		      "NAD83 / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 17N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26917\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26918, "epsg", 26918,
+		      "NAD83 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 18N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26918\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26919, "epsg", 26919,
+		      "NAD83 / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 19N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26919\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26920, "epsg", 26920,
+		      "NAD83 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 20N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26920\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26921, "epsg", 26921,
+		      "NAD83 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 21N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26921\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26922, "epsg", 26922,
+		      "NAD83 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 22N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26922\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26923, "epsg", 26923,
+		      "NAD83 / UTM zone 23N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / UTM zone 23N\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "26923\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 26929, "epsg", 26929,
+		      "NAD83 / Alabama East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alabama East\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",30.5],PARAMETER[\"central_meridian\",-85.8333333333");
+    add_srs_wkt (p, 9,
+		 "3333],PARAMETER[\"scale_factor\",0.99996],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",200000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 11,
+		 "THORITY[\"EPSG\",\"26929\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 26930, "epsg", 26930,
+		      "NAD83 / Alabama West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=6");
+    add_proj4text (p, 1,
+		   "00000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_proj4text (p, 2, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alabama West\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",30],PARAMETER[\"central_meridian\",-87.5],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.999933333],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",600000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11, "PSG\",\"26930\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26931, "epsg", 26931,
+		      "NAD83 / Alaska zone 1");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=32");
+    add_proj4text (p, 1,
+		   "3.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +el");
+    add_proj4text (p, 2, "lps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 1\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_center\",57],PARAMETER[\"longitude_of_center\",-133.666");
+    add_srs_wkt (p, 9,
+		 "6666666667],PARAMETER[\"azimuth\",323.1301023611111],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"rectified_grid_angle\",323.1301023611111],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",5000000],PARAMETER[\"false_northing\",-5000000],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"26931\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 26932, "epsg", 26932,
+		      "NAD83 / Alaska zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 2\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-142],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26932\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26933, "epsg", 26933,
+		      "NAD83 / Alaska zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 3\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-146],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26933\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26934, "epsg", 26934,
+		      "NAD83 / Alaska zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 4\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-150],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26934\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26935, "epsg", 26935,
+		      "NAD83 / Alaska zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 5\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-154],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26935\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26936, "epsg", 26936,
+		      "NAD83 / Alaska zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 6\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-158],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26936\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26937, "epsg", 26937,
+		      "NAD83 / Alaska zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 7\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-162],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26937\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_22 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 26938, "epsg", 26938,
+		      "NAD83 / Alaska zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 8\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-166],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26938\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26939, "epsg", 26939,
+		      "NAD83 / Alaska zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 9\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",54],PARAMETER[\"central_meridian\",-170],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 10,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"26939\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26940, "epsg", 26940,
+		      "NAD83 / Alaska zone 10");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Alaska zone 10\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",53.83333333333334],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",51.83333333333334],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",51],PARAMETER[\"central_meridian\",-176],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",1000000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"26940\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26941, "epsg", 26941,
+		      "NAD83 / California zone 1");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.3");
+    add_proj4text (p, 1,
+		   "3333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 1\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",41.66666666666666],PARAMETER[\"stand");
+    add_srs_wkt (p, 9,
+		 "ard_parallel_2\",40],PARAMETER[\"latitude_of_origin\",39");
+    add_srs_wkt (p, 10,
+		 ".33333333333334],PARAMETER[\"central_meridian\",-122],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",2000000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",500000],AUTHORITY[\"EPSG\",\"26941\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26942, "epsg", 26942,
+		      "NAD83 / California zone 2");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y");
+    add_proj4text (p, 2,
+		   "_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 2\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",39.83333333333334],PARAMETER[\"stand");
+    add_srs_wkt (p, 9,
+		 "ard_parallel_2\",38.33333333333334],PARAMETER[\"latitude");
+    add_srs_wkt (p, 10,
+		 "_of_origin\",37.66666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 11,
+		 "dian\",-122],PARAMETER[\"false_easting\",2000000],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"2694");
+    add_srs_wkt (p, 13, "2\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26943, "epsg", 26943,
+		      "NAD83 / California zone 3");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +");
+    add_proj4text (p, 2, "ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 3\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",38.43333333333333],PARAMETER[\"stand");
+    add_srs_wkt (p, 9,
+		 "ard_parallel_2\",37.06666666666667],PARAMETER[\"latitude");
+    add_srs_wkt (p, 10,
+		 "_of_origin\",36.5],PARAMETER[\"central_meridian\",-120.5");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_northing\",500000],AUTHORITY[\"EPSG\",\"26943\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26944, "epsg", 26944,
+		      "NAD83 / California zone 4");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.3333333333333");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +dat");
+    add_proj4text (p, 2, "um=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 4\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",37.25],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_2\",36],PARAMETER[\"latitude_of_origin\",35.33333333333");
+    add_srs_wkt (p, 10,
+		 "334],PARAMETER[\"central_meridian\",-119],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_easting\",2000000],PARAMETER[\"false_northing\",5000");
+    add_srs_wkt (p, 12,
+		 "00],AUTHORITY[\"EPSG\",\"26944\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26945, "epsg", 26945,
+		      "NAD83 / California zone 5");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +el");
+    add_proj4text (p, 2, "lps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 5\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",35.46666666666667],PARAMETER[\"stand");
+    add_srs_wkt (p, 9,
+		 "ard_parallel_2\",34.03333333333333],PARAMETER[\"latitude");
+    add_srs_wkt (p, 10,
+		 "_of_origin\",33.5],PARAMETER[\"central_meridian\",-118],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",2000000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",500000],AUTHORITY[\"EPSG\",\"26945\"],AXIS[\"X");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26946, "epsg", 26946,
+		      "NAD83 / California zone 6");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000");
+    add_proj4text (p, 2,
+		   " +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_proj4text (p, 3, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / California zone 6\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",33.88333333333333],PARAMETER[\"stand");
+    add_srs_wkt (p, 9,
+		 "ard_parallel_2\",32.78333333333333],PARAMETER[\"latitude");
+    add_srs_wkt (p, 10,
+		 "_of_origin\",32.16666666666666],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 11,
+		 "dian\",-116.25],PARAMETER[\"false_easting\",2000000],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 13, "6946\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26948, "epsg", 26948,
+		      "NAD83 / Arizona East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arizona East\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",31],PARAMETER[\"central_meridian\",-110.16666666666");
+    add_srs_wkt (p, 9,
+		 "67],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",213360],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"26948\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 26949, "epsg", 26949,
+		      "NAD83 / Arizona Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arizona Central\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",31],PARAMETER[\"central_meridian\",-111.9166666");
+    add_srs_wkt (p, 9,
+		 "666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",213360],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"26949\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26950, "epsg", 26950,
+		      "NAD83 / Arizona West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0");
+    add_proj4text (p, 1,
+		   "=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arizona West\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",31],PARAMETER[\"central_meridian\",-113.75],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.999933333],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",213360],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"26950\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26951, "epsg", 26951,
+		      "NAD83 / Arkansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arkansas North\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",36.23333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",34.93333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",34.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-92],PARAMETER[\"false_easting\",400000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"26951\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26952, "epsg", 26952,
+		      "NAD83 / Arkansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Arkansas South\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",34.76666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",33.3],PARAMETER[\"latitude_of_origin\",32.6");
+    add_srs_wkt (p, 10,
+		 "6666666666666],PARAMETER[\"central_meridian\",-92],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",400000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",400000],AUTHORITY[\"EPSG\",\"26952\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26953, "epsg", 26953,
+		      "NAD83 / Colorado North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Colorado North\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",40.78333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",39.71666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",39.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-105.5],PARAMETER[\"false_easting\",914401.8289],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",304800.6096],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"26953\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26954, "epsg", 26954,
+		      "NAD83 / Colorado Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.8333333333");
+    add_proj4text (p, 1,
+		   "3334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +el");
+    add_proj4text (p, 2, "lps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Colorado Central\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 8,
+		 "ndard_parallel_1\",39.75],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 9,
+		 "2\",38.45],PARAMETER[\"latitude_of_origin\",37.833333333");
+    add_srs_wkt (p, 10,
+		 "33334],PARAMETER[\"central_meridian\",-105.5],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",914401.8289],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",304800.6096],AUTHORITY[\"EPSG\",\"26954\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26955, "epsg", 26955,
+		      "NAD83 / Colorado South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8");
+    add_proj4text (p, 2,
+		   "289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Colorado South\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",38.43333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",37.23333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",36.66666666666666],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-105.5],PARAMETER[\"false_easting\",914401.8289],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",304800.6096],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"26955\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26956, "epsg", 26956, "NAD83 / Connecticut");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40");
+    add_proj4text (p, 1,
+		   ".83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=1524");
+    add_proj4text (p, 2, "00.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Connecticut\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",41.86666666666667],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_2\",41.2],PARAMETER[\"latitude_of_origin\",40.833");
+    add_srs_wkt (p, 10,
+		 "33333333334],PARAMETER[\"central_meridian\",-72.75],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",304800.6096],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",152400.3048],AUTHORITY[\"EPSG\",\"26956\"],AXI");
+    add_srs_wkt (p, 13, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26957, "epsg", 26957, "NAD83 / Delaware");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Delaware\",GEOGCS[\"NAD83\",DATUM[\"Nor");
+    add_srs_wkt (p, 1,
+		 "th_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 2,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",38],PARAMETER[\"central_meridian\",-75.41666666666667],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",0.999995],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",200000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"26957\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 26958, "epsg", 26958,
+		      "NAD83 / Florida East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Florida East\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",24.33333333333333],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "81],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",200000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"26958\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26959, "epsg", 26959,
+		      "NAD83 / Florida West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999");
+    add_proj4text (p, 1,
+		   "941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Florida West\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",24.33333333333333],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "82],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",200000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"26959\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26960, "epsg", 26960,
+		      "NAD83 / Florida North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=2");
+    add_proj4text (p, 1,
+		   "9 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Florida North\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standar");
+    add_srs_wkt (p, 8,
+		 "d_parallel_1\",30.75],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 9,
+		 "29.58333333333333],PARAMETER[\"latitude_of_origin\",29],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"central_meridian\",-84.5],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",600000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"26960\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 13, "H]]");
+    p = add_epsg_def (first, last, 26961, "epsg", 26961,
+		      "NAD83 / Hawaii zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.");
+    add_proj4text (p, 1,
+		   "999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +");
+    add_proj4text (p, 2, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Hawaii zone 1\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",18.83333333333333],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-155.5],PARAMETER[\"scale_factor\",0.999966667],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"26961\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26962, "epsg", 26962,
+		      "NAD83 / Hawaii zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Hawaii zone 2\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",20.33333333333333],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-156.6666666666667],PARAMETER[\"scale_factor\",0.9999666");
+    add_srs_wkt (p, 10,
+		 "67],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"26962\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26963, "epsg", 26963,
+		      "NAD83 / Hawaii zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99");
+    add_proj4text (p, 1,
+		   "999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Hawaii zone 3\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",21.16666666666667],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-158],PARAMETER[\"scale_factor\",0.99999],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",500000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 11,
+		 "THORITY[\"EPSG\",\"26963\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 26964, "epsg", 26964,
+		      "NAD83 / Hawaii zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.");
+    add_proj4text (p, 1,
+		   "99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Hawaii zone 4\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",21.83333333333333],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-159.5],PARAMETER[\"scale_factor\",0.99999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"26964\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 26965, "epsg", 26965,
+		      "NAD83 / Hawaii zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Hawaii zone 5\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",21.66666666666667],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-160.1666666666667],PARAMETER[\"scale_factor\",1],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 11,
+		 "\",0],AUTHORITY[\"EPSG\",\"26965\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26966, "epsg", 26966,
+		      "NAD83 / Georgia East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Georgia East\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",30],PARAMETER[\"central_meridian\",-82.166666666666");
+    add_srs_wkt (p, 9,
+		 "67],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",200000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"26966\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 26967, "epsg", 26967,
+		      "NAD83 / Georgia West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999");
+    add_proj4text (p, 1,
+		   "9 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Georgia West\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",30],PARAMETER[\"central_meridian\",-84.166666666666");
+    add_srs_wkt (p, 9,
+		 "67],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",700000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"26967\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 26968, "epsg", 26968, "NAD83 / Idaho East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Idaho East\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",41.66666666666666],PARAMETER[\"central_meridian\",-11");
+    add_srs_wkt (p, 9,
+		 "2.1666666666667],PARAMETER[\"scale_factor\",0.999947368]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",200000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"26968\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26969, "epsg", 26969,
+		      "NAD83 / Idaho Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.99");
+    add_proj4text (p, 1,
+		   "99473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Idaho Central\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",41.66666666666666],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-114],PARAMETER[\"scale_factor\",0.999947368],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"26969\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26970, "epsg", 26970, "NAD83 / Idaho West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Idaho West\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",41.66666666666666],PARAMETER[\"central_meridian\",-11");
+    add_srs_wkt (p, 9,
+		 "5.75],PARAMETER[\"scale_factor\",0.999933333],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",800000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"26970\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26971, "epsg", 26971,
+		      "NAD83 / Illinois East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Illinois East\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",36.66666666666666],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-88.33333333333333],PARAMETER[\"scale_factor\",0.999975]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",300000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"26971\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26972, "epsg", 26972,
+		      "NAD83 / Illinois West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Illinois West\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",36.66666666666666],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-90.16666666666667],PARAMETER[\"scale_factor\",0.9999411");
+    add_srs_wkt (p, 10,
+		 "77],PARAMETER[\"false_easting\",700000],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"26972\"],AXIS[\"X\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26973, "epsg", 26973,
+		      "NAD83 / Indiana East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD");
+    add_proj4text (p, 2, "83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Indiana East\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",37.5],PARAMETER[\"central_meridian\",-85.6666666666");
+    add_srs_wkt (p, 9,
+		 "6667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",100000],PARAMETER[\"false_northing\",2");
+    add_srs_wkt (p, 11,
+		 "50000],AUTHORITY[\"EPSG\",\"26973\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26974, "epsg", 26974,
+		      "NAD83 / Indiana West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD");
+    add_proj4text (p, 2, "83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Indiana West\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",37.5],PARAMETER[\"central_meridian\",-87.0833333333");
+    add_srs_wkt (p, 9,
+		 "3333],PARAMETER[\"scale_factor\",0.999966667],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"false_easting\",900000],PARAMETER[\"false_northing\",2");
+    add_srs_wkt (p, 11,
+		 "50000],AUTHORITY[\"EPSG\",\"26974\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26975, "epsg", 26975, "NAD83 / Iowa North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +");
+    add_proj4text (p, 2, "ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Iowa North\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 8,
+		 "arallel_1\",43.26666666666667],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",42.06666666666667],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",41.5],PARAMETER[\"central_meridian\",-93.5],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",1500000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",1000000],AUTHORITY[\"EPSG\",\"26975\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26976, "epsg", 26976, "NAD83 / Iowa South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Iowa South\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 8,
+		 "arallel_1\",41.78333333333333],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",40.61666666666667],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",40],PARAMETER[\"central_meridian\",-93.5],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"26976\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26977, "epsg", 26977,
+		      "NAD83 / Kansas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kansas North\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",39.78333333333333],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_2\",38.71666666666667],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 10,
+		 "igin\",38.33333333333334],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-98],PARAMETER[\"false_easting\",400000],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"26977\"],AXIS[\"X");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26978, "epsg", 26978,
+		      "NAD83 / Kansas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y");
+    add_proj4text (p, 2,
+		   "_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kansas South\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",38.56666666666667],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_2\",37.26666666666667],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 10,
+		 "igin\",36.66666666666666],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-98.5],PARAMETER[\"false_easting\",400000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",400000],AUTHORITY[\"EPSG\",\"26978\"],A");
+    add_srs_wkt (p, 13, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26979, "epsg", 26979,
+		      "NAD83 / Kentucky North (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kentucky North (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"G");
+    add_srs_wkt (p, 2,
+		 "RS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"701");
+    add_srs_wkt (p, 3,
+		 "9\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"standard_parallel_1\",37.96666666666667],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"standard_parallel_2\",37.96666666666667],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"latitude_of_origin\",37.5],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 11,
+		 "n\",-84.25],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26979\"],AX");
+    add_srs_wkt (p, 13, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26980, "epsg", 26980,
+		      "NAD83 / Kentucky South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +");
+    add_proj4text (p, 2,
+		   "y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Kentucky South\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",37.93333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",36.73333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",36.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-85.75],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"26980\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26981, "epsg", 26981,
+		      "NAD83 / Louisiana North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Louisiana North\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",32.66666666666666],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_2\",31.16666666666667],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 10,
+		 "f_origin\",30.5],PARAMETER[\"central_meridian\",-92.5],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",1000000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"26981\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26982, "epsg", 26982,
+		      "NAD83 / Louisiana South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91");
+    add_proj4text (p, 1,
+		   ".33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=");
+    add_proj4text (p, 2, "NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Louisiana South\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",30.7],PARAMETER[\"standard_parallel_2\"");
+    add_srs_wkt (p, 9,
+		 ",29.3],PARAMETER[\"latitude_of_origin\",28.5],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"central_meridian\",-91.33333333333333],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_easting\",1000000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 12,
+		 "THORITY[\"EPSG\",\"26982\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 13, "NORTH]]");
+    p = add_epsg_def (first, last, 26983, "epsg", 26983, "NAD83 / Maine East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine East\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",43.66666666666666],PARAMETER[\"central_meridian\",-68");
+    add_srs_wkt (p, 9,
+		 ".5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",300000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"26983\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 26984, "epsg", 26984, "NAD83 / Maine West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maine West\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",42.83333333333334],PARAMETER[\"central_meridian\",-70");
+    add_srs_wkt (p, 9,
+		 ".16666666666667],PARAMETER[\"scale_factor\",0.999966667]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_easting\",900000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 11,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"26984\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26985, "epsg", 26985, "NAD83 / Maryland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Maryland\",GEOGCS[\"NAD83\",DATUM[\"Nor");
+    add_srs_wkt (p, 1,
+		 "th_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 2,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 8,
+		 "rallel_1\",39.45],PARAMETER[\"standard_parallel_2\",38.3");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",37.66666666666666],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"central_meridian\",-77],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",400000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 12,
+		 "\"EPSG\",\"26985\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26986, "epsg", 26986,
+		      "NAD83 / Massachusetts Mainland");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellp");
+    add_proj4text (p, 2, "s=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Massachusetts Mainland\",GEOGCS[\"NAD83");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 19");
+    add_srs_wkt (p, 2,
+		 "80\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",42.68333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "standard_parallel_2\",41.71666666666667],PARAMETER[\"lat");
+    add_srs_wkt (p, 10,
+		 "itude_of_origin\",41],PARAMETER[\"central_meridian\",-71");
+    add_srs_wkt (p, 11,
+		 ".5],PARAMETER[\"false_easting\",200000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",750000],AUTHORITY[\"EPSG\",\"26986\"],AXIS[");
+    add_srs_wkt (p, 13, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26987, "epsg", 26987,
+		      "NAD83 / Massachusetts Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Massachusetts Island\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",41.48333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_2\",41.28333333333333],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",41],PARAMETER[\"central_meridian\",-70.5]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",500000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"26987\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26988, "epsg", 26988,
+		      "NAD83 / Michigan North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_");
+    add_proj4text (p, 2, "0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Michigan North\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",47.08333333333334],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",45.48333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",44.78333333333333],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-87],PARAMETER[\"false_easting\",8000000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"26988\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26989, "epsg", 26989,
+		      "NAD83 / Michigan Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43");
+    add_proj4text (p, 1,
+		   ".31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Michigan Central\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 8,
+		 "ndard_parallel_1\",45.7],PARAMETER[\"standard_parallel_2");
+    add_srs_wkt (p, 9,
+		 "\",44.18333333333333],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 10,
+		 "3.31666666666667],PARAMETER[\"central_meridian\",-84.366");
+    add_srs_wkt (p, 11,
+		 "66666666666],PARAMETER[\"false_easting\",6000000],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"26989\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26990, "epsg", 26990,
+		      "NAD83 / Michigan South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41");
+    add_proj4text (p, 1,
+		   ".5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=");
+    add_proj4text (p, 2, "GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Michigan South\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",43.66666666666666],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",42.1],PARAMETER[\"latitude_of_origin\",41.5");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"central_meridian\",-84.36666666666666],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",4000000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"26990\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 13, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26991, "epsg", 26991,
+		      "NAD83 / Minnesota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y");
+    add_proj4text (p, 2,
+		   "_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota North\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",48.63333333333333],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_2\",47.03333333333333],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 10,
+		 "f_origin\",46.5],PARAMETER[\"central_meridian\",-93.1],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",800000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",100000],AUTHORITY[\"EPSG\",\"26991\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26992, "epsg", 26992,
+		      "NAD83 / Minnesota Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +da");
+    add_proj4text (p, 2, "tum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota Central\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",47.05],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_2\",45.61666666666667],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 10,
+		 ",45],PARAMETER[\"central_meridian\",-94.25],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",800000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 12,
+		 "000],AUTHORITY[\"EPSG\",\"26992\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 13, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26993, "epsg", 26993,
+		      "NAD83 / Minnesota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=");
+    add_proj4text (p, 2, "GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Minnesota South\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",45.21666666666667],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_2\",43.78333333333333],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 10,
+		 "f_origin\",43],PARAMETER[\"central_meridian\",-94],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",800000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",100000],AUTHORITY[\"EPSG\",\"26993\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 13, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26994, "epsg", 26994,
+		      "NAD83 / Mississippi East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Mississippi East\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",29.5],PARAMETER[\"central_meridian\",-88.83333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"scale_factor\",0.99995],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",300000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"26994\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26995, "epsg", 26995,
+		      "NAD83 / Mississippi West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "9995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Mississippi West\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",29.5],PARAMETER[\"central_meridian\",-90.33333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"scale_factor\",0.99995],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",700000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"26995\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26996, "epsg", 26996,
+		      "NAD83 / Missouri East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Missouri East\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",35.83333333333334],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-90.5],PARAMETER[\"scale_factor\",0.999933333],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",250000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"26996\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26997, "epsg", 26997,
+		      "NAD83 / Missouri Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Missouri Central\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",35.83333333333334],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 9,
+		 "n\",-92.5],PARAMETER[\"scale_factor\",0.999933333],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",0],AUTHORITY[\"EPSG\",\"26997\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 12, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 26998, "epsg", 26998,
+		      "NAD83 / Missouri West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "99941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Missouri West\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",36.16666666666666],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-94.5],PARAMETER[\"scale_factor\",0.999941177],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",850000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"26998\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27037, "epsg", 27037,
+		      "Nahrwan 1967 / UTM zone 37N");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nahrwan 1967 / UTM zone 37N\",GEOGCS[\"Nahrwan ");
+    add_srs_wkt (p, 1,
+		 "1967\",DATUM[\"Nahrwan_1967\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6270\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4270\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",39],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"27037\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 27038, "epsg", 27038,
+		      "Nahrwan 1967 / UTM zone 38N");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nahrwan 1967 / UTM zone 38N\",GEOGCS[\"Nahrwan ");
+    add_srs_wkt (p, 1,
+		 "1967\",DATUM[\"Nahrwan_1967\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6270\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4270\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",45],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"27038\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 27039, "epsg", 27039,
+		      "Nahrwan 1967 / UTM zone 39N");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nahrwan 1967 / UTM zone 39N\",GEOGCS[\"Nahrwan ");
+    add_srs_wkt (p, 1,
+		 "1967\",DATUM[\"Nahrwan_1967\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6270\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4270\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",51],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"27039\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 27040, "epsg", 27040,
+		      "Nahrwan 1967 / UTM zone 40N");
+    add_proj4text (p, 0, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nahrwan 1967 / UTM zone 40N\",GEOGCS[\"Nahrwan ");
+    add_srs_wkt (p, 1,
+		 "1967\",DATUM[\"Nahrwan_1967\",SPHEROID[\"Clarke 1880 (RG");
+    add_srs_wkt (p, 2,
+		 "S)\",6378249.145,293.465,AUTHORITY[\"EPSG\",\"7012\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6270\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4270\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"27040\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 27120, "epsg", 27120,
+		      "Naparima 1972 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Naparima 1972 / UTM zone 20N\",GEOGCS[\"Naparim");
+    add_srs_wkt (p, 1,
+		 "a 1972\",DATUM[\"Naparima_1972\",SPHEROID[\"Internationa");
+    add_srs_wkt (p, 2,
+		 "l 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6271\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"427");
+    add_srs_wkt (p, 6,
+		 "1\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",-63],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11,
+		 "\",\"27120\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",N");
+    add_srs_wkt (p, 12, "ORTH]]");
+    p = add_epsg_def (first, last, 27200, "epsg", 27200,
+		      "NZGD49 / New Zealand Map Grid");
+    add_proj4text (p, 0,
+		   "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=60231");
+    add_proj4text (p, 1, "50 +ellps=intl +datum=nzgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / New Zealand Map Grid\",GEOGCS[\"NZGD49");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.599");
+    add_srs_wkt (p, 4,
+		 "3],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 6,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 8,
+		 "\"]],PROJECTION[\"New_Zealand_Map_Grid\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",-41],PARAMETER[\"central_meridian\",1");
+    add_srs_wkt (p, 10,
+		 "73],PARAMETER[\"false_easting\",2510000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",6023150],AUTHORITY[\"EPSG\",\"27200\"],AXI");
+    add_srs_wkt (p, 12, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 27205, "epsg", 27205,
+		      "NZGD49 / Mount Eden Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393");
+    add_proj4text (p, 1,
+		   "611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +da");
+    add_proj4text (p, 2, "tum=nzgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Mount Eden Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-36.87986527777778],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",174.7643393611111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",0.9999],PARAMETER[\"false_easting\",300000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",700000],AUTHORITY[\"EPSG\",\"27205\"],A");
+    add_srs_wkt (p, 13, "XIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27206, "epsg", 27206,
+		      "NZGD49 / Bay of Plenty Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.4661972");
+    add_proj4text (p, 1,
+		   "5 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Bay of Plenty Circuit\",GEOGCS[\"NZGD4");
+    add_srs_wkt (p, 1,
+		 "9\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.599");
+    add_srs_wkt (p, 4,
+		 "3],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 6,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 8,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",-37.76124980555556],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",176.46619725],PARAMETER[\"scale_factor\",1]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",300000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",700000],AUTHORITY[\"EPSG\",\"27206\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27207, "epsg", 27207,
+		      "NZGD49 / Poverty Bay Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362");
+    add_proj4text (p, 1,
+		   "777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Poverty Bay Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-38.62470277777778],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",177.8856362777778],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",700000],AUTHORITY[\"EPSG\",\"27207\"],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27208, "epsg", 27208,
+		      "NZGD49 / Hawkes Bay Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805");
+    add_proj4text (p, 1,
+		   "277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Hawkes Bay Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-39.65092930555556],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",176.6736805277778],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",700000],AUTHORITY[\"EPSG\",\"27208\"],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27209, "epsg", 27209,
+		      "NZGD49 / Taranaki Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.2280117");
+    add_proj4text (p, 1,
+		   "5 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Taranaki Circuit\",GEOGCS[\"NZGD49\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 2,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",-39.13575830555556],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 10,
+		 "idian\",174.22801175],PARAMETER[\"scale_factor\",1],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",300000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 12,
+		 "ng\",700000],AUTHORITY[\"EPSG\",\"27209\"],AXIS[\"Northi");
+    add_srs_wkt (p, 13, "ng\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27210, "epsg", 27210,
+		      "NZGD49 / Tuhirangi Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368");
+    add_proj4text (p, 1,
+		   "055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Tuhirangi Circuit\",GEOGCS[\"NZGD49\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Int");
+    add_srs_wkt (p, 2,
+		 "ernational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",-39.51247038888889],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 10,
+		 "idian\",175.6400368055556],PARAMETER[\"scale_factor\",1]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",300000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",700000],AUTHORITY[\"EPSG\",\"27210\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27211, "epsg", 27211,
+		      "NZGD49 / Wanganui Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Wanganui Circuit\",GEOGCS[\"NZGD49\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 2,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",-40.24194713888889],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 10,
+		 "idian\",175.4880996111111],PARAMETER[\"scale_factor\",1]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",300000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",700000],AUTHORITY[\"EPSG\",\"27211\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27212, "epsg", 27212,
+		      "NZGD49 / Wairarapa Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Wairarapa Circuit\",GEOGCS[\"NZGD49\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Int");
+    add_srs_wkt (p, 2,
+		 "ernational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",-40.92553263888889],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 10,
+		 "idian\",175.6473496666667],PARAMETER[\"scale_factor\",1]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",300000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",700000],AUTHORITY[\"EPSG\",\"27212\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27213, "epsg", 27213,
+		      "NZGD49 / Wellington Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Wellington Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-41.30131963888888],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",174.7766231111111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",700000],AUTHORITY[\"EPSG\",\"27213\"],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27214, "epsg", 27214,
+		      "NZGD49 / Collingwood Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465");
+    add_proj4text (p, 1,
+		   " +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Collingwood Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-40.71475905555556],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",172.6720465],PARAMETER[\"scale_factor\",1],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",300000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",700000],AUTHORITY[\"EPSG\",\"27214\"],AXIS[\"Nort");
+    add_srs_wkt (p, 13, "hing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27215, "epsg", 27215,
+		      "NZGD49 / Nelson Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168");
+    add_proj4text (p, 1,
+		   "055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Nelson Circuit\",GEOGCS[\"NZGD49\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",-41.27454472222222],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",173.2993168055555],PARAMETER[\"scale_factor\",1],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",300000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",700000],AUTHORITY[\"EPSG\",\"27215\"],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27216, "epsg", 27216,
+		      "NZGD49 / Karamea Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281");
+    add_proj4text (p, 1,
+		   "944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Karamea Circuit\",GEOGCS[\"NZGD49\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Inter");
+    add_srs_wkt (p, 2,
+		 "national 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",-41.28991152777778],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 10,
+		 "idian\",172.1090281944444],PARAMETER[\"scale_factor\",1]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",300000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",700000],AUTHORITY[\"EPSG\",\"27216\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27217, "epsg", 27217,
+		      "NZGD49 / Buller Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600");
+    add_proj4text (p, 1,
+		   "555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Buller Circuit\",GEOGCS[\"NZGD49\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",-41.81080286111111],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",171.5812600555556],PARAMETER[\"scale_factor\",1],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",300000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",700000],AUTHORITY[\"EPSG\",\"27217\"],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27218, "epsg", 27218,
+		      "NZGD49 / Grey Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713");
+    add_proj4text (p, 1,
+		   "055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Grey Circuit\",GEOGCS[\"NZGD49\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"427");
+    add_srs_wkt (p, 7,
+		 "2\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",-42.33369427777778],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",171.5497713055556],PARAMETER[\"scale_factor\",1],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",300000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",700000],AUTHORITY[\"EPSG\",\"27218\"],AXIS[\"Nort");
+    add_srs_wkt (p, 13, "hing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27219, "epsg", 27219,
+		      "NZGD49 / Amuri Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333");
+    add_proj4text (p, 1,
+		   "888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Amuri Circuit\",GEOGCS[\"NZGD49\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "72\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",-42.68911658333333],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 10,
+		 "ian\",173.0101333888889],PARAMETER[\"scale_factor\",1],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",300000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",700000],AUTHORITY[\"EPSG\",\"27219\"],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27220, "epsg", 27220,
+		      "NZGD49 / Marlborough Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741");
+    add_proj4text (p, 1,
+		   "111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Marlborough Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-41.54448666666666],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",173.8020741111111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",700000],AUTHORITY[\"EPSG\",\"27220\"],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27221, "epsg", 27221,
+		      "NZGD49 / Hokitika Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935");
+    add_proj4text (p, 1,
+		   " +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Hokitika Circuit\",GEOGCS[\"NZGD49\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Inte");
+    add_srs_wkt (p, 2,
+		 "rnational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",-42.88632236111111],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 10,
+		 "idian\",170.9799935],PARAMETER[\"scale_factor\",1],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",300000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",700000],AUTHORITY[\"EPSG\",\"27221\"],AXIS[\"Northin");
+    add_srs_wkt (p, 13, "g\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27222, "epsg", 27222,
+		      "NZGD49 / Okarito Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Okarito Circuit\",GEOGCS[\"NZGD49\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Inter");
+    add_srs_wkt (p, 2,
+		 "national 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]");
+    add_srs_wkt (p, 3,
+		 "],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",-43.11012813888889],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 10,
+		 "idian\",170.2609258333333],PARAMETER[\"scale_factor\",1]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",300000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",700000],AUTHORITY[\"EPSG\",\"27222\"],AXIS[\"N");
+    add_srs_wkt (p, 13, "orthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27223, "epsg", 27223,
+		      "NZGD49 / Jacksons Bay Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 ");
+    add_proj4text (p, 1,
+		   "+k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +");
+    add_proj4text (p, 2, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Jacksons Bay Circuit\",GEOGCS[\"NZGD49");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.599");
+    add_srs_wkt (p, 4,
+		 "3],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 6,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 8,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",-43.97780288888889],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",168.606267],PARAMETER[\"scale_factor\",1],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",300000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",700000],AUTHORITY[\"EPSG\",\"27223\"],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27224, "epsg", 27224,
+		      "NZGD49 / Mount Pleasant Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935");
+    add_proj4text (p, 1,
+		   "833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Mount Pleasant Circuit\",GEOGCS[\"NZGD");
+    add_srs_wkt (p, 1,
+		 "49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5");
+    add_srs_wkt (p, 4,
+		 "993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",-43.59063758333333],PARAMETER[\"cent");
+    add_srs_wkt (p, 10,
+		 "ral_meridian\",172.7271935833333],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 11,
+		 "or\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",700000],AUTHORITY[\"EPSG\",\"27224\"],A");
+    add_srs_wkt (p, 13, "XIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27225, "epsg", 27225,
+		      "NZGD49 / Gawler Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484");
+    add_proj4text (p, 1,
+		   "722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Gawler Circuit\",GEOGCS[\"NZGD49\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",-43.74871155555556],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",171.3607484722222],PARAMETER[\"scale_factor\",1],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",300000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",700000],AUTHORITY[\"EPSG\",\"27225\"],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27226, "epsg", 27226,
+		      "NZGD49 / Timaru Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508");
+    add_proj4text (p, 1,
+		   "333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Timaru Circuit\",GEOGCS[\"NZGD49\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Intern");
+    add_srs_wkt (p, 2,
+		 "ational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",-44.40222036111111],PARAMETER[\"central_meri");
+    add_srs_wkt (p, 10,
+		 "dian\",171.0572508333333],PARAMETER[\"scale_factor\",1],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",300000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 12,
+		 "rthing\",700000],AUTHORITY[\"EPSG\",\"27226\"],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27227, "epsg", 27227,
+		      "NZGD49 / Lindis Peak Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550");
+    add_proj4text (p, 1,
+		   "833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Lindis Peak Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-44.73526797222222],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",169.4677550833333],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",700000],AUTHORITY[\"EPSG\",\"27227\"],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27228, "epsg", 27228,
+		      "NZGD49 / Mount Nicholas Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411");
+    add_proj4text (p, 1,
+		   "944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Mount Nicholas Circuit\",GEOGCS[\"NZGD");
+    add_srs_wkt (p, 1,
+		 "49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5");
+    add_srs_wkt (p, 4,
+		 "993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 5,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 6,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 9,
+		 "atitude_of_origin\",-45.13290258333333],PARAMETER[\"cent");
+    add_srs_wkt (p, 10,
+		 "ral_meridian\",168.3986411944444],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 11,
+		 "or\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",700000],AUTHORITY[\"EPSG\",\"27228\"],A");
+    add_srs_wkt (p, 13, "XIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27229, "epsg", 27229,
+		      "NZGD49 / Mount York Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617");
+    add_proj4text (p, 1,
+		   "777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Mount York Circuit\",GEOGCS[\"NZGD49\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",-45.56372616666666],PARAMETER[\"central_");
+    add_srs_wkt (p, 10,
+		 "meridian\",167.7388617777778],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 11,
+		 ",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",700000],AUTHORITY[\"EPSG\",\"27229\"],AXIS[");
+    add_srs_wkt (p, 13, "\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27230, "epsg", 27230,
+		      "NZGD49 / Observation Point Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951");
+    add_proj4text (p, 1,
+		   "666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=n");
+    add_proj4text (p, 2, "zgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Observation Point Circuit\",GEOGCS[\"N");
+    add_srs_wkt (p, 1,
+		 "ZGD49\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7022\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-");
+    add_srs_wkt (p, 4,
+		 "4.5993],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 5,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",-45.81619661111111],PARAMETER[\"cen");
+    add_srs_wkt (p, 10,
+		 "tral_meridian\",170.6285951666667],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 11,
+		 "tor\",1],PARAMETER[\"false_easting\",300000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",700000],AUTHORITY[\"EPSG\",\"27230\"],A");
+    add_srs_wkt (p, 13, "XIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27231, "epsg", 27231,
+		      "NZGD49 / North Taieri Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891");
+    add_proj4text (p, 1,
+		   "111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +d");
+    add_proj4text (p, 2, "atum=nzgd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / North Taieri Circuit\",GEOGCS[\"NZGD49");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.599");
+    add_srs_wkt (p, 4,
+		 "3],AUTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 6,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"4272\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 8,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",-45.86151336111111],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",170.2825891111111],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 11,
+		 "\",0.99996],PARAMETER[\"false_easting\",300000],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_northing\",700000],AUTHORITY[\"EPSG\",\"27231\"");
+    add_srs_wkt (p, 13, "],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27232, "epsg", 27232,
+		      "NZGD49 / Bluff Circuit");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 ");
+    add_proj4text (p, 1,
+		   "+k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nz");
+    add_proj4text (p, 2, "gd49 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / Bluff Circuit\",GEOGCS[\"NZGD49\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Interna");
+    add_srs_wkt (p, 2,
+		 "tional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],");
+    add_srs_wkt (p, 3,
+		 "TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "72\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",-46.60000961111111],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 10,
+		 "ian\",168.342872],PARAMETER[\"scale_factor\",1],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_easting\",300002.66],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",699999.58],AUTHORITY[\"EPSG\",\"27232\"],AXIS[\"Nort");
+    add_srs_wkt (p, 13, "hing\",NORTH],AXIS[\"Easting\",EAST]]");
+    p = add_epsg_def (first, last, 27258, "epsg", 27258,
+		      "NZGD49 / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / UTM zone 58S\",GEOGCS[\"NZGD49\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"427");
+    add_srs_wkt (p, 7,
+		 "2\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",165],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",10000000],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"27258\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 13, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 27259, "epsg", 27259,
+		      "NZGD49 / UTM zone 59S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / UTM zone 59S\",GEOGCS[\"NZGD49\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"427");
+    add_srs_wkt (p, 7,
+		 "2\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",171],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",10000000],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"27259\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 13, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 27260, "epsg", 27260,
+		      "NZGD49 / UTM zone 60S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / UTM zone 60S\",GEOGCS[\"NZGD49\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Internat");
+    add_srs_wkt (p, 2,
+		 "ional 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 6,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"427");
+    add_srs_wkt (p, 7,
+		 "2\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 8,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 9,
+		 "_origin\",0],PARAMETER[\"central_meridian\",177],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",10000000],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"27260\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 13, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 27291, "epsg", 27291,
+		      "NZGD49 / North Island Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.524");
+    add_proj4text (p, 1,
+		   "3848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49");
+    add_proj4text (p, 2, " +to_meter=0.9143984146160287 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / North Island Grid\",GEOGCS[\"NZGD49\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Int");
+    add_srs_wkt (p, 2,
+		 "ernational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"British yard (Sears 1922)\",0.9143984146");
+    add_srs_wkt (p, 8,
+		 "160287,AUTHORITY[\"EPSG\",\"9040\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 9,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",-39],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"central_meridian\",175.5],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 11,
+		 "actor\",1],PARAMETER[\"false_easting\",300000],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_northing\",400000],AUTHORITY[\"EPSG\",\"27291\"");
+    add_srs_wkt (p, 13, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 27292, "epsg", 27292,
+		      "NZGD49 / South Island Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.207");
+    add_proj4text (p, 1,
+		   "3080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49");
+    add_proj4text (p, 2, " +to_meter=0.9143984146160287 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NZGD49 / South Island Grid\",GEOGCS[\"NZGD49\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"New_Zealand_Geodetic_Datum_1949\",SPHEROID[\"Int");
+    add_srs_wkt (p, 2,
+		 "ernational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6272\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 5,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 6,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4272\"]],UNIT[\"British yard (Sears 1922)\",0.9143984146");
+    add_srs_wkt (p, 8,
+		 "160287,AUTHORITY[\"EPSG\",\"9040\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 9,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",-44],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"central_meridian\",171.5],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 11,
+		 "actor\",1],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"27292\"");
+    add_srs_wkt (p, 13, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 27391, "epsg", 27391,
+		      "NGO 1948 (Oslo) / NGO zone I");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_");
+    add_proj4text (p, 1,
+		   "0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=");
+    add_proj4text (p, 2,
+		   "278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone I\",GEOGCS[\"NGO 194");
+    add_srs_wkt (p, 1,
+		 "8 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel Mod");
+    add_srs_wkt (p, 2,
+		 "ified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "5\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.72291666666");
+    add_srs_wkt (p, 5,
+		 "667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.0174");
+    add_srs_wkt (p, 6,
+		 "5329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",58],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "-4.666666666666667],PARAMETER[\"scale_factor\",1],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",0],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"27391\"],AXIS[\"x\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "y\",EAST]]");
+    p = add_epsg_def (first, last, 27392, "epsg", 27392,
+		      "NGO 1948 (Oslo) / NGO zone II");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_");
+    add_proj4text (p, 1,
+		   "0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=");
+    add_proj4text (p, 2,
+		   "278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone II\",GEOGCS[\"NGO 19");
+    add_srs_wkt (p, 1,
+		 "48 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel Mo");
+    add_srs_wkt (p, 2,
+		 "dified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "05\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.7229166666");
+    add_srs_wkt (p, 5,
+		 "6667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",58],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "-2.333333333333333],PARAMETER[\"scale_factor\",1],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",0],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"27392\"],AXIS[\"x\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "y\",EAST]]");
+    p = add_epsg_def (first, last, 27393, "epsg", 27393,
+		      "NGO 1948 (Oslo) / NGO zone III");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=637");
+    add_proj4text (p, 1,
+		   "7492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.");
+    add_proj4text (p, 2, "889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone III\",GEOGCS[\"NGO 1");
+    add_srs_wkt (p, 1,
+		 "948 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel M");
+    add_srs_wkt (p, 2,
+		 "odified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "005\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.722916666");
+    add_srs_wkt (p, 5,
+		 "66667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 8,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"latitude_of_origin\",58],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 10,
+		 "\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 11,
+		 "sting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12, "PSG\",\"27393\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 27394, "epsg", 27394,
+		      "NGO 1948 (Oslo) / NGO zone IV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6");
+    add_proj4text (p, 1,
+		   "377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,");
+    add_proj4text (p, 2, "7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone IV\",GEOGCS[\"NGO 19");
+    add_srs_wkt (p, 1,
+		 "48 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel Mo");
+    add_srs_wkt (p, 2,
+		 "dified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "05\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.7229166666");
+    add_srs_wkt (p, 5,
+		 "6667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",58],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "2.5],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 12, "SG\",\"27394\"],AXIS[\"x\",NORTH],AXIS[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 27395, "epsg", 27395,
+		      "NGO 1948 (Oslo) / NGO zone V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=2");
+    add_proj4text (p, 2,
+		   "78.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone V\",GEOGCS[\"NGO 194");
+    add_srs_wkt (p, 1,
+		 "8 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel Mod");
+    add_srs_wkt (p, 2,
+		 "ified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "5\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.72291666666");
+    add_srs_wkt (p, 5,
+		 "667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.0174");
+    add_srs_wkt (p, 6,
+		 "5329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",58],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "6.166666666666667],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",0],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"27395\"],AXIS[\"x\",NORTH],AXIS[\"y");
+    add_srs_wkt (p, 13, "\",EAST]]");
+    p = add_epsg_def (first, last, 27396, "epsg", 27396,
+		      "NGO 1948 (Oslo) / NGO zone VI");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=2");
+    add_proj4text (p, 2,
+		   "78.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone VI\",GEOGCS[\"NGO 19");
+    add_srs_wkt (p, 1,
+		 "48 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel Mo");
+    add_srs_wkt (p, 2,
+		 "dified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "05\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUT");
+    add_srs_wkt (p, 4,
+		 "HORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.7229166666");
+    add_srs_wkt (p, 5,
+		 "6667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 6,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 8,
+		 "9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_origin\",58],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 10,
+		 "10.16666666666667],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",0],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"27396\"],AXIS[\"x\",NORTH],AXIS[\"y");
+    add_srs_wkt (p, 13, "\",EAST]]");
+    p = add_epsg_def (first, last, 27397, "epsg", 27397,
+		      "NGO 1948 (Oslo) / NGO zone VII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=2");
+    add_proj4text (p, 2,
+		   "78.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone VII\",GEOGCS[\"NGO 1");
+    add_srs_wkt (p, 1,
+		 "948 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel M");
+    add_srs_wkt (p, 2,
+		 "odified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "005\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.722916666");
+    add_srs_wkt (p, 5,
+		 "66667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 6,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 8,
+		 "\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"latitude_of_origin\",58],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 10,
+		 "\",14.16666666666667],PARAMETER[\"scale_factor\",1],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",0],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"27397\"],AXIS[\"x\",NORTH],AXIS[");
+    add_srs_wkt (p, 13, "\"y\",EAST]]");
+    p = add_epsg_def (first, last, 27398, "epsg", 27398,
+		      "NGO 1948 (Oslo) / NGO zone VIII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0");
+    add_proj4text (p, 1,
+		   "=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=2");
+    add_proj4text (p, 2,
+		   "78.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGO 1948 (Oslo) / NGO zone VIII\",GEOGCS[\"NGO ");
+    add_srs_wkt (p, 1,
+		 "1948 (Oslo)\",DATUM[\"NGO_1948_Oslo\",SPHEROID[\"Bessel ");
+    add_srs_wkt (p, 2,
+		 "Modified\",6377492.018,299.1528128,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7005\"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"6817\"]],PRIMEM[\"Oslo\",10.72291666");
+    add_srs_wkt (p, 5,
+		 "666667,AUTHORITY[\"EPSG\",\"8913\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 6,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4817\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"latitude_of_origin\",58],PARAMETER[\"central_meridia");
+    add_srs_wkt (p, 10,
+		 "n\",18.33333333333333],PARAMETER[\"scale_factor\",1],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",0],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"27398\"],AXIS[\"x\",NORTH],AXIS");
+    add_srs_wkt (p, 13, "[\"y\",EAST]]");
+    p = add_epsg_def (first, last, 27429, "epsg", 27429,
+		      "Datum 73 / UTM zone 29N");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Datum 73 / UTM zone 29N\",GEOGCS[\"Datum 73\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Datum_73\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 2,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "6274\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 4,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 5,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4274\"]],UNIT[\"met");
+    add_srs_wkt (p, 6,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 7,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 8,
+		 "AMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 9,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"27429\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 27492, "epsg", 27492,
+		      "Datum 73 / Modified Portuguese Grid (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111");
+    add_proj4text (p, 1,
+		   "111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=");
+    add_proj4text (p, 2, "intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Datum 73 / Modified Portuguese Grid (deprecated");
+    add_srs_wkt (p, 1,
+		 ")\",GEOGCS[\"Datum 73\",DATUM[\"Datum_73\",SPHEROID[\"In");
+    add_srs_wkt (p, 2,
+		 "ternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6274\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4274\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",39.66666666666666],PARAMETER[\"centr");
+    add_srs_wkt (p, 9,
+		 "al_meridian\",-8.131906111111112],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",1],PARAMETER[\"false_easting\",180.598],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",-86.99],AUTHORITY[\"EPSG\",\"27492\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 27493, "epsg", 27493,
+		      "Datum 73 / Modified Portuguese Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111");
+    add_proj4text (p, 1,
+		   "111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=");
+    add_proj4text (p, 2, "intl +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Datum 73 / Modified Portuguese Grid\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Datum 73\",DATUM[\"Datum_73\",SPHEROID[\"International 1");
+    add_srs_wkt (p, 2,
+		 "924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6274\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4274\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",39.66666666666666],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-8.131906111111112],PARAMETER[\"scale_factor\",1],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_easting\",180.598],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",-86.99],AUTHORITY[\"EPSG\",\"27493\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 12, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27500, "epsg", 27500, "unnamed");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.9995");
+    add_proj4text (p, 1,
+		   "0908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.93325");
+    add_proj4text (p, 2, "5573 +pm=2.3372291666985 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"un");
+    add_srs_wkt (p, 1,
+		 "known\",SPHEROID[\"unnamed\",6376523,308.6399999999991]]");
+    add_srs_wkt (p, 2,
+		 ",PRIMEM[\"unnamed\",2.3372291666985],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 3,
+		 "174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_1");
+    add_srs_wkt (p, 4,
+		 "SP\"],PARAMETER[\"latitude_of_origin\",49.5],PARAMETER[\"");
+    add_srs_wkt (p, 5,
+		 "central_meridian\",5.4],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 6,
+		 "50908],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 7,
+		 "alse_northing\",300000],UNIT[\"Meter\",1],AUTHORITY[\"EP");
+    add_srs_wkt (p, 8, "SG\",\"27500\"]]");
+    p = add_epsg_def (first, last, 27561, "epsg", 27561,
+		      "NTF (Paris) / Lambert Nord France");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a");
+    add_proj4text (p, 2,
+		   "=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=");
+    add_proj4text (p, 3, "paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert Nord France\",GEOGCS[\"NT");
+    add_srs_wkt (p, 1,
+		 "F (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Par");
+    add_srs_wkt (p, 2,
+		 "is\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.466021");
+    add_srs_wkt (p, 3,
+		 "2936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,3");
+    add_srs_wkt (p, 4,
+		 "20,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris");
+    add_srs_wkt (p, 5,
+		 "\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\"");
+    add_srs_wkt (p, 6,
+		 ",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 8,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP");
+    add_srs_wkt (p, 9,
+		 "\"],PARAMETER[\"latitude_of_origin\",55],PARAMETER[\"cen");
+    add_srs_wkt (p, 10,
+		 "tral_meridian\",0],PARAMETER[\"scale_factor\",0.99987734");
+    add_srs_wkt (p, 11,
+		 "1],PARAMETER[\"false_easting\",600000],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_northing\",200000],AUTHORITY[\"EPSG\",\"27561\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27562, "epsg", 27562,
+		      "NTF (Paris) / Lambert Centre France");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.999877");
+    add_proj4text (p, 1,
+		   "42 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towg");
+    add_proj4text (p, 2,
+		   "s84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert Centre France\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_P");
+    add_srs_wkt (p, 2,
+		 "aris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660");
+    add_srs_wkt (p, 3,
+		 "212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60");
+    add_srs_wkt (p, 4,
+		 ",320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Par");
+    add_srs_wkt (p, 5,
+		 "is\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"gra");
+    add_srs_wkt (p, 6,
+		 "d\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 8,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1");
+    add_srs_wkt (p, 9,
+		 "SP\"],PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"c");
+    add_srs_wkt (p, 10,
+		 "entral_meridian\",0],PARAMETER[\"scale_factor\",0.999877");
+    add_srs_wkt (p, 11,
+		 "42],PARAMETER[\"false_easting\",600000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",200000],AUTHORITY[\"EPSG\",\"27562\"],AXIS[");
+    add_srs_wkt (p, 13, "\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27563, "epsg", 27563,
+		      "NTF (Paris) / Lambert Sud France");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a");
+    add_proj4text (p, 2,
+		   "=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=");
+    add_proj4text (p, 3, "paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert Sud France\",GEOGCS[\"NTF");
+    add_srs_wkt (p, 1,
+		 " (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Pari");
+    add_srs_wkt (p, 2,
+		 "s\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212");
+    add_srs_wkt (p, 3,
+		 "936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,32");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\"");
+    add_srs_wkt (p, 5,
+		 ",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",");
+    add_srs_wkt (p, 6,
+		 "0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 8,
+		 "G\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",49],PARAMETER[\"centr");
+    add_srs_wkt (p, 10,
+		 "al_meridian\",0],PARAMETER[\"scale_factor\",0.999877499]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",600000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",200000],AUTHORITY[\"EPSG\",\"27563\"],AXIS[\"X");
+    add_srs_wkt (p, 13, "\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27564, "epsg", 27564,
+		      "NTF (Paris) / Lambert Corse");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.36");
+    add_proj4text (p, 2,
+		   "9 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 ");
+    add_proj4text (p, 3, "+pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert Corse\",GEOGCS[\"NTF (Par");
+    add_srs_wkt (p, 1,
+		 "is)\",DATUM[\"Nouvelle_Triangulation_Francaise_Paris\",S");
+    add_srs_wkt (p, 2,
+		 "PHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293626");
+    add_srs_wkt (p, 3,
+		 "5,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,320,0,0");
+    add_srs_wkt (p, 4,
+		 ",0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\",2.3");
+    add_srs_wkt (p, 5,
+		 "3722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.01");
+    add_srs_wkt (p, 6,
+		 "570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 8,
+		 "\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"latitude_of_origin\",46.85],PARAMETER[\"centr");
+    add_srs_wkt (p, 10,
+		 "al_meridian\",0],PARAMETER[\"scale_factor\",0.99994471],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_easting\",234.358],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",185861.369],AUTHORITY[\"EPSG\",\"27564\"],AXIS");
+    add_srs_wkt (p, 13, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27571, "epsg", 27571,
+		      "NTF (Paris) / Lambert zone I");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +");
+    add_proj4text (p, 2,
+		   "a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm");
+    add_proj4text (p, 3, "=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert zone I\",GEOGCS[\"NTF (Pa");
+    add_srs_wkt (p, 1,
+		 "ris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Paris\",");
+    add_srs_wkt (p, 2,
+		 "SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.46602129362");
+    add_srs_wkt (p, 3,
+		 "65,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,320,0,");
+    add_srs_wkt (p, 4,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\",2.");
+    add_srs_wkt (p, 5,
+		 "33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.0");
+    add_srs_wkt (p, 6,
+		 "1570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORITY");
+    add_srs_wkt (p, 7,
+		 "[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"latitude_of_origin\",55],PARAMETER[\"central");
+    add_srs_wkt (p, 10,
+		 "_meridian\",0],PARAMETER[\"scale_factor\",0.999877341],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",600000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",1200000],AUTHORITY[\"EPSG\",\"27571\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27572, "epsg", 27572,
+		      "NTF (Paris) / Lambert zone II");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.999877");
+    add_proj4text (p, 1,
+		   "42 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +tow");
+    add_proj4text (p, 2,
+		   "gs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert zone II\",GEOGCS[\"NTF (P");
+    add_srs_wkt (p, 1,
+		 "aris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Paris\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936");
+    add_srs_wkt (p, 3,
+		 "265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,320,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\",2");
+    add_srs_wkt (p, 5,
+		 ".33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.");
+    add_srs_wkt (p, 6,
+		 "01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"central");
+    add_srs_wkt (p, 10,
+		 "_meridian\",0],PARAMETER[\"scale_factor\",0.99987742],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",600000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",2200000],AUTHORITY[\"EPSG\",\"27572\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27573, "epsg", 27573,
+		      "NTF (Paris) / Lambert zone III");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +");
+    add_proj4text (p, 2,
+		   "a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm");
+    add_proj4text (p, 3, "=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert zone III\",GEOGCS[\"NTF (");
+    add_srs_wkt (p, 1,
+		 "Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Paris\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936");
+    add_srs_wkt (p, 3,
+		 "265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,320,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\",2");
+    add_srs_wkt (p, 5,
+		 ".33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.");
+    add_srs_wkt (p, 6,
+		 "01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"latitude_of_origin\",49],PARAMETER[\"central");
+    add_srs_wkt (p, 10,
+		 "_meridian\",0],PARAMETER[\"scale_factor\",0.999877499],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_easting\",600000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",3200000],AUTHORITY[\"EPSG\",\"27573\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27574, "epsg", 27574,
+		      "NTF (Paris) / Lambert zone IV");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.3");
+    add_proj4text (p, 2,
+		   "69 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0");
+    add_proj4text (p, 3, " +pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Lambert zone IV\",GEOGCS[\"NTF (P");
+    add_srs_wkt (p, 1,
+		 "aris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Paris\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212936");
+    add_srs_wkt (p, 3,
+		 "265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,320,0");
+    add_srs_wkt (p, 4,
+		 ",0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\",2");
+    add_srs_wkt (p, 5,
+		 ".33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.");
+    add_srs_wkt (p, 6,
+		 "01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORIT");
+    add_srs_wkt (p, 7,
+		 "Y[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 8,
+		 ",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"latitude_of_origin\",46.85],PARAMETER[\"cent");
+    add_srs_wkt (p, 10,
+		 "ral_meridian\",0],PARAMETER[\"scale_factor\",0.99994471]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",234.358],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "northing\",4185861.369],AUTHORITY[\"EPSG\",\"27574\"],AX");
+    add_srs_wkt (p, 13, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27581, "epsg", 27581,
+		      "NTF (Paris) / France I (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +");
+    add_proj4text (p, 2,
+		   "a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm");
+    add_proj4text (p, 3, "=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / France I (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_P");
+    add_srs_wkt (p, 2,
+		 "aris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660");
+    add_srs_wkt (p, 3,
+		 "212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60");
+    add_srs_wkt (p, 4,
+		 ",320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Par");
+    add_srs_wkt (p, 5,
+		 "is\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"gra");
+    add_srs_wkt (p, 6,
+		 "d\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 8,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1");
+    add_srs_wkt (p, 9,
+		 "SP\"],PARAMETER[\"latitude_of_origin\",55],PARAMETER[\"c");
+    add_srs_wkt (p, 10,
+		 "entral_meridian\",0],PARAMETER[\"scale_factor\",0.999877");
+    add_srs_wkt (p, 11,
+		 "341],PARAMETER[\"false_easting\",600000],PARAMETER[\"fal");
+    add_srs_wkt (p, 12,
+		 "se_northing\",1200000],AUTHORITY[\"EPSG\",\"27581\"],AXI");
+    add_srs_wkt (p, 13, "S[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27582, "epsg", 27582,
+		      "NTF (Paris) / France II (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.999877");
+    add_proj4text (p, 1,
+		   "42 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +tow");
+    add_proj4text (p, 2,
+		   "gs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / France II (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_P");
+    add_srs_wkt (p, 2,
+		 "aris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660");
+    add_srs_wkt (p, 3,
+		 "212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60");
+    add_srs_wkt (p, 4,
+		 ",320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Par");
+    add_srs_wkt (p, 5,
+		 "is\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"gra");
+    add_srs_wkt (p, 6,
+		 "d\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 8,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1");
+    add_srs_wkt (p, 9,
+		 "SP\"],PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"c");
+    add_srs_wkt (p, 10,
+		 "entral_meridian\",0],PARAMETER[\"scale_factor\",0.999877");
+    add_srs_wkt (p, 11,
+		 "42],PARAMETER[\"false_easting\",600000],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",2200000],AUTHORITY[\"EPSG\",\"27582\"],AXIS");
+    add_srs_wkt (p, 13, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27583, "epsg", 27583,
+		      "NTF (Paris) / France III (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +");
+    add_proj4text (p, 2,
+		   "a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm");
+    add_proj4text (p, 3, "=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / France III (deprecated)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise");
+    add_srs_wkt (p, 2,
+		 "_Paris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.46");
+    add_srs_wkt (p, 3,
+		 "60212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-");
+    add_srs_wkt (p, 4,
+		 "60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"P");
+    add_srs_wkt (p, 5,
+		 "aris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"g");
+    add_srs_wkt (p, 6,
+		 "rad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY");
+    add_srs_wkt (p, 8,
+		 "[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Coni");
+    add_srs_wkt (p, 9,
+		 "c_1SP\"],PARAMETER[\"latitude_of_origin\",49],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"central_meridian\",0],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 11,
+		 "877499],PARAMETER[\"false_easting\",600000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",3200000],AUTHORITY[\"EPSG\",\"27583\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27584, "epsg", 27584,
+		      "NTF (Paris) / France IV (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.3");
+    add_proj4text (p, 2,
+		   "69 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0");
+    add_proj4text (p, 3, " +pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / France IV (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_P");
+    add_srs_wkt (p, 2,
+		 "aris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660");
+    add_srs_wkt (p, 3,
+		 "212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60");
+    add_srs_wkt (p, 4,
+		 ",320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Par");
+    add_srs_wkt (p, 5,
+		 "is\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"gra");
+    add_srs_wkt (p, 6,
+		 "d\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AU");
+    add_srs_wkt (p, 7,
+		 "THORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 8,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1");
+    add_srs_wkt (p, 9,
+		 "SP\"],PARAMETER[\"latitude_of_origin\",46.85],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"central_meridian\",0],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 11,
+		 "94471],PARAMETER[\"false_easting\",234.358],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",4185861.369],AUTHORITY[\"EPSG\",\"27584");
+    add_srs_wkt (p, 13, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27591, "epsg", 27591,
+		      "NTF (Paris) / Nord France (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a");
+    add_proj4text (p, 2,
+		   "=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=");
+    add_proj4text (p, 3, "paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Nord France (deprecated)\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Francais");
+    add_srs_wkt (p, 2,
+		 "e_Paris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4");
+    add_srs_wkt (p, 3,
+		 "660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,");
+    add_srs_wkt (p, 4,
+		 "-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"");
+    add_srs_wkt (p, 5,
+		 "Paris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"");
+    add_srs_wkt (p, 6,
+		 "grad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Con");
+    add_srs_wkt (p, 9,
+		 "ic_1SP\"],PARAMETER[\"latitude_of_origin\",55],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 11,
+		 "9877341],PARAMETER[\"false_easting\",600000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",200000],AUTHORITY[\"EPSG\",\"27591\"],A");
+    add_srs_wkt (p, 13, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27592, "epsg", 27592,
+		      "NTF (Paris) / Centre France (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.999877");
+    add_proj4text (p, 1,
+		   "42 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towg");
+    add_proj4text (p, 2,
+		   "s84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Centre France (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Franca");
+    add_srs_wkt (p, 2,
+		 "ise_Paris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293");
+    add_srs_wkt (p, 3,
+		 ".4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-16");
+    add_srs_wkt (p, 4,
+		 "8,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[");
+    add_srs_wkt (p, 5,
+		 "\"Paris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[");
+    add_srs_wkt (p, 6,
+		 "\"grad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"");
+    add_srs_wkt (p, 7,
+		 "]],AUTHORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 8,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_C");
+    add_srs_wkt (p, 9,
+		 "onic_1SP\"],PARAMETER[\"latitude_of_origin\",52],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 11,
+		 "99987742],PARAMETER[\"false_easting\",600000],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_northing\",200000],AUTHORITY[\"EPSG\",\"27592\"]");
+    add_srs_wkt (p, 13, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27593, "epsg", 27593,
+		      "NTF (Paris) / Sud France (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a");
+    add_proj4text (p, 2,
+		   "=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=");
+    add_proj4text (p, 3, "paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Sud France (deprecated)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"NTF (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise");
+    add_srs_wkt (p, 2,
+		 "_Paris\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.46");
+    add_srs_wkt (p, 3,
+		 "60212936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-");
+    add_srs_wkt (p, 4,
+		 "60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"P");
+    add_srs_wkt (p, 5,
+		 "aris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"g");
+    add_srs_wkt (p, 6,
+		 "rad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],");
+    add_srs_wkt (p, 7,
+		 "AUTHORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY");
+    add_srs_wkt (p, 8,
+		 "[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Coni");
+    add_srs_wkt (p, 9,
+		 "c_1SP\"],PARAMETER[\"latitude_of_origin\",49],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"central_meridian\",0],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 11,
+		 "877499],PARAMETER[\"false_easting\",600000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",200000],AUTHORITY[\"EPSG\",\"27593\"],A");
+    add_srs_wkt (p, 13, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27594, "epsg", 27594,
+		      "NTF (Paris) / Corse (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000");
+    add_proj4text (p, 1,
+		   "001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.36");
+    add_proj4text (p, 2,
+		   "9 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 ");
+    add_proj4text (p, 3, "+pm=paris +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NTF (Paris) / Corse (deprecated)\",GEOGCS[\"NTF");
+    add_srs_wkt (p, 1,
+		 " (Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Pari");
+    add_srs_wkt (p, 2,
+		 "s\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660212");
+    add_srs_wkt (p, 3,
+		 "936265,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,32");
+    add_srs_wkt (p, 4,
+		 "0,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\"");
+    add_srs_wkt (p, 5,
+		 ",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",");
+    add_srs_wkt (p, 6,
+		 "0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 8,
+		 "G\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",46.85],PARAMETER[\"ce");
+    add_srs_wkt (p, 10,
+		 "ntral_meridian\",0],PARAMETER[\"scale_factor\",0.9999447");
+    add_srs_wkt (p, 11,
+		 "1],PARAMETER[\"false_easting\",234.358],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_northing\",185861.369],AUTHORITY[\"EPSG\",\"27594\"],A");
+    add_srs_wkt (p, 13, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 27700, "epsg", 27700,
+		      "OSGB 1936 / British National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400");
+    add_proj4text (p, 1,
+		   "000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"OSGB 1936 / British National Grid\",GEOGCS[\"OS");
+    add_srs_wkt (p, 1,
+		 "GB 1936\",DATUM[\"OSGB_1936\",SPHEROID[\"Airy 1830\",637");
+    add_srs_wkt (p, 2,
+		 "7563.396,299.3249646,AUTHORITY[\"EPSG\",\"7001\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6277\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"427");
+    add_srs_wkt (p, 6,
+		 "7\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",49],PARAMETER[\"central_meridian\",-2],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9996012717],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",400000],PARAMETER[\"false_northing\",-100000],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"27700\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_23 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 28191, "epsg", 28191,
+		      "Palestine 1923 / Palestine Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=31.73409694444445 +lon_0=35.2120805555");
+    add_proj4text (p, 1,
+		   "5556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6");
+    add_proj4text (p, 2,
+		   "356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.4");
+    add_proj4text (p, 3, "2,-11.821,1 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Palestine 1923 / Palestine Grid\",GEOGCS[\"Pale");
+    add_srs_wkt (p, 1,
+		 "stine 1923\",DATUM[\"Palestine_1923\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1880 (Benoit)\",6378300.789,293.4663155389802,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7010\"]],TOWGS84[-275.722,94.7824,340.894,-8.");
+    add_srs_wkt (p, 4,
+		 "001,-4.42,-11.821,1],AUTHORITY[\"EPSG\",\"6281\"]],PRIME");
+    add_srs_wkt (p, 5,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 6,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 7,
+		 "],AUTHORITY[\"EPSG\",\"4281\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 8,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Cassini_Soldner\"],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"latitude_of_origin\",31.73409694444445],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"central_meridian\",35.21208055555556],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",170251.555],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",126867.909],AUTHORITY[\"EPSG\",\"28191\"],AXIS[\"Eastin");
+    add_srs_wkt (p, 13, "g\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28192, "epsg", 28192,
+		      "Palestine 1923 / Palestine Belt");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.212080555");
+    add_proj4text (p, 1,
+		   "55556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.7");
+    add_proj4text (p, 2,
+		   "89 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.0");
+    add_proj4text (p, 3, "01,-4.42,-11.821,1 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Palestine 1923 / Palestine Belt\",GEOGCS[\"Pale");
+    add_srs_wkt (p, 1,
+		 "stine 1923\",DATUM[\"Palestine_1923\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1880 (Benoit)\",6378300.789,293.4663155389802,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7010\"]],TOWGS84[-275.722,94.7824,340.894,-8.");
+    add_srs_wkt (p, 4,
+		 "001,-4.42,-11.821,1],AUTHORITY[\"EPSG\",\"6281\"]],PRIME");
+    add_srs_wkt (p, 5,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 6,
+		 "egree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]");
+    add_srs_wkt (p, 7,
+		 "],AUTHORITY[\"EPSG\",\"4281\"]],UNIT[\"metre\",1,AUTHORI");
+    add_srs_wkt (p, 8,
+		 "TY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",31.73409694444445],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"central_meridian\",35.21208055555556],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",170251");
+    add_srs_wkt (p, 12,
+		 ".555],PARAMETER[\"false_northing\",1126867.909],AUTHORIT");
+    add_srs_wkt (p, 13,
+		 "Y[\"EPSG\",\"28192\"],AXIS[\"Easting\",EAST],AXIS[\"Nort");
+    add_srs_wkt (p, 14, "hing\",NORTH]]");
+    p = add_epsg_def (first, last, 28193, "epsg", 28193,
+		      "Palestine 1923 / Israeli CS Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=31.73409694444445 +lon_0=35.2120805555");
+    add_proj4text (p, 1,
+		   "5556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=");
+    add_proj4text (p, 2,
+		   "6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.");
+    add_proj4text (p, 3, "42,-11.821,1 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Palestine 1923 / Israeli CS Grid\",GEOGCS[\"Pal");
+    add_srs_wkt (p, 1,
+		 "estine 1923\",DATUM[\"Palestine_1923\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 2,
+		 " 1880 (Benoit)\",6378300.789,293.4663155389802,AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"7010\"]],TOWGS84[-275.722,94.7824,340.894,-8");
+    add_srs_wkt (p, 4,
+		 ".001,-4.42,-11.821,1],AUTHORITY[\"EPSG\",\"6281\"]],PRIM");
+    add_srs_wkt (p, 5,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 6,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 7,
+		 "]],AUTHORITY[\"EPSG\",\"4281\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 8,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Cassini_Soldner\"],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"latitude_of_origin\",31.73409694444445],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"central_meridian\",35.21208055555556],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",170251.555],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 12,
+		 "\",1126867.909],AUTHORITY[\"EPSG\",\"28193\"],AXIS[\"Eas");
+    add_srs_wkt (p, 13, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28232, "epsg", 28232,
+		      "Pointe Noire / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units");
+    add_proj4text (p, 1, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pointe Noire / UTM zone 32S\",GEOGCS[\"Pointe N");
+    add_srs_wkt (p, 1,
+		 "oire\",DATUM[\"Congo_1960_Pointe_Noire\",SPHEROID[\"Clar");
+    add_srs_wkt (p, 2,
+		 "ke 1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7011\"]],AUTHORITY[\"EPSG\",\"6282\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4282\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",500000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "10000000],AUTHORITY[\"EPSG\",\"28232\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 12, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28348, "epsg", 28348, "GDA94 / MGA zone 48");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 48\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",105],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28348\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28349, "epsg", 28349, "GDA94 / MGA zone 49");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 49\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",111],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28349\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28350, "epsg", 28350, "GDA94 / MGA zone 50");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 50\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",117],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28350\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28351, "epsg", 28351, "GDA94 / MGA zone 51");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 51\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",123],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28351\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28352, "epsg", 28352, "GDA94 / MGA zone 52");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 52\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",129],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28352\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28353, "epsg", 28353, "GDA94 / MGA zone 53");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 53\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",135],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28353\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28354, "epsg", 28354, "GDA94 / MGA zone 54");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 54\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",141],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28354\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28355, "epsg", 28355, "GDA94 / MGA zone 55");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 55\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",147],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28355\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28356, "epsg", 28356, "GDA94 / MGA zone 56");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 56\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",153],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28356\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28357, "epsg", 28357, "GDA94 / MGA zone 57");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 57\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",159],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28357\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28358, "epsg", 28358, "GDA94 / MGA zone 58");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"GDA94 / MGA zone 58\",GEOGCS[\"GDA94\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Geocentric_Datum_of_Australia_1994\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6283\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4283\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",165],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"28358\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28402, "epsg", 28402,
+		      "Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",9],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",2");
+    add_srs_wkt (p, 11,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 12, "\",\"28402\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28403, "epsg", 28403,
+		      "Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHERO");
+    add_srs_wkt (p, 2,
+		 "ID[\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12]");
+    add_srs_wkt (p, 4,
+		 ",AUTHORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 6,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",15],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 11,
+		 "3500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"28403\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28404, "epsg", 28404,
+		      "Pulkovo 1942 / Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 4\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",21],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",4500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28404\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28405, "epsg", 28405,
+		      "Pulkovo 1942 / Gauss-Kruger zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 5\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",27],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",5500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28405\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28406, "epsg", 28406,
+		      "Pulkovo 1942 / Gauss-Kruger zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 6\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",33],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",6500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28406\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28407, "epsg", 28407,
+		      "Pulkovo 1942 / Gauss-Kruger zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 7\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",39],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",7500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28407\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28408, "epsg", 28408,
+		      "Pulkovo 1942 / Gauss-Kruger zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 8\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",45],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",8500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28408\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28409, "epsg", 28409,
+		      "Pulkovo 1942 / Gauss-Kruger zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 9\",GEOGCS[\"P");
+    add_srs_wkt (p, 1,
+		 "ulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassows");
+    add_srs_wkt (p, 2,
+		 "ky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",51],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",9500000],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28409\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28410, "epsg", 28410,
+		      "Pulkovo 1942 / Gauss-Kruger zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 10\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",57],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",10500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28410\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28411, "epsg", 28411,
+		      "Pulkovo 1942 / Gauss-Kruger zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 11\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",63],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",11500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28411\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28412, "epsg", 28412,
+		      "Pulkovo 1942 / Gauss-Kruger zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 12\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",69],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",12500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28412\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28413, "epsg", 28413,
+		      "Pulkovo 1942 / Gauss-Kruger zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 13\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",75],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",13500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28413\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28414, "epsg", 28414,
+		      "Pulkovo 1942 / Gauss-Kruger zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 14\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",81],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",14500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28414\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28415, "epsg", 28415,
+		      "Pulkovo 1942 / Gauss-Kruger zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 15\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",87],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",15500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28415\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28416, "epsg", 28416,
+		      "Pulkovo 1942 / Gauss-Kruger zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 16\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",93],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",16500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28416\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28417, "epsg", 28417,
+		      "Pulkovo 1942 / Gauss-Kruger zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 17\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",99],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",1],PARAMETER[\"false_easting\",17500000],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28417\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28418, "epsg", 28418,
+		      "Pulkovo 1942 / Gauss-Kruger zone 18");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 18\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",105],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",18500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28418");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28419, "epsg", 28419,
+		      "Pulkovo 1942 / Gauss-Kruger zone 19");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 19\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",111],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",19500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28419");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28420, "epsg", 28420,
+		      "Pulkovo 1942 / Gauss-Kruger zone 20");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 20\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",117],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",20500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28420");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28421, "epsg", 28421,
+		      "Pulkovo 1942 / Gauss-Kruger zone 21");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 21\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",123],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",21500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28421");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28422, "epsg", 28422,
+		      "Pulkovo 1942 / Gauss-Kruger zone 22");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 22\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",129],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",22500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28422");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28423, "epsg", 28423,
+		      "Pulkovo 1942 / Gauss-Kruger zone 23");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 23\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",135],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",23500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28423");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28424, "epsg", 28424,
+		      "Pulkovo 1942 / Gauss-Kruger zone 24");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 24\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",141],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",24500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28424");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28425, "epsg", 28425,
+		      "Pulkovo 1942 / Gauss-Kruger zone 25");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 25\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",147],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",25500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28425");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28426, "epsg", 28426,
+		      "Pulkovo 1942 / Gauss-Kruger zone 26");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 26\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",153],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",26500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28426");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28427, "epsg", 28427,
+		      "Pulkovo 1942 / Gauss-Kruger zone 27");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 27\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",159],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",27500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28427");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28428, "epsg", 28428,
+		      "Pulkovo 1942 / Gauss-Kruger zone 28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 28\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",165],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",28500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28428");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28429, "epsg", 28429,
+		      "Pulkovo 1942 / Gauss-Kruger zone 29");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 29\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",171],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",29500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28429");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28430, "epsg", 28430,
+		      "Pulkovo 1942 / Gauss-Kruger zone 30");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=");
+    add_proj4text (p, 1, "0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 30\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",177],PARAMETER[\"sc");
+    add_srs_wkt (p, 10,
+		 "ale_factor\",1],PARAMETER[\"false_easting\",30500000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"28430");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28431, "epsg", 28431,
+		      "Pulkovo 1942 / Gauss-Kruger zone 31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 31\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",-177],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",31500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2843");
+    add_srs_wkt (p, 12, "1\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28432, "epsg", 28432,
+		      "Pulkovo 1942 / Gauss-Kruger zone 32");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger zone 32\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"Krassow");
+    add_srs_wkt (p, 2,
+		 "sky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7024\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4284\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 9,
+		 "\",0],PARAMETER[\"central_meridian\",-171],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",1],PARAMETER[\"false_easting\",32500000],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2843");
+    add_srs_wkt (p, 12, "2\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28462, "epsg", 28462,
+		      "Pulkovo 1942 / Gauss-Kruger 2N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +e");
+    add_proj4text (p, 1, "llps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 2N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"scale_factor\",1],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"2");
+    add_srs_wkt (p, 12, "8462\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28463, "epsg", 28463,
+		      "Pulkovo 1942 / Gauss-Kruger 3N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 3N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",15],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "28463\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28464, "epsg", 28464,
+		      "Pulkovo 1942 / Gauss-Kruger 4N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 4N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",21],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "28464\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28465, "epsg", 28465,
+		      "Pulkovo 1942 / Gauss-Kruger 5N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 5N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",27],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "28465\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28466, "epsg", 28466,
+		      "Pulkovo 1942 / Gauss-Kruger 6N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 6N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",33],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "28466\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28467, "epsg", 28467,
+		      "Pulkovo 1942 / Gauss-Kruger 7N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 7N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",39],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "28467\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28468, "epsg", 28468,
+		      "Pulkovo 1942 / Gauss-Kruger 8N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 8N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",45],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "28468\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28469, "epsg", 28469,
+		      "Pulkovo 1942 / Gauss-Kruger 9N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 9N (deprecated)\",G");
+    add_srs_wkt (p, 1,
+		 "EOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "4\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 5,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 6,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 7,
+		 "84\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 8,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",0],PARAMETER[\"central_meridian\",51],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"scale_factor\",1],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "28469\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28470, "epsg", 28470,
+		      "Pulkovo 1942 / Gauss-Kruger 10N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 10N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",57],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28470\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28471, "epsg", 28471,
+		      "Pulkovo 1942 / Gauss-Kruger 11N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 11N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",63],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28471\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28472, "epsg", 28472,
+		      "Pulkovo 1942 / Gauss-Kruger 12N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 12N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",69],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28472\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28473, "epsg", 28473,
+		      "Pulkovo 1942 / Gauss-Kruger 13N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 13N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",75],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28473\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28474, "epsg", 28474,
+		      "Pulkovo 1942 / Gauss-Kruger 14N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 14N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",81],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28474\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28475, "epsg", 28475,
+		      "Pulkovo 1942 / Gauss-Kruger 15N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 15N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",87],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28475\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28476, "epsg", 28476,
+		      "Pulkovo 1942 / Gauss-Kruger 16N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 16N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",93],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28476\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28477, "epsg", 28477,
+		      "Pulkovo 1942 / Gauss-Kruger 17N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 17N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",99],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",1],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"28477\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28478, "epsg", 28478,
+		      "Pulkovo 1942 / Gauss-Kruger 18N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 18N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",105],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28478\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28479, "epsg", 28479,
+		      "Pulkovo 1942 / Gauss-Kruger 19N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 19N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",111],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28479\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28480, "epsg", 28480,
+		      "Pulkovo 1942 / Gauss-Kruger 20N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 20N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",117],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28480\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28481, "epsg", 28481,
+		      "Pulkovo 1942 / Gauss-Kruger 21N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 21N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",123],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28481\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28482, "epsg", 28482,
+		      "Pulkovo 1942 / Gauss-Kruger 22N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 22N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",129],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28482\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28483, "epsg", 28483,
+		      "Pulkovo 1942 / Gauss-Kruger 23N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 23N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",135],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28483\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28484, "epsg", 28484,
+		      "Pulkovo 1942 / Gauss-Kruger 24N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 24N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",141],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28484\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28485, "epsg", 28485,
+		      "Pulkovo 1942 / Gauss-Kruger 25N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 25N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",147],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28485\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28486, "epsg", 28486,
+		      "Pulkovo 1942 / Gauss-Kruger 26N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 26N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",153],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28486\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28487, "epsg", 28487,
+		      "Pulkovo 1942 / Gauss-Kruger 27N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 27N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",159],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28487\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28488, "epsg", 28488,
+		      "Pulkovo 1942 / Gauss-Kruger 28N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 28N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",165],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28488\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28489, "epsg", 28489,
+		      "Pulkovo 1942 / Gauss-Kruger 29N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 29N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",171],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28489\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28490, "epsg", 28490,
+		      "Pulkovo 1942 / Gauss-Kruger 30N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 30N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",177],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"scale_factor\",1],PARAMETER[\"false_easting\",50");
+    add_srs_wkt (p, 11,
+		 "0000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28490\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28491, "epsg", 28491,
+		      "Pulkovo 1942 / Gauss-Kruger 31N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 31N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-177],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28491\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28492, "epsg", 28492,
+		      "Pulkovo 1942 / Gauss-Kruger 32N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0");
+    add_proj4text (p, 1, " +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Pulkovo 1942 / Gauss-Kruger 32N (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Pulkovo 1942\",DATUM[\"Pulkovo_1942\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Krassowsky 1940\",6378245,298.3,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "024\"]],TOWGS84[23.9,-141.3,-80.9,-0,0.37,0.85,-0.12],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6284\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4284\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-171],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"28492\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 28600, "epsg", 28600,
+		      "Qatar 1974 / Qatar National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Qatar 1974 / Qatar National Grid\",GEOGCS[\"Qat");
+    add_srs_wkt (p, 1,
+		 "ar 1974\",DATUM[\"Qatar_1974\",SPHEROID[\"International ");
+    add_srs_wkt (p, 2,
+		 "1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6285\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4285\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",24.45],PARAMETER[\"central_meridian\",51.21666666");
+    add_srs_wkt (p, 9,
+		 "666667],PARAMETER[\"scale_factor\",0.99999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",200000],PARAMETER[\"false_northing\",300");
+    add_srs_wkt (p, 11,
+		 "000],AUTHORITY[\"EPSG\",\"28600\"],AXIS[\"Easting\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 28991, "epsg", 28991, "Amersfoort / RD Old");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.387638888");
+    add_proj4text (p, 1,
+		   "88889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Amersfoort / RD Old\",GEOGCS[\"Amersfoort\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Amersfoort\",SPHEROID[\"Bessel 1841\",6377397.155,2");
+    add_srs_wkt (p, 2,
+		 "99.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6289\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4289\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",52.15616055555555],PARAMETER[\"central_meridian\",5.387");
+    add_srs_wkt (p, 9,
+		 "63888888889],PARAMETER[\"scale_factor\",0.9999079],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",0],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 11,
+		 "],AUTHORITY[\"EPSG\",\"28991\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 28992, "epsg", 28992, "Amersfoort / RD New");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.387638888");
+    add_proj4text (p, 1,
+		   "88889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Amersfoort / RD New\",GEOGCS[\"Amersfoort\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"Amersfoort\",SPHEROID[\"Bessel 1841\",6377397.155,2");
+    add_srs_wkt (p, 2,
+		 "99.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"6289\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4289\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",52.15616055555555],PARAMETER[\"central_meridian\",5.387");
+    add_srs_wkt (p, 9,
+		 "63888888889],PARAMETER[\"scale_factor\",0.9999079],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",155000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 11,
+		 "g\",463000],AUTHORITY[\"EPSG\",\"28992\"],AXIS[\"X\",EAS");
+    add_srs_wkt (p, 12, "T],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 29100, "epsg", 29100,
+		      "SAD69 / Brazil Polyconic (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=1000000");
+    add_proj4text (p, 1, "0 +ellps=GRS67 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / Brazil Polyconic (deprecated)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"SAD69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "GRS 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "36\"]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "32925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Polyconic\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",0],PARAMETER[\"central_meridian\",-54],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"false_easting\",5000000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 10,
+		 "\",10000000],AUTHORITY[\"EPSG\",\"29100\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 11, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 29101, "epsg", 29101,
+		      "SAD69 / Brazil Polyconic");
+    add_proj4text (p, 0,
+		   "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=1000000");
+    add_proj4text (p, 1, "0 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / Brazil Polyconic\",GEOGCS[\"SAD69\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"South_American_Datum_1969\",SPHEROID[\"GRS 1967 Mod");
+    add_srs_wkt (p, 2,
+		 "ified\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "618\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Polyconic\"],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 8,
+		 ",0],PARAMETER[\"central_meridian\",-54],PARAMETER[\"fals");
+    add_srs_wkt (p, 9,
+		 "e_easting\",5000000],PARAMETER[\"false_northing\",100000");
+    add_srs_wkt (p, 10,
+		 "00],AUTHORITY[\"EPSG\",\"29101\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 11, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 29118, "epsg", 29118,
+		      "SAD69 / UTM zone 18N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 18N (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-75],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"29118\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 29119, "epsg", 29119,
+		      "SAD69 / UTM zone 19N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 19N (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-69],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"29119\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 29120, "epsg", 29120,
+		      "SAD69 / UTM zone 20N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 20N (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-63],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"29120\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 29121, "epsg", 29121,
+		      "SAD69 / UTM zone 21N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 21N (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-57],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"29121\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 29122, "epsg", 29122,
+		      "SAD69 / UTM zone 22N (deprecated)");
+    add_proj4text (p, 0, "+proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 22N (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-51],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"29122\"],AXIS[\"Easting\",EAST],AXIS[\"Northi");
+    add_srs_wkt (p, 12, "ng\",NORTH]]");
+    p = add_epsg_def (first, last, 29168, "epsg", 29168,
+		      "SAD69 / UTM zone 18N");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 18N\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "29168\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 29169, "epsg", 29169,
+		      "SAD69 / UTM zone 19N");
+    add_proj4text (p, 0, "+proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 19N\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "29169\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 29170, "epsg", 29170,
+		      "SAD69 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 20N\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "29170\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 29171, "epsg", 29171,
+		      "SAD69 / UTM zone 21N");
+    add_proj4text (p, 0, "+proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 21N\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "29171\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 29172, "epsg", 29172,
+		      "SAD69 / UTM zone 22N");
+    add_proj4text (p, 0, "+proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 22N\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "29172\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 29177, "epsg", 29177,
+		      "SAD69 / UTM zone 17S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 17S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-81],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29177\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29178, "epsg", 29178,
+		      "SAD69 / UTM zone 18S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 18S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-75],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29178\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29179, "epsg", 29179,
+		      "SAD69 / UTM zone 19S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 19S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-69],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29179\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29180, "epsg", 29180,
+		      "SAD69 / UTM zone 20S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 20S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-63],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29180\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29181, "epsg", 29181,
+		      "SAD69 / UTM zone 21S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 21S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-57],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29181\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29182, "epsg", 29182,
+		      "SAD69 / UTM zone 22S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 22S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-51],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29182\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29183, "epsg", 29183,
+		      "SAD69 / UTM zone 23S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 23S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-45],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29183\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29184, "epsg", 29184,
+		      "SAD69 / UTM zone 24S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 24S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-39],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29184\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29185, "epsg", 29185,
+		      "SAD69 / UTM zone 25S (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 25S (deprecated)\",GEOGCS[\"SA");
+    add_srs_wkt (p, 1,
+		 "D69\",DATUM[\"South_American_Datum_1969\",SPHEROID[\"GRS");
+    add_srs_wkt (p, 2,
+		 " 1967\",6378160,298.247167427,AUTHORITY[\"EPSG\",\"7036\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6291\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "25199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4291\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-33],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",500000],PARAMETER[\"false_northing\",10000000],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"29185\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29187, "epsg", 29187,
+		      "SAD69 / UTM zone 17S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 17S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29187\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29188, "epsg", 29188,
+		      "SAD69 / UTM zone 18S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 18S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29188\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29189, "epsg", 29189,
+		      "SAD69 / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 19S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-69],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29189\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29190, "epsg", 29190,
+		      "SAD69 / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 20S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-63],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29190\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29191, "epsg", 29191,
+		      "SAD69 / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 21S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-57],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29191\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29192, "epsg", 29192,
+		      "SAD69 / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 22S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-51],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29192\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29193, "epsg", 29193,
+		      "SAD69 / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 23S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-45],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29193\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29194, "epsg", 29194,
+		      "SAD69 / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 24S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-39],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29194\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29195, "epsg", 29195,
+		      "SAD69 / UTM zone 25S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_de");
+    add_proj4text (p, 1, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SAD69 / UTM zone 25S\",GEOGCS[\"SAD69\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "South_American_Datum_1969\",SPHEROID[\"GRS 1967 Modified");
+    add_srs_wkt (p, 2,
+		 "\",6378160,298.25,AUTHORITY[\"EPSG\",\"7050\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6618\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4618\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",-33],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9996],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",10000000],AUTHORITY[\"EP");
+    add_srs_wkt (p, 11,
+		 "SG\",\"29195\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 29220, "epsg", 29220,
+		      "Sapper Hill 1943 / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,7");
+    add_proj4text (p, 1, "2,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sapper Hill 1943 / UTM zone 20S\",GEOGCS[\"Sapp");
+    add_srs_wkt (p, 1,
+		 "er Hill 1943\",DATUM[\"Sapper_Hill_1943\",SPHEROID[\"Int");
+    add_srs_wkt (p, 2,
+		 "ernational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY[\"EPSG\",\"6292");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4292\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"29220\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29221, "epsg", 29221,
+		      "Sapper Hill 1943 / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,7");
+    add_proj4text (p, 1, "2,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sapper Hill 1943 / UTM zone 21S\",GEOGCS[\"Sapp");
+    add_srs_wkt (p, 1,
+		 "er Hill 1943\",DATUM[\"Sapper_Hill_1943\",SPHEROID[\"Int");
+    add_srs_wkt (p, 2,
+		 "ernational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY[\"EPSG\",\"6292");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4292\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"29221\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29333, "epsg", 29333,
+		      "Schwarzeck / UTM zone 33S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_d");
+    add_proj4text (p, 1, "efs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Schwarzeck / UTM zone 33S\",GEOGCS[\"Schwarzeck");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Schwarzeck\",SPHEROID[\"Bessel Namibia (GLM)\"");
+    add_srs_wkt (p, 2,
+		 ",6377483.865280419,299.1528128,AUTHORITY[\"EPSG\",\"7046");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6293\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4293\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 7,
+		 "01\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"l");
+    add_srs_wkt (p, 8,
+		 "atitude_of_origin\",0],PARAMETER[\"central_meridian\",15");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 10,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"29333\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29635, "epsg", 29635,
+		      "Sudan / UTM zone 35N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_");
+    add_proj4text (p, 1, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sudan / UTM zone 35N (deprecated)\",GEOGCS[\"Su");
+    add_srs_wkt (p, 1,
+		 "dan\",DATUM[\"Sudan\",SPHEROID[\"Clarke 1880 (IGN)\",637");
+    add_srs_wkt (p, 2,
+		 "8249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6296\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4296\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",27],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"29635\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 29636, "epsg", 29636,
+		      "Sudan / UTM zone 36N (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_");
+    add_proj4text (p, 1, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Sudan / UTM zone 36N (deprecated)\",GEOGCS[\"Su");
+    add_srs_wkt (p, 1,
+		 "dan\",DATUM[\"Sudan\",SPHEROID[\"Clarke 1880 (IGN)\",637");
+    add_srs_wkt (p, 2,
+		 "8249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"7011\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6296\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "9433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4296\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",33],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 11,
+		 "G\",\"29636\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 29700, "epsg", 29700,
+		      "Tananarive (Paris) / Laborde Grid (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=");
+    add_proj4text (p, 1,
+		   "18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellp");
+    add_proj4text (p, 2,
+		   "s=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tananarive (Paris) / Laborde Grid (deprecated)\"");
+    add_srs_wkt (p, 1,
+		 ",GEOGCS[\"Tananarive (Paris)\",DATUM[\"Tananarive_1925_P");
+    add_srs_wkt (p, 2,
+		 "aris\",SPHEROID[\"International 1924\",6378388,297,AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"7022\"]],TOWGS84[-189,-242,-91,0,0,0,0],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6810\"]],PRIMEM[\"Paris\",2.3372291");
+    add_srs_wkt (p, 5,
+		 "7,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.01570796");
+    add_srs_wkt (p, 6,
+		 "326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"4810\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 8,
+		 "\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "latitude_of_center\",-21],PARAMETER[\"longitude_of_cente");
+    add_srs_wkt (p, 10,
+		 "r\",49],PARAMETER[\"azimuth\",21],PARAMETER[\"rectified_");
+    add_srs_wkt (p, 11,
+		 "grid_angle\",21],PARAMETER[\"scale_factor\",0.9995],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_easting\",400000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 13,
+		 "ng\",800000],AUTHORITY[\"EPSG\",\"29700\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 14, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 29702, "epsg", 29702,
+		      "Tananarive (Paris) / Laborde Grid approximation");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=");
+    add_proj4text (p, 1,
+		   "18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellp");
+    add_proj4text (p, 2,
+		   "s=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tananarive (Paris) / Laborde Grid approximation");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"Tananarive (Paris)\",DATUM[\"Tananarive_1925");
+    add_srs_wkt (p, 2,
+		 "_Paris\",SPHEROID[\"International 1924\",6378388,297,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7022\"]],TOWGS84[-189,-242,-91,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6810\"]],PRIMEM[\"Paris\",2.33722");
+    add_srs_wkt (p, 5,
+		 "917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.015707");
+    add_srs_wkt (p, 6,
+		 "96326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"4810\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"90");
+    add_srs_wkt (p, 8,
+		 "01\"]],PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"latitude_of_center\",-21],PARAMETER[\"longitude_of_ce");
+    add_srs_wkt (p, 10,
+		 "nter\",49],PARAMETER[\"azimuth\",21],PARAMETER[\"rectifi");
+    add_srs_wkt (p, 11,
+		 "ed_grid_angle\",21],PARAMETER[\"scale_factor\",0.9995],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_easting\",400000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 13,
+		 "thing\",800000],AUTHORITY[\"EPSG\",\"29702\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 29738, "epsg", 29738,
+		      "Tananarive / UTM zone 38S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242");
+    add_proj4text (p, 1, ",-91,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tananarive / UTM zone 38S\",GEOGCS[\"Tananarive");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Tananarive_1925\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-");
+    add_srs_wkt (p, 3,
+		 "189,-242,-91,0,0,0,0],AUTHORITY[\"EPSG\",\"6297\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4297\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"29738\"],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29739, "epsg", 29739,
+		      "Tananarive / UTM zone 39S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242");
+    add_proj4text (p, 1, ",-91,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tananarive / UTM zone 39S\",GEOGCS[\"Tananarive");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"Tananarive_1925\",SPHEROID[\"International 19");
+    add_srs_wkt (p, 2,
+		 "24\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-");
+    add_srs_wkt (p, 3,
+		 "189,-242,-91,0,0,0,0],AUTHORITY[\"EPSG\",\"6297\"]],PRIM");
+    add_srs_wkt (p, 4,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4297\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 11,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"29739\"],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29849, "epsg", 29849,
+		      "Timbalai 1948 / UTM zone 49N");
+    add_proj4text (p, 0, "+proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Timbalai 1948 / UTM zone 49N\",GEOGCS[\"Timbala");
+    add_srs_wkt (p, 1,
+		 "i 1948\",DATUM[\"Timbalai_1948\",SPHEROID[\"Everest 1830");
+    add_srs_wkt (p, 2,
+		 " (1967 Definition)\",6377298.556,300.8017,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7016\"]],AUTHORITY[\"EPSG\",\"6298\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4298\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",111],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"29849\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29850, "epsg", 29850,
+		      "Timbalai 1948 / UTM zone 50N");
+    add_proj4text (p, 0, "+proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Timbalai 1948 / UTM zone 50N\",GEOGCS[\"Timbala");
+    add_srs_wkt (p, 1,
+		 "i 1948\",DATUM[\"Timbalai_1948\",SPHEROID[\"Everest 1830");
+    add_srs_wkt (p, 2,
+		 " (1967 Definition)\",6377298.556,300.8017,AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"7016\"]],AUTHORITY[\"EPSG\",\"6298\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4298\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",117],PARAMETER[\"scale_factor\",0.9996],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"29850\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29871, "epsg", 29871,
+		      "Timbalai 1948 / RSO Borneo (ch)");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 ");
+    add_proj4text (p, 1,
+		   "+k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 ");
+    add_proj4text (p, 2, "+ellps=evrstSS +to_meter=20.11676512155263 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Timbalai 1948 / RSO Borneo (ch)\",GEOGCS[\"Timb");
+    add_srs_wkt (p, 1,
+		 "alai 1948\",DATUM[\"Timbalai_1948\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1967 Definition)\",6377298.556,300.8017,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7016\"]],AUTHORITY[\"EPSG\",\"6298\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4298\"]],UNIT[\"British chain (Sears ");
+    add_srs_wkt (p, 7,
+		 "1922)\",20.11676512155263,AUTHORITY[\"EPSG\",\"9042\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"lati");
+    add_srs_wkt (p, 9,
+		 "tude_of_center\",4],PARAMETER[\"longitude_of_center\",11");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"azimuth\",53.31582047222222],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "rectified_grid_angle\",53.13010236111111],PARAMETER[\"sc");
+    add_srs_wkt (p, 12,
+		 "ale_factor\",0.99984],PARAMETER[\"false_easting\",29352.");
+    add_srs_wkt (p, 13,
+		 "4763],PARAMETER[\"false_northing\",22014.3572],AUTHORITY");
+    add_srs_wkt (p, 14,
+		 "[\"EPSG\",\"29871\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 15, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 29872, "epsg", 29872,
+		      "Timbalai 1948 / RSO Borneo (ft)");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 ");
+    add_proj4text (p, 1,
+		   "+k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985");
+    add_proj4text (p, 2,
+		   " +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Timbalai 1948 / RSO Borneo (ft)\",GEOGCS[\"Timb");
+    add_srs_wkt (p, 1,
+		 "alai 1948\",DATUM[\"Timbalai_1948\",SPHEROID[\"Everest 1");
+    add_srs_wkt (p, 2,
+		 "830 (1967 Definition)\",6377298.556,300.8017,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7016\"]],AUTHORITY[\"EPSG\",\"6298\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4298\"]],UNIT[\"British foot (Sears 1");
+    add_srs_wkt (p, 7,
+		 "922)\",0.3047994715386762,AUTHORITY[\"EPSG\",\"9041\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Hotine_Oblique_Mercator\"],PARAMETER[\"lati");
+    add_srs_wkt (p, 9,
+		 "tude_of_center\",4],PARAMETER[\"longitude_of_center\",11");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"azimuth\",53.31582047222222],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "rectified_grid_angle\",53.13010236111111],PARAMETER[\"sc");
+    add_srs_wkt (p, 12,
+		 "ale_factor\",0.99984],PARAMETER[\"false_easting\",193726");
+    add_srs_wkt (p, 13,
+		 "3.44],PARAMETER[\"false_northing\",1452947.58],AUTHORITY");
+    add_srs_wkt (p, 14,
+		 "[\"EPSG\",\"29872\"],AXIS[\"Easting\",EAST],AXIS[\"North");
+    add_srs_wkt (p, 15, "ing\",NORTH]]");
+    p = add_epsg_def (first, last, 29873, "epsg", 29873,
+		      "Timbalai 1948 / RSO Borneo (m)");
+    add_proj4text (p, 0,
+		   "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 ");
+    add_proj4text (p, 1,
+		   "+k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Timbalai 1948 / RSO Borneo (m)\",GEOGCS[\"Timba");
+    add_srs_wkt (p, 1,
+		 "lai 1948\",DATUM[\"Timbalai_1948\",SPHEROID[\"Everest 18");
+    add_srs_wkt (p, 2,
+		 "30 (1967 Definition)\",6377298.556,300.8017,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7016\"]],AUTHORITY[\"EPSG\",\"6298\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4298\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Hotine_Oblique_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_center\",4],PARAMETER[\"longit");
+    add_srs_wkt (p, 9,
+		 "ude_of_center\",115],PARAMETER[\"azimuth\",53.3158204722");
+    add_srs_wkt (p, 10,
+		 "2222],PARAMETER[\"rectified_grid_angle\",53.130102361111");
+    add_srs_wkt (p, 11,
+		 "11],PARAMETER[\"scale_factor\",0.99984],PARAMETER[\"fals");
+    add_srs_wkt (p, 12,
+		 "e_easting\",590476.87],PARAMETER[\"false_northing\",4428");
+    add_srs_wkt (p, 13,
+		 "57.65],AUTHORITY[\"EPSG\",\"29873\"],AXIS[\"Easting\",EA");
+    add_srs_wkt (p, 14, "ST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29900, "epsg", 29900,
+		      "TM65 / Irish National Grid (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=20000");
+    add_proj4text (p, 1,
+		   "0 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TM65 / Irish National Grid (deprecated)\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"TM65\",DATUM[\"TM65\",SPHEROID[\"Airy Modified 1849\"");
+    add_srs_wkt (p, 2,
+		 ",6377340.189,299.3249646,AUTHORITY[\"EPSG\",\"7002\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6299\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4299\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",53.5],PARAMETER[\"central_meridian\",-8],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",1.000035],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",200000],PARAMETER[\"false_northing\",250000],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"29900\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29901, "epsg", 29901,
+		      "OSNI 1952 / Irish National Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=");
+    add_proj4text (p, 1,
+		   "250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0");
+    add_proj4text (p, 2, ".214,-0.631,8.15 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"OSNI 1952 / Irish National Grid\",GEOGCS[\"OSNI");
+    add_srs_wkt (p, 1,
+		 " 1952\",DATUM[\"OSNI_1952\",SPHEROID[\"Airy 1830\",63775");
+    add_srs_wkt (p, 2,
+		 "63.396,299.3249646,AUTHORITY[\"EPSG\",\"7001\"]],TOWGS84");
+    add_srs_wkt (p, 3,
+		 "[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"6188\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4188\"]");
+    add_srs_wkt (p, 7,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 8,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 9,
+		 "gin\",53.5],PARAMETER[\"central_meridian\",-8],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",200000]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",250000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12,
+		 ",\"29901\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 29902, "epsg", 29902, "TM65 / Irish Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=20000");
+    add_proj4text (p, 1,
+		   "0 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TM65 / Irish Grid\",GEOGCS[\"TM65\",DATUM[\"TM6");
+    add_srs_wkt (p, 1,
+		 "5\",SPHEROID[\"Airy Modified 1849\",6377340.189,299.3249");
+    add_srs_wkt (p, 2,
+		 "646,AUTHORITY[\"EPSG\",\"7002\"]],AUTHORITY[\"EPSG\",\"6");
+    add_srs_wkt (p, 3,
+		 "299\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901");
+    add_srs_wkt (p, 4,
+		 "\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"9122\"]],AUTHORITY[\"EPSG\",\"4299\"]],UNIT[\"metr");
+    add_srs_wkt (p, 6,
+		 "e\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transve");
+    add_srs_wkt (p, 7,
+		 "rse_Mercator\"],PARAMETER[\"latitude_of_origin\",53.5],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",-8],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 9,
+		 "or\",1.000035],PARAMETER[\"false_easting\",200000],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_northing\",250000],AUTHORITY[\"EPSG\",\"299");
+    add_srs_wkt (p, 11,
+		 "02\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 29903, "epsg", 29903, "TM75 / Irish Grid");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=20000");
+    add_proj4text (p, 1, "0 +y_0=250000 +ellps=mod_airy +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TM75 / Irish Grid\",GEOGCS[\"TM75\",DATUM[\"Geo");
+    add_srs_wkt (p, 1,
+		 "detic_Datum_of_1965\",SPHEROID[\"Airy Modified 1849\",63");
+    add_srs_wkt (p, 2,
+		 "77340.189,299.3249646,AUTHORITY[\"EPSG\",\"7002\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6300\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"43");
+    add_srs_wkt (p, 6,
+		 "00\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 8,
+		 "f_origin\",53.5],PARAMETER[\"central_meridian\",-8],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",1.000035],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",200000],PARAMETER[\"false_northing\",250000],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"29903\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 12, "rthing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_24 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 30161, "epsg", 30161,
+		      "Tokyo / Japan Plane Rectangular CS I");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS I\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377397");
+    add_srs_wkt (p, 2,
+		 ".155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",33],PARAMETER[\"central_meridian\",129.5],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 11, "0161\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30162, "epsg", 30162,
+		      "Tokyo / Japan Plane Rectangular CS II");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS II\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",63773");
+    add_srs_wkt (p, 2,
+		 "97.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",33],PARAMETER[\"central_meridian\",131],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "162\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30163, "epsg", 30163,
+		      "Tokyo / Japan Plane Rectangular CS III");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999");
+    add_proj4text (p, 1, " +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS III\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377");
+    add_srs_wkt (p, 2,
+		 "397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",36],PARAMETER[\"central_meridian\",132.16666666");
+    add_srs_wkt (p, 9,
+		 "66667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",0],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"30163\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 30164, "epsg", 30164,
+		      "Tokyo / Japan Plane Rectangular CS IV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS IV\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",63773");
+    add_srs_wkt (p, 2,
+		 "97.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",33],PARAMETER[\"central_meridian\",133.5],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30164\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30165, "epsg", 30165,
+		      "Tokyo / Japan Plane Rectangular CS V");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999");
+    add_proj4text (p, 1, " +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS V\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377397");
+    add_srs_wkt (p, 2,
+		 ".155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",36],PARAMETER[\"central_meridian\",134.33333333333");
+    add_srs_wkt (p, 9,
+		 "33],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"30165\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30166, "epsg", 30166,
+		      "Tokyo / Japan Plane Rectangular CS VI");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS VI\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",63773");
+    add_srs_wkt (p, 2,
+		 "97.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",36],PARAMETER[\"central_meridian\",136],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30");
+    add_srs_wkt (p, 11, "166\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30167, "epsg", 30167,
+		      "Tokyo / Japan Plane Rectangular CS VII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999");
+    add_proj4text (p, 1, " +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS VII\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377");
+    add_srs_wkt (p, 2,
+		 "397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",36],PARAMETER[\"central_meridian\",137.16666666");
+    add_srs_wkt (p, 9,
+		 "66667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",0],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 11,
+		 "TY[\"EPSG\",\"30167\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST");
+    add_srs_wkt (p, 12, "]]");
+    p = add_epsg_def (first, last, 30168, "epsg", 30168,
+		      "Tokyo / Japan Plane Rectangular CS VIII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS VIII\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",637");
+    add_srs_wkt (p, 2,
+		 "7397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"430");
+    add_srs_wkt (p, 6,
+		 "1\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",36],PARAMETER[\"central_meridian\",138.5],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9999],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"30168\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30169, "epsg", 30169,
+		      "Tokyo / Japan Plane Rectangular CS IX");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999");
+    add_proj4text (p, 1, " +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS IX\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",63773");
+    add_srs_wkt (p, 2,
+		 "97.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",36],PARAMETER[\"central_meridian\",139.8333333333");
+    add_srs_wkt (p, 9,
+		 "333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"30169\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 30170, "epsg", 30170,
+		      "Tokyo / Japan Plane Rectangular CS X");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999");
+    add_proj4text (p, 1, " +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS X\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377397");
+    add_srs_wkt (p, 2,
+		 ".155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",40],PARAMETER[\"central_meridian\",140.83333333333");
+    add_srs_wkt (p, 9,
+		 "33],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"30170\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30171, "epsg", 30171,
+		      "Tokyo / Japan Plane Rectangular CS XI");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XI\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",63773");
+    add_srs_wkt (p, 2,
+		 "97.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",44],PARAMETER[\"central_meridian\",140.25],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30171\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30172, "epsg", 30172,
+		      "Tokyo / Japan Plane Rectangular CS XII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XII\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377");
+    add_srs_wkt (p, 2,
+		 "397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",44],PARAMETER[\"central_meridian\",142.25],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9999],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"30172\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30173, "epsg", 30173,
+		      "Tokyo / Japan Plane Rectangular CS XIII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XIII\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",637");
+    add_srs_wkt (p, 2,
+		 "7397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"430");
+    add_srs_wkt (p, 6,
+		 "1\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",44],PARAMETER[\"central_meridian\",144.25],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"scale_factor\",0.9999],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 10,
+		 "g\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 11, ",\"30173\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30174, "epsg", 30174,
+		      "Tokyo / Japan Plane Rectangular CS XIV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XIV\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377");
+    add_srs_wkt (p, 2,
+		 "397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",26],PARAMETER[\"central_meridian\",142],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30174\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30175, "epsg", 30175,
+		      "Tokyo / Japan Plane Rectangular CS XV");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0");
+    add_proj4text (p, 1, "=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XV\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",63773");
+    add_srs_wkt (p, 2,
+		 "97.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",26],PARAMETER[\"central_meridian\",127.5],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30175\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30176, "epsg", 30176,
+		      "Tokyo / Japan Plane Rectangular CS XVI");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XVI\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377");
+    add_srs_wkt (p, 2,
+		 "397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",26],PARAMETER[\"central_meridian\",124],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30176\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30177, "epsg", 30177,
+		      "Tokyo / Japan Plane Rectangular CS XVII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XVII\",GEOGC");
+    add_srs_wkt (p, 1,
+		 "S[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",637");
+    add_srs_wkt (p, 2,
+		 "7397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"430");
+    add_srs_wkt (p, 6,
+		 "1\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",26],PARAMETER[\"central_meridian\",131],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30177\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30178, "epsg", 30178,
+		      "Tokyo / Japan Plane Rectangular CS XVIII");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XVIII\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",63");
+    add_srs_wkt (p, 2,
+		 "77397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"43");
+    add_srs_wkt (p, 6,
+		 "01\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 8,
+		 "f_origin\",20],PARAMETER[\"central_meridian\",136],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 10,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30178\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30179, "epsg", 30179,
+		      "Tokyo / Japan Plane Rectangular CS XIX");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0");
+    add_proj4text (p, 1, " +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Tokyo / Japan Plane Rectangular CS XIX\",GEOGCS");
+    add_srs_wkt (p, 1,
+		 "[\"Tokyo\",DATUM[\"Tokyo\",SPHEROID[\"Bessel 1841\",6377");
+    add_srs_wkt (p, 2,
+		 "397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6301\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4301");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",26],PARAMETER[\"central_meridian\",154],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "30179\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 30200, "epsg", 30200,
+		      "Trinidad 1903 / Trinidad Grid");
+    add_proj4text (p, 0,
+		   "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.333333333");
+    add_proj4text (p, 1,
+		   "33334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=63782");
+    add_proj4text (p, 2,
+		   "93.645208759 +b=6356617.987679838 +to_meter=0.2011661951");
+    add_proj4text (p, 3, "64 +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Trinidad 1903 / Trinidad Grid\",GEOGCS[\"Trinid");
+    add_srs_wkt (p, 1,
+		 "ad 1903\",DATUM[\"Trinidad_1903\",SPHEROID[\"Clarke 1858");
+    add_srs_wkt (p, 2,
+		 "\",6378293.645208759,294.2606763692569,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7007\"]],AUTHORITY[\"EPSG\",\"6302\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4302\"]],UNIT[\"Clarke's link\",0.20116619");
+    add_srs_wkt (p, 7,
+		 "5164,AUTHORITY[\"EPSG\",\"9039\"]],PROJECTION[\"Cassini_");
+    add_srs_wkt (p, 8,
+		 "Soldner\"],PARAMETER[\"latitude_of_origin\",10.441666666");
+    add_srs_wkt (p, 9,
+		 "66667],PARAMETER[\"central_meridian\",-61.33333333333334");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",430000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",325000],AUTHORITY[\"EPSG\",\"30200\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 30339, "epsg", 30339,
+		      "TC(1948) / UTM zone 39N");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=helmert +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TC(1948) / UTM zone 39N\",GEOGCS[\"TC(1948)\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Trucial_Coast_1948\",SPHEROID[\"Helmert 1906\",63");
+    add_srs_wkt (p, 2,
+		 "78200,298.3,AUTHORITY[\"EPSG\",\"7020\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6303\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4303\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",51],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30339\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 30340, "epsg", 30340,
+		      "TC(1948) / UTM zone 40N");
+    add_proj4text (p, 0, "+proj=utm +zone=40 +ellps=helmert +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"TC(1948) / UTM zone 40N\",GEOGCS[\"TC(1948)\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Trucial_Coast_1948\",SPHEROID[\"Helmert 1906\",63");
+    add_srs_wkt (p, 2,
+		 "78200,298.3,AUTHORITY[\"EPSG\",\"7020\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6303\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4303\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",57],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"30340\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 30491, "epsg", 30491,
+		      "Voirol 1875 / Nord Algerie (ancienne)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.99962554");
+    add_proj4text (p, 1,
+		   "4 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs");
+    add_proj4text (p, 2, "84=-73,-247,227,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Voirol 1875 / Nord Algerie (ancienne)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Voirol 1875\",DATUM[\"Voirol_1875\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7011\"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"6304\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 5,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4304\"]],U");
+    add_srs_wkt (p, 7,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 8,
+		 "[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 9,
+		 "f_origin\",36],PARAMETER[\"central_meridian\",2.7],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.999625544],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",500000],PARAMETER[\"false_northing\",300000],AUTH");
+    add_srs_wkt (p, 12,
+		 "ORITY[\"EPSG\",\"30491\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 13, "RTH]]");
+    p = add_epsg_def (first, last, 30492, "epsg", 30492,
+		      "Voirol 1875 / Sud Algerie (ancienne)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.9996");
+    add_proj4text (p, 1,
+		   "25769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +t");
+    add_proj4text (p, 2, "owgs84=-73,-247,227,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Voirol 1875 / Sud Algerie (ancienne)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Voirol 1875\",DATUM[\"Voirol_1875\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "80 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7011\"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 4,
+		 "SG\",\"6304\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4304\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_o");
+    add_srs_wkt (p, 9,
+		 "rigin\",33.3],PARAMETER[\"central_meridian\",2.7],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",0.999625769],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",500000],PARAMETER[\"false_northing\",300000],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"30492\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 13, "TH]]");
+    p = add_epsg_def (first, last, 30493, "epsg", 30493,
+		      "Voirol 1879 / Nord Algerie (ancienne)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.99962554");
+    add_proj4text (p, 1,
+		   "4 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Voirol 1879 / Nord Algerie (ancienne)\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Voirol 1879\",DATUM[\"Voirol_1879\",SPHEROID[\"Clarke ");
+    add_srs_wkt (p, 2,
+		 "1880 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7011\"]],AUTHORITY[\"EPSG\",\"6671\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4671\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"cen");
+    add_srs_wkt (p, 9,
+		 "tral_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625");
+    add_srs_wkt (p, 10,
+		 "544],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",300000],AUTHORITY[\"EPSG\",\"30493\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 30494, "epsg", 30494,
+		      "Voirol 1879 / Sud Algerie (ancienne)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.9996");
+    add_proj4text (p, 1,
+		   "25769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Voirol 1879 / Sud Algerie (ancienne)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Voirol 1879\",DATUM[\"Voirol_1879\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "80 (IGN)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7011\"]],AUTHORITY[\"EPSG\",\"6671\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4671\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",33.3],PARAMETER[\"cen");
+    add_srs_wkt (p, 9,
+		 "tral_meridian\",2.7],PARAMETER[\"scale_factor\",0.999625");
+    add_srs_wkt (p, 10,
+		 "769],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",300000],AUTHORITY[\"EPSG\",\"30494\"],AXIS");
+    add_srs_wkt (p, 12, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 30729, "epsg", 30729,
+		      "Nord Sahara 1959 / UTM zone 29N");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nord Sahara 1959 / UTM zone 29N\",GEOGCS[\"Nord");
+    add_srs_wkt (p, 1,
+		 " Sahara 1959\",DATUM[\"Nord_Sahara_1959\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7012\"]],AUTHORITY[\"EPSG\",\"6307\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4307\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",500000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 11,
+		 "THORITY[\"EPSG\",\"30729\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 30730, "epsg", 30730,
+		      "Nord Sahara 1959 / UTM zone 30N");
+    add_proj4text (p, 0, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nord Sahara 1959 / UTM zone 30N\",GEOGCS[\"Nord");
+    add_srs_wkt (p, 1,
+		 " Sahara 1959\",DATUM[\"Nord_Sahara_1959\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7012\"]],AUTHORITY[\"EPSG\",\"6307\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4307\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",500000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 11,
+		 "THORITY[\"EPSG\",\"30730\"],AXIS[\"Easting\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 30731, "epsg", 30731,
+		      "Nord Sahara 1959 / UTM zone 31N");
+    add_proj4text (p, 0, "+proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nord Sahara 1959 / UTM zone 31N\",GEOGCS[\"Nord");
+    add_srs_wkt (p, 1,
+		 " Sahara 1959\",DATUM[\"Nord_Sahara_1959\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7012\"]],AUTHORITY[\"EPSG\",\"6307\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4307\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",500000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"30731\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 30732, "epsg", 30732,
+		      "Nord Sahara 1959 / UTM zone 32N");
+    add_proj4text (p, 0, "+proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nord Sahara 1959 / UTM zone 32N\",GEOGCS[\"Nord");
+    add_srs_wkt (p, 1,
+		 " Sahara 1959\",DATUM[\"Nord_Sahara_1959\",SPHEROID[\"Cla");
+    add_srs_wkt (p, 2,
+		 "rke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 3,
+		 "\"7012\"]],AUTHORITY[\"EPSG\",\"6307\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4307\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",500000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"30732\"],AXIS[\"Easting\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 30791, "epsg", 30791,
+		      "Nord Sahara 1959 / Voirol Unifie Nord");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.99962554");
+    add_proj4text (p, 1,
+		   "4 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nord Sahara 1959 / Voirol Unifie Nord\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"Nord Sahara 1959\",DATUM[\"Nord_Sahara_1959\",SPHEROID");
+    add_srs_wkt (p, 2,
+		 "[\"Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"7012\"]],AUTHORITY[\"EPSG\",\"6307\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4307\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1");
+    add_srs_wkt (p, 8,
+		 "SP\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",2.7],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "25544],PARAMETER[\"false_easting\",500135],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",300090],AUTHORITY[\"EPSG\",\"30791\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 30792, "epsg", 30792,
+		      "Nord Sahara 1959 / Voirol Unifie Sud");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.9996");
+    add_proj4text (p, 1,
+		   "25769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no");
+    add_proj4text (p, 2, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Nord Sahara 1959 / Voirol Unifie Sud\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "Nord Sahara 1959\",DATUM[\"Nord_Sahara_1959\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Clarke 1880 (RGS)\",6378249.145,293.465,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7012\"]],AUTHORITY[\"EPSG\",\"6307\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 4,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4307\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 7,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",33.3],PARAMETER[\"c");
+    add_srs_wkt (p, 9,
+		 "entral_meridian\",2.7],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 10,
+		 "25769],PARAMETER[\"false_easting\",500135],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",300090],AUTHORITY[\"EPSG\",\"30792\"],AX");
+    add_srs_wkt (p, 12, "IS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 30800, "epsg", 30800,
+		      "RT38 2.5 gon W (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=");
+    add_proj4text (p, 1, "1500000 +y_0=0 +ellps=bessel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"RT38 2.5 gon W (deprecated)\",GEOGCS[\"RT38\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Stockholm_1938\",SPHEROID[\"Bessel 1841\",6377397");
+    add_srs_wkt (p, 2,
+		 ".155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY");
+    add_srs_wkt (p, 3,
+		 "[\"EPSG\",\"6308\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4308\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",0],PARAMETER[\"central_meridian\",15.8082777777777");
+    add_srs_wkt (p, 9,
+		 "8],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",1500000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 11,
+		 "\"EPSG\",\"30800\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31028, "epsg", 31028, "Yoff / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_");
+    add_proj4text (p, 1, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Yoff / UTM zone 28N\",GEOGCS[\"Yoff\",DATUM[\"Y");
+    add_srs_wkt (p, 1,
+		 "off\",SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.46602");
+    add_srs_wkt (p, 2,
+		 "12936265,AUTHORITY[\"EPSG\",\"7011\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"6310\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 5,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4310\"]],UNIT[\"m");
+    add_srs_wkt (p, 6,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 7,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 8,
+		 "ARAMETER[\"central_meridian\",-15],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 9,
+		 "tor\",0.9996],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"31028\"],");
+    add_srs_wkt (p, 11, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31121, "epsg", 31121,
+		      "Zanderij / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Zanderij / UTM zone 21N\",GEOGCS[\"Zanderij\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Zanderij\",SPHEROID[\"International 1924\",637838");
+    add_srs_wkt (p, 2,
+		 "8,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-265,120,-35");
+    add_srs_wkt (p, 3,
+		 "8,0,0,0,0],AUTHORITY[\"EPSG\",\"6311\"]],PRIMEM[\"Greenw");
+    add_srs_wkt (p, 4,
+		 "ich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.");
+    add_srs_wkt (p, 5,
+		 "01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"4311\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-57],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",500000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"31121\"],AXIS[\"Easting\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31154, "epsg", 31154, "Zanderij / TM 54 NW");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m");
+    add_proj4text (p, 2, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Zanderij / TM 54 NW\",GEOGCS[\"Zanderij\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Zanderij\",SPHEROID[\"International 1924\",6378388,29");
+    add_srs_wkt (p, 2,
+		 "7,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-265,120,-358,0,");
+    add_srs_wkt (p, 3,
+		 "0,0,0],AUTHORITY[\"EPSG\",\"6311\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4311\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 7,
+		 "001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "latitude_of_origin\",0],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "54],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"31154\"],AXIS[\"Easting\",EAST],AXIS[\"N");
+    add_srs_wkt (p, 12, "orthing\",NORTH]]");
+    p = add_epsg_def (first, last, 31170, "epsg", 31170,
+		      "Zanderij / Suriname Old TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996");
+    add_proj4text (p, 1,
+		   " +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0");
+    add_proj4text (p, 2, ",0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Zanderij / Suriname Old TM\",GEOGCS[\"Zanderij\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"Zanderij\",SPHEROID[\"International 1924\",6378");
+    add_srs_wkt (p, 2,
+		 "388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-265,120,-");
+    add_srs_wkt (p, 3,
+		 "358,0,0,0,0],AUTHORITY[\"EPSG\",\"6311\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 4,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 5,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"4311\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAM");
+    add_srs_wkt (p, 8,
+		 "ETER[\"latitude_of_origin\",0],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 9,
+		 "ian\",-55.68333333333333],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 10,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 11,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"31170\"],AXIS[\"Ea");
+    add_srs_wkt (p, 12, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31171, "epsg", 31171,
+		      "Zanderij / Suriname TM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999");
+    add_proj4text (p, 1,
+		   " +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0");
+    add_proj4text (p, 2, ",0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Zanderij / Suriname TM\",GEOGCS[\"Zanderij\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"Zanderij\",SPHEROID[\"International 1924\",6378388");
+    add_srs_wkt (p, 2,
+		 ",297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-265,120,-358");
+    add_srs_wkt (p, 3,
+		 ",0,0,0,0],AUTHORITY[\"EPSG\",\"6311\"]],PRIMEM[\"Greenwi");
+    add_srs_wkt (p, 4,
+		 "ch\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0");
+    add_srs_wkt (p, 5,
+		 "1745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"4311\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETE");
+    add_srs_wkt (p, 8,
+		 "R[\"latitude_of_origin\",0],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 9,
+		 "\",-55.68333333333333],PARAMETER[\"scale_factor\",0.9999");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "northing\",0],AUTHORITY[\"EPSG\",\"31171\"],AXIS[\"Easti");
+    add_srs_wkt (p, 12, "ng\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31251, "epsg", 31251,
+		      "MGI (Ferro) / Austria GK West Zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000");
+    add_proj4text (p, 1, " +ellps=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria GK West Zone\",GEOGCS[\"M");
+    add_srs_wkt (p, 1,
+		 "GI (Ferro)\",DATUM[\"Militar_Geographische_Institut_Ferr");
+    add_srs_wkt (p, 2,
+		 "o\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6805\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Ferro\",-17.66666666666667,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8909\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",28],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",-5000000],AUTHORITY[\"EPSG\",\"31251\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31252, "epsg", 31252,
+		      "MGI (Ferro) / Austria GK Central Zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000");
+    add_proj4text (p, 1, " +ellps=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria GK Central Zone\",GEOGCS[");
+    add_srs_wkt (p, 1,
+		 "\"MGI (Ferro)\",DATUM[\"Militar_Geographische_Institut_F");
+    add_srs_wkt (p, 2,
+		 "erro\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,");
+    add_srs_wkt (p, 3,
+		 "AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6805\"");
+    add_srs_wkt (p, 4,
+		 "]],PRIMEM[\"Ferro\",-17.66666666666667,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"8909\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 6,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT");
+    add_srs_wkt (p, 7,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 8,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 9,
+		 "0],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",-5000000],AUTHORITY[\"EPSG\",\"31252\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31253, "epsg", 31253,
+		      "MGI (Ferro) / Austria GK East Zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000");
+    add_proj4text (p, 1, " +ellps=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria GK East Zone\",GEOGCS[\"M");
+    add_srs_wkt (p, 1,
+		 "GI (Ferro)\",DATUM[\"Militar_Geographische_Institut_Ferr");
+    add_srs_wkt (p, 2,
+		 "o\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6805\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Ferro\",-17.66666666666667,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8909\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",34],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",-5000000],AUTHORITY[\"EPSG\",\"31253\"],A");
+    add_srs_wkt (p, 12, "XIS[\"X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31254, "epsg", 31254,
+		      "MGI / Austria GK West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria GK West\",GEOGCS[\"MGI\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841");
+    add_srs_wkt (p, 2,
+		 "\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",10.333");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",0],PARAMETER[\"false_northing\",-5000000]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"31254\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31255, "epsg", 31255,
+		      "MGI / Austria GK Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria GK Central\",GEOGCS[\"MGI\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"Militar_Geographische_Institute\",SPHEROID[\"Bessel 1");
+    add_srs_wkt (p, 2,
+		 "841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"");
+    add_srs_wkt (p, 3,
+		 "]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.42");
+    add_srs_wkt (p, 4,
+		 "32],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 8,
+		 "\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"lat");
+    add_srs_wkt (p, 9,
+		 "itude_of_origin\",0],PARAMETER[\"central_meridian\",13.3");
+    add_srs_wkt (p, 10,
+		 "3333333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",0],PARAMETER[\"false_northing\",-5000000");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"31255\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31256, "epsg", 31256,
+		      "MGI / Austria GK East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +unit");
+    add_proj4text (p, 2, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria GK East\",GEOGCS[\"MGI\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841");
+    add_srs_wkt (p, 2,
+		 "\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",16.333");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",0],PARAMETER[\"false_northing\",-5000000]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"31256\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31257, "epsg", 31257,
+		      "MGI / Austria GK M28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "150000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria GK M28\",GEOGCS[\"MGI\",DATUM[\"M");
+    add_srs_wkt (p, 1,
+		 "ilitar_Geographische_Institute\",SPHEROID[\"Bessel 1841\"");
+    add_srs_wkt (p, 2,
+		 ",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "99433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",10.333333");
+    add_srs_wkt (p, 10,
+		 "33333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",150000],PARAMETER[\"false_northing\",-500000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"31257\"],AXIS[\"X\",NORTH],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31258, "epsg", 31258,
+		      "MGI / Austria GK M31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "450000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria GK M31\",GEOGCS[\"MGI\",DATUM[\"M");
+    add_srs_wkt (p, 1,
+		 "ilitar_Geographische_Institute\",SPHEROID[\"Bessel 1841\"");
+    add_srs_wkt (p, 2,
+		 ",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "99433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",13.333333");
+    add_srs_wkt (p, 10,
+		 "33333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",450000],PARAMETER[\"false_northing\",-500000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"31258\"],AXIS[\"X\",NORTH],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31259, "epsg", 31259,
+		      "MGI / Austria GK M34");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "750000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria GK M34\",GEOGCS[\"MGI\",DATUM[\"M");
+    add_srs_wkt (p, 1,
+		 "ilitar_Geographische_Institute\",SPHEROID[\"Bessel 1841\"");
+    add_srs_wkt (p, 2,
+		 ",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],T");
+    add_srs_wkt (p, 3,
+		 "OWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251");
+    add_srs_wkt (p, 6,
+		 "99433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 7,
+		 "4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 8,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 9,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",16.333333");
+    add_srs_wkt (p, 10,
+		 "33333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"fals");
+    add_srs_wkt (p, 11,
+		 "e_easting\",750000],PARAMETER[\"false_northing\",-500000");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"31259\"],AXIS[\"X\",NORTH],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31265, "epsg", 31265,
+		      "MGI / 3-degree Gauss zone 5 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=bessel +datum=hermannskogel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / 3-degree Gauss zone 5 (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137");
+    add_srs_wkt (p, 4,
+		 ",1.474,5.297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIME");
+    add_srs_wkt (p, 5,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 6,
+		 "egree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",5500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"31265\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31266, "epsg", 31266,
+		      "MGI / 3-degree Gauss zone 6 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=bessel +datum=hermannskogel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / 3-degree Gauss zone 6 (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137");
+    add_srs_wkt (p, 4,
+		 ",1.474,5.297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIME");
+    add_srs_wkt (p, 5,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 6,
+		 "egree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",18],PARAMETER[\"scale_factor\",1],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",6500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"31266\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31267, "epsg", 31267,
+		      "MGI / 3-degree Gauss zone 7 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=bessel +datum=hermannskogel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / 3-degree Gauss zone 7 (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137");
+    add_srs_wkt (p, 4,
+		 ",1.474,5.297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIME");
+    add_srs_wkt (p, 5,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 6,
+		 "egree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",21],PARAMETER[\"scale_factor\",1],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",7500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"31267\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31268, "epsg", 31268,
+		      "MGI / 3-degree Gauss zone 8 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 ");
+    add_proj4text (p, 1,
+		   "+ellps=bessel +datum=hermannskogel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / 3-degree Gauss zone 8 (deprecated)\",GEOG");
+    add_srs_wkt (p, 1,
+		 "CS[\"MGI\",DATUM[\"Militar_Geographische_Institute\",SPH");
+    add_srs_wkt (p, 2,
+		 "EROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137");
+    add_srs_wkt (p, 4,
+		 ",1.474,5.297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIME");
+    add_srs_wkt (p, 5,
+		 "M[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"d");
+    add_srs_wkt (p, 6,
+		 "egree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORIT");
+    add_srs_wkt (p, 8,
+		 "Y[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"centra");
+    add_srs_wkt (p, 10,
+		 "l_meridian\",24],PARAMETER[\"scale_factor\",1],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",8500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"31268\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31275, "epsg", 31275,
+		      "MGI / Balkans zone 5 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Balkans zone 5 (deprecated)\",GEOGCS[\"MG");
+    add_srs_wkt (p, 1,
+		 "I\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5");
+    add_srs_wkt (p, 4,
+		 ".297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 5,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 6,
+		 "0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",15],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",5500000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"31275\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31276, "epsg", 31276,
+		      "MGI / Balkans zone 6 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Balkans zone 6 (deprecated)\",GEOGCS[\"MG");
+    add_srs_wkt (p, 1,
+		 "I\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5");
+    add_srs_wkt (p, 4,
+		 ".297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 5,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 6,
+		 "0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",18],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",6500000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"31276\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31277, "epsg", 31277,
+		      "MGI / Balkans zone 7 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Balkans zone 7 (deprecated)\",GEOGCS[\"MG");
+    add_srs_wkt (p, 1,
+		 "I\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5");
+    add_srs_wkt (p, 4,
+		 ".297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 5,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 6,
+		 "0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",21],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",7500000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"31277\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31278, "epsg", 31278,
+		      "MGI / Balkans zone 8 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Balkans zone 8 (deprecated)\",GEOGCS[\"MG");
+    add_srs_wkt (p, 1,
+		 "I\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5");
+    add_srs_wkt (p, 4,
+		 ".297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 5,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 6,
+		 "0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",21],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",7500000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"31278\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31279, "epsg", 31279,
+		      "MGI / Balkans zone 8 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_def");
+    add_proj4text (p, 2, "s");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Balkans zone 8 (deprecated)\",GEOGCS[\"MG");
+    add_srs_wkt (p, 1,
+		 "I\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5");
+    add_srs_wkt (p, 4,
+		 ".297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 5,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 6,
+		 "0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 8,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 9,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 10,
+		 "an\",24],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_easting\",8500000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 12,
+		 ",AUTHORITY[\"EPSG\",\"31279\"],AXIS[\"X\",NORTH],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",EAST]]");
+    p = add_epsg_def (first, last, 31281, "epsg", 31281,
+		      "MGI (Ferro) / Austria West Zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps");
+    add_proj4text (p, 1, "=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria West Zone\",GEOGCS[\"MGI ");
+    add_srs_wkt (p, 1,
+		 "(Ferro)\",DATUM[\"Militar_Geographische_Institut_Ferro\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6805\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Ferro\",-17.66666666666667,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "909\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",28],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"31281\"],AXIS[\"X\",");
+    add_srs_wkt (p, 12, "NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31282, "epsg", 31282,
+		      "MGI (Ferro) / Austria Central Zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps");
+    add_proj4text (p, 1, "=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria Central Zone\",GEOGCS[\"M");
+    add_srs_wkt (p, 1,
+		 "GI (Ferro)\",DATUM[\"Militar_Geographische_Institut_Ferr");
+    add_srs_wkt (p, 2,
+		 "o\",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6805\"]]");
+    add_srs_wkt (p, 4,
+		 ",PRIMEM[\"Ferro\",-17.66666666666667,AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 5,
+		 "\"8909\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY");
+    add_srs_wkt (p, 6,
+		 "[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[");
+    add_srs_wkt (p, 7,
+		 "\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",31],PARAMETER[\"scale_f");
+    add_srs_wkt (p, 10,
+		 "actor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"31282\"],AXIS[\"X");
+    add_srs_wkt (p, 12, "\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31283, "epsg", 31283,
+		      "MGI (Ferro) / Austria East Zone");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps");
+    add_proj4text (p, 1, "=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria East Zone\",GEOGCS[\"MGI ");
+    add_srs_wkt (p, 1,
+		 "(Ferro)\",DATUM[\"Militar_Geographische_Institut_Ferro\"");
+    add_srs_wkt (p, 2,
+		 ",SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6805\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Ferro\",-17.66666666666667,AUTHORITY[\"EPSG\",\"8");
+    add_srs_wkt (p, 5,
+		 "909\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[\"m");
+    add_srs_wkt (p, 7,
+		 "etre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Tran");
+    add_srs_wkt (p, 8,
+		 "sverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"central_meridian\",34],PARAMETER[\"scale_fact");
+    add_srs_wkt (p, 10,
+		 "or\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"31283\"],AXIS[\"X\",");
+    add_srs_wkt (p, 12, "NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31284, "epsg", 31284, "MGI / Austria M28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria M28\",GEOGCS[\"MGI\",DATUM[\"Mili");
+    add_srs_wkt (p, 1,
+		 "tar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6");
+    add_srs_wkt (p, 2,
+		 "377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",10.3333333");
+    add_srs_wkt (p, 10,
+		 "3333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_easting\",150000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"31284\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 13, "ST]]");
+    p = add_epsg_def (first, last, 31285, "epsg", 31285, "MGI / Austria M31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria M31\",GEOGCS[\"MGI\",DATUM[\"Mili");
+    add_srs_wkt (p, 1,
+		 "tar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6");
+    add_srs_wkt (p, 2,
+		 "377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",13.3333333");
+    add_srs_wkt (p, 10,
+		 "3333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_easting\",450000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"31285\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 13, "ST]]");
+    p = add_epsg_def (first, last, 31286, "epsg", 31286, "MGI / Austria M34");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria M34\",GEOGCS[\"MGI\",DATUM[\"Mili");
+    add_srs_wkt (p, 1,
+		 "tar_Geographische_Institute\",SPHEROID[\"Bessel 1841\",6");
+    add_srs_wkt (p, 2,
+		 "377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]],TOW");
+    add_srs_wkt (p, 3,
+		 "GS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 6,
+		 "433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",16.3333333");
+    add_srs_wkt (p, 10,
+		 "3333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_easting\",750000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 12,
+		 "RITY[\"EPSG\",\"31286\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 13, "ST]]");
+    p = add_epsg_def (first, last, 31287, "epsg", 31287,
+		      "MGI / Austria Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.3333");
+    add_proj4text (p, 1,
+		   "3333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=");
+    add_proj4text (p, 2, "hermannskogel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria Lambert\",GEOGCS[\"MGI\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841");
+    add_srs_wkt (p, 2,
+		 "\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 9,
+		 "[\"standard_parallel_1\",49],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 10,
+		 "el_2\",46],PARAMETER[\"latitude_of_origin\",47.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",13.33333333333333],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",400000],PARAMETER[\"false_northing\",400");
+    add_srs_wkt (p, 13,
+		 "000],AUTHORITY[\"EPSG\",\"31287\"],AXIS[\"X\",NORTH],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31288, "epsg", 31288, "MGI (Ferro) / M28");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / M28\",GEOGCS[\"MGI (Ferro)\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"Militar_Geographische_Institut_Ferro\",SPHEROID[\"Be");
+    add_srs_wkt (p, 2,
+		 "ssel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7004\"]],AUTHORITY[\"EPSG\",\"6805\"]],PRIMEM[\"Ferro\",");
+    add_srs_wkt (p, 4,
+		 "-17.66666666666667,AUTHORITY[\"EPSG\",\"8909\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",28],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",150000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"31288\"],AXIS[\"X\",NORTH],AXIS");
+    add_srs_wkt (p, 12, "[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31289, "epsg", 31289, "MGI (Ferro) / M31");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / M31\",GEOGCS[\"MGI (Ferro)\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"Militar_Geographische_Institut_Ferro\",SPHEROID[\"Be");
+    add_srs_wkt (p, 2,
+		 "ssel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7004\"]],AUTHORITY[\"EPSG\",\"6805\"]],PRIMEM[\"Ferro\",");
+    add_srs_wkt (p, 4,
+		 "-17.66666666666667,AUTHORITY[\"EPSG\",\"8909\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",31],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",450000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"31289\"],AXIS[\"X\",NORTH],AXIS");
+    add_srs_wkt (p, 12, "[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31290, "epsg", 31290, "MGI (Ferro) / M34");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / M34\",GEOGCS[\"MGI (Ferro)\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"Militar_Geographische_Institut_Ferro\",SPHEROID[\"Be");
+    add_srs_wkt (p, 2,
+		 "ssel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7004\"]],AUTHORITY[\"EPSG\",\"6805\"]],PRIMEM[\"Ferro\",");
+    add_srs_wkt (p, 4,
+		 "-17.66666666666667,AUTHORITY[\"EPSG\",\"8909\"]],UNIT[\"");
+    add_srs_wkt (p, 5,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 6,
+		 "]],AUTHORITY[\"EPSG\",\"4805\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 8,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 9,
+		 "ral_meridian\",34],PARAMETER[\"scale_factor\",1],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"false_easting\",750000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"31290\"],AXIS[\"X\",NORTH],AXIS");
+    add_srs_wkt (p, 12, "[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31291, "epsg", 31291,
+		      "MGI (Ferro) / Austria West Zone (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps");
+    add_proj4text (p, 1, "=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria West Zone (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"MGI (Ferro)\",DATUM[\"Militar_Geographische_Ins");
+    add_srs_wkt (p, 2,
+		 "titut_Ferro\",SPHEROID[\"Bessel 1841\",6377397.155,299.1");
+    add_srs_wkt (p, 3,
+		 "528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6805\"]],PRIMEM[\"Ferro\",-17.66666666666667,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8909\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",0],PARAMETER[\"central_meridian\",28],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"31291\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31292, "epsg", 31292,
+		      "MGI (Ferro) / Austria Central Zone (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps");
+    add_proj4text (p, 1, "=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria Central Zone (deprecated)");
+    add_srs_wkt (p, 1,
+		 "\",GEOGCS[\"MGI (Ferro)\",DATUM[\"Militar_Geographische_");
+    add_srs_wkt (p, 2,
+		 "Institut_Ferro\",SPHEROID[\"Bessel 1841\",6377397.155,29");
+    add_srs_wkt (p, 3,
+		 "9.1528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"6805\"]],PRIMEM[\"Ferro\",-17.66666666666667,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"8909\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 6,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 7,
+		 "805\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 8,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 9,
+		 "of_origin\",0],PARAMETER[\"central_meridian\",31],PARAME");
+    add_srs_wkt (p, 10,
+		 "TER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3129");
+    add_srs_wkt (p, 12, "2\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31293, "epsg", 31293,
+		      "MGI (Ferro) / Austria East Zone (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps");
+    add_proj4text (p, 1, "=bessel +pm=ferro +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI (Ferro) / Austria East Zone (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"MGI (Ferro)\",DATUM[\"Militar_Geographische_Ins");
+    add_srs_wkt (p, 2,
+		 "titut_Ferro\",SPHEROID[\"Bessel 1841\",6377397.155,299.1");
+    add_srs_wkt (p, 3,
+		 "528128,AUTHORITY[\"EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 4,
+		 "\"6805\"]],PRIMEM[\"Ferro\",-17.66666666666667,AUTHORITY");
+    add_srs_wkt (p, 5,
+		 "[\"EPSG\",\"8909\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 6,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4805");
+    add_srs_wkt (p, 7,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 8,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 9,
+		 "origin\",0],PARAMETER[\"central_meridian\",34],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"31293\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31294, "epsg", 31294,
+		      "MGI / M28 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / M28 (deprecated)\",GEOGCS[\"MGI\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841");
+    add_srs_wkt (p, 2,
+		 "\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",10.333");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",150000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"31294\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 31295, "epsg", 31295,
+		      "MGI / M31 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / M31 (deprecated)\",GEOGCS[\"MGI\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841");
+    add_srs_wkt (p, 2,
+		 "\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",13.333");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",450000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"31295\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 31296, "epsg", 31296,
+		      "MGI / M34 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=");
+    add_proj4text (p, 1,
+		   "750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / M34 (deprecated)\",GEOGCS[\"MGI\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "Militar_Geographische_Institute\",SPHEROID[\"Bessel 1841");
+    add_srs_wkt (p, 2,
+		 "\",6377397.155,299.1528128,AUTHORITY[\"EPSG\",\"7004\"]]");
+    add_srs_wkt (p, 3,
+		 ",TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232");
+    add_srs_wkt (p, 4,
+		 "],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 5,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 6,
+		 "5199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 7,
+		 ",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 8,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 9,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",16.333");
+    add_srs_wkt (p, 10,
+		 "33333333333],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",750000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"31296\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 31297, "epsg", 31297,
+		      "MGI / Austria Lambert (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.3333");
+    add_proj4text (p, 1,
+		   "3333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=");
+    add_proj4text (p, 2, "hermannskogel +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"MGI / Austria Lambert (deprecated)\",GEOGCS[\"M");
+    add_srs_wkt (p, 1,
+		 "GI\",DATUM[\"Militar_Geographische_Institute\",SPHEROID[");
+    add_srs_wkt (p, 2,
+		 "\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 3,
+		 "\",\"7004\"]],TOWGS84[577.326,90.129,463.919,5.137,1.474");
+    add_srs_wkt (p, 4,
+		 ",5.297,2.4232],AUTHORITY[\"EPSG\",\"6312\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 5,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 6,
+		 ",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"4312\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 8,
+		 "G\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"standard_parallel_1\",49],PARAMETER[\"stan");
+    add_srs_wkt (p, 10,
+		 "dard_parallel_2\",46],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 11,
+		 "7.5],PARAMETER[\"central_meridian\",13.33333333333333],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_easting\",400000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 13,
+		 "thing\",400000],AUTHORITY[\"EPSG\",\"31297\"],AXIS[\"X\"");
+    add_srs_wkt (p, 14, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31300, "epsg", 31300,
+		      "Belge 1972 / Belge Lambert 72");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256");
+    add_proj4text (p, 2,
+		   " +y_0=5400088.4378 +ellps=intl +towgs84=106.869,-52.2978");
+    add_proj4text (p, 3,
+		   ",103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Belge 1972 / Belge Lambert 72\",GEOGCS[\"Belge ");
+    add_srs_wkt (p, 1,
+		 "1972\",DATUM[\"Reseau_National_Belge_1972\",SPHEROID[\"I");
+    add_srs_wkt (p, 2,
+		 "nternational 1924\",6378388,297,AUTHORITY[\"EPSG\",\"702");
+    add_srs_wkt (p, 3,
+		 "2\"]],TOWGS84[106.869,-52.2978,103.724,-0.33657,0.456955");
+    add_srs_wkt (p, 4,
+		 ",-1.84218,1],AUTHORITY[\"EPSG\",\"6313\"]],PRIMEM[\"Gree");
+    add_srs_wkt (p, 5,
+		 "nwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",");
+    add_srs_wkt (p, 6,
+		 "0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHOR");
+    add_srs_wkt (p, 7,
+		 "ITY[\"EPSG\",\"4313\"]],UNIT[\"metre\",1,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 8,
+		 "G\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP_");
+    add_srs_wkt (p, 9,
+		 "Belgium\"],PARAMETER[\"standard_parallel_1\",49.83333333");
+    add_srs_wkt (p, 10,
+		 "333334],PARAMETER[\"standard_parallel_2\",51.16666666666");
+    add_srs_wkt (p, 11,
+		 "666],PARAMETER[\"latitude_of_origin\",90],PARAMETER[\"ce");
+    add_srs_wkt (p, 12,
+		 "ntral_meridian\",4.356939722222222],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 13,
+		 "sting\",150000.01256],PARAMETER[\"false_northing\",54000");
+    add_srs_wkt (p, 14,
+		 "88.4378],AUTHORITY[\"EPSG\",\"31300\"],AXIS[\"X\",EAST],");
+    add_srs_wkt (p, 15, "AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31370, "epsg", 31370,
+		      "Belge 1972 / Belgian Lambert 72");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +la");
+    add_proj4text (p, 1,
+		   "t_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=540");
+    add_proj4text (p, 2,
+		   "0088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-");
+    add_proj4text (p, 3, "0.33657,0.456955,-1.84218,1 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Belge 1972 / Belgian Lambert 72\",GEOGCS[\"Belg");
+    add_srs_wkt (p, 1,
+		 "e 1972\",DATUM[\"Reseau_National_Belge_1972\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "22\"]],TOWGS84[106.869,-52.2978,103.724,-0.33657,0.45695");
+    add_srs_wkt (p, 4,
+		 "5,-1.84218,1],AUTHORITY[\"EPSG\",\"6313\"]],PRIMEM[\"Gre");
+    add_srs_wkt (p, 5,
+		 "enwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 6,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 7,
+		 "RITY[\"EPSG\",\"4313\"]],UNIT[\"metre\",1,AUTHORITY[\"EP");
+    add_srs_wkt (p, 8,
+		 "SG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP");
+    add_srs_wkt (p, 9,
+		 "\"],PARAMETER[\"standard_parallel_1\",51.16666723333333]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"standard_parallel_2\",49.8333339],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"latitude_of_origin\",90],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 12,
+		 "\",4.367486666666666],PARAMETER[\"false_easting\",150000");
+    add_srs_wkt (p, 13,
+		 ".013],PARAMETER[\"false_northing\",5400088.438],AUTHORIT");
+    add_srs_wkt (p, 14,
+		 "Y[\"EPSG\",\"31370\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]");
+    add_srs_wkt (p, 15, "]");
+    p = add_epsg_def (first, last, 31461, "epsg", 31461,
+		      "DHDN / 3-degree Gauss zone 1 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss zone 1 (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",3],PARAMETER[\"scale_factor\",1],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",1500000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"31461\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 31462, "epsg", 31462,
+		      "DHDN / 3-degree Gauss zone 2 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss zone 2 (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",6],PARAMETER[\"scale_factor\",1],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",2500000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"31462\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 31463, "epsg", 31463,
+		      "DHDN / 3-degree Gauss zone 3 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss zone 3 (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",3500000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"31463\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 31464, "epsg", 31464,
+		      "DHDN / 3-degree Gauss zone 4 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss zone 4 (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",4500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"31464\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 31465, "epsg", 31465,
+		      "DHDN / 3-degree Gauss zone 5 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss zone 5 (deprecated)\",GEO");
+    add_srs_wkt (p, 1,
+		 "GCS[\"DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"");
+    add_srs_wkt (p, 4,
+		 "Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degre");
+    add_srs_wkt (p, 5,
+		 "e\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",5500000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"31465\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 31466, "epsg", 31466,
+		      "DHDN / 3-degree Gauss-Kruger zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss-Kruger zone 2\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",6],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",2500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"31466\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 12, "ST]]");
+    p = add_epsg_def (first, last, 31467, "epsg", 31467,
+		      "DHDN / 3-degree Gauss-Kruger zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss-Kruger zone 3\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",9],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "easting\",3500000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"31467\"],AXIS[\"X\",NORTH],AXIS[\"Y\",EA");
+    add_srs_wkt (p, 12, "ST]]");
+    p = add_epsg_def (first, last, 31468, "epsg", 31468,
+		      "DHDN / 3-degree Gauss-Kruger zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss-Kruger zone 4\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",12],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",4500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"31468\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 31469, "epsg", 31469,
+		      "DHDN / 3-degree Gauss-Kruger zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 ");
+    add_proj4text (p, 1, "+ellps=bessel +datum=potsdam +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"DHDN / 3-degree Gauss-Kruger zone 5\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "DHDN\",DATUM[\"Deutsches_Hauptdreiecksnetz\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "Bessel 1841\",6377397.155,299.1528128,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7004\"]],AUTHORITY[\"EPSG\",\"6314\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4314\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAME");
+    add_srs_wkt (p, 8,
+		 "TER[\"latitude_of_origin\",0],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",15],PARAMETER[\"scale_factor\",1],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",5500000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 11,
+		 "ORITY[\"EPSG\",\"31469\"],AXIS[\"X\",NORTH],AXIS[\"Y\",E");
+    add_srs_wkt (p, 12, "AST]]");
+    p = add_epsg_def (first, last, 31528, "epsg", 31528,
+		      "Conakry 1905 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,");
+    add_proj4text (p, 1, "259,-9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Conakry 1905 / UTM zone 28N\",GEOGCS[\"Conakry ");
+    add_srs_wkt (p, 1,
+		 "1905\",DATUM[\"Conakry_1905\",SPHEROID[\"Clarke 1880 (IG");
+    add_srs_wkt (p, 2,
+		 "N)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "11\"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6315\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4315\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",-15],PARAMETER[\"scale_facto");
+    add_srs_wkt (p, 10,
+		 "r\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_northing\",0],AUTHORITY[\"EPSG\",\"31528\"],AX");
+    add_srs_wkt (p, 12, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31529, "epsg", 31529,
+		      "Conakry 1905 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,");
+    add_proj4text (p, 1, "259,-9,0,0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Conakry 1905 / UTM zone 29N\",GEOGCS[\"Conakry ");
+    add_srs_wkt (p, 1,
+		 "1905\",DATUM[\"Conakry_1905\",SPHEROID[\"Clarke 1880 (IG");
+    add_srs_wkt (p, 2,
+		 "N)\",6378249.2,293.4660212936265,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "11\"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 4,
+		 "6315\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"890");
+    add_srs_wkt (p, 5,
+		 "1\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4315\"]],UNIT[\"met");
+    add_srs_wkt (p, 7,
+		 "re\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transv");
+    add_srs_wkt (p, 8,
+		 "erse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"central_meridian\",-9],PARAMETER[\"scale_factor");
+    add_srs_wkt (p, 10,
+		 "\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",0],AUTHORITY[\"EPSG\",\"31529\"],AXI");
+    add_srs_wkt (p, 12, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31600, "epsg", 31600,
+		      "Dealul Piscului 1930 / Stereo 33");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9");
+    add_proj4text (p, 1,
+		   "996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_");
+    add_proj4text (p, 2, "defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Dealul Piscului 1930 / Stereo 33\",GEOGCS[\"Dea");
+    add_srs_wkt (p, 1,
+		 "lul Piscului 1930\",DATUM[\"Dealul_Piscului_1930\",SPHER");
+    add_srs_wkt (p, 2,
+		 "OID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 3,
+		 ",\"7022\"]],AUTHORITY[\"EPSG\",\"6316\"]],PRIMEM[\"Green");
+    add_srs_wkt (p, 4,
+		 "wich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0");
+    add_srs_wkt (p, 5,
+		 ".01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORI");
+    add_srs_wkt (p, 6,
+		 "TY[\"EPSG\",\"4316\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 7,
+		 "\",\"9001\"]],PROJECTION[\"Oblique_Stereographic\"],PARA");
+    add_srs_wkt (p, 8,
+		 "METER[\"latitude_of_origin\",45.9],PARAMETER[\"central_m");
+    add_srs_wkt (p, 9,
+		 "eridian\",25.39246588888889],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996667],PARAMETER[\"false_easting\",500000],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_northing\",500000],AUTHORITY[\"EPSG\",\"31600\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 31700, "epsg", 31700,
+		      "Dealul Piscului 1970/ Stereo 70 (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 ");
+    add_proj4text (p, 1, "+y_0=500000 +ellps=krass +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"Dealul Piscului 1970/ Stereo 70 (deprecated)\",");
+    add_srs_wkt (p, 1,
+		 "GEOGCS[\"Dealul Piscului 1970\",DATUM[\"Dealul_Piscului_");
+    add_srs_wkt (p, 2,
+		 "1970\",SPHEROID[\"Krassowsky 1940\",6378245,298.3,AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"7024\"]],AUTHORITY[\"EPSG\",\"6317\"]],PR");
+    add_srs_wkt (p, 4,
+		 "IMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[");
+    add_srs_wkt (p, 5,
+		 "\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122");
+    add_srs_wkt (p, 6,
+		 "\"]],AUTHORITY[\"EPSG\",\"4317\"]],UNIT[\"metre\",1,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Oblique_Stereogra");
+    add_srs_wkt (p, 8,
+		 "phic\"],PARAMETER[\"latitude_of_origin\",46],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",25],PARAMETER[\"scale_factor\",0.9997");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 11,
+		 "_northing\",500000],AUTHORITY[\"EPSG\",\"31700\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",NORTH],AXIS[\"Y\",EAST]]");
+    p = add_epsg_def (first, last, 31838, "epsg", 31838, "NGN / UTM zone 38N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0");
+    add_proj4text (p, 1, ",0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGN / UTM zone 38N\",GEOGCS[\"NGN\",DATUM[\"Nat");
+    add_srs_wkt (p, 1,
+		 "ional_Geodetic_Network\",SPHEROID[\"WGS 84\",6378137,298");
+    add_srs_wkt (p, 2,
+		 ".257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[-3.2,-5");
+    add_srs_wkt (p, 3,
+		 ".7,2.8,0,0,0,0],AUTHORITY[\"EPSG\",\"6318\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4318\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",45],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"31838\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31839, "epsg", 31839, "NGN / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0");
+    add_proj4text (p, 1, ",0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NGN / UTM zone 39N\",GEOGCS[\"NGN\",DATUM[\"Nat");
+    add_srs_wkt (p, 1,
+		 "ional_Geodetic_Network\",SPHEROID[\"WGS 84\",6378137,298");
+    add_srs_wkt (p, 2,
+		 ".257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[-3.2,-5");
+    add_srs_wkt (p, 3,
+		 ".7,2.8,0,0,0,0],AUTHORITY[\"EPSG\",\"6318\"]],PRIMEM[\"G");
+    add_srs_wkt (p, 4,
+		 "reenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree");
+    add_srs_wkt (p, 5,
+		 "\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUT");
+    add_srs_wkt (p, 6,
+		 "HORITY[\"EPSG\",\"4318\"]],UNIT[\"metre\",1,AUTHORITY[\"");
+    add_srs_wkt (p, 7,
+		 "EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PA");
+    add_srs_wkt (p, 8,
+		 "RAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_me");
+    add_srs_wkt (p, 9,
+		 "ridian\",51],PARAMETER[\"scale_factor\",0.9996],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",500000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"31839\"],AXIS[\"Easting\",EAST]");
+    add_srs_wkt (p, 12, ",AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31900, "epsg", 31900,
+		      "KUDAMS / KTM (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1, "0=0 +ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KUDAMS / KTM (deprecated)\",GEOGCS[\"KUDAMS\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"Kuwait_Utility\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 2,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6319\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4319\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "0],PARAMETER[\"central_meridian\",48],PARAMETER[\"scale_");
+    add_srs_wkt (p, 9,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",500000],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"31900\"");
+    add_srs_wkt (p, 11, "],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31901, "epsg", 31901, "KUDAMS / KTM");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +");
+    add_proj4text (p, 1, "ellps=GRS80 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"KUDAMS / KTM\",GEOGCS[\"KUDAMS\",DATUM[\"Kuwait");
+    add_srs_wkt (p, 1,
+		 "_Utility\",SPHEROID[\"GRS 1980\",6378137,298.257222101,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6319\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4319\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",48],PARAMETER[\"scale_factor\",1],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"31901\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31965, "epsg", 31965,
+		      "SIRGAS 2000 / UTM zone 11N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 11N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-11");
+    add_srs_wkt (p, 10,
+		 "7],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"31965\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 31966, "epsg", 31966,
+		      "SIRGAS 2000 / UTM zone 12N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 12N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-11");
+    add_srs_wkt (p, 10,
+		 "1],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"31966\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 31967, "epsg", 31967,
+		      "SIRGAS 2000 / UTM zone 13N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 13N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-10");
+    add_srs_wkt (p, 10,
+		 "5],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",500000],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 12,
+		 "ITY[\"EPSG\",\"31967\"],AXIS[\"Easting\",EAST],AXIS[\"No");
+    add_srs_wkt (p, 13, "rthing\",NORTH]]");
+    p = add_epsg_def (first, last, 31968, "epsg", 31968,
+		      "SIRGAS 2000 / UTM zone 14N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 14N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-99");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31968\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31969, "epsg", 31969,
+		      "SIRGAS 2000 / UTM zone 15N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 15N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-93");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31969\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31970, "epsg", 31970,
+		      "SIRGAS 2000 / UTM zone 16N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 16N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-87");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31970\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31971, "epsg", 31971,
+		      "SIRGAS 2000 / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 17N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-81");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31971\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31972, "epsg", 31972,
+		      "SIRGAS 2000 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 18N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-75");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31972\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31973, "epsg", 31973,
+		      "SIRGAS 2000 / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 19N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-69");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31973\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31974, "epsg", 31974,
+		      "SIRGAS 2000 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 20N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-63");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31974\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31975, "epsg", 31975,
+		      "SIRGAS 2000 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 21N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-57");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31975\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31976, "epsg", 31976,
+		      "SIRGAS 2000 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 22N\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-51");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31976\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31977, "epsg", 31977,
+		      "SIRGAS 2000 / UTM zone 17S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 17S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-81");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31977\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31978, "epsg", 31978,
+		      "SIRGAS 2000 / UTM zone 18S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 18S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-75");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31978\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31979, "epsg", 31979,
+		      "SIRGAS 2000 / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 19S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-69");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31979\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31980, "epsg", 31980,
+		      "SIRGAS 2000 / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 20S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-63");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31980\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31981, "epsg", 31981,
+		      "SIRGAS 2000 / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 21S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-57");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31981\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31982, "epsg", 31982,
+		      "SIRGAS 2000 / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 22S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-51");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31982\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31983, "epsg", 31983,
+		      "SIRGAS 2000 / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 23S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-45");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31983\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31984, "epsg", 31984,
+		      "SIRGAS 2000 / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 24S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-39");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31984\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31985, "epsg", 31985,
+		      "SIRGAS 2000 / UTM zone 25S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 2000 / UTM zone 25S\",GEOGCS[\"SIRGAS 20");
+    add_srs_wkt (p, 1,
+		 "00\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_2000\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6674\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4674\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-33");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31985\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31986, "epsg", 31986,
+		      "SIRGAS 1995 / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 17N\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-81");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31986\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31987, "epsg", 31987,
+		      "SIRGAS 1995 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 18N\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-75");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31987\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31988, "epsg", 31988,
+		      "SIRGAS 1995 / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 19N\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-69");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31988\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31989, "epsg", 31989,
+		      "SIRGAS 1995 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 20N\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-63");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31989\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31990, "epsg", 31990,
+		      "SIRGAS 1995 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 21N\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-57");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31990\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31991, "epsg", 31991,
+		      "SIRGAS 1995 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +");
+    add_proj4text (p, 1, "units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 22N\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-51");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"31991\"],AXIS[\"Easting\",EAST],AXIS[\"Nor");
+    add_srs_wkt (p, 13, "thing\",NORTH]]");
+    p = add_epsg_def (first, last, 31992, "epsg", 31992,
+		      "SIRGAS 1995 / UTM zone 17S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 17S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-81");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31992\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31993, "epsg", 31993,
+		      "SIRGAS 1995 / UTM zone 18S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 18S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-75");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31993\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31994, "epsg", 31994,
+		      "SIRGAS 1995 / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 19S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-69");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31994\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31995, "epsg", 31995,
+		      "SIRGAS 1995 / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 20S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-63");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31995\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31996, "epsg", 31996,
+		      "SIRGAS 1995 / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 21S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-57");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31996\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31997, "epsg", 31997,
+		      "SIRGAS 1995 / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 22S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-51");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31997\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31998, "epsg", 31998,
+		      "SIRGAS 1995 / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 23S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-45");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31998\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 31999, "epsg", 31999,
+		      "SIRGAS 1995 / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 24S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-39");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"31999\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32000, "epsg", 32000,
+		      "SIRGAS 1995 / UTM zone 25S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,");
+    add_proj4text (p, 1, "0,0,0 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"SIRGAS 1995 / UTM zone 25S\",GEOGCS[\"SIRGAS 19");
+    add_srs_wkt (p, 1,
+		 "95\",DATUM[\"Sistema_de_Referencia_Geocentrico_para_Amer");
+    add_srs_wkt (p, 2,
+		 "ica_del_Sur_1995\",SPHEROID[\"GRS 1980\",6378137,298.257");
+    add_srs_wkt (p, 3,
+		 "222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0");
+    add_srs_wkt (p, 4,
+		 ",0],AUTHORITY[\"EPSG\",\"6170\"]],PRIMEM[\"Greenwich\",0");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532");
+    add_srs_wkt (p, 6,
+		 "9251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 7,
+		 "G\",\"4170\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"900");
+    add_srs_wkt (p, 8,
+		 "1\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"la");
+    add_srs_wkt (p, 9,
+		 "titude_of_origin\",0],PARAMETER[\"central_meridian\",-33");
+    add_srs_wkt (p, 10,
+		 "],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",10000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"32000\"],AXIS[\"Easting\",EAST],AXI");
+    add_srs_wkt (p, 13, "S[\"Northing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_25 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 32001, "epsg", 32001,
+		      "NAD27 / Montana North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=4");
+    add_proj4text (p, 1,
+		   "7 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clr");
+    add_proj4text (p, 2, "k66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Montana North\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",48.71");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",47.85],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central_");
+    add_srs_wkt (p, 11,
+		 "meridian\",-109.5],PARAMETER[\"false_easting\",2000000],");
+    add_srs_wkt (p, 12,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"320");
+    add_srs_wkt (p, 13, "01\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32002, "epsg", 32002,
+		      "NAD27 / Montana Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=4");
+    add_proj4text (p, 1,
+		   "5.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Montana Central\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.");
+    add_srs_wkt (p, 9,
+		 "88333333333333],PARAMETER[\"standard_parallel_2\",46.45]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"latitude_of_origin\",45.83333333333334],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"central_meridian\",-109.5],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 12,
+		 "sting\",2000000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"32002\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 32003, "epsg", 32003,
+		      "NAD27 / Montana South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44");
+    add_proj4text (p, 1,
+		   " +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk");
+    add_proj4text (p, 2, "66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Montana South\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",46.4]");
+    add_srs_wkt (p, 9,
+		 ",PARAMETER[\"standard_parallel_2\",44.86666666666667],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",44],PARAMETER[\"central_m");
+    add_srs_wkt (p, 11,
+		 "eridian\",-109.5],PARAMETER[\"false_easting\",2000000],P");
+    add_srs_wkt (p, 12,
+		 "ARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3200");
+    add_srs_wkt (p, 13, "3\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32005, "epsg", 32005,
+		      "NAD27 / Nebraska North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=4");
+    add_proj4text (p, 1,
+		   "1.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Nebraska North\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",41.85");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"standard_parallel_2\",42.81666666666667],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"latitude_of_origin\",41.33333333333334],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"central_meridian\",-100],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"32005\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32006, "epsg", 32006,
+		      "NAD27 / Nebraska South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Nebraska South\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.28");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",41.71666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"latitude_of_origin\",39.666666666");
+    add_srs_wkt (p, 11,
+		 "66666],PARAMETER[\"central_meridian\",-99.5],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",2000000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 13,
+		 ",AUTHORITY[\"EPSG\",\"32006\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 32007, "epsg", 32007, "NAD27 / Nevada East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=");
+    add_proj4text (p, 2, "NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Nevada East\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-115.5833333333333],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.9999],PARAMETER[\"false_easting\",500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"320");
+    add_srs_wkt (p, 12, "07\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32008, "epsg", 32008,
+		      "NAD27 / Nevada Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=");
+    add_proj4text (p, 2, "NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Nevada Central\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-116.6666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "32008\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32009, "epsg", 32009, "NAD27 / Nevada West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=");
+    add_proj4text (p, 2, "NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Nevada West\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",34.75],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-118.5833333333333],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.9999],PARAMETER[\"false_easting\",500000],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"320");
+    add_srs_wkt (p, 12, "09\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32010, "epsg", 32010,
+		      "NAD27 / New Hampshire");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +da");
+    add_proj4text (p, 2, "tum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New Hampshire\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",42.5],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-71.66666666666667],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999966667],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"32010\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32011, "epsg", 32011, "NAD27 / New Jersey");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New Jersey\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",38.83333333333334");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-74.66666666666667],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999975],PARAMETER[\"false_east");
+    add_srs_wkt (p, 11,
+		 "ing\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"32011\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 32012, "epsg", 32012,
+		      "NAD27 / New Mexico East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datu");
+    add_proj4text (p, 2, "m=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New Mexico East\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-104.3333333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999909091],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"32012\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32013, "epsg", 32013,
+		      "NAD27 / New Mexico Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=1524");
+    add_proj4text (p, 1,
+		   "00.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=u");
+    add_proj4text (p, 2, "s-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New Mexico Central\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transvers");
+    add_srs_wkt (p, 8,
+		 "e_Mercator\"],PARAMETER[\"latitude_of_origin\",31],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"central_meridian\",-106.25],PARAMETER[\"scale_fac");
+    add_srs_wkt (p, 10,
+		 "tor\",0.9999],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32013\"],");
+    add_srs_wkt (p, 12, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32014, "epsg", 32014,
+		      "NAD27 / New Mexico West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datu");
+    add_proj4text (p, 2, "m=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New Mexico West\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",31],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-107.8333333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.999916667],PARAMETER[\"false_easting\",5");
+    add_srs_wkt (p, 11,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 12, ",\"32014\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32015, "epsg", 32015,
+		      "NAD27 / New York East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datu");
+    add_proj4text (p, 2, "m=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New York East\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-74.33333333333333],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.999966667],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"32015\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32016, "epsg", 32016,
+		      "NAD27 / New York Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=");
+    add_proj4text (p, 2, "NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New York Central\",GEOGCS[\"NAD27\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_M");
+    add_srs_wkt (p, 8,
+		 "ercator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETE");
+    add_srs_wkt (p, 9,
+		 "R[\"central_meridian\",-76.58333333333333],PARAMETER[\"s");
+    add_srs_wkt (p, 10,
+		 "cale_factor\",0.9999375],PARAMETER[\"false_easting\",500");
+    add_srs_wkt (p, 11,
+		 "000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 12, "\"32016\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32017, "epsg", 32017,
+		      "NAD27 / New York West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=");
+    add_proj4text (p, 2, "NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New York West\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",40],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"central_meridian\",-78.58333333333333],PARAMETER[\"sca");
+    add_srs_wkt (p, 10,
+		 "le_factor\",0.9999375],PARAMETER[\"false_easting\",50000");
+    add_srs_wkt (p, 11,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "32017\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32018, "epsg", 32018,
+		      "NAD27 / New York Long Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0");
+    add_proj4text (p, 2, " +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / New York Long Island\",GEOGCS[\"NAD27\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 2,
+		 "866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 7,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 8,
+		 "Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 9,
+		 ",41.03333333333333],PARAMETER[\"standard_parallel_2\",40");
+    add_srs_wkt (p, 10,
+		 ".66666666666666],PARAMETER[\"latitude_of_origin\",40.5],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"central_meridian\",-74],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 12,
+		 "sting\",1000000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"32018\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 32019, "epsg", 32019,
+		      "NAD27 / North Carolina");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / North Carolina\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.33");
+    add_srs_wkt (p, 9,
+		 "333333333334],PARAMETER[\"standard_parallel_2\",36.16666");
+    add_srs_wkt (p, 10,
+		 "666666666],PARAMETER[\"latitude_of_origin\",33.75],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"central_meridian\",-79],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"32019\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32020, "epsg", 32020,
+		      "NAD27 / North Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / North Dakota North\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "47.43333333333333],PARAMETER[\"standard_parallel_2\",48.");
+    add_srs_wkt (p, 10,
+		 "73333333333333],PARAMETER[\"latitude_of_origin\",47],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"central_meridian\",-100.5],PARAMETER[\"false_ea");
+    add_srs_wkt (p, 12,
+		 "sting\",2000000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 13,
+		 "TY[\"EPSG\",\"32020\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 14, "]]");
+    p = add_epsg_def (first, last, 32021, "epsg", 32021,
+		      "NAD27 / North Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2");
+    add_proj4text (p, 2,
+		   "192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / North Dakota South\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "46.18333333333333],PARAMETER[\"standard_parallel_2\",47.");
+    add_srs_wkt (p, 10,
+		 "48333333333333],PARAMETER[\"latitude_of_origin\",45.6666");
+    add_srs_wkt (p, 11,
+		 "6666666666],PARAMETER[\"central_meridian\",-100.5],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_easting\",2000000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 13,
+		 "ng\",0],AUTHORITY[\"EPSG\",\"32021\"],AXIS[\"X\",EAST],A");
+    add_srs_wkt (p, 14, "XIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32022, "epsg", 32022, "NAD27 / Ohio North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Ohio North\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.43333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",41.7],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"latitude_of_origin\",39.66666666666666],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"central_meridian\",-82.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"32022\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32023, "epsg", 32023, "NAD27 / Ohio South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0");
+    add_proj4text (p, 2, " +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Ohio South\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.73333");
+    add_srs_wkt (p, 9,
+		 "333333333],PARAMETER[\"standard_parallel_2\",40.03333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"latitude_of_origin\",38],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-82.5],PARAMETER[\"false_easting\",20");
+    add_srs_wkt (p, 12,
+		 "00000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"32023\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32024, "epsg", 32024,
+		      "NAD27 / Oklahoma North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Oklahoma North\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",35.56");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",36.76666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"latitude_of_origin\",35],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-98],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 12,
+		 "2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 13, "G\",\"32024\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32025, "epsg", 32025,
+		      "NAD27 / Oklahoma South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192");
+    add_proj4text (p, 2,
+		   "024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Oklahoma South\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",33.93");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",35.23333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",33.333333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-98],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",2000000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"32025\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 32026, "epsg", 32026,
+		      "NAD27 / Oregon North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Oregon North\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",44.33333");
+    add_srs_wkt (p, 9,
+		 "333333334],PARAMETER[\"standard_parallel_2\",46],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"latitude_of_origin\",43.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-120.5],PARAMETER[\"false_easting\",2");
+    add_srs_wkt (p, 12,
+		 "000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13, "\",\"32026\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32027, "epsg", 32027,
+		      "NAD27 / Oregon South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Oregon South\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",42.33333");
+    add_srs_wkt (p, 9,
+		 "333333334],PARAMETER[\"standard_parallel_2\",44],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"latitude_of_origin\",41.66666666666666],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "central_meridian\",-120.5],PARAMETER[\"false_easting\",2");
+    add_srs_wkt (p, 12,
+		 "000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 13, "\",\"32027\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32028, "epsg", 32028,
+		      "NAD27 / Pennsylvania North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=4");
+    add_proj4text (p, 1,
+		   "0.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Pennsylvania North\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "40.88333333333333],PARAMETER[\"standard_parallel_2\",41.");
+    add_srs_wkt (p, 10,
+		 "95],PARAMETER[\"latitude_of_origin\",40.16666666666666],");
+    add_srs_wkt (p, 11,
+		 "PARAMETER[\"central_meridian\",-77.75],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_easting\",2000000],PARAMETER[\"false_northing\",0],AUTH");
+    add_srs_wkt (p, 13,
+		 "ORITY[\"EPSG\",\"32028\"],AXIS[\"X\",EAST],AXIS[\"Y\",NO");
+    add_srs_wkt (p, 14, "RTH]]");
+    p = add_epsg_def (first, last, 32029, "epsg", 32029,
+		      "NAD27 / Pennsylvania South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_");
+    add_proj4text (p, 2,
+		   "0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Pennsylvania South\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "39.93333333333333],PARAMETER[\"standard_parallel_2\",40.");
+    add_srs_wkt (p, 10,
+		 "8],PARAMETER[\"latitude_of_origin\",39.33333333333334],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"central_meridian\",-77.75],PARAMETER[\"false_");
+    add_srs_wkt (p, 12,
+		 "easting\",2000000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"32029\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 32030, "epsg", 32030,
+		      "NAD27 / Rhode Island");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datu");
+    add_proj4text (p, 2, "m=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Rhode Island\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",41.08333333333334");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-71.5],PARAMETER[\"scal");
+    add_srs_wkt (p, 10,
+		 "e_factor\",0.9999938],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"3");
+    add_srs_wkt (p, 12, "2030\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32031, "epsg", 32031,
+		      "NAD27 / South Carolina North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / South Carolina North\",GEOGCS[\"NAD27\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 2,
+		 "866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 7,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 8,
+		 "Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 9,
+		 ",33.76666666666667],PARAMETER[\"standard_parallel_2\",34");
+    add_srs_wkt (p, 10,
+		 ".96666666666667],PARAMETER[\"latitude_of_origin\",33],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"central_meridian\",-81],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 13,
+		 "[\"EPSG\",\"32031\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 14, "");
+    p = add_epsg_def (first, last, 32033, "epsg", 32033,
+		      "NAD27 / South Carolina South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192");
+    add_proj4text (p, 2,
+		   "024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / South Carolina South\",GEOGCS[\"NAD27\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 2,
+		 "866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 7,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_");
+    add_srs_wkt (p, 8,
+		 "Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\"");
+    add_srs_wkt (p, 9,
+		 ",32.33333333333334],PARAMETER[\"standard_parallel_2\",33");
+    add_srs_wkt (p, 10,
+		 ".66666666666666],PARAMETER[\"latitude_of_origin\",31.833");
+    add_srs_wkt (p, 11,
+		 "33333333333],PARAMETER[\"central_meridian\",-81],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",2000000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",0],AUTHORITY[\"EPSG\",\"32033\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32034, "epsg", 32034,
+		      "NAD27 / South Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.219");
+    add_proj4text (p, 2,
+		   "2024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 3, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / South Dakota North\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "44.41666666666666],PARAMETER[\"standard_parallel_2\",45.");
+    add_srs_wkt (p, 10,
+		 "68333333333333],PARAMETER[\"latitude_of_origin\",43.8333");
+    add_srs_wkt (p, 11,
+		 "3333333334],PARAMETER[\"central_meridian\",-100],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_easting\",2000000],PARAMETER[\"false_northing");
+    add_srs_wkt (p, 13,
+		 "\",0],AUTHORITY[\"EPSG\",\"32034\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 14, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32035, "epsg", 32035,
+		      "NAD27 / South Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / South Dakota South\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "42.83333333333334],PARAMETER[\"standard_parallel_2\",44.");
+    add_srs_wkt (p, 10,
+		 "4],PARAMETER[\"latitude_of_origin\",42.33333333333334],P");
+    add_srs_wkt (p, 11,
+		 "ARAMETER[\"central_meridian\",-100.3333333333333],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_easting\",2000000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 13,
+		 "g\",0],AUTHORITY[\"EPSG\",\"32035\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 14, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32036, "epsg", 32036,
+		      "NAD27 / Tennessee (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=");
+    add_proj4text (p, 2, "0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Tennessee (deprecated)\",GEOGCS[\"NAD27");
+    add_srs_wkt (p, 1,
+		 "\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke");
+    add_srs_wkt (p, 2,
+		 " 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 3,
+		 "7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwic");
+    add_srs_wkt (p, 4,
+		 "h\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01");
+    add_srs_wkt (p, 5,
+		 "745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[");
+    add_srs_wkt (p, 6,
+		 "\"EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096");
+    add_srs_wkt (p, 7,
+		 "012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lamber");
+    add_srs_wkt (p, 8,
+		 "t_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1");
+    add_srs_wkt (p, 9,
+		 "\",35.25],PARAMETER[\"standard_parallel_2\",36.416666666");
+    add_srs_wkt (p, 10,
+		 "66666],PARAMETER[\"latitude_of_origin\",34.6666666666666");
+    add_srs_wkt (p, 11,
+		 "6],PARAMETER[\"central_meridian\",-86],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_easting\",100000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"32036\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 32037, "epsg", 32037, "NAD27 / Texas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clr");
+    add_proj4text (p, 2, "k66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Texas North\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",34.65],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"standard_parallel_2\",36.18333333333333],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",34],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-101.5],PARAMETER[\"false_easting\",2000000],PAR");
+    add_srs_wkt (p, 12,
+		 "AMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32037\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32038, "epsg", 32038,
+		      "NAD27 / Texas North Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Texas North Central\",GEOGCS[\"NAD27\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "66\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "08\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "32.13333333333333],PARAMETER[\"standard_parallel_2\",33.");
+    add_srs_wkt (p, 10,
+		 "96666666666667],PARAMETER[\"latitude_of_origin\",31.6666");
+    add_srs_wkt (p, 11,
+		 "6666666667],PARAMETER[\"central_meridian\",-97.5],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_easting\",2000000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 13,
+		 "g\",0],AUTHORITY[\"EPSG\",\"32038\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 14, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32039, "epsg", 32039,
+		      "NAD27 / Texas Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 ");
+    add_proj4text (p, 3, "+units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Texas Central\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",30.11");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",31.88333");
+    add_srs_wkt (p, 10,
+		 "333333333],PARAMETER[\"latitude_of_origin\",29.666666666");
+    add_srs_wkt (p, 11,
+		 "66667],PARAMETER[\"central_meridian\",-100.3333333333333");
+    add_srs_wkt (p, 12,
+		 "],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false");
+    add_srs_wkt (p, 13,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"32039\"],AXIS[\"X\",");
+    add_srs_wkt (p, 14, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32040, "epsg", 32040,
+		      "NAD27 / Texas South Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192");
+    add_proj4text (p, 2,
+		   "024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Texas South Central\",GEOGCS[\"NAD27\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "66\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "08\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "28.38333333333333],PARAMETER[\"standard_parallel_2\",30.");
+    add_srs_wkt (p, 10,
+		 "28333333333333],PARAMETER[\"latitude_of_origin\",27.8333");
+    add_srs_wkt (p, 11,
+		 "3333333333],PARAMETER[\"central_meridian\",-99],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",2000000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"32040\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 14, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32041, "epsg", 32041, "NAD27 / Texas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Texas South\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",26.16666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",27.83333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"latitude_of_origin\",25.666666666666");
+    add_srs_wkt (p, 11,
+		 "67],PARAMETER[\"central_meridian\",-98.5],PARAMETER[\"fa");
+    add_srs_wkt (p, 12,
+		 "lse_easting\",2000000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 13,
+		 "UTHORITY[\"EPSG\",\"32041\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 32042, "epsg", 32042, "NAD27 / Utah North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2");
+    add_proj4text (p, 2,
+		   "192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Utah North\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",40.71666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",41.78333333");
+    add_srs_wkt (p, 10,
+		 "333333],PARAMETER[\"latitude_of_origin\",40.333333333333");
+    add_srs_wkt (p, 11,
+		 "34],PARAMETER[\"central_meridian\",-111.5],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_easting\",2000000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 13,
+		 "AUTHORITY[\"EPSG\",\"32042\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 14, ",NORTH]]");
+    p = add_epsg_def (first, last, 32043, "epsg", 32043,
+		      "NAD27 / Utah Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Utah Central\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",39.01666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",40.65],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",38.33333333333334],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-111.5],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"32043\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32044, "epsg", 32044, "NAD27 / Utah South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y");
+    add_proj4text (p, 2,
+		   "_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Utah South\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conformal");
+    add_srs_wkt (p, 8,
+		 "_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",37.21666");
+    add_srs_wkt (p, 9,
+		 "666666667],PARAMETER[\"standard_parallel_2\",38.35],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"latitude_of_origin\",36.66666666666666],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"central_meridian\",-111.5],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 12,
+		 "\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"32044\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32045, "epsg", 32045, "NAD27 / Vermont");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0");
+    add_proj4text (p, 1,
+		   "=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +un");
+    add_proj4text (p, 2, "its=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Vermont\",GEOGCS[\"NAD27\",DATUM[\"Nort");
+    add_srs_wkt (p, 1,
+		 "h_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378206");
+    add_srs_wkt (p, 2,
+		 ".4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "7\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORI");
+    add_srs_wkt (p, 7,
+		 "TY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator\"");
+    add_srs_wkt (p, 8,
+		 "],PARAMETER[\"latitude_of_origin\",42.5],PARAMETER[\"cen");
+    add_srs_wkt (p, 9,
+		 "tral_meridian\",-72.5],PARAMETER[\"scale_factor\",0.9999");
+    add_srs_wkt (p, 10,
+		 "64286],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32045\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32046, "epsg", 32046,
+		      "NAD27 / Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Virginia North\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",38.03");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"standard_parallel_2\",39.2],PA");
+    add_srs_wkt (p, 10,
+		 "RAMETER[\"latitude_of_origin\",37.66666666666666],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-78.5],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"32046\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32047, "epsg", 32047,
+		      "NAD27 / Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.21");
+    add_proj4text (p, 2,
+		   "92024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft ");
+    add_proj4text (p, 3, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Virginia South\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Confor");
+    add_srs_wkt (p, 8,
+		 "mal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",36.76");
+    add_srs_wkt (p, 9,
+		 "666666666667],PARAMETER[\"standard_parallel_2\",37.96666");
+    add_srs_wkt (p, 10,
+		 "666666667],PARAMETER[\"latitude_of_origin\",36.333333333");
+    add_srs_wkt (p, 11,
+		 "33334],PARAMETER[\"central_meridian\",-78.5],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",2000000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 13,
+		 ",AUTHORITY[\"EPSG\",\"32047\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 32048, "epsg", 32048,
+		      "NAD27 / Washington North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47");
+    add_proj4text (p, 1,
+		   " +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0");
+    add_proj4text (p, 2, " +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Washington North\",GEOGCS[\"NAD27\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",47.");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"standard_parallel_2\",48.73333333333333],");
+    add_srs_wkt (p, 10,
+		 "PARAMETER[\"latitude_of_origin\",47],PARAMETER[\"central");
+    add_srs_wkt (p, 11,
+		 "_meridian\",-120.8333333333333],PARAMETER[\"false_eastin");
+    add_srs_wkt (p, 12,
+		 "g\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 13,
+		 "EPSG\",\"32048\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32049, "epsg", 32049,
+		      "NAD27 / Washington South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2");
+    add_proj4text (p, 2,
+		   "192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft");
+    add_proj4text (p, 3, " +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Washington South\",GEOGCS[\"NAD27\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.");
+    add_srs_wkt (p, 9,
+		 "83333333333334],PARAMETER[\"standard_parallel_2\",47.333");
+    add_srs_wkt (p, 10,
+		 "33333333334],PARAMETER[\"latitude_of_origin\",45.3333333");
+    add_srs_wkt (p, 11,
+		 "3333334],PARAMETER[\"central_meridian\",-120.5],PARAMETE");
+    add_srs_wkt (p, 12,
+		 "R[\"false_easting\",2000000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 13,
+		 ",0],AUTHORITY[\"EPSG\",\"32049\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 14, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32050, "epsg", 32050,
+		      "NAD27 / West Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD");
+    add_proj4text (p, 2, "27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / West Virginia North\",GEOGCS[\"NAD27\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "66\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "08\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "39],PARAMETER[\"standard_parallel_2\",40.25],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "latitude_of_origin\",38.5],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-79.5],PARAMETER[\"false_easting\",2000000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32050\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32051, "epsg", 32051,
+		      "NAD27 / West Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / West Virginia South\",GEOGCS[\"NAD27\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 18");
+    add_srs_wkt (p, 2,
+		 "66\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"70");
+    add_srs_wkt (p, 3,
+		 "08\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "37.48333333333333],PARAMETER[\"standard_parallel_2\",38.");
+    add_srs_wkt (p, 10,
+		 "88333333333333],PARAMETER[\"latitude_of_origin\",37],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"central_meridian\",-81],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 12,
+		 "ng\",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[");
+    add_srs_wkt (p, 13,
+		 "\"EPSG\",\"32051\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32052, "epsg", 32052,
+		      "NAD27 / Wisconsin North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192");
+    add_proj4text (p, 2,
+		   "024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wisconsin North\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",45.");
+    add_srs_wkt (p, 9,
+		 "56666666666667],PARAMETER[\"standard_parallel_2\",46.766");
+    add_srs_wkt (p, 10,
+		 "66666666667],PARAMETER[\"latitude_of_origin\",45.1666666");
+    add_srs_wkt (p, 11,
+		 "6666666],PARAMETER[\"central_meridian\",-90],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_easting\",2000000],PARAMETER[\"false_northing\",0]");
+    add_srs_wkt (p, 13,
+		 ",AUTHORITY[\"EPSG\",\"32052\"],AXIS[\"X\",EAST],AXIS[\"Y");
+    add_srs_wkt (p, 14, "\",NORTH]]");
+    p = add_epsg_def (first, last, 32053, "epsg", 32053,
+		      "NAD27 / Wisconsin Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk");
+    add_proj4text (p, 2, "66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wisconsin Central\",GEOGCS[\"NAD27\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866");
+    add_srs_wkt (p, 2,
+		 "\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008");
+    add_srs_wkt (p, 3,
+		 "\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",");
+    add_srs_wkt (p, 4,
+		 "0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453");
+    add_srs_wkt (p, 5,
+		 "29251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 6,
+		 "SG\",\"4267\"]],UNIT[\"US survey foot\",0.30480060960121");
+    add_srs_wkt (p, 7,
+		 "92,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Co");
+    add_srs_wkt (p, 8,
+		 "nformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",4");
+    add_srs_wkt (p, 9,
+		 "4.25],PARAMETER[\"standard_parallel_2\",45.5],PARAMETER[");
+    add_srs_wkt (p, 10,
+		 "\"latitude_of_origin\",43.83333333333334],PARAMETER[\"ce");
+    add_srs_wkt (p, 11,
+		 "ntral_meridian\",-90],PARAMETER[\"false_easting\",200000");
+    add_srs_wkt (p, 12,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 13, "32053\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32054, "epsg", 32054,
+		      "NAD27 / Wisconsin South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +");
+    add_proj4text (p, 2, "ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wisconsin South\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192");
+    add_srs_wkt (p, 7,
+		 ",AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_Conf");
+    add_srs_wkt (p, 8,
+		 "ormal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",42.");
+    add_srs_wkt (p, 9,
+		 "73333333333333],PARAMETER[\"standard_parallel_2\",44.066");
+    add_srs_wkt (p, 10,
+		 "66666666667],PARAMETER[\"latitude_of_origin\",42],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"central_meridian\",-90],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 12,
+		 ",2000000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 13, "SG\",\"32054\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32055, "epsg", 32055,
+		      "NAD27 / Wyoming East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666");
+    add_proj4text (p, 1,
+		   "666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wyoming East\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",40.66666666666666");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-105.1666666666667],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"32055\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 32056, "epsg", 32056,
+		      "NAD27 / Wyoming East Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wyoming East Central\",GEOGCS[\"NAD27\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 2,
+		 "866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 7,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transver");
+    add_srs_wkt (p, 8,
+		 "se_Mercator\"],PARAMETER[\"latitude_of_origin\",40.66666");
+    add_srs_wkt (p, 9,
+		 "666666666],PARAMETER[\"central_meridian\",-107.333333333");
+    add_srs_wkt (p, 10,
+		 "3333],PARAMETER[\"scale_factor\",0.999941177],PARAMETER[");
+    add_srs_wkt (p, 11,
+		 "\"false_easting\",500000],PARAMETER[\"false_northing\",0");
+    add_srs_wkt (p, 12,
+		 "],AUTHORITY[\"EPSG\",\"32056\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32057, "epsg", 32057,
+		      "NAD27 / Wyoming West Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0");
+    add_proj4text (p, 1,
+		   ".999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +");
+    add_proj4text (p, 2, "datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wyoming West Central\",GEOGCS[\"NAD27\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1");
+    add_srs_wkt (p, 2,
+		 "866\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7");
+    add_srs_wkt (p, 3,
+		 "008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich");
+    add_srs_wkt (p, 4,
+		 "\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017");
+    add_srs_wkt (p, 5,
+		 "45329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 6,
+		 "EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.304800609601");
+    add_srs_wkt (p, 7,
+		 "2192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transver");
+    add_srs_wkt (p, 8,
+		 "se_Mercator\"],PARAMETER[\"latitude_of_origin\",40.66666");
+    add_srs_wkt (p, 9,
+		 "666666666],PARAMETER[\"central_meridian\",-108.75],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"scale_factor\",0.999941177],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 11,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 12,
+		 "[\"EPSG\",\"32057\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 13, "");
+    p = add_epsg_def (first, last, 32058, "epsg", 32058,
+		      "NAD27 / Wyoming West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333");
+    add_proj4text (p, 1,
+		   "333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ell");
+    add_proj4text (p, 2, "ps=clrk66 +datum=NAD27 +units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Wyoming West\",GEOGCS[\"NAD27\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",637");
+    add_srs_wkt (p, 2,
+		 "8206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"US survey foot\",0.3048006096012192,AUTH");
+    add_srs_wkt (p, 7,
+		 "ORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercat");
+    add_srs_wkt (p, 8,
+		 "or\"],PARAMETER[\"latitude_of_origin\",40.66666666666666");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-110.0833333333333],PAR");
+    add_srs_wkt (p, 10,
+		 "AMETER[\"scale_factor\",0.999941177],PARAMETER[\"false_e");
+    add_srs_wkt (p, 11,
+		 "asting\",500000],PARAMETER[\"false_northing\",0],AUTHORI");
+    add_srs_wkt (p, 12,
+		 "TY[\"EPSG\",\"32058\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH");
+    add_srs_wkt (p, 13, "]]");
+    p = add_epsg_def (first, last, 32061, "epsg", 32061,
+		      "NAD27 / Guatemala Norte");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666");
+    add_proj4text (p, 1,
+		   "667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=50000");
+    add_proj4text (p, 2,
+		   "0 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +n");
+    add_proj4text (p, 3, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Guatemala Norte\",GEOGCS[\"NAD27\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\"");
+    add_srs_wkt (p, 2,
+		 ",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"latitude_of_origin\",16.81666666666667],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-90.33333333333333],PARAMETER[\"scale");
+    add_srs_wkt (p, 10,
+		 "_factor\",0.99992226],PARAMETER[\"false_easting\",500000");
+    add_srs_wkt (p, 11,
+		 "],PARAMETER[\"false_northing\",292209.579],AUTHORITY[\"E");
+    add_srs_wkt (p, 12, "PSG\",\"32061\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32062, "epsg", 32062,
+		      "NAD27 / Guatemala Sur");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333");
+    add_proj4text (p, 1,
+		   "333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=c");
+    add_proj4text (p, 2, "lrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Guatemala Sur\",GEOGCS[\"NAD27\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6");
+    add_srs_wkt (p, 2,
+		 "378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]]");
+    add_srs_wkt (p, 3,
+		 ",AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AU");
+    add_srs_wkt (p, 4,
+		 "THORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925");
+    add_srs_wkt (p, 5,
+		 "1994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"latitude_of_origin\",14.9],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 9,
+		 "an\",-90.33333333333333],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 10,
+		 "989906],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",325992.681],AUTHORITY[\"EPSG\",\"32062\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32064, "epsg", 32064,
+		      "NAD27 / BLM 14N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 14N (ftUS)\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-99],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32064\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32065, "epsg", 32065,
+		      "NAD27 / BLM 15N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 15N (ftUS)\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-93],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32065\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32066, "epsg", 32066,
+		      "NAD27 / BLM 16N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 16N (ftUS)\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-87],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32066\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32067, "epsg", 32067,
+		      "NAD27 / BLM 17N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 17N (ftUS)\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012192,A");
+    add_srs_wkt (p, 7,
+		 "UTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mer");
+    add_srs_wkt (p, 8,
+		 "cator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "central_meridian\",-81],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 10,
+		 "6],PARAMETER[\"false_easting\",1640416.67],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32067\"],AXIS[\"");
+    add_srs_wkt (p, 12, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32074, "epsg", 32074,
+		      "NAD27 / BLM 14N (feet) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 14N (feet) (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.30480");
+    add_srs_wkt (p, 7,
+		 "06096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",1640416.67]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32");
+    add_srs_wkt (p, 12, "074\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32075, "epsg", 32075,
+		      "NAD27 / BLM 15N (feet) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 15N (feet) (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.30480");
+    add_srs_wkt (p, 7,
+		 "06096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-93],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",1640416.67]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32");
+    add_srs_wkt (p, 12, "075\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32076, "epsg", 32076,
+		      "NAD27 / BLM 16N (feet) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 16N (feet) (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.30480");
+    add_srs_wkt (p, 7,
+		 "06096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-87],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",1640416.67]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32");
+    add_srs_wkt (p, 12, "076\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32077, "epsg", 32077,
+		      "NAD27 / BLM 17N (feet) (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / BLM 17N (feet) (deprecated)\",GEOGCS[\"");
+    add_srs_wkt (p, 1,
+		 "NAD27\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"C");
+    add_srs_wkt (p, 2,
+		 "larke 1866\",6378206.4,294.9786982139006,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 3,
+		 "G\",\"7008\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Gr");
+    add_srs_wkt (p, 4,
+		 "eenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\"");
+    add_srs_wkt (p, 5,
+		 ",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHO");
+    add_srs_wkt (p, 6,
+		 "RITY[\"EPSG\",\"4267\"]],UNIT[\"US survey foot\",0.30480");
+    add_srs_wkt (p, 7,
+		 "06096012192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"T");
+    add_srs_wkt (p, 8,
+		 "ransverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_");
+    add_srs_wkt (p, 10,
+		 "factor\",0.9996],PARAMETER[\"false_easting\",1640416.67]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32");
+    add_srs_wkt (p, 12, "077\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32081, "epsg", 32081, "NAD27 / MTM zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / MTM zone 1\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-53],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9999],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"32081\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 32082, "epsg", 32082, "NAD27 / MTM zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / MTM zone 2\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-56],PARA");
+    add_srs_wkt (p, 9,
+		 "METER[\"scale_factor\",0.9999],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 10,
+		 "\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 11,
+		 "PSG\",\"32082\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 32083, "epsg", 32083, "NAD27 / MTM zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / MTM zone 3\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-58.5],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"32083\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 32084, "epsg", 32084, "NAD27 / MTM zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / MTM zone 4\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-61.5],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"32084\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 32085, "epsg", 32085, "NAD27 / MTM zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / MTM zone 5\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-64.5],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"32085\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 32086, "epsg", 32086, "NAD27 / MTM zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / MTM zone 6\",GEOGCS[\"NAD27\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1927\",SPHEROID[\"Clarke 1866\",6378");
+    add_srs_wkt (p, 2,
+		 "206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]],AU");
+    add_srs_wkt (p, 3,
+		 "THORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,AUTHO");
+    add_srs_wkt (p, 4,
+		 "RITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199");
+    add_srs_wkt (p, 5,
+		 "4328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",0],PARAMETER[\"central_meridian\",-67.5],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easti");
+    add_srs_wkt (p, 10,
+		 "ng\",304800],PARAMETER[\"false_northing\",0],AUTHORITY[\"");
+    add_srs_wkt (p, 11,
+		 "EPSG\",\"32086\"],AXIS[\"Easting\",EAST],AXIS[\"Northing");
+    add_srs_wkt (p, 12, "\",NORTH]]");
+    p = add_epsg_def (first, last, 32098, "epsg", 32098,
+		      "NAD27 / Quebec Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_");
+    add_proj4text (p, 1,
+		   "0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Quebec Lambert\",GEOGCS[\"NAD27\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1927\",SPHEROID[\"Clarke 1866\",");
+    add_srs_wkt (p, 2,
+		 "6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"7008\"]");
+    add_srs_wkt (p, 3,
+		 "],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\",0,A");
+    add_srs_wkt (p, 4,
+		 "UTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292");
+    add_srs_wkt (p, 5,
+		 "51994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"4267\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"standard_parallel_1\",60],PARAMETER[\"standard_parall");
+    add_srs_wkt (p, 9,
+		 "el_2\",46],PARAMETER[\"latitude_of_origin\",44],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"central_meridian\",-68.5],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 12, "32098\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32099, "epsg", 32099,
+		      "NAD27 / Louisiana Offshore");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 ");
+    add_proj4text (p, 3, "+units=us-ft +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD27 / Louisiana Offshore\",GEOGCS[\"NAD27\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke 186");
+    add_srs_wkt (p, 2,
+		 "6\",6378206.4,294.9786982139006,AUTHORITY[\"EPSG\",\"700");
+    add_srs_wkt (p, 3,
+		 "8\"]],AUTHORITY[\"EPSG\",\"6267\"]],PRIMEM[\"Greenwich\"");
+    add_srs_wkt (p, 4,
+		 ",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745");
+    add_srs_wkt (p, 5,
+		 "329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 6,
+		 "PSG\",\"4267\"]],UNIT[\"US survey foot\",0.3048006096012");
+    add_srs_wkt (p, 7,
+		 "192,AUTHORITY[\"EPSG\",\"9003\"]],PROJECTION[\"Lambert_C");
+    add_srs_wkt (p, 8,
+		 "onformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",");
+    add_srs_wkt (p, 9,
+		 "27.83333333333333],PARAMETER[\"standard_parallel_2\",26.");
+    add_srs_wkt (p, 10,
+		 "16666666666667],PARAMETER[\"latitude_of_origin\",25.6666");
+    add_srs_wkt (p, 11,
+		 "6666666667],PARAMETER[\"central_meridian\",-91.333333333");
+    add_srs_wkt (p, 12,
+		 "33333],PARAMETER[\"false_easting\",2000000],PARAMETER[\"");
+    add_srs_wkt (p, 13,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32099\"],AXIS[\"");
+    add_srs_wkt (p, 14, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32100, "epsg", 32100, "NAD83 / Montana");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5");
+    add_proj4text (p, 1,
+		   " +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +");
+    add_proj4text (p, 2, "no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Montana\",GEOGCS[\"NAD83\",DATUM[\"Nort");
+    add_srs_wkt (p, 1,
+		 "h_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 2,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 8,
+		 "llel_1\",49],PARAMETER[\"standard_parallel_2\",45],PARAM");
+    add_srs_wkt (p, 9,
+		 "ETER[\"latitude_of_origin\",44.25],PARAMETER[\"central_m");
+    add_srs_wkt (p, 10,
+		 "eridian\",-109.5],PARAMETER[\"false_easting\",600000],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32100");
+    add_srs_wkt (p, 12, "\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32104, "epsg", 32104, "NAD83 / Nebraska");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +");
+    add_proj4text (p, 1,
+		   "lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nebraska\",GEOGCS[\"NAD83\",DATUM[\"Nor");
+    add_srs_wkt (p, 1,
+		 "th_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,2");
+    add_srs_wkt (p, 2,
+		 "98.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 8,
+		 "rallel_1\",43],PARAMETER[\"standard_parallel_2\",40],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"latitude_of_origin\",39.83333333333334],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"central_meridian\",-100],PARAMETER[\"false_easting\"");
+    add_srs_wkt (p, 11,
+		 ",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPS");
+    add_srs_wkt (p, 12, "G\",\"32104\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32107, "epsg", 32107, "NAD83 / Nevada East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nevada East\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",34.75],PARAMETER[\"central_meridian\",-115.58333333");
+    add_srs_wkt (p, 9,
+		 "33333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",200000],PARAMETER[\"false_northing\",80000");
+    add_srs_wkt (p, 11,
+		 "00],AUTHORITY[\"EPSG\",\"32107\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32108, "epsg", 32108,
+		      "NAD83 / Nevada Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nevada Central\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 8,
+		 "igin\",34.75],PARAMETER[\"central_meridian\",-116.666666");
+    add_srs_wkt (p, 9,
+		 "6666667],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",500000],PARAMETER[\"false_northing\",600");
+    add_srs_wkt (p, 11,
+		 "0000],AUTHORITY[\"EPSG\",\"32108\"],AXIS[\"X\",EAST],AXI");
+    add_srs_wkt (p, 12, "S[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32109, "epsg", 32109, "NAD83 / Nevada West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.");
+    add_proj4text (p, 1,
+		   "9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 ");
+    add_proj4text (p, 2, "+units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Nevada West\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",34.75],PARAMETER[\"central_meridian\",-118.58333333");
+    add_srs_wkt (p, 9,
+		 "33333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",800000],PARAMETER[\"false_northing\",40000");
+    add_srs_wkt (p, 11,
+		 "00],AUTHORITY[\"EPSG\",\"32109\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32110, "epsg", 32110,
+		      "NAD83 / New Hampshire");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "99966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +u");
+    add_proj4text (p, 2, "nits=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Hampshire\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",42.5],PARAMETER[\"central_meridian\",-71.666666666");
+    add_srs_wkt (p, 9,
+		 "66667],PARAMETER[\"scale_factor\",0.999966667],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",300000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"32110\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32111, "epsg", 32111, "NAD83 / New Jersey");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Jersey\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",38.83333333333334],PARAMETER[\"central_meridian\",-74");
+    add_srs_wkt (p, 9,
+		 ".5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_easting\",150000],PARAMETER[\"false_northing\",0],AUTHO");
+    add_srs_wkt (p, 11,
+		 "RITY[\"EPSG\",\"32111\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 12, "TH]]");
+    p = add_epsg_def (first, last, 32112, "epsg", 32112,
+		      "NAD83 / New Mexico East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Mexico East\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",31],PARAMETER[\"central_meridian\",-104.3333333");
+    add_srs_wkt (p, 9,
+		 "333333],PARAMETER[\"scale_factor\",0.999909091],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",165000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"32112\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32113, "epsg", 32113,
+		      "NAD83 / New Mexico Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=5000");
+    add_proj4text (p, 1,
+		   "00 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Mexico Central\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 8,
+		 "of_origin\",31],PARAMETER[\"central_meridian\",-106.25],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 10,
+		 "ting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY");
+    add_srs_wkt (p, 11,
+		 "[\"EPSG\",\"32113\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    add_srs_wkt (p, 12, "");
+    p = add_epsg_def (first, last, 32114, "epsg", 32114,
+		      "NAD83 / New Mexico West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New Mexico West\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 8,
+		 "origin\",31],PARAMETER[\"central_meridian\",-107.8333333");
+    add_srs_wkt (p, 9,
+		 "333333],PARAMETER[\"scale_factor\",0.999916667],PARAMETE");
+    add_srs_wkt (p, 10,
+		 "R[\"false_easting\",830000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 11,
+		 ",0],AUTHORITY[\"EPSG\",\"32114\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 12, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32115, "epsg", 32115,
+		      "NAD83 / New York East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York East\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",38.83333333333334],PARAMETER[\"central_meridian\",");
+    add_srs_wkt (p, 9,
+		 "-74.5],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_easting\",150000],PARAMETER[\"false_northing\",0],AU");
+    add_srs_wkt (p, 11,
+		 "THORITY[\"EPSG\",\"32115\"],AXIS[\"X\",EAST],AXIS[\"Y\",");
+    add_srs_wkt (p, 12, "NORTH]]");
+    p = add_epsg_def (first, last, 32116, "epsg", 32116,
+		      "NAD83 / New York Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York Central\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of");
+    add_srs_wkt (p, 8,
+		 "_origin\",40],PARAMETER[\"central_meridian\",-76.5833333");
+    add_srs_wkt (p, 9,
+		 "3333333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER");
+    add_srs_wkt (p, 10,
+		 "[\"false_easting\",250000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 11,
+		 "0],AUTHORITY[\"EPSG\",\"32116\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 12, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32117, "epsg", 32117,
+		      "NAD83 / New York West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999");
+    add_proj4text (p, 1,
+		   "9375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 2, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York West\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_ori");
+    add_srs_wkt (p, 8,
+		 "gin\",40],PARAMETER[\"central_meridian\",-78.58333333333");
+    add_srs_wkt (p, 9,
+		 "333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"f");
+    add_srs_wkt (p, 10,
+		 "alse_easting\",350000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 11,
+		 "UTHORITY[\"EPSG\",\"32117\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 32118, "epsg", 32118,
+		      "NAD83 / New York Long Island");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / New York Long Island\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "standard_parallel_1\",41.03333333333333],PARAMETER[\"sta");
+    add_srs_wkt (p, 9,
+		 "ndard_parallel_2\",40.66666666666666],PARAMETER[\"latitu");
+    add_srs_wkt (p, 10,
+		 "de_of_origin\",40.16666666666666],PARAMETER[\"central_me");
+    add_srs_wkt (p, 11,
+		 "ridian\",-74],PARAMETER[\"false_easting\",300000],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32118\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32119, "epsg", 32119,
+		      "NAD83 / North Carolina");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / North Carolina\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",36.16666666666666],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",34.33333333333334],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",33.75],PARAMETER[\"central_meridian\",-79],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_easting\",609601.22],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 12,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32119\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 13, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32120, "epsg", 32120,
+		      "NAD83 / North Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / North Dakota North\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",48.73333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",47.43333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",47],PARAMETER[\"central_meridian\",-100.5]");
+    add_srs_wkt (p, 11,
+		 ",PARAMETER[\"false_easting\",600000],PARAMETER[\"false_n");
+    add_srs_wkt (p, 12,
+		 "orthing\",0],AUTHORITY[\"EPSG\",\"32120\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32121, "epsg", 32121,
+		      "NAD83 / North Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / North Dakota South\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",47.48333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",46.18333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",45.66666666666666],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-100.5],PARAMETER[\"false_easting\",600000],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32121\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32122, "epsg", 32122, "NAD83 / Ohio North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Ohio North\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 8,
+		 "arallel_1\",41.7],PARAMETER[\"standard_parallel_2\",40.4");
+    add_srs_wkt (p, 9,
+		 "3333333333333],PARAMETER[\"latitude_of_origin\",39.66666");
+    add_srs_wkt (p, 10,
+		 "666666666],PARAMETER[\"central_meridian\",-82.5],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",600000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"32122\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32123, "epsg", 32123, "NAD83 / Ohio South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Ohio South\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 8,
+		 "arallel_1\",40.03333333333333],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",38.73333333333333],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",38],PARAMETER[\"central_meridian\",-82.5],PARAMETER");
+    add_srs_wkt (p, 11,
+		 "[\"false_easting\",600000],PARAMETER[\"false_northing\",");
+    add_srs_wkt (p, 12,
+		 "0],AUTHORITY[\"EPSG\",\"32123\"],AXIS[\"X\",EAST],AXIS[\"");
+    add_srs_wkt (p, 13, "Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32124, "epsg", 32124,
+		      "NAD83 / Oklahoma North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oklahoma North\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",36.76666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",35.56666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",35],PARAMETER[\"central_meridian\",-98],PARAMET");
+    add_srs_wkt (p, 11,
+		 "ER[\"false_easting\",600000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"32124\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32125, "epsg", 32125,
+		      "NAD83 / Oklahoma South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oklahoma South\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",35.23333333333333],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",33.93333333333333],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",33.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-98],PARAMETER[\"false_easting\",600000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32125\"],AXIS[\"");
+    add_srs_wkt (p, 13, "X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32126, "epsg", 32126,
+		      "NAD83 / Oregon North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oregon North\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",46],PARAMETER[\"standard_parallel_2\",44.3");
+    add_srs_wkt (p, 9,
+		 "3333333333334],PARAMETER[\"latitude_of_origin\",43.66666");
+    add_srs_wkt (p, 10,
+		 "666666666],PARAMETER[\"central_meridian\",-120.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",2500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"32126\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32127, "epsg", 32127,
+		      "NAD83 / Oregon South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.6");
+    add_proj4text (p, 1,
+		   "6666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=G");
+    add_proj4text (p, 2, "RS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Oregon South\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",44],PARAMETER[\"standard_parallel_2\",42.3");
+    add_srs_wkt (p, 9,
+		 "3333333333334],PARAMETER[\"latitude_of_origin\",41.66666");
+    add_srs_wkt (p, 10,
+		 "666666666],PARAMETER[\"central_meridian\",-120.5],PARAME");
+    add_srs_wkt (p, 11,
+		 "TER[\"false_easting\",1500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"32127\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32128, "epsg", 32128,
+		      "NAD83 / Pennsylvania North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=4");
+    add_proj4text (p, 1,
+		   "0.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps");
+    add_proj4text (p, 2, "=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Pennsylvania North\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",41.95],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 9,
+		 "l_2\",40.88333333333333],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 10,
+		 ",40.16666666666666],PARAMETER[\"central_meridian\",-77.7");
+    add_srs_wkt (p, 11,
+		 "5],PARAMETER[\"false_easting\",600000],PARAMETER[\"false");
+    add_srs_wkt (p, 12,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"32128\"],AXIS[\"X\",");
+    add_srs_wkt (p, 13, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32129, "epsg", 32129,
+		      "NAD83 / Pennsylvania South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Pennsylvania South\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",40.96666666666667],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",39.93333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",39.33333333333334],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-77.75],PARAMETER[\"false_easting\",600000],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32129\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32130, "epsg", 32130,
+		      "NAD83 / Rhode Island");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9");
+    add_proj4text (p, 1,
+		   "9999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +un");
+    add_proj4text (p, 2, "its=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Rhode Island\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",41.08333333333334],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 9,
+		 "71.5],PARAMETER[\"scale_factor\",0.99999375],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",100000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"32130\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 32133, "epsg", 32133,
+		      "NAD83 / South Carolina");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31");
+    add_proj4text (p, 1,
+		   ".83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / South Carolina\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",34.83333333333334],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",32.5],PARAMETER[\"latitude_of_origin\",31.8");
+    add_srs_wkt (p, 10,
+		 "3333333333333],PARAMETER[\"central_meridian\",-81],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",609600],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"32133\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32134, "epsg", 32134,
+		      "NAD83 / South Dakota North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666");
+    add_proj4text (p, 1,
+		   "666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_");
+    add_proj4text (p, 2, "0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / South Dakota North\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",45.68333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",44.41666666666666],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",43.83333333333334],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-100],PARAMETER[\"false_easting\",600000],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32134\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32135, "epsg", 32135,
+		      "NAD83 / South Dakota South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42");
+    add_proj4text (p, 1,
+		   ".33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y");
+    add_proj4text (p, 2, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / South Dakota South\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",44.4],PARAMETER[\"standard_parallel");
+    add_srs_wkt (p, 9,
+		 "_2\",42.83333333333334],PARAMETER[\"latitude_of_origin\"");
+    add_srs_wkt (p, 10,
+		 ",42.33333333333334],PARAMETER[\"central_meridian\",-100.");
+    add_srs_wkt (p, 11,
+		 "3333333333333],PARAMETER[\"false_easting\",600000],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32135\"]");
+    add_srs_wkt (p, 13, ",AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32136, "epsg", 32136, "NAD83 / Tennessee");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GR");
+    add_proj4text (p, 2, "S80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Tennessee\",GEOGCS[\"NAD83\",DATUM[\"No");
+    add_srs_wkt (p, 1,
+		 "rth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,");
+    add_srs_wkt (p, 2,
+		 "298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 8,
+		 "arallel_1\",36.41666666666666],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",35.25],PARAMETER[\"latitude_of_origin\",34.3333");
+    add_srs_wkt (p, 10,
+		 "3333333334],PARAMETER[\"central_meridian\",-86],PARAMETE");
+    add_srs_wkt (p, 11,
+		 "R[\"false_easting\",600000],PARAMETER[\"false_northing\"");
+    add_srs_wkt (p, 12,
+		 ",0],AUTHORITY[\"EPSG\",\"32136\"],AXIS[\"X\",EAST],AXIS[");
+    add_srs_wkt (p, 13, "\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32137, "epsg", 32137, "NAD83 / Texas North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=3");
+    add_proj4text (p, 1,
+		   "4 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +d");
+    add_proj4text (p, 2, "atum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas North\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",36.18333333333333],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_2\",34.65],PARAMETER[\"latitude_of_origin\",34],P");
+    add_srs_wkt (p, 10,
+		 "ARAMETER[\"central_meridian\",-101.5],PARAMETER[\"false_");
+    add_srs_wkt (p, 11,
+		 "easting\",200000],PARAMETER[\"false_northing\",1000000],");
+    add_srs_wkt (p, 12,
+		 "AUTHORITY[\"EPSG\",\"32137\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 32138, "epsg", 32138,
+		      "NAD83 / Texas North Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y");
+    add_proj4text (p, 2,
+		   "_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas North Central\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",33.96666666666667],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",32.13333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",31.66666666666667],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-98.5],PARAMETER[\"false_easting\",600000],PARAM");
+    add_srs_wkt (p, 12,
+		 "ETER[\"false_northing\",2000000],AUTHORITY[\"EPSG\",\"32");
+    add_srs_wkt (p, 13, "138\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32139, "epsg", 32139,
+		      "NAD83 / Texas Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +");
+    add_proj4text (p, 2,
+		   "x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units");
+    add_proj4text (p, 3, "=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas Central\",GEOGCS[\"NAD83\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378");
+    add_srs_wkt (p, 2,
+		 "137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORIT");
+    add_srs_wkt (p, 3,
+		 "Y[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"");
+    add_srs_wkt (p, 4,
+		 "EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AU");
+    add_srs_wkt (p, 5,
+		 "THORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]");
+    add_srs_wkt (p, 6,
+		 "],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECT");
+    add_srs_wkt (p, 7,
+		 "ION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standar");
+    add_srs_wkt (p, 8,
+		 "d_parallel_1\",31.88333333333333],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 9,
+		 "arallel_2\",30.11666666666667],PARAMETER[\"latitude_of_o");
+    add_srs_wkt (p, 10,
+		 "rigin\",29.66666666666667],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-100.3333333333333],PARAMETER[\"false_easting\",700000]");
+    add_srs_wkt (p, 12,
+		 ",PARAMETER[\"false_northing\",3000000],AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 13, ",\"32139\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32140, "epsg", 32140,
+		      "NAD83 / Texas South Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0");
+    add_proj4text (p, 2,
+		   "=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas South Central\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",30.28333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",28.38333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",27.83333333333333],PARAMETER[\"central_mer");
+    add_srs_wkt (p, 11,
+		 "idian\",-99],PARAMETER[\"false_easting\",600000],PARAMET");
+    add_srs_wkt (p, 12,
+		 "ER[\"false_northing\",4000000],AUTHORITY[\"EPSG\",\"3214");
+    add_srs_wkt (p, 13, "0\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32141, "epsg", 32141, "NAD83 / Texas South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y");
+    add_proj4text (p, 2,
+		   "_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Texas South\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",27.83333333333333],PARAMETER[\"standard_pa");
+    add_srs_wkt (p, 9,
+		 "rallel_2\",26.16666666666667],PARAMETER[\"latitude_of_or");
+    add_srs_wkt (p, 10,
+		 "igin\",25.66666666666667],PARAMETER[\"central_meridian\"");
+    add_srs_wkt (p, 11,
+		 ",-98.5],PARAMETER[\"false_easting\",300000],PARAMETER[\"");
+    add_srs_wkt (p, 12,
+		 "false_northing\",5000000],AUTHORITY[\"EPSG\",\"32141\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32142, "epsg", 32142, "NAD83 / Utah North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +");
+    add_proj4text (p, 2,
+		   "y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah North\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 8,
+		 "arallel_1\",41.78333333333333],PARAMETER[\"standard_para");
+    add_srs_wkt (p, 9,
+		 "llel_2\",40.71666666666667],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 10,
+		 "in\",40.33333333333334],PARAMETER[\"central_meridian\",-");
+    add_srs_wkt (p, 11,
+		 "111.5],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 12,
+		 "alse_northing\",1000000],AUTHORITY[\"EPSG\",\"32142\"],A");
+    add_srs_wkt (p, 13, "XIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32143, "epsg", 32143,
+		      "NAD83 / Utah Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "8.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah Central\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard");
+    add_srs_wkt (p, 8,
+		 "_parallel_1\",40.65],PARAMETER[\"standard_parallel_2\",3");
+    add_srs_wkt (p, 9,
+		 "9.01666666666667],PARAMETER[\"latitude_of_origin\",38.33");
+    add_srs_wkt (p, 10,
+		 "333333333334],PARAMETER[\"central_meridian\",-111.5],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 12,
+		 "ing\",2000000],AUTHORITY[\"EPSG\",\"32143\"],AXIS[\"X\",");
+    add_srs_wkt (p, 13, "EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32144, "epsg", 32144, "NAD83 / Utah South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=3");
+    add_proj4text (p, 1,
+		   "6.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 ");
+    add_proj4text (p, 2, "+ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Utah South\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_p");
+    add_srs_wkt (p, 8,
+		 "arallel_1\",38.35],PARAMETER[\"standard_parallel_2\",37.");
+    add_srs_wkt (p, 9,
+		 "21666666666667],PARAMETER[\"latitude_of_origin\",36.6666");
+    add_srs_wkt (p, 10,
+		 "6666666666],PARAMETER[\"central_meridian\",-111.5],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",500000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",3000000],AUTHORITY[\"EPSG\",\"32144\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 13, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32145, "epsg", 32145, "NAD83 / Vermont");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0");
+    add_proj4text (p, 1,
+		   "=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Vermont\",GEOGCS[\"NAD83\",DATUM[\"Nort");
+    add_srs_wkt (p, 1,
+		 "h_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,29");
+    add_srs_wkt (p, 2,
+		 "8.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EP");
+    add_srs_wkt (p, 3,
+		 "SG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 4,
+		 ",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORIT");
+    add_srs_wkt (p, 5,
+		 "Y[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],UNIT");
+    add_srs_wkt (p, 6,
+		 "[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"");
+    add_srs_wkt (p, 7,
+		 "Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",");
+    add_srs_wkt (p, 8,
+		 "42.5],PARAMETER[\"central_meridian\",-72.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.999964286],PARAMETER[\"false_easting\",");
+    add_srs_wkt (p, 10,
+		 "500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 11, "\",\"32145\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32146, "epsg", 32146,
+		      "NAD83 / Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37");
+    add_proj4text (p, 1,
+		   ".66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +");
+    add_proj4text (p, 2, "ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Virginia North\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",39.2],PARAMETER[\"standard_parallel_2\",");
+    add_srs_wkt (p, 9,
+		 "38.03333333333333],PARAMETER[\"latitude_of_origin\",37.6");
+    add_srs_wkt (p, 10,
+		 "6666666666666],PARAMETER[\"central_meridian\",-78.5],PAR");
+    add_srs_wkt (p, 11,
+		 "AMETER[\"false_easting\",3500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",2000000],AUTHORITY[\"EPSG\",\"32146\"],AXIS[\"X\"");
+    add_srs_wkt (p, 13, ",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32147, "epsg", 32147,
+		      "NAD83 / Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +");
+    add_proj4text (p, 2,
+		   "y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Virginia South\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",37.96666666666667],PARAMETER[\"standard_");
+    add_srs_wkt (p, 9,
+		 "parallel_2\",36.76666666666667],PARAMETER[\"latitude_of_");
+    add_srs_wkt (p, 10,
+		 "origin\",36.33333333333334],PARAMETER[\"central_meridian");
+    add_srs_wkt (p, 11,
+		 "\",-78.5],PARAMETER[\"false_easting\",3500000],PARAMETER");
+    add_srs_wkt (p, 12,
+		 "[\"false_northing\",1000000],AUTHORITY[\"EPSG\",\"32147\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32148, "epsg", 32148,
+		      "NAD83 / Washington North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47");
+    add_proj4text (p, 1,
+		   " +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS");
+    add_proj4text (p, 2, "80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Washington North\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 8,
+		 "ndard_parallel_1\",48.73333333333333],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_2\",47.5],PARAMETER[\"latitude_of_origin\",4");
+    add_srs_wkt (p, 10,
+		 "7],PARAMETER[\"central_meridian\",-120.8333333333333],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32148\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 13, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32149, "epsg", 32149,
+		      "NAD83 / Washington South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Washington South\",GEOGCS[\"NAD83\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6");
+    add_srs_wkt (p, 2,
+		 "378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHO");
+    add_srs_wkt (p, 3,
+		 "RITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORIT");
+    add_srs_wkt (p, 4,
+		 "Y[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199432");
+    add_srs_wkt (p, 5,
+		 "8,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"426");
+    add_srs_wkt (p, 6,
+		 "9\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PRO");
+    add_srs_wkt (p, 7,
+		 "JECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"sta");
+    add_srs_wkt (p, 8,
+		 "ndard_parallel_1\",47.33333333333334],PARAMETER[\"standa");
+    add_srs_wkt (p, 9,
+		 "rd_parallel_2\",45.83333333333334],PARAMETER[\"latitude_");
+    add_srs_wkt (p, 10,
+		 "of_origin\",45.33333333333334],PARAMETER[\"central_merid");
+    add_srs_wkt (p, 11,
+		 "ian\",-120.5],PARAMETER[\"false_easting\",500000],PARAME");
+    add_srs_wkt (p, 12,
+		 "TER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32149\"],");
+    add_srs_wkt (p, 13, "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32150, "epsg", 32150,
+		      "NAD83 / West Virginia North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.");
+    add_proj4text (p, 1,
+		   "5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / West Virginia North\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",40.25],PARAMETER[\"standard_paralle");
+    add_srs_wkt (p, 9,
+		 "l_2\",39],PARAMETER[\"latitude_of_origin\",38.5],PARAMET");
+    add_srs_wkt (p, 10,
+		 "ER[\"central_meridian\",-79.5],PARAMETER[\"false_easting");
+    add_srs_wkt (p, 11,
+		 "\",600000],PARAMETER[\"false_northing\",0],AUTHORITY[\"E");
+    add_srs_wkt (p, 12, "PSG\",\"32150\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32151, "epsg", 32151,
+		      "NAD83 / West Virginia South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / West Virginia South\",GEOGCS[\"NAD83\",");
+    add_srs_wkt (p, 1,
+		 "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",38.88333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",37.48333333333333],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",37],PARAMETER[\"central_meridian\",-81],PA");
+    add_srs_wkt (p, 11,
+		 "RAMETER[\"false_easting\",600000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 12,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32151\"],AXIS[\"X\",EAST]");
+    add_srs_wkt (p, 13, ",AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32152, "epsg", 32152,
+		      "NAD83 / Wisconsin North");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0");
+    add_proj4text (p, 2, "=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wisconsin North\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",46.76666666666667],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_2\",45.56666666666667],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 10,
+		 "f_origin\",45.16666666666666],PARAMETER[\"central_meridi");
+    add_srs_wkt (p, 11,
+		 "an\",-90],PARAMETER[\"false_easting\",600000],PARAMETER[");
+    add_srs_wkt (p, 12,
+		 "\"false_northing\",0],AUTHORITY[\"EPSG\",\"32152\"],AXIS");
+    add_srs_wkt (p, 13, "[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32153, "epsg", 32153,
+		      "NAD83 / Wisconsin Central");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333");
+    add_proj4text (p, 1,
+		   "334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NA");
+    add_proj4text (p, 2, "D83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wisconsin Central\",GEOGCS[\"NAD83\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",");
+    add_srs_wkt (p, 2,
+		 "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTH");
+    add_srs_wkt (p, 3,
+		 "ORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORI");
+    add_srs_wkt (p, 4,
+		 "TY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943");
+    add_srs_wkt (p, 5,
+		 "28,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"42");
+    add_srs_wkt (p, 6,
+		 "69\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PR");
+    add_srs_wkt (p, 7,
+		 "OJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"st");
+    add_srs_wkt (p, 8,
+		 "andard_parallel_1\",45.5],PARAMETER[\"standard_parallel_");
+    add_srs_wkt (p, 9,
+		 "2\",44.25],PARAMETER[\"latitude_of_origin\",43.833333333");
+    add_srs_wkt (p, 10,
+		 "33334],PARAMETER[\"central_meridian\",-90],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_easting\",600000],PARAMETER[\"false_northing\",0],A");
+    add_srs_wkt (p, 12,
+		 "UTHORITY[\"EPSG\",\"32153\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 13, ",NORTH]]");
+    p = add_epsg_def (first, last, 32154, "epsg", 32154,
+		      "NAD83 / Wisconsin South");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80");
+    add_proj4text (p, 2, " +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wisconsin South\",GEOGCS[\"NAD83\",DATU");
+    add_srs_wkt (p, 1,
+		 "M[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",63");
+    add_srs_wkt (p, 2,
+		 "78137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHOR");
+    add_srs_wkt (p, 3,
+		 "ITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY");
+    add_srs_wkt (p, 4,
+		 "[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328");
+    add_srs_wkt (p, 5,
+		 ",AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269");
+    add_srs_wkt (p, 6,
+		 "\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJ");
+    add_srs_wkt (p, 7,
+		 "ECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"stan");
+    add_srs_wkt (p, 8,
+		 "dard_parallel_1\",44.06666666666667],PARAMETER[\"standar");
+    add_srs_wkt (p, 9,
+		 "d_parallel_2\",42.73333333333333],PARAMETER[\"latitude_o");
+    add_srs_wkt (p, 10,
+		 "f_origin\",42],PARAMETER[\"central_meridian\",-90],PARAM");
+    add_srs_wkt (p, 11,
+		 "ETER[\"false_easting\",600000],PARAMETER[\"false_northin");
+    add_srs_wkt (p, 12,
+		 "g\",0],AUTHORITY[\"EPSG\",\"32154\"],AXIS[\"X\",EAST],AX");
+    add_srs_wkt (p, 13, "IS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32155, "epsg", 32155,
+		      "NAD83 / Wyoming East");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +uni");
+    add_proj4text (p, 2, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming East\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",40.5],PARAMETER[\"central_meridian\",-105.166666666");
+    add_srs_wkt (p, 9,
+		 "6667],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",200000],PARAMETER[\"false_northing\",0],");
+    add_srs_wkt (p, 11,
+		 "AUTHORITY[\"EPSG\",\"32155\"],AXIS[\"X\",EAST],AXIS[\"Y\"");
+    add_srs_wkt (p, 12, ",NORTH]]");
+    p = add_epsg_def (first, last, 32156, "epsg", 32156,
+		      "NAD83 / Wyoming East Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming East Central\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",40.5],PARAMETER[\"central_meridian\",-107.3");
+    add_srs_wkt (p, 9,
+		 "333333333333],PARAMETER[\"scale_factor\",0.9999375],PARA");
+    add_srs_wkt (p, 10,
+		 "METER[\"false_easting\",400000],PARAMETER[\"false_northi");
+    add_srs_wkt (p, 11,
+		 "ng\",100000],AUTHORITY[\"EPSG\",\"32156\"],AXIS[\"X\",EA");
+    add_srs_wkt (p, 12, "ST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32157, "epsg", 32157,
+		      "NAD83 / Wyoming West Central");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0");
+    add_proj4text (p, 1,
+		   "=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_de");
+    add_proj4text (p, 2, "fs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming West Central\",GEOGCS[\"NAD83\"");
+    add_srs_wkt (p, 1,
+		 ",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980");
+    add_srs_wkt (p, 2,
+		 "\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],A");
+    add_srs_wkt (p, 3,
+		 "UTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTH");
+    add_srs_wkt (p, 4,
+		 "ORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519");
+    add_srs_wkt (p, 5,
+		 "94328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 6,
+		 "4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],");
+    add_srs_wkt (p, 7,
+		 "PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude");
+    add_srs_wkt (p, 8,
+		 "_of_origin\",40.5],PARAMETER[\"central_meridian\",-108.7");
+    add_srs_wkt (p, 9,
+		 "5],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_easting\",600000],PARAMETER[\"false_northing\",0],AUT");
+    add_srs_wkt (p, 11,
+		 "HORITY[\"EPSG\",\"32157\"],AXIS[\"X\",EAST],AXIS[\"Y\",N");
+    add_srs_wkt (p, 12, "ORTH]]");
+    p = add_epsg_def (first, last, 32158, "epsg", 32158,
+		      "NAD83 / Wyoming West");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9");
+    add_proj4text (p, 1,
+		   "999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83");
+    add_proj4text (p, 2, " +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Wyoming West\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",40.5],PARAMETER[\"central_meridian\",-110.083333333");
+    add_srs_wkt (p, 9,
+		 "3333],PARAMETER[\"scale_factor\",0.9999375],PARAMETER[\"");
+    add_srs_wkt (p, 10,
+		 "false_easting\",800000],PARAMETER[\"false_northing\",100");
+    add_srs_wkt (p, 11,
+		 "000],AUTHORITY[\"EPSG\",\"32158\"],AXIS[\"X\",EAST],AXIS");
+    add_srs_wkt (p, 12, "[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32161, "epsg", 32161,
+		      "NAD83 / Puerto Rico & Virgin Is.");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333");
+    add_proj4text (p, 1,
+		   "333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +");
+    add_proj4text (p, 2,
+		   "x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=");
+    add_proj4text (p, 3, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Puerto Rico & Virgin Is.\",GEOGCS[\"NAD");
+    add_srs_wkt (p, 1,
+		 "83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS ");
+    add_srs_wkt (p, 2,
+		 "1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"");
+    add_srs_wkt (p, 3,
+		 "]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,");
+    add_srs_wkt (p, 4,
+		 "AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329");
+    add_srs_wkt (p, 5,
+		 "251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 6,
+		 "\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001");
+    add_srs_wkt (p, 7,
+		 "\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMET");
+    add_srs_wkt (p, 8,
+		 "ER[\"standard_parallel_1\",18.43333333333333],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"standard_parallel_2\",18.03333333333333],PARAMETER[\"l");
+    add_srs_wkt (p, 10,
+		 "atitude_of_origin\",17.83333333333333],PARAMETER[\"centr");
+    add_srs_wkt (p, 11,
+		 "al_meridian\",-66.43333333333334],PARAMETER[\"false_east");
+    add_srs_wkt (p, 12,
+		 "ing\",200000],PARAMETER[\"false_northing\",200000],AUTHO");
+    add_srs_wkt (p, 13,
+		 "RITY[\"EPSG\",\"32161\"],AXIS[\"X\",EAST],AXIS[\"Y\",NOR");
+    add_srs_wkt (p, 14, "TH]]");
+    p = add_epsg_def (first, last, 32164, "epsg", 32164,
+		      "NAD83 / BLM 14N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / BLM 14N (ftUS)\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_");
+    add_srs_wkt (p, 9,
+		 "meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",1640416.67],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32164\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Y\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_26 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 32165, "epsg", 32165,
+		      "NAD83 / BLM 15N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / BLM 15N (ftUS)\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_");
+    add_srs_wkt (p, 9,
+		 "meridian\",-93],PARAMETER[\"scale_factor\",0.9996],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",1640416.67],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32165\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32166, "epsg", 32166,
+		      "NAD83 / BLM 16N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / BLM 16N (ftUS)\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_");
+    add_srs_wkt (p, 9,
+		 "meridian\",-87],PARAMETER[\"scale_factor\",0.9996],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",1640416.67],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32166\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32167, "epsg", 32167,
+		      "NAD83 / BLM 17N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / BLM 17N (ftUS)\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"US survey foot\",0.3048006096012192,AUTHORITY[");
+    add_srs_wkt (p, 7,
+		 "\"EPSG\",\"9003\"]],PROJECTION[\"Transverse_Mercator\"],");
+    add_srs_wkt (p, 8,
+		 "PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_");
+    add_srs_wkt (p, 9,
+		 "meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAM");
+    add_srs_wkt (p, 10,
+		 "ETER[\"false_easting\",1640416.67],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 11,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32167\"],AXIS[\"X\",EAST");
+    add_srs_wkt (p, 12, "],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32180, "epsg", 32180,
+		      "NAD83 / SCoPQ zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / SCoPQ zone 2\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-55.5],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304");
+    add_srs_wkt (p, 10,
+		 "800],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"32180\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32181, "epsg", 32181, "NAD83 / MTM zone 1");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 1\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-53],PARAMETER[\"sc");
+    add_srs_wkt (p, 9,
+		 "ale_factor\",0.9999],PARAMETER[\"false_easting\",304800]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32");
+    add_srs_wkt (p, 11, "181\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32182, "epsg", 32182, "NAD83 / MTM zone 2");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 2\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-56],PARAMETER[\"sc");
+    add_srs_wkt (p, 9,
+		 "ale_factor\",0.9999],PARAMETER[\"false_easting\",304800]");
+    add_srs_wkt (p, 10,
+		 ",PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32");
+    add_srs_wkt (p, 11, "182\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32183, "epsg", 32183, "NAD83 / MTM zone 3");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 3\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-58.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "32183\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32184, "epsg", 32184, "NAD83 / MTM zone 4");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 4\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-61.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "32184\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32185, "epsg", 32185, "NAD83 / MTM zone 5");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 5\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-64.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "32185\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32186, "epsg", 32186, "NAD83 / MTM zone 6");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 6\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-67.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "32186\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32187, "epsg", 32187, "NAD83 / MTM zone 7");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 7\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-70.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "32187\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32188, "epsg", 32188, "NAD83 / MTM zone 8");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 8\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-73.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "32188\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32189, "epsg", 32189, "NAD83 / MTM zone 9");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 9\",GEOGCS[\"NAD83\",DATUM[\"N");
+    add_srs_wkt (p, 1,
+		 "orth_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137");
+    add_srs_wkt (p, 2,
+		 ",298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"");
+    add_srs_wkt (p, 3,
+		 "EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPS");
+    add_srs_wkt (p, 4,
+		 "G\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHO");
+    add_srs_wkt (p, 5,
+		 "RITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],U");
+    add_srs_wkt (p, 6,
+		 "NIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION");
+    add_srs_wkt (p, 7,
+		 "[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin");
+    add_srs_wkt (p, 8,
+		 "\",0],PARAMETER[\"central_meridian\",-76.5],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11, "32189\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32190, "epsg", 32190, "NAD83 / MTM zone 10");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 10\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-79.5],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304");
+    add_srs_wkt (p, 10,
+		 "800],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11, "\"32190\"],AXIS[\"E(X)\",EAST],AXIS[\"N(Y)\",NORTH]]");
+    p = add_epsg_def (first, last, 32191, "epsg", 32191, "NAD83 / MTM zone 11");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 ");
+    add_proj4text (p, 1, "+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 11\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-82.5],PARAMETER[");
+    add_srs_wkt (p, 9,
+		 "\"scale_factor\",0.9999],PARAMETER[\"false_easting\",304");
+    add_srs_wkt (p, 10,
+		 "800],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",");
+    add_srs_wkt (p, 11,
+		 "\"32191\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 32192, "epsg", 32192, "NAD83 / MTM zone 12");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 12\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "32192\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 32193, "epsg", 32193, "NAD83 / MTM zone 13");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 13\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-84],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "32193\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 32194, "epsg", 32194, "NAD83 / MTM zone 14");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 14\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-87],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "32194\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 32195, "epsg", 32195, "NAD83 / MTM zone 15");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 15\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-90],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "32195\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 32196, "epsg", 32196, "NAD83 / MTM zone 16");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 16\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-93],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "32196\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 32197, "epsg", 32197, "NAD83 / MTM zone 17");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y");
+    add_proj4text (p, 1, "_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / MTM zone 17\",GEOGCS[\"NAD83\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637813");
+    add_srs_wkt (p, 2,
+		 "7,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[");
+    add_srs_wkt (p, 3,
+		 "\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"E");
+    add_srs_wkt (p, 4,
+		 "PSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUT");
+    add_srs_wkt (p, 5,
+		 "HORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]]");
+    add_srs_wkt (p, 6,
+		 ",UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTI");
+    add_srs_wkt (p, 7,
+		 "ON[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_orig");
+    add_srs_wkt (p, 8,
+		 "in\",0],PARAMETER[\"central_meridian\",-96],PARAMETER[\"");
+    add_srs_wkt (p, 9,
+		 "scale_factor\",0.9999],PARAMETER[\"false_easting\",30480");
+    add_srs_wkt (p, 10,
+		 "0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 11,
+		 "32197\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]");
+    add_srs_wkt (p, 12, "]");
+    p = add_epsg_def (first, last, 32198, "epsg", 32198,
+		      "NAD83 / Quebec Lambert");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_");
+    add_proj4text (p, 1,
+		   "0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Quebec Lambert\",GEOGCS[\"NAD83\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",637");
+    add_srs_wkt (p, 2,
+		 "8137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORI");
+    add_srs_wkt (p, 3,
+		 "TY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[");
+    add_srs_wkt (p, 4,
+		 "\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,");
+    add_srs_wkt (p, 5,
+		 "AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"");
+    add_srs_wkt (p, 6,
+		 "]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJEC");
+    add_srs_wkt (p, 7,
+		 "TION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standa");
+    add_srs_wkt (p, 8,
+		 "rd_parallel_1\",60],PARAMETER[\"standard_parallel_2\",46");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"latitude_of_origin\",44],PARAMETER[\"centr");
+    add_srs_wkt (p, 10,
+		 "al_meridian\",-68.5],PARAMETER[\"false_easting\",0],PARA");
+    add_srs_wkt (p, 11,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32198\"");
+    add_srs_wkt (p, 12, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32199, "epsg", 32199,
+		      "NAD83 / Louisiana Offshore");
+    add_proj4text (p, 0,
+		   "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666");
+    add_proj4text (p, 1,
+		   "667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +");
+    add_proj4text (p, 2, "y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"NAD83 / Louisiana Offshore\",GEOGCS[\"NAD83\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"");
+    add_srs_wkt (p, 2,
+		 ",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUT");
+    add_srs_wkt (p, 3,
+		 "HORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHOR");
+    add_srs_wkt (p, 4,
+		 "ITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994");
+    add_srs_wkt (p, 5,
+		 "328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4");
+    add_srs_wkt (p, 6,
+		 "269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],P");
+    add_srs_wkt (p, 7,
+		 "ROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"s");
+    add_srs_wkt (p, 8,
+		 "tandard_parallel_1\",27.83333333333333],PARAMETER[\"stan");
+    add_srs_wkt (p, 9,
+		 "dard_parallel_2\",26.16666666666667],PARAMETER[\"latitud");
+    add_srs_wkt (p, 10,
+		 "e_of_origin\",25.5],PARAMETER[\"central_meridian\",-91.3");
+    add_srs_wkt (p, 11,
+		 "3333333333333],PARAMETER[\"false_easting\",1000000],PARA");
+    add_srs_wkt (p, 12,
+		 "METER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32199\"");
+    add_srs_wkt (p, 13, "],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32201, "epsg", 32201,
+		      "WGS 72 / UTM zone 1N");
+    add_proj4text (p, 0, "+proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 1N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32201\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32202, "epsg", 32202,
+		      "WGS 72 / UTM zone 2N");
+    add_proj4text (p, 0, "+proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 2N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32202\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32203, "epsg", 32203,
+		      "WGS 72 / UTM zone 3N");
+    add_proj4text (p, 0, "+proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 3N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32203\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32204, "epsg", 32204,
+		      "WGS 72 / UTM zone 4N");
+    add_proj4text (p, 0, "+proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 4N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32204\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32205, "epsg", 32205,
+		      "WGS 72 / UTM zone 5N");
+    add_proj4text (p, 0, "+proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 5N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32205\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32206, "epsg", 32206,
+		      "WGS 72 / UTM zone 6N");
+    add_proj4text (p, 0, "+proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 6N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32206\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32207, "epsg", 32207,
+		      "WGS 72 / UTM zone 7N");
+    add_proj4text (p, 0, "+proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 7N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32207\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32208, "epsg", 32208,
+		      "WGS 72 / UTM zone 8N");
+    add_proj4text (p, 0, "+proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 8N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32208\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32209, "epsg", 32209,
+		      "WGS 72 / UTM zone 9N");
+    add_proj4text (p, 0, "+proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 9N\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32209\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32210, "epsg", 32210,
+		      "WGS 72 / UTM zone 10N");
+    add_proj4text (p, 0, "+proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 10N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32210\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32211, "epsg", 32211,
+		      "WGS 72 / UTM zone 11N");
+    add_proj4text (p, 0, "+proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 11N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32211\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32212, "epsg", 32212,
+		      "WGS 72 / UTM zone 12N");
+    add_proj4text (p, 0, "+proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 12N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32212\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32213, "epsg", 32213,
+		      "WGS 72 / UTM zone 13N");
+    add_proj4text (p, 0, "+proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 13N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",0],AUTHORITY[\"EPSG\",\"32213\"],AXIS[\"Easting");
+    add_srs_wkt (p, 11, "\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32214, "epsg", 32214,
+		      "WGS 72 / UTM zone 14N");
+    add_proj4text (p, 0, "+proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 14N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32214\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32215, "epsg", 32215,
+		      "WGS 72 / UTM zone 15N");
+    add_proj4text (p, 0, "+proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 15N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32215\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32216, "epsg", 32216,
+		      "WGS 72 / UTM zone 16N");
+    add_proj4text (p, 0, "+proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 16N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32216\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32217, "epsg", 32217,
+		      "WGS 72 / UTM zone 17N");
+    add_proj4text (p, 0, "+proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 17N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32217\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32218, "epsg", 32218,
+		      "WGS 72 / UTM zone 18N");
+    add_proj4text (p, 0, "+proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 18N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32218\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32219, "epsg", 32219,
+		      "WGS 72 / UTM zone 19N");
+    add_proj4text (p, 0, "+proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 19N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32219\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32220, "epsg", 32220,
+		      "WGS 72 / UTM zone 20N");
+    add_proj4text (p, 0, "+proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 20N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32220\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32221, "epsg", 32221,
+		      "WGS 72 / UTM zone 21N");
+    add_proj4text (p, 0, "+proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 21N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32221\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32222, "epsg", 32222,
+		      "WGS 72 / UTM zone 22N");
+    add_proj4text (p, 0, "+proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 22N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32222\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32223, "epsg", 32223,
+		      "WGS 72 / UTM zone 23N");
+    add_proj4text (p, 0, "+proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 23N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32223\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32224, "epsg", 32224,
+		      "WGS 72 / UTM zone 24N");
+    add_proj4text (p, 0, "+proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 24N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32224\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32225, "epsg", 32225,
+		      "WGS 72 / UTM zone 25N");
+    add_proj4text (p, 0, "+proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 25N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32225\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32226, "epsg", 32226,
+		      "WGS 72 / UTM zone 26N");
+    add_proj4text (p, 0, "+proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 26N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32226\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32227, "epsg", 32227,
+		      "WGS 72 / UTM zone 27N");
+    add_proj4text (p, 0, "+proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 27N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32227\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32228, "epsg", 32228,
+		      "WGS 72 / UTM zone 28N");
+    add_proj4text (p, 0, "+proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 28N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32228\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32229, "epsg", 32229,
+		      "WGS 72 / UTM zone 29N");
+    add_proj4text (p, 0, "+proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 29N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32229\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32230, "epsg", 32230,
+		      "WGS 72 / UTM zone 30N");
+    add_proj4text (p, 0, "+proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 30N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32230\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32231, "epsg", 32231,
+		      "WGS 72 / UTM zone 31N");
+    add_proj4text (p, 0, "+proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 31N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 10,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"32231\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 11, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32232, "epsg", 32232,
+		      "WGS 72 / UTM zone 32N");
+    add_proj4text (p, 0, "+proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 32N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 10,
+		 "ing\",0],AUTHORITY[\"EPSG\",\"32232\"],AXIS[\"Easting\",");
+    add_srs_wkt (p, 11, "EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32233, "epsg", 32233,
+		      "WGS 72 / UTM zone 33N");
+    add_proj4text (p, 0, "+proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 33N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32233\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32234, "epsg", 32234,
+		      "WGS 72 / UTM zone 34N");
+    add_proj4text (p, 0, "+proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 34N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32234\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32235, "epsg", 32235,
+		      "WGS 72 / UTM zone 35N");
+    add_proj4text (p, 0, "+proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 35N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32235\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32236, "epsg", 32236,
+		      "WGS 72 / UTM zone 36N");
+    add_proj4text (p, 0, "+proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 36N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32236\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32237, "epsg", 32237,
+		      "WGS 72 / UTM zone 37N");
+    add_proj4text (p, 0, "+proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 37N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32237\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32238, "epsg", 32238,
+		      "WGS 72 / UTM zone 38N");
+    add_proj4text (p, 0, "+proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 38N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32238\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32239, "epsg", 32239,
+		      "WGS 72 / UTM zone 39N");
+    add_proj4text (p, 0, "+proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 39N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32239\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32240, "epsg", 32240,
+		      "WGS 72 / UTM zone 40N");
+    add_proj4text (p, 0, "+proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 40N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32240\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32241, "epsg", 32241,
+		      "WGS 72 / UTM zone 41N");
+    add_proj4text (p, 0, "+proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 41N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32241\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32242, "epsg", 32242,
+		      "WGS 72 / UTM zone 42N");
+    add_proj4text (p, 0, "+proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 42N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32242\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32243, "epsg", 32243,
+		      "WGS 72 / UTM zone 43N");
+    add_proj4text (p, 0, "+proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 43N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32243\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32244, "epsg", 32244,
+		      "WGS 72 / UTM zone 44N");
+    add_proj4text (p, 0, "+proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 44N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32244\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32245, "epsg", 32245,
+		      "WGS 72 / UTM zone 45N");
+    add_proj4text (p, 0, "+proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 45N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32245\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32246, "epsg", 32246,
+		      "WGS 72 / UTM zone 46N");
+    add_proj4text (p, 0, "+proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 46N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32246\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32247, "epsg", 32247,
+		      "WGS 72 / UTM zone 47N");
+    add_proj4text (p, 0, "+proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 47N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",0],AUTHORITY[\"EPSG\",\"32247\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32248, "epsg", 32248,
+		      "WGS 72 / UTM zone 48N");
+    add_proj4text (p, 0, "+proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 48N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",105],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32248\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32249, "epsg", 32249,
+		      "WGS 72 / UTM zone 49N");
+    add_proj4text (p, 0, "+proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 49N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",111],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32249\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32250, "epsg", 32250,
+		      "WGS 72 / UTM zone 50N");
+    add_proj4text (p, 0, "+proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 50N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",117],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32250\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32251, "epsg", 32251,
+		      "WGS 72 / UTM zone 51N");
+    add_proj4text (p, 0, "+proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 51N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",123],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32251\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32252, "epsg", 32252,
+		      "WGS 72 / UTM zone 52N");
+    add_proj4text (p, 0, "+proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 52N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",129],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32252\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32253, "epsg", 32253,
+		      "WGS 72 / UTM zone 53N");
+    add_proj4text (p, 0, "+proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 53N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",135],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32253\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32254, "epsg", 32254,
+		      "WGS 72 / UTM zone 54N");
+    add_proj4text (p, 0, "+proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 54N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",141],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32254\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32255, "epsg", 32255,
+		      "WGS 72 / UTM zone 55N");
+    add_proj4text (p, 0, "+proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 55N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",147],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32255\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32256, "epsg", 32256,
+		      "WGS 72 / UTM zone 56N");
+    add_proj4text (p, 0, "+proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 56N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",153],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32256\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32257, "epsg", 32257,
+		      "WGS 72 / UTM zone 57N");
+    add_proj4text (p, 0, "+proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 57N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",159],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32257\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32258, "epsg", 32258,
+		      "WGS 72 / UTM zone 58N");
+    add_proj4text (p, 0, "+proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 58N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",165],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32258\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32259, "epsg", 32259,
+		      "WGS 72 / UTM zone 59N");
+    add_proj4text (p, 0, "+proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 59N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",171],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32259\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32260, "epsg", 32260,
+		      "WGS 72 / UTM zone 60N");
+    add_proj4text (p, 0, "+proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 60N\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",177],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",0],AUTHORITY[\"EPSG\",\"32260\"],AXIS[\"Easting\"");
+    add_srs_wkt (p, 11, ",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32301, "epsg", 32301,
+		      "WGS 72 / UTM zone 1S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 1S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-177],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32301\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32302, "epsg", 32302,
+		      "WGS 72 / UTM zone 2S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 2S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-171],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32302\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32303, "epsg", 32303,
+		      "WGS 72 / UTM zone 3S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 3S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-165],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32303\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32304, "epsg", 32304,
+		      "WGS 72 / UTM zone 4S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 4S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-159],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32304\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32305, "epsg", 32305,
+		      "WGS 72 / UTM zone 5S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 5S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-153],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32305\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32306, "epsg", 32306,
+		      "WGS 72 / UTM zone 6S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 6S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-147],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32306\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32307, "epsg", 32307,
+		      "WGS 72 / UTM zone 7S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 7S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-141],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32307\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32308, "epsg", 32308,
+		      "WGS 72 / UTM zone 8S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 8S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-135],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32308\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32309, "epsg", 32309,
+		      "WGS 72 / UTM zone 9S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 9S\",GEOGCS[\"WGS 72\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORIT");
+    add_srs_wkt (p, 2,
+		 "Y[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRIM");
+    add_srs_wkt (p, 3,
+		 "EM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-129],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32309\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32310, "epsg", 32310,
+		      "WGS 72 / UTM zone 10S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 10S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-123],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32310\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32311, "epsg", 32311,
+		      "WGS 72 / UTM zone 11S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 11S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32311\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32312, "epsg", 32312,
+		      "WGS 72 / UTM zone 12S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 12S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32312\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32313, "epsg", 32313,
+		      "WGS 72 / UTM zone 13S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 13S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-105],PARAMETER[\"scale_factor\",0.9996],");
+    add_srs_wkt (p, 9,
+		 "PARAMETER[\"false_easting\",500000],PARAMETER[\"false_no");
+    add_srs_wkt (p, 10,
+		 "rthing\",10000000],AUTHORITY[\"EPSG\",\"32313\"],AXIS[\"");
+    add_srs_wkt (p, 11, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32314, "epsg", 32314,
+		      "WGS 72 / UTM zone 14S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 14S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32314\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32315, "epsg", 32315,
+		      "WGS 72 / UTM zone 15S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 15S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-93],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32315\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32316, "epsg", 32316,
+		      "WGS 72 / UTM zone 16S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 16S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-87],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32316\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32317, "epsg", 32317,
+		      "WGS 72 / UTM zone 17S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 17S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32317\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32318, "epsg", 32318,
+		      "WGS 72 / UTM zone 18S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 18S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32318\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32319, "epsg", 32319,
+		      "WGS 72 / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 19S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-69],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32319\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32320, "epsg", 32320,
+		      "WGS 72 / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 20S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-63],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32320\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32321, "epsg", 32321,
+		      "WGS 72 / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 21S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-57],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32321\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32322, "epsg", 32322,
+		      "WGS 72 / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 22S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-51],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32322\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32323, "epsg", 32323,
+		      "WGS 72 / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 23S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-45],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32323\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32324, "epsg", 32324,
+		      "WGS 72 / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 24S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-39],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32324\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32325, "epsg", 32325,
+		      "WGS 72 / UTM zone 25S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 25S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-33],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32325\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32326, "epsg", 32326,
+		      "WGS 72 / UTM zone 26S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 26S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-27],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32326\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32327, "epsg", 32327,
+		      "WGS 72 / UTM zone 27S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 27S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-21],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32327\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32328, "epsg", 32328,
+		      "WGS 72 / UTM zone 28S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 28S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-15],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32328\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32329, "epsg", 32329,
+		      "WGS 72 / UTM zone 29S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 29S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-9],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32329\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32330, "epsg", 32330,
+		      "WGS 72 / UTM zone 30S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 30S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32330\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32331, "epsg", 32331,
+		      "WGS 72 / UTM zone 31S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 31S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",3],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 10,
+		 "ing\",10000000],AUTHORITY[\"EPSG\",\"32331\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32332, "epsg", 32332,
+		      "WGS 72 / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 32S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PAR");
+    add_srs_wkt (p, 9,
+		 "AMETER[\"false_easting\",500000],PARAMETER[\"false_north");
+    add_srs_wkt (p, 10,
+		 "ing\",10000000],AUTHORITY[\"EPSG\",\"32332\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32333, "epsg", 32333,
+		      "WGS 72 / UTM zone 33S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 33S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",15],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32333\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32334, "epsg", 32334,
+		      "WGS 72 / UTM zone 34S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 34S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",21],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32334\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32335, "epsg", 32335,
+		      "WGS 72 / UTM zone 35S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 35S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",27],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32335\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32336, "epsg", 32336,
+		      "WGS 72 / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 36S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",33],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32336\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32337, "epsg", 32337,
+		      "WGS 72 / UTM zone 37S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 37S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",39],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32337\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32338, "epsg", 32338,
+		      "WGS 72 / UTM zone 38S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 38S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",45],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32338\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32339, "epsg", 32339,
+		      "WGS 72 / UTM zone 39S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 39S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",51],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32339\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32340, "epsg", 32340,
+		      "WGS 72 / UTM zone 40S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 40S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",57],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32340\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32341, "epsg", 32341,
+		      "WGS 72 / UTM zone 41S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 41S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",63],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32341\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32342, "epsg", 32342,
+		      "WGS 72 / UTM zone 42S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 42S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",69],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32342\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32343, "epsg", 32343,
+		      "WGS 72 / UTM zone 43S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 43S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",75],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32343\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32344, "epsg", 32344,
+		      "WGS 72 / UTM zone 44S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 44S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",81],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32344\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32345, "epsg", 32345,
+		      "WGS 72 / UTM zone 45S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 45S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",87],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32345\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_27 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 32346, "epsg", 32346,
+		      "WGS 72 / UTM zone 46S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 46S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",93],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32346\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32347, "epsg", 32347,
+		      "WGS 72 / UTM zone 47S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 47S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",99],PARAMETER[\"scale_factor\",0.9996],PA");
+    add_srs_wkt (p, 9,
+		 "RAMETER[\"false_easting\",500000],PARAMETER[\"false_nort");
+    add_srs_wkt (p, 10,
+		 "hing\",10000000],AUTHORITY[\"EPSG\",\"32347\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32348, "epsg", 32348,
+		      "WGS 72 / UTM zone 48S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 48S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",105],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32348\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32349, "epsg", 32349,
+		      "WGS 72 / UTM zone 49S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 49S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",111],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32349\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32350, "epsg", 32350,
+		      "WGS 72 / UTM zone 50S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 50S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",117],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32350\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32351, "epsg", 32351,
+		      "WGS 72 / UTM zone 51S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 51S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",123],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32351\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32352, "epsg", 32352,
+		      "WGS 72 / UTM zone 52S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 52S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",129],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32352\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32353, "epsg", 32353,
+		      "WGS 72 / UTM zone 53S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 53S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",135],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32353\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32354, "epsg", 32354,
+		      "WGS 72 / UTM zone 54S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 54S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",141],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32354\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32355, "epsg", 32355,
+		      "WGS 72 / UTM zone 55S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 55S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",147],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32355\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32356, "epsg", 32356,
+		      "WGS 72 / UTM zone 56S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 56S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",153],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32356\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32357, "epsg", 32357,
+		      "WGS 72 / UTM zone 57S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 57S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",159],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32357\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32358, "epsg", 32358,
+		      "WGS 72 / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 58S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",165],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32358\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32359, "epsg", 32359,
+		      "WGS 72 / UTM zone 59S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 59S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",171],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32359\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32360, "epsg", 32360,
+		      "WGS 72 / UTM zone 60S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs");
+    add_proj4text (p, 1, "");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72 / UTM zone 60S\",GEOGCS[\"WGS 72\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1972\",SPHEROID[\"WGS 72\",6378135,298.26,AUTHORI");
+    add_srs_wkt (p, 2,
+		 "TY[\"EPSG\",\"7043\"]],AUTHORITY[\"EPSG\",\"6322\"]],PRI");
+    add_srs_wkt (p, 3,
+		 "MEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"");
+    add_srs_wkt (p, 4,
+		 "degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"");
+    add_srs_wkt (p, 5,
+		 "]],AUTHORITY[\"EPSG\",\"4322\"]],UNIT[\"metre\",1,AUTHOR");
+    add_srs_wkt (p, 6,
+		 "ITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator");
+    add_srs_wkt (p, 7,
+		 "\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"cent");
+    add_srs_wkt (p, 8,
+		 "ral_meridian\",177],PARAMETER[\"scale_factor\",0.9996],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"false_easting\",500000],PARAMETER[\"false_nor");
+    add_srs_wkt (p, 10,
+		 "thing\",10000000],AUTHORITY[\"EPSG\",\"32360\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32401, "epsg", 32401,
+		      "WGS 72BE / UTM zone 1N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 1N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-177],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32401\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32402, "epsg", 32402,
+		      "WGS 72BE / UTM zone 2N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 2N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-171],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32402\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32403, "epsg", 32403,
+		      "WGS 72BE / UTM zone 3N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 3N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-165],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32403\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32404, "epsg", 32404,
+		      "WGS 72BE / UTM zone 4N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 4N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-159],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32404\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32405, "epsg", 32405,
+		      "WGS 72BE / UTM zone 5N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 5N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-153],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32405\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32406, "epsg", 32406,
+		      "WGS 72BE / UTM zone 6N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 6N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-147],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32406\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32407, "epsg", 32407,
+		      "WGS 72BE / UTM zone 7N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 7N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-141],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32407\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32408, "epsg", 32408,
+		      "WGS 72BE / UTM zone 8N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 8N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-135],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32408\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32409, "epsg", 32409,
+		      "WGS 72BE / UTM zone 9N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.81");
+    add_proj4text (p, 1, "4,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 9N\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-129],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32409\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32410, "epsg", 32410,
+		      "WGS 72BE / UTM zone 10N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 10N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-123],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32410\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32411, "epsg", 32411,
+		      "WGS 72BE / UTM zone 11N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 11N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-117],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32411\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32412, "epsg", 32412,
+		      "WGS 72BE / UTM zone 12N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 12N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32412\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32413, "epsg", 32413,
+		      "WGS 72BE / UTM zone 13N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 13N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-105],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32413\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32414, "epsg", 32414,
+		      "WGS 72BE / UTM zone 14N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 14N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32414\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32415, "epsg", 32415,
+		      "WGS 72BE / UTM zone 15N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 15N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32415\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32416, "epsg", 32416,
+		      "WGS 72BE / UTM zone 16N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 16N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32416\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32417, "epsg", 32417,
+		      "WGS 72BE / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 17N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32417\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32418, "epsg", 32418,
+		      "WGS 72BE / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 18N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32418\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32419, "epsg", 32419,
+		      "WGS 72BE / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 19N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32419\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32420, "epsg", 32420,
+		      "WGS 72BE / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 20N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32420\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32421, "epsg", 32421,
+		      "WGS 72BE / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 21N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32421\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32422, "epsg", 32422,
+		      "WGS 72BE / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 22N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32422\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32423, "epsg", 32423,
+		      "WGS 72BE / UTM zone 23N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 23N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32423\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32424, "epsg", 32424,
+		      "WGS 72BE / UTM zone 24N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 24N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32424\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32425, "epsg", 32425,
+		      "WGS 72BE / UTM zone 25N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 25N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32425\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32426, "epsg", 32426,
+		      "WGS 72BE / UTM zone 26N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 26N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32426\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32427, "epsg", 32427,
+		      "WGS 72BE / UTM zone 27N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 27N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32427\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32428, "epsg", 32428,
+		      "WGS 72BE / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 28N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32428\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32429, "epsg", 32429,
+		      "WGS 72BE / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 29N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32429\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32430, "epsg", 32430,
+		      "WGS 72BE / UTM zone 30N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 30N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32430\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32431, "epsg", 32431,
+		      "WGS 72BE / UTM zone 31N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 31N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32431\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32432, "epsg", 32432,
+		      "WGS 72BE / UTM zone 32N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 32N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32432\"],AXIS[\"E");
+    add_srs_wkt (p, 12, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32433, "epsg", 32433,
+		      "WGS 72BE / UTM zone 33N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 33N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32433\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32434, "epsg", 32434,
+		      "WGS 72BE / UTM zone 34N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 34N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32434\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32435, "epsg", 32435,
+		      "WGS 72BE / UTM zone 35N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 35N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32435\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32436, "epsg", 32436,
+		      "WGS 72BE / UTM zone 36N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 36N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32436\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32437, "epsg", 32437,
+		      "WGS 72BE / UTM zone 37N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 37N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32437\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32438, "epsg", 32438,
+		      "WGS 72BE / UTM zone 38N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 38N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32438\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32439, "epsg", 32439,
+		      "WGS 72BE / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 39N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32439\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32440, "epsg", 32440,
+		      "WGS 72BE / UTM zone 40N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 40N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32440\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32441, "epsg", 32441,
+		      "WGS 72BE / UTM zone 41N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 41N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32441\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32442, "epsg", 32442,
+		      "WGS 72BE / UTM zone 42N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 42N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32442\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32443, "epsg", 32443,
+		      "WGS 72BE / UTM zone 43N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 43N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32443\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32444, "epsg", 32444,
+		      "WGS 72BE / UTM zone 44N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 44N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32444\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32445, "epsg", 32445,
+		      "WGS 72BE / UTM zone 45N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 45N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32445\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32446, "epsg", 32446,
+		      "WGS 72BE / UTM zone 46N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 46N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32446\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32447, "epsg", 32447,
+		      "WGS 72BE / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 47N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",0],AUTHORITY[\"EPSG\",\"32447\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32448, "epsg", 32448,
+		      "WGS 72BE / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 48N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",105],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32448\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32449, "epsg", 32449,
+		      "WGS 72BE / UTM zone 49N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 49N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",111],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32449\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32450, "epsg", 32450,
+		      "WGS 72BE / UTM zone 50N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 50N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",117],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32450\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32451, "epsg", 32451,
+		      "WGS 72BE / UTM zone 51N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 51N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",123],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32451\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32452, "epsg", 32452,
+		      "WGS 72BE / UTM zone 52N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 52N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",129],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32452\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32453, "epsg", 32453,
+		      "WGS 72BE / UTM zone 53N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 53N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",135],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32453\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32454, "epsg", 32454,
+		      "WGS 72BE / UTM zone 54N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 54N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",141],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32454\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32455, "epsg", 32455,
+		      "WGS 72BE / UTM zone 55N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 55N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",147],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32455\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32456, "epsg", 32456,
+		      "WGS 72BE / UTM zone 56N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 56N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",153],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32456\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32457, "epsg", 32457,
+		      "WGS 72BE / UTM zone 57N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 57N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",159],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32457\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32458, "epsg", 32458,
+		      "WGS 72BE / UTM zone 58N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 58N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",165],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32458\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32459, "epsg", 32459,
+		      "WGS 72BE / UTM zone 59N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 59N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",171],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32459\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32460, "epsg", 32460,
+		      "WGS 72BE / UTM zone 60N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.8");
+    add_proj4text (p, 1, "14,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 60N\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",177],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",0],AUTHORITY[\"EPSG\",\"32460\"],AXIS[\"");
+    add_srs_wkt (p, 12, "Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32501, "epsg", 32501,
+		      "WGS 72BE / UTM zone 1S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 1S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-177],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32501\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32502, "epsg", 32502,
+		      "WGS 72BE / UTM zone 2S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 2S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-171],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32502\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32503, "epsg", 32503,
+		      "WGS 72BE / UTM zone 3S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 3S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-165],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32503\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32504, "epsg", 32504,
+		      "WGS 72BE / UTM zone 4S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 4S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-159],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32504\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32505, "epsg", 32505,
+		      "WGS 72BE / UTM zone 5S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 5S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-153],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32505\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32506, "epsg", 32506,
+		      "WGS 72BE / UTM zone 6S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 6S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-147],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32506\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32507, "epsg", 32507,
+		      "WGS 72BE / UTM zone 7S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 7S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-141],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32507\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32508, "epsg", 32508,
+		      "WGS 72BE / UTM zone 8S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 8S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-135],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32508\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32509, "epsg", 32509,
+		      "WGS 72BE / UTM zone 9S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0");
+    add_proj4text (p, 1, ",0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 9S\",GEOGCS[\"WGS 72BE\",DA");
+    add_srs_wkt (p, 1,
+		 "TUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-129],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32509\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32510, "epsg", 32510,
+		      "WGS 72BE / UTM zone 10S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 10S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-123],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32510\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32511, "epsg", 32511,
+		      "WGS 72BE / UTM zone 11S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 11S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-117],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32511\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32512, "epsg", 32512,
+		      "WGS 72BE / UTM zone 12S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 12S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-111],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32512\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32513, "epsg", 32513,
+		      "WGS 72BE / UTM zone 13S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 13S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-105],PARAMETER[\"scale_factor\"");
+    add_srs_wkt (p, 10,
+		 ",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32513\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32514, "epsg", 32514,
+		      "WGS 72BE / UTM zone 14S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 14S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32514\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32515, "epsg", 32515,
+		      "WGS 72BE / UTM zone 15S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 15S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-93],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32515\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32516, "epsg", 32516,
+		      "WGS 72BE / UTM zone 16S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 16S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-87],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32516\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32517, "epsg", 32517,
+		      "WGS 72BE / UTM zone 17S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 17S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32517\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32518, "epsg", 32518,
+		      "WGS 72BE / UTM zone 18S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 18S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32518\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32519, "epsg", 32519,
+		      "WGS 72BE / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 19S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-69],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32519\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32520, "epsg", 32520,
+		      "WGS 72BE / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 20S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-63],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32520\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32521, "epsg", 32521,
+		      "WGS 72BE / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 21S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-57],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32521\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32522, "epsg", 32522,
+		      "WGS 72BE / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 22S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-51],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32522\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32523, "epsg", 32523,
+		      "WGS 72BE / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 23S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-45],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32523\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32524, "epsg", 32524,
+		      "WGS 72BE / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 24S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-39],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32524\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32525, "epsg", 32525,
+		      "WGS 72BE / UTM zone 25S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 25S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-33],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32525\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32526, "epsg", 32526,
+		      "WGS 72BE / UTM zone 26S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 26S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-27],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32526\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32527, "epsg", 32527,
+		      "WGS 72BE / UTM zone 27S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 27S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-21],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32527\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32528, "epsg", 32528,
+		      "WGS 72BE / UTM zone 28S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 28S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-15],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32528\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32529, "epsg", 32529,
+		      "WGS 72BE / UTM zone 29S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 29S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-9],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32529\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32530, "epsg", 32530,
+		      "WGS 72BE / UTM zone 30S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 30S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32530\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32531, "epsg", 32531,
+		      "WGS 72BE / UTM zone 31S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 31S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",3],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32531\"],A");
+    add_srs_wkt (p, 12, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32532, "epsg", 32532,
+		      "WGS 72BE / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 32S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 10,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 11,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32532\"],A");
+    add_srs_wkt (p, 12, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32533, "epsg", 32533,
+		      "WGS 72BE / UTM zone 33S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 33S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",15],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32533\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32534, "epsg", 32534,
+		      "WGS 72BE / UTM zone 34S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 34S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",21],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32534\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32535, "epsg", 32535,
+		      "WGS 72BE / UTM zone 35S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 35S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",27],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32535\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32536, "epsg", 32536,
+		      "WGS 72BE / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 36S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",33],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32536\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32537, "epsg", 32537,
+		      "WGS 72BE / UTM zone 37S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 37S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",39],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32537\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32538, "epsg", 32538,
+		      "WGS 72BE / UTM zone 38S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 38S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",45],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32538\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32539, "epsg", 32539,
+		      "WGS 72BE / UTM zone 39S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 39S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",51],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32539\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32540, "epsg", 32540,
+		      "WGS 72BE / UTM zone 40S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 40S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",57],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32540\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32541, "epsg", 32541,
+		      "WGS 72BE / UTM zone 41S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 41S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",63],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32541\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32542, "epsg", 32542,
+		      "WGS 72BE / UTM zone 42S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 42S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",69],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32542\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32543, "epsg", 32543,
+		      "WGS 72BE / UTM zone 43S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 43S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",75],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32543\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32544, "epsg", 32544,
+		      "WGS 72BE / UTM zone 44S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 44S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",81],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32544\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32545, "epsg", 32545,
+		      "WGS 72BE / UTM zone 45S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 45S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",87],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32545\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32546, "epsg", 32546,
+		      "WGS 72BE / UTM zone 46S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 46S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",93],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32546\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32547, "epsg", 32547,
+		      "WGS 72BE / UTM zone 47S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 47S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",99],PARAMETER[\"scale_factor\",0");
+    add_srs_wkt (p, 10,
+		 ".9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"f");
+    add_srs_wkt (p, 11,
+		 "alse_northing\",10000000],AUTHORITY[\"EPSG\",\"32547\"],");
+    add_srs_wkt (p, 12, "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32548, "epsg", 32548,
+		      "WGS 72BE / UTM zone 48S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 48S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",105],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32548\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32549, "epsg", 32549,
+		      "WGS 72BE / UTM zone 49S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 49S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",111],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32549\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32550, "epsg", 32550,
+		      "WGS 72BE / UTM zone 50S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 50S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",117],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32550\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32551, "epsg", 32551,
+		      "WGS 72BE / UTM zone 51S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 51S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",123],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32551\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32552, "epsg", 32552,
+		      "WGS 72BE / UTM zone 52S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 52S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",129],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32552\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32553, "epsg", 32553,
+		      "WGS 72BE / UTM zone 53S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 53S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",135],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32553\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+#endif /* full EPSG initialization enabled/disabled */
+    if (first == last)
+	last = first;		/* suppressing stupid compiler warnings */
+}
+
+static void
+initialize_epsg_28 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+    struct epsg_defs *p;
+#ifndef OMIT_EPSG		/* full EPSG initialization enabled */
+    p = add_epsg_def (first, last, 32554, "epsg", 32554,
+		      "WGS 72BE / UTM zone 54S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 54S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",141],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32554\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32555, "epsg", 32555,
+		      "WGS 72BE / UTM zone 55S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 55S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",147],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32555\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32556, "epsg", 32556,
+		      "WGS 72BE / UTM zone 56S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 56S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",153],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32556\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32557, "epsg", 32557,
+		      "WGS 72BE / UTM zone 57S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 57S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",159],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32557\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32558, "epsg", 32558,
+		      "WGS 72BE / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 58S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",165],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32558\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32559, "epsg", 32559,
+		      "WGS 72BE / UTM zone 59S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 59S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",171],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32559\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32560, "epsg", 32560,
+		      "WGS 72BE / UTM zone 60S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,");
+    add_proj4text (p, 1, "0,0,0.814,-0.38 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 72BE / UTM zone 60S\",GEOGCS[\"WGS 72BE\",D");
+    add_srs_wkt (p, 1,
+		 "ATUM[\"WGS_1972_Transit_Broadcast_Ephemeris\",SPHEROID[\"");
+    add_srs_wkt (p, 2,
+		 "WGS 72\",6378135,298.26,AUTHORITY[\"EPSG\",\"7043\"]],TO");
+    add_srs_wkt (p, 3,
+		 "WGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY[\"EPSG\",\"6324");
+    add_srs_wkt (p, 4,
+		 "\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]");
+    add_srs_wkt (p, 5,
+		 "],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 6,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4324\"]],UNIT[\"metre\"");
+    add_srs_wkt (p, 7,
+		 ",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse");
+    add_srs_wkt (p, 8,
+		 "_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMET");
+    add_srs_wkt (p, 9,
+		 "ER[\"central_meridian\",177],PARAMETER[\"scale_factor\",");
+    add_srs_wkt (p, 10,
+		 "0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"");
+    add_srs_wkt (p, 11,
+		 "false_northing\",10000000],AUTHORITY[\"EPSG\",\"32560\"]");
+    add_srs_wkt (p, 12, ",AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+
+#endif /* unconditionally loading the WGS82/UTM zones */
+    p = add_epsg_def (first, last, 32601, "epsg", 32601,
+		      "WGS 84 / UTM zone 1N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 1N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32601\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32602, "epsg", 32602,
+		      "WGS 84 / UTM zone 2N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 2N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32602\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32603, "epsg", 32603,
+		      "WGS 84 / UTM zone 3N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 3N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32603\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32604, "epsg", 32604,
+		      "WGS 84 / UTM zone 4N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 4N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32604\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32605, "epsg", 32605,
+		      "WGS 84 / UTM zone 5N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 5N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32605\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32606, "epsg", 32606,
+		      "WGS 84 / UTM zone 6N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 6N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32606\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32607, "epsg", 32607,
+		      "WGS 84 / UTM zone 7N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 7N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32607\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32608, "epsg", 32608,
+		      "WGS 84 / UTM zone 8N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 8N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32608\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32609, "epsg", 32609,
+		      "WGS 84 / UTM zone 9N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no");
+    add_proj4text (p, 1, "_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 9N\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32609\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32610, "epsg", 32610,
+		      "WGS 84 / UTM zone 10N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 10N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32610\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32611, "epsg", 32611,
+		      "WGS 84 / UTM zone 11N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 11N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32611\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32612, "epsg", 32612,
+		      "WGS 84 / UTM zone 12N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 12N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32612\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32613, "epsg", 32613,
+		      "WGS 84 / UTM zone 13N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 13N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",0],AUTHORITY[\"EPSG\",\"32613\"],AXIS[\"E");
+    add_srs_wkt (p, 11, "asting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32614, "epsg", 32614,
+		      "WGS 84 / UTM zone 14N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 14N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32614\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32615, "epsg", 32615,
+		      "WGS 84 / UTM zone 15N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 15N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32615\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32616, "epsg", 32616,
+		      "WGS 84 / UTM zone 16N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 16N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32616\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32617, "epsg", 32617,
+		      "WGS 84 / UTM zone 17N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 17N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32617\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32618, "epsg", 32618,
+		      "WGS 84 / UTM zone 18N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 18N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32618\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32619, "epsg", 32619,
+		      "WGS 84 / UTM zone 19N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 19N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32619\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32620, "epsg", 32620,
+		      "WGS 84 / UTM zone 20N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 20N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32620\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32621, "epsg", 32621,
+		      "WGS 84 / UTM zone 21N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 21N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32621\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32622, "epsg", 32622,
+		      "WGS 84 / UTM zone 22N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 22N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32622\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32623, "epsg", 32623,
+		      "WGS 84 / UTM zone 23N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 23N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32623\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32624, "epsg", 32624,
+		      "WGS 84 / UTM zone 24N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 24N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32624\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32625, "epsg", 32625,
+		      "WGS 84 / UTM zone 25N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 25N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32625\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32626, "epsg", 32626,
+		      "WGS 84 / UTM zone 26N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 26N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32626\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32627, "epsg", 32627,
+		      "WGS 84 / UTM zone 27N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 27N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32627\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32628, "epsg", 32628,
+		      "WGS 84 / UTM zone 28N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 28N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32628\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32629, "epsg", 32629,
+		      "WGS 84 / UTM zone 29N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 29N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32629\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32630, "epsg", 32630,
+		      "WGS 84 / UTM zone 30N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 30N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32630\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32631, "epsg", 32631,
+		      "WGS 84 / UTM zone 31N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 31N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",3],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"32631\"],AXIS[\"East");
+    add_srs_wkt (p, 11, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32632, "epsg", 32632,
+		      "WGS 84 / UTM zone 32N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 32N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",9],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",0],AUTHORITY[\"EPSG\",\"32632\"],AXIS[\"East");
+    add_srs_wkt (p, 11, "ing\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32633, "epsg", 32633,
+		      "WGS 84 / UTM zone 33N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 33N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",15],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32633\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32634, "epsg", 32634,
+		      "WGS 84 / UTM zone 34N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 34N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",21],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32634\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32635, "epsg", 32635,
+		      "WGS 84 / UTM zone 35N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 35N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",27],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32635\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32636, "epsg", 32636,
+		      "WGS 84 / UTM zone 36N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 36N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",33],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32636\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32637, "epsg", 32637,
+		      "WGS 84 / UTM zone 37N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 37N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",39],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32637\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32638, "epsg", 32638,
+		      "WGS 84 / UTM zone 38N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 38N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",45],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32638\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32639, "epsg", 32639,
+		      "WGS 84 / UTM zone 39N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 39N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",51],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32639\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32640, "epsg", 32640,
+		      "WGS 84 / UTM zone 40N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 40N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",57],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32640\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32641, "epsg", 32641,
+		      "WGS 84 / UTM zone 41N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 41N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",63],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32641\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32642, "epsg", 32642,
+		      "WGS 84 / UTM zone 42N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 42N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",69],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32642\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32643, "epsg", 32643,
+		      "WGS 84 / UTM zone 43N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 43N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",75],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32643\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32644, "epsg", 32644,
+		      "WGS 84 / UTM zone 44N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 44N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",81],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32644\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32645, "epsg", 32645,
+		      "WGS 84 / UTM zone 45N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 45N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",87],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32645\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32646, "epsg", 32646,
+		      "WGS 84 / UTM zone 46N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 46N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",93],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32646\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32647, "epsg", 32647,
+		      "WGS 84 / UTM zone 47N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 47N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",99],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",0],AUTHORITY[\"EPSG\",\"32647\"],AXIS[\"Eas");
+    add_srs_wkt (p, 11, "ting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32648, "epsg", 32648,
+		      "WGS 84 / UTM zone 48N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 48N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32648\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32649, "epsg", 32649,
+		      "WGS 84 / UTM zone 49N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 49N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32649\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32650, "epsg", 32650,
+		      "WGS 84 / UTM zone 50N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 50N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32650\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32651, "epsg", 32651,
+		      "WGS 84 / UTM zone 51N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 51N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32651\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32652, "epsg", 32652,
+		      "WGS 84 / UTM zone 52N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 52N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32652\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32653, "epsg", 32653,
+		      "WGS 84 / UTM zone 53N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 53N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32653\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32654, "epsg", 32654,
+		      "WGS 84 / UTM zone 54N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 54N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32654\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32655, "epsg", 32655,
+		      "WGS 84 / UTM zone 55N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 55N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32655\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32656, "epsg", 32656,
+		      "WGS 84 / UTM zone 56N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 56N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32656\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32657, "epsg", 32657,
+		      "WGS 84 / UTM zone 57N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 57N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32657\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32658, "epsg", 32658,
+		      "WGS 84 / UTM zone 58N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 58N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32658\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32659, "epsg", 32659,
+		      "WGS 84 / UTM zone 59N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 59N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32659\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32660, "epsg", 32660,
+		      "WGS 84 / UTM zone 60N");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +n");
+    add_proj4text (p, 1, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 60N\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",0],AUTHORITY[\"EPSG\",\"32660\"],AXIS[\"Ea");
+    add_srs_wkt (p, 11, "sting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32661, "epsg", 32661, "WGS 84 / UPS North");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=");
+    add_proj4text (p, 1,
+		   "2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m ");
+    add_proj4text (p, 2, "+no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UPS North\",GEOGCS[\"WGS 84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 4,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 5,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 6,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_Stereogr");
+    add_srs_wkt (p, 7,
+		 "aphic\"],PARAMETER[\"latitude_of_origin\",90],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",0],PARAMETER[\"scale_factor\",0.994");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",2000000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",2000000],AUTHORITY[\"EPSG\",\"32661\"],AXIS[");
+    add_srs_wkt (p, 11, "\"Northing\",UNKNOWN],AXIS[\"Easting\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 32662, "epsg", 32662,
+		      "WGS 84 / Plate Carree (deprecated)");
+    add_proj4text (p, 0,
+		   "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ell");
+    add_proj4text (p, 1, "ps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / Plate Carree (deprecated)\",GEOGCS[\"W");
+    add_srs_wkt (p, 1,
+		 "GS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,2");
+    add_srs_wkt (p, 2,
+		 "98.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"E");
+    add_srs_wkt (p, 3,
+		 "PSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG");
+    add_srs_wkt (p, 4,
+		 "\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHOR");
+    add_srs_wkt (p, 5,
+		 "ITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UN");
+    add_srs_wkt (p, 6,
+		 "IT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[");
+    add_srs_wkt (p, 7,
+		 "\"Equirectangular\"],PARAMETER[\"latitude_of_origin\",0]");
+    add_srs_wkt (p, 8,
+		 ",PARAMETER[\"central_meridian\",0],PARAMETER[\"false_eas");
+    add_srs_wkt (p, 9,
+		 "ting\",0],PARAMETER[\"false_northing\",0],AUTHORITY[\"EP");
+    add_srs_wkt (p, 10, "SG\",\"32662\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]");
+    p = add_epsg_def (first, last, 32664, "epsg", 32664,
+		      "WGS 84 / BLM 14N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / BLM 14N (ftUS)\",GEOGCS[\"WGS 84\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.25722356");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"632");
+    add_srs_wkt (p, 3,
+		 "6\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"US surv");
+    add_srs_wkt (p, 6,
+		 "ey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-99],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",1640416.67],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"32664\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 32665, "epsg", 32665,
+		      "WGS 84 / BLM 15N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / BLM 15N (ftUS)\",GEOGCS[\"WGS 84\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.25722356");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"632");
+    add_srs_wkt (p, 3,
+		 "6\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"US surv");
+    add_srs_wkt (p, 6,
+		 "ey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-93],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",1640416.67],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"32665\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 32666, "epsg", 32666,
+		      "WGS 84 / BLM 16N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / BLM 16N (ftUS)\",GEOGCS[\"WGS 84\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.25722356");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"632");
+    add_srs_wkt (p, 3,
+		 "6\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"US surv");
+    add_srs_wkt (p, 6,
+		 "ey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-87],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",1640416.67],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"32666\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 32667, "epsg", 32667,
+		      "WGS 84 / BLM 17N (ftUS)");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.00");
+    add_proj4text (p, 1,
+		   "1016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +n");
+    add_proj4text (p, 2, "o_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / BLM 17N (ftUS)\",GEOGCS[\"WGS 84\",DAT");
+    add_srs_wkt (p, 1,
+		 "UM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.25722356");
+    add_srs_wkt (p, 2,
+		 "3,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"632");
+    add_srs_wkt (p, 3,
+		 "6\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"");
+    add_srs_wkt (p, 4,
+		 "]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\"");
+    add_srs_wkt (p, 5,
+		 ",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"US surv");
+    add_srs_wkt (p, 6,
+		 "ey foot\",0.3048006096012192,AUTHORITY[\"EPSG\",\"9003\"");
+    add_srs_wkt (p, 7,
+		 "]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latit");
+    add_srs_wkt (p, 8,
+		 "ude_of_origin\",0],PARAMETER[\"central_meridian\",-81],P");
+    add_srs_wkt (p, 9,
+		 "ARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_east");
+    add_srs_wkt (p, 10,
+		 "ing\",1640416.67],PARAMETER[\"false_northing\",0],AUTHOR");
+    add_srs_wkt (p, 11,
+		 "ITY[\"EPSG\",\"32667\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORT");
+    add_srs_wkt (p, 12, "H]]");
+    p = add_epsg_def (first, last, 32701, "epsg", 32701,
+		      "WGS 84 / UTM zone 1S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 1S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-177],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32701\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32702, "epsg", 32702,
+		      "WGS 84 / UTM zone 2S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 2S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-171],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32702\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32703, "epsg", 32703,
+		      "WGS 84 / UTM zone 3S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 3S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-165],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32703\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32704, "epsg", 32704,
+		      "WGS 84 / UTM zone 4S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 4S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-159],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32704\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32705, "epsg", 32705,
+		      "WGS 84 / UTM zone 5S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 5S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-153],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32705\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32706, "epsg", 32706,
+		      "WGS 84 / UTM zone 6S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 6S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-147],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32706\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32707, "epsg", 32707,
+		      "WGS 84 / UTM zone 7S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 7S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-141],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32707\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32708, "epsg", 32708,
+		      "WGS 84 / UTM zone 8S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 8S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-135],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32708\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32709, "epsg", 32709,
+		      "WGS 84 / UTM zone 9S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +unit");
+    add_proj4text (p, 1, "s=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 9S\",GEOGCS[\"WGS 84\",DATUM[");
+    add_srs_wkt (p, 1,
+		 "\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,A");
+    add_srs_wkt (p, 2,
+		 "UTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-129],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32709\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32710, "epsg", 32710,
+		      "WGS 84 / UTM zone 10S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 10S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-123],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32710\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32711, "epsg", 32711,
+		      "WGS 84 / UTM zone 11S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 11S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32711\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32712, "epsg", 32712,
+		      "WGS 84 / UTM zone 12S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 12S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32712\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32713, "epsg", 32713,
+		      "WGS 84 / UTM zone 13S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 13S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-105],PARAMETER[\"scale_factor\",0.");
+    add_srs_wkt (p, 9,
+		 "9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fa");
+    add_srs_wkt (p, 10,
+		 "lse_northing\",10000000],AUTHORITY[\"EPSG\",\"32713\"],A");
+    add_srs_wkt (p, 11, "XIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32714, "epsg", 32714,
+		      "WGS 84 / UTM zone 14S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 14S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32714\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32715, "epsg", 32715,
+		      "WGS 84 / UTM zone 15S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 15S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-93],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32715\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32716, "epsg", 32716,
+		      "WGS 84 / UTM zone 16S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 16S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-87],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32716\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32717, "epsg", 32717,
+		      "WGS 84 / UTM zone 17S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 17S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32717\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32718, "epsg", 32718,
+		      "WGS 84 / UTM zone 18S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 18S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32718\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32719, "epsg", 32719,
+		      "WGS 84 / UTM zone 19S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 19S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-69],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32719\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32720, "epsg", 32720,
+		      "WGS 84 / UTM zone 20S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 20S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-63],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32720\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32721, "epsg", 32721,
+		      "WGS 84 / UTM zone 21S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 21S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-57],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32721\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32722, "epsg", 32722,
+		      "WGS 84 / UTM zone 22S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 22S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-51],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32722\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32723, "epsg", 32723,
+		      "WGS 84 / UTM zone 23S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 23S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-45],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32723\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32724, "epsg", 32724,
+		      "WGS 84 / UTM zone 24S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 24S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-39],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32724\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32725, "epsg", 32725,
+		      "WGS 84 / UTM zone 25S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 25S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-33],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32725\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32726, "epsg", 32726,
+		      "WGS 84 / UTM zone 26S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 26S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-27],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32726\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32727, "epsg", 32727,
+		      "WGS 84 / UTM zone 27S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 27S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-21],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32727\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32728, "epsg", 32728,
+		      "WGS 84 / UTM zone 28S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 28S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-15],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32728\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32729, "epsg", 32729,
+		      "WGS 84 / UTM zone 29S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 29S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-9],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32729\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32730, "epsg", 32730,
+		      "WGS 84 / UTM zone 30S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 30S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32730\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32731, "epsg", 32731,
+		      "WGS 84 / UTM zone 31S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 31S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",3],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"32731\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32732, "epsg", 32732,
+		      "WGS 84 / UTM zone 32S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 32S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",9],PARAMETER[\"scale_factor\",0.999");
+    add_srs_wkt (p, 9,
+		 "6],PARAMETER[\"false_easting\",500000],PARAMETER[\"false");
+    add_srs_wkt (p, 10,
+		 "_northing\",10000000],AUTHORITY[\"EPSG\",\"32732\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32733, "epsg", 32733,
+		      "WGS 84 / UTM zone 33S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 33S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",15],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32733\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32734, "epsg", 32734,
+		      "WGS 84 / UTM zone 34S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 34S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",21],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32734\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32735, "epsg", 32735,
+		      "WGS 84 / UTM zone 35S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 35S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",27],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32735\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32736, "epsg", 32736,
+		      "WGS 84 / UTM zone 36S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 36S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",33],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32736\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32737, "epsg", 32737,
+		      "WGS 84 / UTM zone 37S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 37S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",39],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32737\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32738, "epsg", 32738,
+		      "WGS 84 / UTM zone 38S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 38S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",45],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32738\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32739, "epsg", 32739,
+		      "WGS 84 / UTM zone 39S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 39S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",51],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32739\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32740, "epsg", 32740,
+		      "WGS 84 / UTM zone 40S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 40S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",57],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32740\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32741, "epsg", 32741,
+		      "WGS 84 / UTM zone 41S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 41S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",63],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32741\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32742, "epsg", 32742,
+		      "WGS 84 / UTM zone 42S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 42S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",69],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32742\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32743, "epsg", 32743,
+		      "WGS 84 / UTM zone 43S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 43S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",75],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32743\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32744, "epsg", 32744,
+		      "WGS 84 / UTM zone 44S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 44S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",81],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32744\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32745, "epsg", 32745,
+		      "WGS 84 / UTM zone 45S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 45S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",87],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32745\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32746, "epsg", 32746,
+		      "WGS 84 / UTM zone 46S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 46S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",93],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32746\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32747, "epsg", 32747,
+		      "WGS 84 / UTM zone 47S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 47S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",99],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "96],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",10000000],AUTHORITY[\"EPSG\",\"32747\"],AXI");
+    add_srs_wkt (p, 11, "S[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32748, "epsg", 32748,
+		      "WGS 84 / UTM zone 48S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 48S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",105],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32748\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32749, "epsg", 32749,
+		      "WGS 84 / UTM zone 49S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 49S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",111],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32749\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32750, "epsg", 32750,
+		      "WGS 84 / UTM zone 50S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 50S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",117],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32750\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32751, "epsg", 32751,
+		      "WGS 84 / UTM zone 51S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 51S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",123],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32751\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32752, "epsg", 32752,
+		      "WGS 84 / UTM zone 52S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 52S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",129],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32752\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32753, "epsg", 32753,
+		      "WGS 84 / UTM zone 53S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 53S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",135],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32753\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32754, "epsg", 32754,
+		      "WGS 84 / UTM zone 54S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 54S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",141],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32754\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32755, "epsg", 32755,
+		      "WGS 84 / UTM zone 55S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 55S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",147],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32755\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+}
+
+static void
+initialize_epsg_29 (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+    struct epsg_defs *p;
+    p = add_epsg_def (first, last, 32756, "epsg", 32756,
+		      "WGS 84 / UTM zone 56S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 56S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",153],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32756\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32757, "epsg", 32757,
+		      "WGS 84 / UTM zone 57S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 57S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",159],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32757\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32758, "epsg", 32758,
+		      "WGS 84 / UTM zone 58S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 58S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",165],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32758\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32759, "epsg", 32759,
+		      "WGS 84 / UTM zone 59S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 59S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",171],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32759\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32760, "epsg", 32760,
+		      "WGS 84 / UTM zone 60S");
+    add_proj4text (p, 0,
+		   "+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +uni");
+    add_proj4text (p, 1, "ts=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UTM zone 60S\",GEOGCS[\"WGS 84\",DATUM");
+    add_srs_wkt (p, 1,
+		 "[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,");
+    add_srs_wkt (p, 2,
+		 "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"");
+    add_srs_wkt (p, 3,
+		 "]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],");
+    add_srs_wkt (p, 4,
+		 "UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"");
+    add_srs_wkt (p, 5,
+		 "9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,");
+    add_srs_wkt (p, 6,
+		 "AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Me");
+    add_srs_wkt (p, 7,
+		 "rcator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[");
+    add_srs_wkt (p, 8,
+		 "\"central_meridian\",177],PARAMETER[\"scale_factor\",0.9");
+    add_srs_wkt (p, 9,
+		 "996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fal");
+    add_srs_wkt (p, 10,
+		 "se_northing\",10000000],AUTHORITY[\"EPSG\",\"32760\"],AX");
+    add_srs_wkt (p, 11, "IS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+    p = add_epsg_def (first, last, 32761, "epsg", 32761, "WGS 84 / UPS South");
+    add_proj4text (p, 0,
+		   "+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_");
+    add_proj4text (p, 1,
+		   "0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=");
+    add_proj4text (p, 2, "m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / UPS South\",GEOGCS[\"WGS 84\",DATUM[\"");
+    add_srs_wkt (p, 1,
+		 "WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUT");
+    add_srs_wkt (p, 2,
+		 "HORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]");
+    add_srs_wkt (p, 3,
+		 ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UN");
+    add_srs_wkt (p, 4,
+		 "IT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9");
+    add_srs_wkt (p, 5,
+		 "122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,A");
+    add_srs_wkt (p, 6,
+		 "UTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Polar_Stereogr");
+    add_srs_wkt (p, 7,
+		 "aphic\"],PARAMETER[\"latitude_of_origin\",-90],PARAMETER");
+    add_srs_wkt (p, 8,
+		 "[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.99");
+    add_srs_wkt (p, 9,
+		 "4],PARAMETER[\"false_easting\",2000000],PARAMETER[\"fals");
+    add_srs_wkt (p, 10,
+		 "e_northing\",2000000],AUTHORITY[\"EPSG\",\"32761\"],AXIS");
+    add_srs_wkt (p, 11, "[\"Northing\",UNKNOWN],AXIS[\"Easting\",UNKNOWN]]");
+    p = add_epsg_def (first, last, 32766, "epsg", 32766, "WGS 84 / TM 36 SE");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_");
+    add_proj4text (p, 1,
+		   "0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
+    add_srs_wkt (p, 0,
+		 "PROJCS[\"WGS 84 / TM 36 SE\",GEOGCS[\"WGS 84\",DATUM[\"W");
+    add_srs_wkt (p, 1,
+		 "GS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTH");
+    add_srs_wkt (p, 2,
+		 "ORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],");
+    add_srs_wkt (p, 3,
+		 "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNI");
+    add_srs_wkt (p, 4,
+		 "T[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"91");
+    add_srs_wkt (p, 5,
+		 "22\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,AU");
+    add_srs_wkt (p, 6,
+		 "THORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Merc");
+    add_srs_wkt (p, 7,
+		 "ator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"");
+    add_srs_wkt (p, 8,
+		 "central_meridian\",36],PARAMETER[\"scale_factor\",0.9996");
+    add_srs_wkt (p, 9,
+		 "],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_");
+    add_srs_wkt (p, 10,
+		 "northing\",10000000],AUTHORITY[\"EPSG\",\"32766\"],AXIS[");
+    add_srs_wkt (p, 11, "\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
+#ifndef OMIT_EPSG		/* resuming conditional EPSG initialization */
+
+    p = add_epsg_def (first, last, 40000, "gfoss.it", 1,
+		      "Italy mainland zone 1 GB Roma40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc+lat_0=0 +lon_0=9  +k=0.9996 +x_0=1500000 +y_");
+    add_proj4text (p, 1,
+		   "0=0 +ellps=intl +units=m +towgs84=-104.1,-49.1,-9.9,0.97");
+    add_proj4text (p, 2, "1,-2.917,0.714,-11.68 +no_defs");
+    add_srs_wkt (p, 0, "");
+    p = add_epsg_def (first, last, 40001, "gfoss.it", 2,
+		      "Italy mainland zone 2 GB Roma40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +units=m +towgs84=-104.1,-49.1,-9.9,0.9");
+    add_proj4text (p, 2, "71,-2.917,0.714,-11.68 +no_defs");
+    add_srs_wkt (p, 0, "");
+    p = add_epsg_def (first, last, 40002, "gfoss.it", 3,
+		      "Italy Sardinia GB Roma40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9  +k=0.9996 +x_0=1500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +units=m +towgs84=-168.6,-34.0,38.6,-0.");
+    add_proj4text (p, 2, "374,-0.679,-1.379,-9.48 +no_defs");
+    add_srs_wkt (p, 0, "");
+    p = add_epsg_def (first, last, 40003, "gfoss.it", 4,
+		      "Italy Sicily GB Roma40");
+    add_proj4text (p, 0,
+		   "+proj=tmerc +lat_0=0 +lon_0=9  +k=0.9996 +x_0=1500000 +y");
+    add_proj4text (p, 1,
+		   "_0=0 +ellps=intl +units=m +towgs84=-50.2,-50.4,84.8,-0.6");
+    add_proj4text (p, 2, "90,-2.012,0.459,-28.08  +no_defs");
+    add_srs_wkt (p, 0, "");
+#endif /* full EPSG initialization enabled/disabled */
+}
+
+static void
+initialize_epsg (struct epsg_defs **first, struct epsg_defs **last)
+{
+/* initializing the EPSG defs list */
+    initialize_epsg_00 (first, last);
+    initialize_epsg_01 (first, last);
+    initialize_epsg_02 (first, last);
+    initialize_epsg_03 (first, last);
+    initialize_epsg_04 (first, last);
+    initialize_epsg_05 (first, last);
+    initialize_epsg_06 (first, last);
+    initialize_epsg_07 (first, last);
+    initialize_epsg_08 (first, last);
+    initialize_epsg_09 (first, last);
+    initialize_epsg_10 (first, last);
+    initialize_epsg_11 (first, last);
+    initialize_epsg_12 (first, last);
+    initialize_epsg_13 (first, last);
+    initialize_epsg_14 (first, last);
+    initialize_epsg_15 (first, last);
+    initialize_epsg_16 (first, last);
+    initialize_epsg_17 (first, last);
+    initialize_epsg_18 (first, last);
+    initialize_epsg_19 (first, last);
+    initialize_epsg_20 (first, last);
+    initialize_epsg_21 (first, last);
+    initialize_epsg_22 (first, last);
+    initialize_epsg_23 (first, last);
+    initialize_epsg_24 (first, last);
+    initialize_epsg_25 (first, last);
+    initialize_epsg_26 (first, last);
+    initialize_epsg_27 (first, last);
+    initialize_epsg_28 (first, last);
+    initialize_epsg_29 (first, last);
+}
+
+static void
+free_epsg (struct epsg_defs *first)
+{
+/* memory cleanup - destroying the EPSG list */
+    struct epsg_defs *p = first;
+    struct epsg_defs *pn;
+    while (p)
+      {
+	  pn = p->next;
+	  free_epsg_def (p);
+	  p = pn;
+      }
+}
+
+static int
+populate_spatial_ref_sys (sqlite3 * handle)
+{
+/* populating the EPSG dataset into the SPATIAL_REF_SYS table */
+    struct epsg_defs *first = NULL;
+    struct epsg_defs *last = NULL;
+    struct epsg_defs *p;
+    char sql[1024];
+    char *errMsg = NULL;
+    int ret;
+    sqlite3_stmt *stmt;
+
+/* initializing the EPSG defs list */
+    initialize_epsg (&first, &last);
+
+/* starting a transaction */
+    ret = sqlite3_exec (handle, "BEGIN", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "%s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto error;
+      }
+
+/* preparing the SQL parameterized statement */
+    strcpy (sql, "INSERT INTO spatial_ref_sys ");
+    strcat (sql,
+	    "(srid, auth_name, auth_srid, ref_sys_name, proj4text, srs_wkt) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?)");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "%s\n", sqlite3_errmsg (handle));
+	  goto error;
+      }
+    p = first;
+    while (p)
+      {
+	  if (p->srid < 0 || p->auth_name == NULL)
+	      break;
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  sqlite3_bind_int (stmt, 1, p->srid);
+	  sqlite3_bind_text (stmt, 2, p->auth_name, strlen (p->auth_name),
+			     SQLITE_STATIC);
+	  sqlite3_bind_int (stmt, 3, p->auth_srid);
+	  sqlite3_bind_text (stmt, 4, p->ref_sys_name, strlen (p->ref_sys_name),
+			     SQLITE_STATIC);
+	  sqlite3_bind_text (stmt, 5, p->proj4text, strlen (p->proj4text),
+			     SQLITE_STATIC);
+	  if (strlen (p->srs_wkt) == 0)
+	      sqlite3_bind_null (stmt, 6);
+	  else
+	      sqlite3_bind_text (stmt, 6, p->srs_wkt, strlen (p->srs_wkt),
+				 SQLITE_STATIC);
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	      ;
+	  else
+	    {
+		fprintf (stderr, "%s\n", sqlite3_errmsg (handle));
+		sqlite3_finalize (stmt);
+		goto error;
+	    }
+	  p = p->next;
+      }
+    sqlite3_finalize (stmt);
+
+/* confirming the transaction */
+    ret = sqlite3_exec (handle, "COMMIT", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "%s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto error;
+      }
+
+/* freeing the EPSG defs list */
+    free_epsg (first);
+
+    return 1;
+  error:
+/* trying to perform a ROLLBACK anyway */
+    ret = sqlite3_exec (handle, "ROLLBACK", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "%s\n", errMsg);
+	  sqlite3_free (errMsg);
+      }
+
+/* freeing the EPSG defs list */
+    free_epsg (first);
+
+    return 0;
+}
+
+static int
+exists_spatial_ref_sys (sqlite3 * handle)
+{
+/* checking if the SPATIAL_REF_SYS table exists */
+    int ret;
+    int ok = 0;
+    char sql[1024];
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *err_msg = NULL;
+
+    strcpy (sql,
+	    "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE 'spatial_ref_sys'");
+    ret =
+	sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+			   &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  fprintf (stderr, "XX %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    if (n_rows > 0)
+	ok = 1;
+    sqlite3_free_table (results);
+    return ok;
+}
+
+static int
+check_spatial_ref_sys (sqlite3 * handle)
+{
+/* checking if the SPATIAL_REF_SYS table has an appropriate layout */
+    int ret;
+    int i;
+    const char *name;
+    char sql[1024];
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *err_msg = NULL;
+    int rs_srid = 0;
+    int auth_name = 0;
+    int auth_srid = 0;
+    int ref_sys_name = 0;
+    int proj4text = 0;
+    int srs_wkt = 0;
+
+    strcpy (sql, "PRAGMA table_info(spatial_ref_sys)");
+    ret =
+	sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+			   &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  fprintf (stderr, "%s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    if (n_rows > 0)
+      {
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		name = results[(i * n_columns) + 1];
+		if (strcasecmp (name, "srid") == 0)
+		    rs_srid = 1;
+		if (strcasecmp (name, "auth_name") == 0)
+		    auth_name = 1;
+		if (strcasecmp (name, "auth_srid") == 0)
+		    auth_srid = 1;
+		if (strcasecmp (name, "ref_sys_name") == 0)
+		    ref_sys_name = 1;
+		if (strcasecmp (name, "proj4text") == 0)
+		    proj4text = 1;
+		if (strcasecmp (name, "srs_wkt") == 0)
+		    srs_wkt = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rs_srid && auth_name && auth_srid && ref_sys_name && proj4text
+	&& srs_wkt)
+	ret = 1;
+    else
+	ret = 0;
+    return ret;
+}
+
+static int
+spatial_ref_sys_count (sqlite3 * handle)
+{
+/* checking if the SPATIAL_REF_SYS table is empty */
+    int ret;
+    int i;
+    int count = 0;
+    char sql[1024];
+    char **results;
+    int n_rows;
+    int n_columns;
+    char *err_msg = NULL;
+
+    strcpy (sql, "SELECT Count(*) FROM spatial_ref_sys");
+    ret =
+	sqlite3_get_table (handle, sql, &results, &n_rows, &n_columns,
+			   &err_msg);
+    if (ret != SQLITE_OK)
+      {
+/* some error occurred */
+	  fprintf (stderr, "%s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  return 0;
+      }
+    if (n_rows > 0)
+      {
+	  for (i = 1; i <= n_rows; i++)
+	    {
+		count = atoi (results[(i * n_columns) + 0]);
+	    }
+      }
+    sqlite3_free_table (results);
+    return count;
+}
+
+SPATIALITE_DECLARE int
+spatial_ref_sys_init (sqlite3 * handle, int verbose)
+{
+/* populating the EPSG dataset into the SPATIAL_REF_SYS table */
+    if (!exists_spatial_ref_sys (handle))
+      {
+	  if (verbose)
+	      fprintf (stderr, "the SPATIAL_REF_SYS table doesn't exists\n");
+	  return 0;
+      }
+    if (!check_spatial_ref_sys (handle))
+      {
+	  if (verbose)
+	      fprintf (stderr,
+		       "the SPATIAL_REF_SYS table has an unsupported layout\n");
+	  return 0;
+      }
+    if (spatial_ref_sys_count (handle))
+      {
+	  if (verbose)
+	      fprintf (stderr,
+		       "the SPATIAL_REF_SYS table already contains some row(s)\n");
+	  return 0;
+      }
+    if (populate_spatial_ref_sys (handle))
+      {
+	  if (verbose)
+	      fprintf (stderr,
+		       "OK: the SPATIAL_REF_SYS table was successfully populated\n");
+	  return 1;
+      }
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/versioninfo/version.c b/libspatialite/libspatialite-3.0.1/src/versioninfo/version.c
new file mode 100644
index 0000000..72aafa4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/versioninfo/version.c
@@ -0,0 +1,59 @@
+/*
+ version.c -- Gaia spatial support for SQLite
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#ifdef SPL_AMALGAMATION	/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite.h>
+
+const char spatialiteversion[] = VERSION;
+
+SPATIALITE_DECLARE const char *
+spatialite_version (void)
+{
+    return spatialiteversion;
+}
diff --git a/libspatialite/libspatialite-3.0.1/src/virtualtext/Makefile.am b/libspatialite/libspatialite-3.0.1/src/virtualtext/Makefile.am
new file mode 100644
index 0000000..1848ded
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/virtualtext/Makefile.am
@@ -0,0 +1,15 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libvirtualtext.la
+
+libvirtualtext_la_SOURCES = virtualtext.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/libspatialite-3.0.1/src/virtualtext/Makefile.in b/libspatialite/libspatialite-3.0.1/src/virtualtext/Makefile.in
new file mode 100644
index 0000000..27bdb28
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/virtualtext/Makefile.in
@@ -0,0 +1,488 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/virtualtext
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvirtualtext_la_LIBADD =
+am_libvirtualtext_la_OBJECTS = virtualtext.lo
+libvirtualtext_la_OBJECTS = $(am_libvirtualtext_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libvirtualtext_la_SOURCES)
+DIST_SOURCES = $(libvirtualtext_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libvirtualtext.la
+libvirtualtext_la_SOURCES = virtualtext.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/virtualtext/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/virtualtext/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libvirtualtext.la: $(libvirtualtext_la_OBJECTS) $(libvirtualtext_la_DEPENDENCIES) 
+	$(LINK)  $(libvirtualtext_la_OBJECTS) $(libvirtualtext_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/virtualtext.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/src/virtualtext/virtualtext.c b/libspatialite/libspatialite-3.0.1/src/virtualtext/virtualtext.c
new file mode 100644
index 0000000..9c887a2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/src/virtualtext/virtualtext.c
@@ -0,0 +1,1763 @@
+/*
+
+ virtualtext.c -- SQLite3 extension [VIRTUAL TABLE accessing CSV/TXT]
+
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+/* MSVC strictly requires this include [off_t] */
+#include <sys/types.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/spatialite.h>
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+
+#ifdef _WIN32
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+#if OMIT_ICONV == 0		/* if ICONV is disabled no TXT support is available */
+
+struct sqlite3_module virtualtext_module;
+
+typedef struct VirtualTextStruct
+{
+/* extends the sqlite3_vtab struct */
+    const sqlite3_module *pModule;	/* ptr to sqlite module: USED INTERNALLY BY SQLITE */
+    int nRef;			/* # references: USED INTERNALLY BY SQLITE */
+    char *zErrMsg;		/* error message: USED INTERNALLY BY SQLITE */
+    sqlite3 *db;		/* the sqlite db holding the virtual table */
+    gaiaTextReaderPtr reader;	/* the TextReader object */
+} VirtualText;
+typedef VirtualText *VirtualTextPtr;
+
+typedef struct VirtualTextConstraintStruct
+{
+/* a constraint to be verified for xFilter */
+    int iColumn;		/* Column on left-hand side of constraint */
+    int op;			/* Constraint operator */
+    char valueType;		/* value Type ('I'=int,'D'=double,'T'=text) */
+    sqlite3_int64 intValue;	/* Int64 comparison value */
+    double dblValue;		/* Double comparison value */
+    char *txtValue;		/* Text comparison value */
+    struct VirtualTextConstraintStruct *next;
+} VirtualTextConstraint;
+typedef VirtualTextConstraint *VirtualTextConstraintPtr;
+
+typedef struct VirtualTextCursortStruct
+{
+/* extends the sqlite3_vtab_cursor struct */
+    VirtualTextPtr pVtab;	/* Virtual table of this cursor */
+    long current_row;		/* the current row ID */
+    int eof;			/* the EOF marker */
+    VirtualTextConstraintPtr firstConstraint;
+    VirtualTextConstraintPtr lastConstraint;
+} VirtualTextCursor;
+typedef VirtualTextCursor *VirtualTextCursorPtr;
+
+static void
+text_clean_integer (char *value)
+{
+/* cleaning an integer value */
+    char last;
+    char buffer[35536];
+    int len = strlen (value);
+    last = value[len - 1];
+    if (last == '-' || last == '+')
+      {
+	  /* trailing sign; transforming into a leading sign */
+	  *buffer = last;
+	  strcpy (buffer + 1, value);
+	  buffer[len - 1] = '\0';
+	  strcpy (value, buffer);
+      }
+}
+
+static void
+text_clean_double (char *value)
+{
+/* cleaning an integer value */
+    char *p;
+    char last;
+    char buffer[35536];
+    int len = strlen (value);
+    last = value[len - 1];
+    if (last == '-' || last == '+')
+      {
+	  /* trailing sign; transforming into a leading sign */
+	  *buffer = last;
+	  strcpy (buffer + 1, value);
+	  buffer[len - 1] = '\0';
+	  strcpy (value, buffer);
+      }
+    p = value;
+    while (*p != '\0')
+      {
+	  /* transforming COMMAs into POINTs */
+	  if (*p == ',')
+	      *p = '.';
+	  p++;
+      }
+}
+
+static int
+vtxt_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	     sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* creates the virtual table connected to some TEXT file */
+    char path[2048];
+    char encoding[128];
+    const char *vtable;
+    const char *pEncoding = NULL;
+    int len;
+    gaiaTextReaderPtr text = NULL;
+    const char *pPath = NULL;
+    char field_separator = '\t';
+    char text_separator = '"';
+    char decimal_separator = '.';
+    char first_line_titles = 1;
+    int i;
+    char sql[65535];
+    int seed;
+    int dup;
+    int idup;
+    char dummyName[4096];
+    char **col_name = NULL;
+    VirtualTextPtr p_vt;
+    if (pAux)
+	pAux = pAux;		/* unused arg warning suppression */
+/* checking for TEXTfile PATH */
+    if (argc >= 5 && argc <= 9)
+      {
+	  vtable = argv[1];
+	  pPath = argv[3];
+	  len = strlen (pPath);
+	  if ((*(pPath + 0) == '\'' || *(pPath + 0) == '"')
+	      && (*(pPath + len - 1) == '\'' || *(pPath + len - 1) == '"'))
+	    {
+		/* the path is enclosed between quotes - we need to dequote it */
+		strcpy (path, pPath + 1);
+		len = strlen (path);
+		*(path + len - 1) = '\0';
+	    }
+	  else
+	      strcpy (path, pPath);
+	  pEncoding = argv[4];
+	  len = strlen (pEncoding);
+	  if ((*(pEncoding + 0) == '\'' || *(pEncoding + 0) == '"')
+	      && (*(pEncoding + len - 1) == '\''
+		  || *(pEncoding + len - 1) == '"'))
+	    {
+		/* the charset-name is enclosed between quotes - we need to dequote it */
+		strcpy (encoding, pEncoding + 1);
+		len = strlen (encoding);
+		*(encoding + len - 1) = '\0';
+	    }
+	  else
+	      strcpy (encoding, pEncoding);
+	  if (argc >= 6)
+	    {
+		if (*(argv[5]) == '0' || *(argv[5]) == 'n' || *(argv[5]) == 'N')
+		    first_line_titles = 0;
+	    }
+	  if (argc >= 7)
+	    {
+		if (strcasecmp (argv[6], "COMMA") == 0)
+		    decimal_separator = ',';
+		if (strcasecmp (argv[6], "POINT") == 0)
+		    decimal_separator = '.';
+	    }
+	  if (argc >= 8)
+	    {
+		if (strcasecmp (argv[7], "SINGLEQUOTE") == 0)
+		    text_separator = '\'';
+		if (strcasecmp (argv[7], "DOUBLEQUOTE") == 0)
+		    text_separator = '"';
+		if (strcasecmp (argv[7], "NONE") == 0)
+		    text_separator = '\0';
+	    }
+	  if (argc == 9)
+	    {
+		if (strlen (argv[8]) == 3)
+		  {
+		      if (strcasecmp (argv[8], "TAB") == 0)
+			  field_separator = '\t';
+		      if (*(argv[8] + 0) == '\'' && *(argv[8] + 2) == '\'')
+			  field_separator = *(argv[8] + 1);
+		  }
+	    }
+      }
+    else
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualText module] CREATE VIRTUAL: illegal arg list\n"
+	       "\t\t{ text_path, encoding [, first_row_as_titles [, [decimal_separator [, text_separator, [field_separator] ] ] ] }\n");
+	  return SQLITE_ERROR;
+      }
+    p_vt = (VirtualTextPtr) sqlite3_malloc (sizeof (VirtualText));
+    if (!p_vt)
+	return SQLITE_NOMEM;
+    p_vt->pModule = &virtualtext_module;
+    p_vt->nRef = 0;
+    p_vt->zErrMsg = NULL;
+    p_vt->db = db;
+    text = gaiaTextReaderAlloc (path, field_separator,
+				text_separator, decimal_separator,
+				first_line_titles, encoding);
+    if (text)
+      {
+	  if (gaiaTextReaderParse (text) == 0)
+	    {
+		gaiaTextReaderDestroy (text);
+		text = NULL;
+	    }
+      }
+    if (!text)
+      {
+	  /* something is going the wrong way; creating a stupid default table */
+	  fprintf (stderr, "VirtualText: invalid data source\n");
+	  fflush (stderr);
+	  sprintf (sql, "CREATE TABLE %s (ROWNO INTEGER)", vtable);
+	  if (sqlite3_declare_vtab (db, sql) != SQLITE_OK)
+	    {
+		*pzErr =
+		    sqlite3_mprintf
+		    ("[VirtualText module] cannot build a table from TEXT file\n");
+		return SQLITE_ERROR;
+	    }
+	  p_vt->reader = NULL;
+	  *ppVTab = (sqlite3_vtab *) p_vt;
+	  return SQLITE_OK;
+      }
+    p_vt->reader = text;
+/* preparing the COLUMNs for this VIRTUAL TABLE */
+    sprintf (sql, "CREATE TABLE %s (ROWNO INTEGER", vtable);
+    col_name = malloc (sizeof (char *) * text->max_fields);
+    seed = 0;
+    for (i = 0; i < text->max_fields; i++)
+      {
+	  strcat (sql, ", ");
+	  sprintf (dummyName, "\"%s\"", text->columns[i].name);
+	  dup = 0;
+	  for (idup = 0; idup < i; idup++)
+	    {
+		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
+		    dup = 1;
+	    }
+	  if (strcasecmp (dummyName, "ROWNO") == 0)
+	      dup = 1;
+	  if (dup)
+	      sprintf (dummyName, "DUPCOL_%d", seed++);
+	  len = strlen (dummyName);
+	  *(col_name + i) = malloc (len + 1);
+	  strcpy (*(col_name + i), dummyName);
+	  strcat (sql, dummyName);
+	  if (text->columns[i].type == VRTTXT_INTEGER)
+	      strcat (sql, " INTEGER");
+	  else if (text->columns[i].type == VRTTXT_DOUBLE)
+	      strcat (sql, " DOUBLE");
+	  else
+	      strcat (sql, " TEXT");
+      }
+    strcat (sql, ")");
+    if (col_name)
+      {
+	  /* releasing memory allocation for column names */
+	  for (i = 0; i < text->max_fields; i++)
+	      free (*(col_name + i));
+	  free (col_name);
+      }
+    if (sqlite3_declare_vtab (db, sql) != SQLITE_OK)
+      {
+	  *pzErr =
+	      sqlite3_mprintf
+	      ("[VirtualText module] CREATE VIRTUAL: invalid SQL statement \"%s\"",
+	       sql);
+	  return SQLITE_ERROR;
+      }
+    *ppVTab = (sqlite3_vtab *) p_vt;
+    return SQLITE_OK;
+}
+
+static int
+vtxt_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
+	      sqlite3_vtab ** ppVTab, char **pzErr)
+{
+/* connects the virtual table to some shapefile - simply aliases vshp_create() */
+    return vtxt_create (db, pAux, argc, argv, ppVTab, pzErr);
+}
+
+static int
+vtxt_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIndex)
+{
+/* best index selection */
+    if (pVTab || pIndex)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vtxt_disconnect (sqlite3_vtab * pVTab)
+{
+/* disconnects the virtual table */
+    VirtualTextPtr p_vt = (VirtualTextPtr) pVTab;
+    if (p_vt->reader)
+	gaiaTextReaderDestroy (p_vt->reader);
+    sqlite3_free (p_vt);
+    return SQLITE_OK;
+}
+
+static int
+vtxt_destroy (sqlite3_vtab * pVTab)
+{
+/* destroys the virtual table - simply aliases vtxt_disconnect() */
+    return vtxt_disconnect (pVTab);
+}
+
+static int
+vtxt_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
+{
+/* opening a new cursor */
+    gaiaTextReaderPtr text;
+    VirtualTextCursorPtr cursor =
+	(VirtualTextCursorPtr) sqlite3_malloc (sizeof (VirtualTextCursor));
+    if (cursor == NULL)
+	return SQLITE_NOMEM;
+    cursor->pVtab = (VirtualTextPtr) pVTab;
+    cursor->current_row = 0;
+    cursor->eof = 0;
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+    *ppCursor = (sqlite3_vtab_cursor *) cursor;
+    text = cursor->pVtab->reader;
+    if (!text)
+	cursor->eof = 1;
+    else
+      {
+	  if (!gaiaTextReaderGetRow (text, cursor->current_row))
+	      cursor->eof = 1;
+      }
+    return SQLITE_OK;
+}
+
+
+static void
+vtxt_free_constraints (VirtualTextCursorPtr cursor)
+{
+/* memory cleanup - cursor constraints */
+    VirtualTextConstraintPtr pC;
+    VirtualTextConstraintPtr pCn;
+    pC = cursor->firstConstraint;
+    while (pC)
+      {
+	  pCn = pC->next;
+	  if (pC->txtValue)
+	      sqlite3_free (pC->txtValue);
+	  sqlite3_free (pC);
+	  pC = pCn;
+      }
+    cursor->firstConstraint = NULL;
+    cursor->lastConstraint = NULL;
+}
+
+static int
+vtxt_close (sqlite3_vtab_cursor * pCursor)
+{
+/* closing the cursor */
+    VirtualTextCursorPtr cursor = (VirtualTextCursorPtr) pCursor;
+    vtxt_free_constraints (cursor);
+    sqlite3_free (cursor);
+    return SQLITE_OK;
+}
+
+
+static int
+vtxt_parse_constraint (const char *str, int index, int *iColumn, int *op)
+{
+/* parsing a constraint string */
+    char buf[64];
+    const char *in = str;
+    char *out = buf;
+    int i = 0;
+    int found = 0;
+
+    *out = '\0';
+    while (*in != '\0')
+      {
+	  if (*in == ',')
+	    {
+		if (index == i)
+		  {
+		      *out = '\0';
+		      found = 1;
+		      break;
+		  }
+		i++;
+		in++;
+		continue;
+	    }
+	  if (index == i)
+	      *out++ = *in;
+	  in++;
+      }
+    if (!found)
+	return 0;
+    in = buf;
+    for (i = 0; i < (int) strlen (buf); i++)
+      {
+	  if (buf[i] == ':')
+	    {
+		buf[i] = '\0';
+		*iColumn = atoi (buf);
+		*op = atoi (buf + i + 1);
+		return 1;
+	    }
+	  in++;
+      }
+    return 0;
+}
+
+static int
+vtxt_eval_constraints (VirtualTextCursorPtr cursor)
+{
+/* evaluating Filter constraints */
+    int nCol;
+    int i;
+    char buf[4096];
+    int type;
+    const char *value;
+    sqlite3_int64 int_value;
+    double dbl_value;
+    const char *txt_value;
+    int is_int;
+    int is_dbl;
+    int is_txt;
+    gaiaTextReaderPtr text = cursor->pVtab->reader;
+    VirtualTextConstraintPtr pC;
+    if (text->current_line_ready == 0)
+	return SQLITE_ERROR;
+    pC = cursor->firstConstraint;
+    while (pC)
+      {
+	  int ok = 0;
+	  if (pC->iColumn == 0)
+	    {
+		/* the ROWNO column */
+		int_value = cursor->current_row;
+		goto eval;
+	    }
+	  nCol = 1;
+	  for (i = 0; i < text->max_fields; i++)
+	    {
+		is_int = 0;
+		is_dbl = 0;
+		is_txt = 0;
+		if (nCol == pC->iColumn)
+		  {
+		      if (!gaiaTextReaderFetchField (text, i, &type, &value))
+			  ;
+		      else
+			{
+			    if (type == VRTTXT_INTEGER)
+			      {
+				  strcpy (buf, value);
+				  text_clean_integer (buf);
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime has non-standard functions for 64 bits */
+				  int_value = _atoi64 (buf);
+#else
+				  int_value = atoll (buf);
+#endif
+				  is_int = 1;
+			      }
+			    else if (type == VRTTXT_DOUBLE)
+			      {
+				  strcpy (buf, value);
+				  text_clean_double (buf);
+				  dbl_value = atof (buf);
+				  is_dbl = 1;
+			      }
+			    else if (type == VRTTXT_TEXT)
+			      {
+				  txt_value = value;
+				  is_txt = 1;
+			      }
+			}
+		      goto eval;
+		  }
+		nCol++;
+	    }
+	  return 0;
+	eval:
+	  ok = 0;
+	  if (pC->valueType == 'I')
+	    {
+		if (is_int)
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (int_value == pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (int_value > pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (int_value <= pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (int_value < pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (int_value >= pC->intValue)
+				ok = 1;
+			    break;
+			};
+		  }
+		if (is_dbl)
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (dbl_value == pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (dbl_value > pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (dbl_value <= pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (dbl_value < pC->intValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (dbl_value >= pC->intValue)
+				ok = 1;
+			    break;
+			};
+		  }
+	    }
+	  if (pC->valueType == 'D')
+	    {
+		if (is_int)
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (int_value == pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (int_value > pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (int_value <= pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (int_value < pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (int_value >= pC->dblValue)
+				ok = 1;
+			    break;
+			};
+		  }
+		if (is_dbl)
+		  {
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (dbl_value == pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (dbl_value > pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (dbl_value <= pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (dbl_value < pC->dblValue)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (dbl_value >= pC->dblValue)
+				ok = 1;
+			    break;
+			};
+		  }
+	    }
+	  if (pC->valueType == 'T')
+	    {
+		if (is_txt)
+		  {
+		      int ret = strcmp (txt_value, pC->txtValue);
+		      switch (pC->op)
+			{
+			case SQLITE_INDEX_CONSTRAINT_EQ:
+			    if (ret == 0)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GT:
+			    if (ret > 0)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LE:
+			    if (ret <= 0)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_LT:
+			    if (ret < 0)
+				ok = 1;
+			    break;
+			case SQLITE_INDEX_CONSTRAINT_GE:
+			    if (ret >= 0)
+				ok = 1;
+			    break;
+			};
+		  }
+	    }
+	  if (!ok)
+	      return 0;
+	  pC = pC->next;
+      }
+    return 1;
+}
+
+static int
+vtxt_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
+	     int argc, sqlite3_value ** argv)
+{
+/* setting up a cursor filter */
+    int i;
+    int iColumn;
+    int op;
+    int len;
+    VirtualTextConstraintPtr pC;
+    VirtualTextCursorPtr cursor = (VirtualTextCursorPtr) pCursor;
+    gaiaTextReaderPtr text = cursor->pVtab->reader;
+    if (idxNum)
+	idxNum = idxNum;	/* unused arg warning suppression */
+
+/* resetting any previously set filter constraint */
+    vtxt_free_constraints (cursor);
+
+    for (i = 0; i < argc; i++)
+      {
+	  if (!vtxt_parse_constraint (idxStr, i, &iColumn, &op))
+	      continue;
+	  pC = sqlite3_malloc (sizeof (VirtualTextConstraint));
+	  if (!pC)
+	      continue;
+	  pC->iColumn = iColumn;
+	  pC->op = op;
+	  pC->valueType = '\0';
+	  pC->txtValue = NULL;
+	  pC->next = NULL;
+
+	  if (sqlite3_value_type (argv[i]) == SQLITE_INTEGER)
+	    {
+		pC->valueType = 'I';
+		pC->intValue = sqlite3_value_int64 (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_FLOAT)
+	    {
+		pC->valueType = 'D';
+		pC->dblValue = sqlite3_value_double (argv[i]);
+	    }
+	  if (sqlite3_value_type (argv[i]) == SQLITE_TEXT)
+	    {
+		pC->valueType = 'T';
+		len = sqlite3_value_bytes (argv[i]) + 1;
+		pC->txtValue = (char *) sqlite3_malloc (len);
+		if (pC->txtValue)
+		    strcpy (pC->txtValue,
+			    (char *) sqlite3_value_text (argv[i]));
+	    }
+	  if (cursor->firstConstraint == NULL)
+	      cursor->firstConstraint = pC;
+	  if (cursor->lastConstraint != NULL)
+	      cursor->lastConstraint->next = pC;
+	  cursor->lastConstraint = pC;
+      }
+
+    cursor->current_row = 0;
+    cursor->eof = 0;
+    while (1)
+      {
+	  if (!gaiaTextReaderGetRow (text, cursor->current_row))
+	    {
+		cursor->eof = 1;
+		break;
+	    }
+	  if (vtxt_eval_constraints (cursor))
+	      break;
+	  cursor->current_row++;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vtxt_next (sqlite3_vtab_cursor * pCursor)
+{
+/* fetching next row from cursor */
+    VirtualTextCursorPtr cursor = (VirtualTextCursorPtr) pCursor;
+    gaiaTextReaderPtr text = cursor->pVtab->reader;
+    if (!text)
+	cursor->eof = 1;
+    else
+      {
+	  while (1)
+	    {
+		cursor->current_row++;
+		if (!gaiaTextReaderGetRow (text, cursor->current_row))
+		  {
+		      cursor->eof = 1;
+		      break;
+		  }
+		if (vtxt_eval_constraints (cursor))
+		    break;
+	    }
+      }
+    return SQLITE_OK;
+}
+
+static int
+vtxt_eof (sqlite3_vtab_cursor * pCursor)
+{
+/* cursor EOF */
+    VirtualTextCursorPtr cursor = (VirtualTextCursorPtr) pCursor;
+    return cursor->eof;
+}
+
+static int
+vtxt_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
+	     int column)
+{
+/* fetching value for the Nth column */
+    int nCol = 1;
+    int i;
+    char buf[4096];
+    int type;
+    const char *value;
+    VirtualTextCursorPtr cursor = (VirtualTextCursorPtr) pCursor;
+    gaiaTextReaderPtr text = cursor->pVtab->reader;
+    if (column == 0)
+      {
+	  /* the ROWNO column */
+	  sqlite3_result_int (pContext, cursor->current_row);
+	  return SQLITE_OK;
+      }
+    if (text->current_line_ready == 0)
+	return SQLITE_ERROR;
+    for (i = 0; i < text->max_fields; i++)
+      {
+	  if (nCol == column)
+	    {
+		if (!gaiaTextReaderFetchField (text, i, &type, &value))
+		    sqlite3_result_null (pContext);
+		else
+		  {
+		      if (type == VRTTXT_INTEGER)
+			{
+			    strcpy (buf, value);
+			    text_clean_integer (buf);
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime has non-standard functions for 64 bits */
+			    sqlite3_result_int64 (pContext, _atoi64 (buf));
+#else
+			    sqlite3_result_int64 (pContext, atoll (buf));
+#endif
+			}
+		      else if (type == VRTTXT_DOUBLE)
+			{
+			    strcpy (buf, value);
+			    text_clean_double (buf);
+			    sqlite3_result_double (pContext, atof (buf));
+			}
+		      else if (type == VRTTXT_TEXT)
+			  sqlite3_result_text (pContext, value, strlen (value),
+					       free);
+		      else
+			  sqlite3_result_null (pContext);
+		  }
+	    }
+	  nCol++;
+      }
+    return SQLITE_OK;
+}
+
+static int
+vtxt_rowid (sqlite3_vtab_cursor * pCursor, sqlite_int64 * pRowid)
+{
+/* fetching the ROWID */
+    VirtualTextCursorPtr cursor = (VirtualTextCursorPtr) pCursor;
+    *pRowid = cursor->current_row;
+    return SQLITE_OK;
+}
+
+static int
+vtxt_update (sqlite3_vtab * pVTab, int argc, sqlite3_value ** argv,
+	     sqlite_int64 * pRowid)
+{
+/* generic update [INSERT / UPDATE / DELETE */
+    if (pVTab || argc || argv || pRowid)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_READONLY;
+}
+
+static int
+vtxt_begin (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vtxt_sync (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vtxt_commit (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+static int
+vtxt_rollback (sqlite3_vtab * pVTab)
+{
+/* BEGIN TRANSACTION */
+    if (pVTab)
+	pVTab = pVTab;		/* unused arg warning suppression */
+    return SQLITE_OK;
+}
+
+int
+sqlite3VirtualTextInit (sqlite3 * db)
+{
+    int rc = SQLITE_OK;
+    virtualtext_module.iVersion = 1;
+    virtualtext_module.xCreate = &vtxt_create;
+    virtualtext_module.xConnect = &vtxt_connect;
+    virtualtext_module.xBestIndex = &vtxt_best_index;
+    virtualtext_module.xDisconnect = &vtxt_disconnect;
+    virtualtext_module.xDestroy = &vtxt_destroy;
+    virtualtext_module.xOpen = &vtxt_open;
+    virtualtext_module.xClose = &vtxt_close;
+    virtualtext_module.xFilter = &vtxt_filter;
+    virtualtext_module.xNext = &vtxt_next;
+    virtualtext_module.xEof = &vtxt_eof;
+    virtualtext_module.xColumn = &vtxt_column;
+    virtualtext_module.xRowid = &vtxt_rowid;
+    virtualtext_module.xUpdate = &vtxt_update;
+    virtualtext_module.xBegin = &vtxt_begin;
+    virtualtext_module.xSync = &vtxt_sync;
+    virtualtext_module.xCommit = &vtxt_commit;
+    virtualtext_module.xRollback = &vtxt_rollback;
+    virtualtext_module.xFindFunction = NULL;
+    sqlite3_create_module_v2 (db, "VirtualText", &virtualtext_module, NULL, 0);
+    return rc;
+}
+
+int
+virtualtext_extension_init (sqlite3 * db)
+{
+    return sqlite3VirtualTextInit (db);
+}
+
+/*
+**
+** TextReader implementation
+**
+*/
+
+static struct vrttxt_row_block *
+vrttxt_block_alloc ()
+{
+/* allocating a rows Block */
+    struct vrttxt_row_block *p = malloc (sizeof (struct vrttxt_row_block));
+    if (!p)
+	return NULL;
+    p->num_rows = 0;
+    p->min_line_no = -1;
+    p->max_line_no = -1;
+    p->next = NULL;
+    return p;
+}
+
+static void
+vrttxt_block_destroy (struct vrttxt_row_block *p)
+{
+/* destroying a rows Block */
+    if (p)
+	free (p);
+}
+
+GAIAGEO_DECLARE void
+gaiaTextReaderDestroy (gaiaTextReaderPtr reader)
+{
+/* destroying the main TXT-Reader */
+    int col;
+    struct vrttxt_row_block *blk;
+    struct vrttxt_row_block *blkN;
+    if (reader)
+      {
+	  blk = reader->first;
+	  while (blk)
+	    {
+		/* destroying the row offset Blocks */
+		blkN = blk->next;
+		vrttxt_block_destroy (blk);
+		blk = blkN;
+	    }
+	  /* freeing the input buffers */
+	  if (reader->line_buffer)
+	      free (reader->line_buffer);
+	  if (reader->field_buffer)
+	      free (reader->field_buffer);
+	  /* freeing the row offsets array */
+	  if (reader->rows)
+	      free (reader->rows);
+	  /* closing the input file */
+	  fclose (reader->text_file);
+	  for (col = 0; col < VRTTXT_FIELDS_MAX; col++)
+	    {
+		/* destroying column headers */
+		if (reader->columns[col].name != NULL)
+		    free (reader->columns[col].name);
+	    }
+	  gaiaFreeUTF8Converter (reader->toUtf8);
+	  free (reader);
+      }
+}
+
+GAIAGEO_DECLARE gaiaTextReaderPtr
+gaiaTextReaderAlloc (const char *path, char field_separator,
+		     char text_separator, char decimal_separator,
+		     int first_line_titles, const char *encoding)
+{
+/* allocating the main TXT-Reader */
+    int col;
+    gaiaTextReaderPtr reader;
+    FILE *in = fopen (path, "rb");	/* opening the input file */
+    if (in == NULL)
+	return NULL;
+
+/* allocating and initializing the struct */
+    reader = malloc (sizeof (gaiaTextReader));
+    if (!reader)
+      {
+	  fclose (in);
+	  return NULL;
+      }
+    reader->text_file = in;
+    reader->field_separator = field_separator;
+    reader->text_separator = text_separator;
+    reader->decimal_separator = decimal_separator;
+    reader->first_line_titles = first_line_titles;
+    reader->toUtf8 = gaiaCreateUTF8Converter (encoding);
+    if (reader->toUtf8 == (void *) 0)
+      {
+	  fclose (in);
+	  return NULL;
+      }
+    reader->error = 0;
+    reader->first = NULL;
+    reader->last = NULL;
+    reader->rows = NULL;
+    reader->num_rows = 0;
+    reader->line_no = 0;
+    reader->max_fields = 0;
+    reader->max_current_field = 0;
+    reader->current_line_ready = 0;
+    reader->current_buf_sz = 1024;
+    reader->line_buffer = malloc (1024);
+    reader->field_buffer = malloc (1024);
+    if (reader->line_buffer == NULL || reader->field_buffer == NULL)
+      {
+	  /* insufficient memory: no input buffers */
+	  gaiaTextReaderDestroy (reader);
+	  return NULL;
+      }
+    for (col = 0; col < VRTTXT_FIELDS_MAX; col++)
+      {
+	  /* initializing column headers */
+	  reader->columns[col].name = NULL;
+	  reader->columns[col].type = VRTTXT_NULL;
+      }
+    return reader;
+}
+
+static void
+vrttxt_line_init (struct vrttxt_line *line, off_t offset)
+{
+/* initializing a LINE struct */
+    line->offset = offset;
+    line->len = 0;
+    line->num_fields = 0;
+    line->error = 0;
+}
+
+static void
+vrttxt_line_end (struct vrttxt_line *line, off_t offset)
+{
+/* completing a Line struct (EndOfLine encountered) */
+    line->len = offset - line->offset;
+}
+
+static void
+vrttxt_add_field (struct vrttxt_line *line, off_t offset)
+{
+/* adding a Field offset to the current Line */
+    if (line->num_fields >= VRTTXT_FIELDS_MAX)
+      {
+	  line->error = 1;
+	  return;
+      }
+    line->field_offsets[line->num_fields] = offset - line->offset;
+    line->num_fields++;
+}
+
+static int
+vrttxt_is_integer (const char *value)
+{
+/* checking if this value can be an INTEGER */
+    int invalids = 0;
+    int digits = 0;
+    int signs = 0;
+    char last = '\0';
+    const char *p = value;
+    while (*p != '\0')
+      {
+	  last = *p;
+	  if (*p >= '0' && *p <= '9')
+	      digits++;
+	  else if (*p == '+' || *p == '-')
+	      signs++;
+	  else
+	      invalids++;
+	  p++;
+      }
+    if (invalids)
+	return 0;		/* invalid chars where found */
+    if (signs > 1)
+	return 0;		/* more than a single sign */
+    if (signs)
+      {
+	  if (*value == '+' || *value == '-' || last == '+' || last == '-')
+	      ;
+	  else
+	      return 0;		/* sign is not the first/last string char */
+      }
+    return 1;			/* ok, can be a valid INTEGER value */
+}
+
+static int
+vrttxt_is_double (const char *value, char decimal_separator)
+{
+/* checking if this value can be a DOUBLE */
+    int invalids = 0;
+    int digits = 0;
+    int signs = 0;
+    int points = 0;
+    char last = '\0';
+    const char *p = value;
+    while (*p != '\0')
+      {
+	  last = *p;
+	  if (*p >= '0' && *p <= '9')
+	      digits++;
+	  else if (*p == '+' || *p == '-')
+	      signs++;
+	  else
+	    {
+		if (decimal_separator == ',')
+		  {
+		      if (*p == ',')
+			  points++;
+		      else
+			  invalids++;
+		  }
+		else
+		  {
+		      if (*p == '.')
+			  points++;
+		      else
+			  invalids++;
+		  }
+	    }
+	  p++;
+      }
+    if (invalids)
+	return 0;		/* invalid chars where found */
+    if (points > 1)
+	return 0;		/* more than a single decimal separator */
+    if (signs > 1)
+	return 0;		/* more than a single sign */
+    if (signs)
+      {
+	  if (*value == '+' || *value == '-' || last == '+' || last == '-')
+	      ;
+	  else
+	      return 0;		/* sign is not the first/last string char */
+      }
+    return 1;			/* ok, can be a valid DOUBLE value */
+}
+
+static int
+vrttxt_check_type (const char *value, char decimal_separator)
+{
+/* checking the Field type */
+    if (*value == '\0')
+	return VRTTXT_NULL;
+    if (vrttxt_is_integer (value))
+	return VRTTXT_INTEGER;
+    if (vrttxt_is_double (value, decimal_separator))
+	return VRTTXT_DOUBLE;
+    return VRTTXT_TEXT;
+}
+
+static int
+vrttxt_set_column_title (gaiaTextReaderPtr txt, int col_no, const char *name)
+{
+/* setting a Column header name */
+    int err;
+    int ind;
+    char *utf8text;
+    char *str = (char *) name;
+    int len = strlen (str);
+    if (str[0] == txt->text_separator && str[len - 1] == txt->text_separator)
+      {
+	  /* cleaning the enclosing quotes */
+	  str[len - 1] = '\0';
+	  str = (char *) (name + 1);
+	  len -= 2;
+	  if (len <= 0)
+	      return 0;
+      }
+    utf8text = gaiaConvertToUTF8 (txt->toUtf8, str, len, &err);
+    if (err)
+      {
+	  if (utf8text)
+	      free (utf8text);
+	  return 0;
+      }
+    else
+	str = utf8text;
+    len = strlen (str);
+    for (ind = 0; ind < len; ind++)
+      {
+	  /* masking spaces and so on within the column name */
+	  switch (str[ind])
+	    {
+	    case ' ':
+	    case '\t':
+	    case '-':
+	    case '+':
+	    case '*':
+	    case '/':
+	    case '(':
+	    case ')':
+	    case '[':
+	    case ']':
+	    case '{':
+	    case '}':
+		str[ind] = '_';
+		break;
+	    }
+      }
+    if (txt->columns[col_no].name)
+	free (txt->columns[col_no].name);
+    txt->columns[col_no].name = malloc (len + 1);
+    if (txt->columns[col_no].name == NULL)
+	return 0;
+    strcpy (txt->columns[col_no].name, utf8text);
+    free (utf8text);
+    return 1;
+}
+
+static void
+vrttxt_add_line (gaiaTextReaderPtr txt, struct vrttxt_line *line)
+{
+/* appending a Line offset to the main TXT-Reader */
+    struct vrttxt_row_block *p_block;
+    struct vrttxt_row *p_row;
+    int ind;
+    int off;
+    int len;
+    int value_type;
+    int column_type;
+    int first_line = 0;
+    if (txt->line_no == 0)
+	first_line = 1;
+    if (line->error)
+      {
+	  txt->error = 1;
+	  txt->line_no++;
+	  return;
+      }
+    if (line->num_fields == 0)
+      {
+	  txt->line_no++;
+	  return;
+      }
+    p_block = txt->last;
+    if (p_block == NULL)
+      {
+	  /* the offset Blocks list is empty: allocating the first Block */
+	  p_block = vrttxt_block_alloc ();
+	  if (!p_block)
+	    {
+		txt->error = 1;
+		txt->line_no++;
+		return;
+	    }
+	  if (txt->first == NULL)
+	      txt->first = p_block;
+	  if (txt->last != NULL)
+	      txt->last->next = p_block;
+	  txt->last = p_block;
+      }
+    else if (p_block->num_rows >= VRTTXT_BLOCK_MAX)
+      {
+	  /* the current offset Block is full: expanding the list */
+	  p_block = vrttxt_block_alloc ();
+	  if (!p_block)
+	    {
+		txt->error = 1;
+		txt->line_no++;
+		return;
+	    }
+	  if (txt->first == NULL)
+	      txt->first = p_block;
+	  if (txt->last != NULL)
+	      txt->last->next = p_block;
+	  txt->last = p_block;
+      }
+/* inserting the Row offset into the offset Block */
+    p_row = p_block->rows + p_block->num_rows;
+    p_block->num_rows++;
+    p_row->line_no = txt->line_no;
+    if (p_block->min_line_no < 0)
+	p_block->min_line_no = p_row->line_no;
+    if (p_block->max_line_no < p_row->line_no)
+	p_block->max_line_no = p_row->line_no;
+    txt->line_no++;
+    p_row->offset = line->offset;
+    p_row->len = line->len;
+    p_row->num_fields = line->num_fields;
+    if (line->num_fields > txt->max_fields)
+	txt->max_fields = line->num_fields;
+    off = 0;
+    for (ind = 0; ind < p_row->num_fields; ind++)
+      {
+	  /* setting the corresponding Column (aka Field) header */
+	  len = line->field_offsets[ind] - off;
+	  if (len == 0)
+	      *(txt->field_buffer) = '\0';
+	  else
+	    {
+		/* retrieving the current Field Value */
+		memcpy (txt->field_buffer, txt->line_buffer + off, len);
+		*(txt->field_buffer + len) = '\0';
+	    }
+	  if (txt->first_line_titles && first_line)
+	    {
+		/* first line: the current value is the Column Name */
+		if (!vrttxt_set_column_title (txt, ind, txt->field_buffer))
+		    txt->error = 1;
+	    }
+	  else
+	    {
+		/* plain Field Value */
+		value_type =
+		    vrttxt_check_type (txt->field_buffer,
+				       txt->decimal_separator);
+		column_type = txt->columns[ind].type;
+		switch (value_type)
+		  {
+		      /* checking the Column type */
+		  case VRTTXT_INTEGER:
+		      if (column_type == VRTTXT_NULL)
+			  txt->columns[ind].type = VRTTXT_INTEGER;
+		      break;
+		  case VRTTXT_DOUBLE:
+		      if (column_type == VRTTXT_NULL
+			  || column_type == VRTTXT_INTEGER)
+			  txt->columns[ind].type = VRTTXT_DOUBLE;
+		      break;
+		  case VRTTXT_TEXT:
+		      txt->columns[ind].type = VRTTXT_TEXT;
+		      break;
+		  default:
+		      break;
+		  };
+	    }
+	  off = line->field_offsets[ind] + 1;
+      }
+}
+
+static void
+vrttxt_line_push (gaiaTextReaderPtr txt, char c)
+{
+/* inserting a single char into the dynamically growing buffer */
+    if (txt->error)
+	return;
+    if ((txt->current_buf_off + 1) >= txt->current_buf_sz)
+      {
+	  /* expanding the input buffer */
+	  int new_sz;
+	  char *new_buf;
+	  /*
+	     / allocation strategy:
+	     / - the input buffer has an initial size of 1024 bytes
+	     /   (good for short lines)
+	     / - the second step allocates 4196 bytes
+	     / - the third step allocates 65536 bytes
+	     /   (good for medium sized lines)
+	     / - after this the buffer allocation will be increased
+	     /   be 1MB at each step (good for huge sized lines)
+	   */
+	  if (txt->current_buf_sz < 4196)
+	      new_sz = 4196;
+	  else if (txt->current_buf_sz < 65536)
+	      new_sz = 65536;
+	  else
+	      new_sz = txt->current_buf_sz + (1024 * 1024);
+	  new_buf = malloc (new_sz);
+	  if (!new_buf)
+	    {
+		txt->error = 1;
+		return;
+	    }
+	  txt->current_buf_sz = new_sz;
+	  memcpy (new_buf, txt->line_buffer, txt->current_buf_off);
+	  free (txt->line_buffer);
+	  txt->line_buffer = new_buf;
+	  free (txt->field_buffer);
+	  txt->field_buffer = malloc (new_sz);
+	  if (txt->field_buffer == NULL)
+	    {
+		txt->error = 1;
+		return;
+	    }
+      }
+    *(txt->line_buffer + txt->current_buf_off) = c;
+    txt->current_buf_off++;
+/* ensuring that input buffer will be null terminated anyway */
+    *(txt->line_buffer + txt->current_buf_off) = '\0';
+}
+
+static void
+vrttxt_build_line_array (gaiaTextReaderPtr txt)
+{
+/* creating the final Line offsets array */
+    struct vrttxt_row_block *p_block;
+    int i;
+    int cnt = 0;
+    int first_line = 1;
+    if (txt->rows)
+	free (txt->rows);
+    txt->rows = NULL;
+    txt->num_rows = 0;
+    p_block = txt->first;
+    while (p_block)
+      {
+	  /* counting how many lines are there */
+	  if (p_block == txt->first && txt->first_line_titles)
+	      txt->num_rows += p_block->num_rows - 1;
+	  else
+	      txt->num_rows += p_block->num_rows;
+	  p_block = p_block->next;
+      }
+    txt->rows = malloc (sizeof (struct vrttxt_row *) * txt->num_rows);
+    if (txt->rows == NULL)
+      {
+	  /* insufficient memory */
+	  txt->error = 1;
+	  return;
+      }
+    p_block = txt->first;
+    while (p_block)
+      {
+	  for (i = 0; i < p_block->num_rows; i++)
+	    {
+		/* setting Line references into the array */
+		if (first_line && txt->first_line_titles)
+		  {
+		      first_line = 0;
+		      continue;	/* skipping the first line (column names) */
+		  }
+		*(txt->rows + cnt++) = p_block->rows + i;
+	    }
+	  p_block = p_block->next;
+      }
+}
+
+GAIAGEO_DECLARE int
+gaiaTextReaderParse (gaiaTextReaderPtr txt)
+{
+/* 
+/ preliminary parsing
+/ - reading the input file until EOF
+/ - then feeding the Row offsets structs
+/   to be used for any subsequent access
+*/
+    char name[64];
+    int ind;
+    int i2;
+    int c;
+    int masked = 0;
+    int token_start = 1;
+    int row_offset = 0;
+    off_t offset = 0;
+    struct vrttxt_line line;
+    vrttxt_line_init (&line, 0);
+    txt->current_buf_off = 0;
+
+    while ((c = getc (txt->text_file)) != EOF)
+      {
+	  if (c == txt->text_separator)
+	    {
+		if (masked)
+		    masked = 0;
+		else
+		  {
+		      if (token_start)
+			  masked = 1;
+		  }
+		vrttxt_line_push (txt, c);
+		if (txt->error)
+		    return 0;
+		row_offset++;
+		offset++;
+		continue;
+	    }
+	  token_start = 0;
+	  if (c == '\r')
+	    {
+		if (masked)
+		  {
+		      vrttxt_line_push (txt, c);
+		      if (txt->error)
+			  return 0;
+		      row_offset++;
+		  }
+		offset++;
+		continue;
+	    }
+	  if (c == '\n')
+	    {
+		if (masked)
+		  {
+		      vrttxt_line_push (txt, c);
+		      if (txt->error)
+			  return 0;
+		      row_offset++;
+		      offset++;
+		      continue;
+		  }
+		vrttxt_add_field (&line, offset);
+		vrttxt_line_end (&line, offset);
+		vrttxt_add_line (txt, &line);
+		if (txt->error)
+		    return 0;
+		vrttxt_line_init (&line, offset + 1);
+		txt->current_buf_off = 0;
+		token_start = 1;
+		row_offset = 0;
+		offset++;
+		continue;
+	    }
+	  if (c == txt->field_separator)
+	    {
+		if (masked)
+		  {
+		      vrttxt_line_push (txt, c);
+		      if (txt->error)
+			  return 0;
+		      row_offset++;
+		      offset++;
+		      continue;
+		  }
+		vrttxt_line_push (txt, c);
+		if (txt->error)
+		    return 0;
+		row_offset++;
+		vrttxt_add_field (&line, offset);
+		token_start = 1;
+		offset++;
+		continue;
+	    }
+	  vrttxt_line_push (txt, c);
+	  if (txt->error)
+	      return 0;
+	  row_offset++;
+	  offset++;
+      }
+    if (txt->error)
+	return 0;
+    if (txt->first_line_titles)
+      {
+	  /* checking for duplicate column names */
+	  for (ind = 0; ind < txt->max_fields; ind++)
+	    {
+		for (i2 = 0; i2 < ind; i2++)
+		  {
+		      if (strcasecmp
+			  (txt->columns[i2].name, txt->columns[ind].name) == 0)
+			{
+			    sprintf (name, "COL%03d", ind + 1);
+			    if (!vrttxt_set_column_title (txt, ind, name))
+			      {
+				  txt->error = 1;
+				  return 0;
+			      }
+			}
+		  }
+	    }
+      }
+    else
+      {
+	  /* setting convenience column names */
+	  for (ind = 0; ind < txt->max_fields; ind++)
+	    {
+		sprintf (name, "COL%03d", ind + 1);
+		if (!vrttxt_set_column_title (txt, ind, name))
+		  {
+		      txt->error = 1;
+		      return 0;
+		  }
+	    }
+      }
+    if (txt->error)
+	return 0;
+    vrttxt_build_line_array (txt);
+    if (txt->error)
+	return 0;
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaTextReaderGetRow (gaiaTextReaderPtr txt, int line_no)
+{
+/* reading a Line (identified by relative number */
+    int i;
+    char c;
+    int masked = 0;
+    int token_start = 1;
+    int fld = 0;
+    int offset = 0;
+    struct vrttxt_row *p_row;
+    txt->current_line_ready = 0;
+    txt->max_current_field = 0;
+    if (line_no < 0 || line_no >= txt->num_rows || txt->rows == NULL)
+	return 0;
+    p_row = *(txt->rows + line_no);
+    if (fseek (txt->text_file, p_row->offset, SEEK_SET) != 0)
+	return 0;
+    if (fread (txt->line_buffer, 1, p_row->len, txt->text_file) !=
+	(unsigned int) (p_row->len))
+	return 0;
+    txt->field_offsets[0] = 0;
+    for (i = 0; i < p_row->len; i++)
+      {
+	  /* parsing Fields */
+	  c = *(txt->line_buffer + i);
+	  if (c == txt->text_separator)
+	    {
+		if (masked)
+		    masked = 0;
+		else
+		  {
+		      if (token_start)
+			  masked = 1;
+		  }
+		offset++;
+		continue;
+	    }
+	  token_start = 0;
+	  if (c == '\r')
+	    {
+		offset++;
+		continue;
+	    }
+	  if (c == txt->field_separator)
+	    {
+		if (masked)
+		  {
+		      offset++;
+		      continue;
+		  }
+		txt->field_offsets[fld + 1] = offset + 1;
+		txt->field_lens[fld] = -1;
+		txt->field_lens[fld] = offset - txt->field_offsets[fld];
+		fld++;
+		txt->max_current_field = fld;
+		token_start = 1;
+		offset++;
+		continue;
+	    }
+	  offset++;
+      }
+    if (offset > 0)
+      {
+	  txt->field_lens[fld] = offset - txt->field_offsets[fld];
+	  fld++;
+	  txt->max_current_field = fld;
+      }
+    txt->current_line_ready = 1;
+    return 1;
+}
+
+GAIAGEO_DECLARE int
+gaiaTextReaderFetchField (gaiaTextReaderPtr txt, int field_idx, int *type,
+			  const char **value)
+{
+/* fetching a field value */
+    char *utf8text = NULL;
+    int err;
+    int len;
+    char *str;
+    if (txt->current_line_ready == 0)
+      {
+	  *type = VRTTXT_NULL;
+	  *value = NULL;
+	  return 0;
+      }
+    if (field_idx < 0 || field_idx >= txt->max_fields)
+      {
+	  *type = VRTTXT_NULL;
+	  *value = NULL;
+	  return 0;
+      }
+    if (field_idx < 0 || field_idx >= txt->max_current_field)
+      {
+	  *type = VRTTXT_NULL;
+	  *value = NULL;
+	  return 0;
+      }
+    *type = txt->columns[field_idx].type;
+    if (txt->field_lens[field_idx] == 0)
+	*(txt->field_buffer) = '\0';
+    memcpy (txt->field_buffer, txt->line_buffer + txt->field_offsets[field_idx],
+	    txt->field_lens[field_idx]);
+    *(txt->field_buffer + txt->field_lens[field_idx]) = '\0';
+    *value = txt->field_buffer;
+    if (*value == '\0')
+	*type = VRTTXT_NULL;
+    else if (*type == VRTTXT_TEXT)
+      {
+	  /* converting to UTF-8 */
+	  str = (char *) *value;
+	  len = strlen (str);
+	  if (str[len - 1] == '\r')
+	    {
+		/* skipping trailing CR, if any */
+		str[len - 1] = '\0';
+		len--;
+	    }
+	  if (str[0] == txt->text_separator
+	      && str[len - 1] == txt->text_separator)
+	    {
+		/* cleaning the enclosing quotes */
+		str[len - 1] = '\0';
+		str = (char *) (*value + 1);
+		len -= 2;
+		if (len <= 0)
+		  {
+		      *type = VRTTXT_NULL;
+		      *value = NULL;
+		      return 1;
+		  }
+	    }
+	  utf8text = gaiaConvertToUTF8 (txt->toUtf8, str, len, &err);
+	  if (err)
+	    {
+		/* memory cleanup: Kashif Rasul 14 Jan 2010 */
+		if (utf8text)
+		    free (utf8text);
+		*type = VRTTXT_NULL;
+		*value = NULL;
+		return 0;
+	    }
+	  *value = utf8text;
+      }
+    return 1;
+}
+
+#endif /* ICONV enabled/disabled */
diff --git a/libspatialite/libspatialite-3.0.1/test/Makefile.am b/libspatialite/libspatialite-3.0.1/test/Makefile.am
new file mode 100644
index 0000000..95b1289
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/Makefile.am
@@ -0,0 +1,780 @@
+check_PROGRAMS = check_version \
+		check_init \
+		check_create \
+		check_dbf_load \
+		check_shp_load \
+		check_shp_load_3d \
+		shape_cp1252 \
+		shape_utf8_1 \
+		shape_utf8_2 \
+		shape_3d \
+		check_xls_load \
+		check_math_funcs \
+		check_gaia_util \
+		check_gaia_utf8 \
+		check_extension \
+		check_sql_stmt \
+		check_virtualtable1 \
+		check_virtualtable2 \
+		check_virtualtable3 \
+		check_virtualtable4 \
+		check_virtualtable5 \
+		check_virtualtable6 \
+		check_mbrcache \
+		check_spatialindex
+
+AM_CFLAGS = -I at srcdir@/../src/headers
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+
+TESTS = $(check_PROGRAMS)
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+
+EXTRA_DIST = shapetest1.dbf \
+	shapetest1.prj \
+	shapetest1.qpj \
+	shapetest1.shp \
+	shapetest1.shx \
+	shp/new-caledonia/buildings.dbf \
+	shp/new-caledonia/buildings.prj \
+	shp/new-caledonia/buildings.shp \
+	shp/new-caledonia/buildings.shx \
+	shp/new-caledonia/points.dbf \
+	shp/new-caledonia/points.prj \
+	shp/new-caledonia/points.shp \
+	shp/new-caledonia/points.shx \
+	shp/new-caledonia/railways.dbf \
+	shp/new-caledonia/railways.shp \
+	shp/new-caledonia/railways.shx \
+	shp/gaza/aeroway.dbf \
+	shp/gaza/aeroway.prj \
+	shp/gaza/aeroway.shp \
+	shp/gaza/aeroway.shx \
+	shp/gaza/barrier.dbf \
+	shp/gaza/barrier.prj \
+	shp/gaza/barrier.shp \
+	shp/gaza/barrier.shx \
+	shp/gaza/route.dbf \
+	shp/gaza/route.prj \
+	shp/gaza/route.shp \
+	shp/gaza/route.shx \
+	shp/taiwan/hystoric.dbf \
+	shp/taiwan/hystoric.prj \
+	shp/taiwan/hystoric.shp \
+	shp/taiwan/hystoric.shx \
+	shp/taiwan/leisure.dbf \
+	shp/taiwan/leisure.prj \
+	shp/taiwan/leisure.shp \
+	shp/taiwan/leisure.shx \
+	shp/taiwan/route.dbf \
+	shp/taiwan/route.prj \
+	shp/taiwan/route.shp \
+	shp/taiwan/route.shx \
+	shp/merano-3d/points.dbf \
+	shp/merano-3d/points.prj \
+	shp/merano-3d/points.shp \
+	shp/merano-3d/points.shx \
+	shp/merano-3d/polygons.dbf \
+	shp/merano-3d/polygons.prj \
+	shp/merano-3d/polygons.shp \
+	shp/merano-3d/polygons.shx \
+	shp/merano-3d/roads.dbf \
+	shp/merano-3d/roads.prj \
+	shp/merano-3d/roads.shp \
+	shp/merano-3d/roads.shx \
+	shp/foggia/local_councils.dbf \
+	shp/foggia/local_councils.prj \
+	shp/foggia/local_councils.shp \
+	shp/foggia/local_councils.shx \
+	testcase1.xls \
+	testcase1.csv \
+	sql_stmt_tests/trivial.sqlite_RO \
+	sql_stmt_tests/fdo-wkb.sqlite_RO \
+	sql_stmt_tests/testdb1.sqlite \
+	sql_stmt_tests/acos10.testcase \
+	sql_stmt_tests/acos20.testcase \
+	sql_stmt_tests/acos2.testcase \
+	sql_stmt_tests/acos.testcase \
+	sql_stmt_tests/acos-text.testcase \
+	sql_stmt_tests/asgeojson1.testcase\
+	sql_stmt_tests/asgeojson2.testcase\
+	sql_stmt_tests/asgeojson3.testcase\
+	sql_stmt_tests/asgeojson4.testcase\
+	sql_stmt_tests/asgeojson5.testcase\
+	sql_stmt_tests/asgeojson6.testcase\
+	sql_stmt_tests/asgeojson7.testcase\
+	sql_stmt_tests/asgml10.testcase\
+	sql_stmt_tests/asgml11.testcase\
+	sql_stmt_tests/asgml1.testcase\
+	sql_stmt_tests/asgml2.testcase\
+	sql_stmt_tests/asgml3.testcase\
+	sql_stmt_tests/asgml4.testcase\
+	sql_stmt_tests/asgml5.testcase\
+	sql_stmt_tests/asgml6.testcase\
+	sql_stmt_tests/asgml7.testcase\
+	sql_stmt_tests/asgml8.testcase\
+	sql_stmt_tests/asgml9.testcase\
+	sql_stmt_tests/asin10.testcase \
+	sql_stmt_tests/asin1.testcase \
+	sql_stmt_tests/asin20.testcase \
+	sql_stmt_tests/asin2.testcase \
+	sql_stmt_tests/asin-text.testcase \
+	sql_stmt_tests/askml1.testcase\
+	sql_stmt_tests/askml2.testcase\
+	sql_stmt_tests/askml3.testcase\
+	sql_stmt_tests/askml4.testcase\
+	sql_stmt_tests/askml5.testcase\
+	sql_stmt_tests/askml6.testcase\
+	sql_stmt_tests/askml7.testcase\
+	sql_stmt_tests/askml8.testcase\
+	sql_stmt_tests/askml9.testcase\
+	sql_stmt_tests/aswkt-text.testcase \
+	sql_stmt_tests/atan00.testcase \
+	sql_stmt_tests/atan0.testcase \
+	sql_stmt_tests/atan-text.testcase \
+	sql_stmt_tests/buffer1.testcase \
+	sql_stmt_tests/buffer2.testcase \
+	sql_stmt_tests/buffer3.testcase \
+	sql_stmt_tests/buffer4.testcase \
+	sql_stmt_tests/buffer5.testcase \
+	sql_stmt_tests/buffer6.testcase \
+	sql_stmt_tests/buffer7.testcase \
+	sql_stmt_tests/ceilfloat2.testcase \
+	sql_stmt_tests/ceilfloat.testcase \
+	sql_stmt_tests/ceil-int.testcase \
+	sql_stmt_tests/ceilnull.testcase \
+	sql_stmt_tests/checkspatialmetadata1.testcase\
+	sql_stmt_tests/checkspatialmetadata2.testcase\
+	sql_stmt_tests/checkspatialmetadata3.testcase\
+	sql_stmt_tests/ch_m.testcase \
+	sql_stmt_tests/closestpoint10.testcase \
+	sql_stmt_tests/closestpoint11.testcase \
+	sql_stmt_tests/closestpoint12.testcase \
+	sql_stmt_tests/closestpoint13.testcase \
+	sql_stmt_tests/closestpoint14.testcase \
+	sql_stmt_tests/closestpoint15.testcase\
+	sql_stmt_tests/closestpoint16.testcase\
+	sql_stmt_tests/closestpoint1.testcase \
+	sql_stmt_tests/closestpoint2.testcase \
+	sql_stmt_tests/closestpoint3.testcase \
+	sql_stmt_tests/closestpoint4.testcase \
+	sql_stmt_tests/closestpoint5.testcase \
+	sql_stmt_tests/closestpoint6.testcase \
+	sql_stmt_tests/closestpoint7.testcase \
+	sql_stmt_tests/closestpoint8.testcase \
+	sql_stmt_tests/closestpoint9.testcase \
+	sql_stmt_tests/cm_m.testcase \
+	sql_stmt_tests/collectextract1.testcase \
+	sql_stmt_tests/collectextract2.testcase \
+	sql_stmt_tests/collectextract3.testcase \
+	sql_stmt_tests/collectextract4.testcase \
+	sql_stmt_tests/collectextract5.testcase \
+	sql_stmt_tests/collectextract6.testcase \
+	sql_stmt_tests/collectextract7.testcase \
+	sql_stmt_tests/collectextract8.testcase \
+	sql_stmt_tests/collectextract9.testcase \
+	sql_stmt_tests/cos00.testcase \
+	sql_stmt_tests/cos0.testcase \
+	sql_stmt_tests/cos-text.testcase \
+	sql_stmt_tests/cot00.testcase \
+	sql_stmt_tests/cot0.testcase \
+	sql_stmt_tests/cotpi2.testcase \
+	sql_stmt_tests/cot-text.testcase \
+	sql_stmt_tests/createtopo10.testcase \
+	sql_stmt_tests/createtopo11.testcase \
+	sql_stmt_tests/createtopo12.testcase \
+	sql_stmt_tests/createtopo13.testcase \
+	sql_stmt_tests/createtopo14.testcase \
+	sql_stmt_tests/createtopo15.testcase \
+	sql_stmt_tests/createtopo16.testcase \
+	sql_stmt_tests/createtopo17.testcase \
+	sql_stmt_tests/createtopo18.testcase \
+	sql_stmt_tests/createtopo1.testcase \
+	sql_stmt_tests/createtopo2.testcase \
+	sql_stmt_tests/createtopo3.testcase \
+	sql_stmt_tests/createtopo4.testcase \
+	sql_stmt_tests/createtopo5.testcase \
+	sql_stmt_tests/createtopo6.testcase \
+	sql_stmt_tests/createtopo7.testcase \
+	sql_stmt_tests/createtopo8.testcase \
+	sql_stmt_tests/createtopo9.testcase \
+	sql_stmt_tests/degrees45.testcase \
+	sql_stmt_tests/degrees.testcase \
+	sql_stmt_tests/degreestext.testcase \
+	sql_stmt_tests/dimension1.testcase \
+	sql_stmt_tests/dimension2.testcase \
+	sql_stmt_tests/dimension3.testcase \
+	sql_stmt_tests/dimension4.testcase \
+	sql_stmt_tests/dimension5.testcase \
+	sql_stmt_tests/dimension6.testcase \
+	sql_stmt_tests/dimension7.testcase \
+	sql_stmt_tests/dimension8.testcase \
+	sql_stmt_tests/dm_m.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/exp00.testcase \
+	sql_stmt_tests/exp0.testcase \
+	sql_stmt_tests/exp10.testcase \
+	sql_stmt_tests/exp1.testcase \
+	sql_stmt_tests/expneg.testcase \
+	sql_stmt_tests/exptext.testcase \
+	sql_stmt_tests/fath_m.testcase \
+	sql_stmt_tests/fdo_ogr1.testcase\
+	sql_stmt_tests/fdo_ogr2.testcase\
+	sql_stmt_tests/fdo-wkb.sqlite_RO\
+	sql_stmt_tests/floor32.testcase \
+	sql_stmt_tests/floorint.testcase \
+	sql_stmt_tests/floornull.testcase \
+	sql_stmt_tests/ft_m.testcase \
+	sql_stmt_tests/geomcollfromtext1.testcase \
+	sql_stmt_tests/geomcollfromtext2.testcase \
+	sql_stmt_tests/geomconstraints10.testcase\
+	sql_stmt_tests/geomconstraints11.testcase\
+	sql_stmt_tests/geomconstraints12.testcase\
+	sql_stmt_tests/geomconstraints13.testcase\
+	sql_stmt_tests/geomconstraints14.testcase\
+	sql_stmt_tests/geomconstraints1.testcase\
+	sql_stmt_tests/geomconstraints2.testcase\
+	sql_stmt_tests/geomconstraints3.testcase\
+	sql_stmt_tests/geomconstraints4.testcase\
+	sql_stmt_tests/geomconstraints5.testcase\
+	sql_stmt_tests/geomconstraints6.testcase\
+	sql_stmt_tests/geomconstraints7.testcase\
+	sql_stmt_tests/geomconstraints8.testcase\
+	sql_stmt_tests/geomconstraints9.testcase\
+	sql_stmt_tests/geometryn1.testcase \
+	sql_stmt_tests/geometryn2.testcase \
+	sql_stmt_tests/geometryn3.testcase \
+	sql_stmt_tests/geometryn4.testcase \
+	sql_stmt_tests/geometryn5.testcase \
+	sql_stmt_tests/geometryn6.testcase \
+	sql_stmt_tests/geometryn.testcase \
+	sql_stmt_tests/geomfromtext1.testcase \
+	sql_stmt_tests/geomfromtext2.testcase \
+	sql_stmt_tests/geomfromtext3.testcase \
+	sql_stmt_tests/geomfromtext4.testcase \
+	sql_stmt_tests/geomfromtext5.testcase \
+	sql_stmt_tests/geomfromtext6.testcase \
+	sql_stmt_tests/geomfromtext7.testcase \
+	sql_stmt_tests/geomfromtext8.testcase \
+	sql_stmt_tests/geomfromtext9.testcase \
+	sql_stmt_tests/geomtype10.testcase \
+	sql_stmt_tests/geomtype11.testcase \
+	sql_stmt_tests/geomtype12.testcase \
+	sql_stmt_tests/geomtype13.testcase \
+	sql_stmt_tests/geomtype14.testcase \
+	sql_stmt_tests/geomtype15.testcase \
+	sql_stmt_tests/geomtype16.testcase \
+	sql_stmt_tests/geomtype17.testcase \
+	sql_stmt_tests/geomtype18.testcase \
+	sql_stmt_tests/geomtype19.testcase \
+	sql_stmt_tests/geomtype1.testcase \
+	sql_stmt_tests/geomtype20.testcase \
+	sql_stmt_tests/geomtype21.testcase \
+	sql_stmt_tests/geomtype22.testcase \
+	sql_stmt_tests/geomtype23.testcase \
+	sql_stmt_tests/geomtype24.testcase \
+	sql_stmt_tests/geomtype25.testcase \
+	sql_stmt_tests/geomtype26.testcase \
+	sql_stmt_tests/geomtype27.testcase \
+	sql_stmt_tests/geomtype28.testcase \
+	sql_stmt_tests/geomtype29.testcase \
+	sql_stmt_tests/geomtype2.testcase \
+	sql_stmt_tests/geomtype30.testcase \
+	sql_stmt_tests/geomtype31.testcase \
+	sql_stmt_tests/geomtype32.testcase \
+	sql_stmt_tests/geomtype33.testcase \
+	sql_stmt_tests/geomtype34.testcase \
+	sql_stmt_tests/geomtype35.testcase \
+	sql_stmt_tests/geomtype36.testcase \
+	sql_stmt_tests/geomtype37.testcase \
+	sql_stmt_tests/geomtype38.testcase \
+	sql_stmt_tests/geomtype39.testcase \
+	sql_stmt_tests/geomtype3.testcase \
+	sql_stmt_tests/geomtype40.testcase \
+	sql_stmt_tests/geomtype41.testcase \
+	sql_stmt_tests/geomtype42.testcase \
+	sql_stmt_tests/geomtype43.testcase \
+	sql_stmt_tests/geomtype44.testcase \
+	sql_stmt_tests/geomtype45.testcase \
+	sql_stmt_tests/geomtype46.testcase \
+	sql_stmt_tests/geomtype47.testcase \
+	sql_stmt_tests/geomtype48.testcase \
+	sql_stmt_tests/geomtype49.testcase \
+	sql_stmt_tests/geomtype4.testcase \
+	sql_stmt_tests/geomtype50.testcase \
+	sql_stmt_tests/geomtype51.testcase \
+	sql_stmt_tests/geomtype52.testcase \
+	sql_stmt_tests/geomtype53.testcase \
+	sql_stmt_tests/geomtype54.testcase \
+	sql_stmt_tests/geomtype55.testcase \
+	sql_stmt_tests/geomtype56.testcase \
+	sql_stmt_tests/geomtype57.testcase \
+	sql_stmt_tests/geomtype58.testcase \
+	sql_stmt_tests/geomtype59.testcase \
+	sql_stmt_tests/geomtype5.testcase \
+	sql_stmt_tests/geomtype60.testcase \
+	sql_stmt_tests/geomtype61.testcase \
+	sql_stmt_tests/geomtype62.testcase \
+	sql_stmt_tests/geomtype63.testcase \
+	sql_stmt_tests/geomtype64.testcase \
+	sql_stmt_tests/geomtype65.testcase \
+	sql_stmt_tests/geomtype66.testcase \
+	sql_stmt_tests/geomtype67.testcase \
+	sql_stmt_tests/geomtype68.testcase \
+	sql_stmt_tests/geomtype69.testcase \
+	sql_stmt_tests/geomtype6.testcase \
+	sql_stmt_tests/geomtype7.testcase \
+	sql_stmt_tests/geomtype8.testcase \
+	sql_stmt_tests/geomtype9.testcase \
+	sql_stmt_tests/greatcircle-badblob.testcase \
+	sql_stmt_tests/greatcircle-poly2.testcase \
+	sql_stmt_tests/greatcircle-poly.testcase \
+	sql_stmt_tests/greatcircle.testcase \
+	sql_stmt_tests/greatcircle-text.testcase \
+	sql_stmt_tests/ind_ch_m.testcase \
+	sql_stmt_tests/ind_ft_m.testcase \
+	sql_stmt_tests/ind_yd_m.testcase \
+	sql_stmt_tests/in_m.testcase \
+	sql_stmt_tests/isclosed1.testcase \
+	sql_stmt_tests/isclosed2.testcase \
+	sql_stmt_tests/isclosed3.testcase \
+	sql_stmt_tests/isclosed4.testcase \
+	sql_stmt_tests/isclosed5.testcase \
+	sql_stmt_tests/isring1.testcase \
+	sql_stmt_tests/isring2.testcase \
+	sql_stmt_tests/isring3.testcase \
+	sql_stmt_tests/isring4.testcase \
+	sql_stmt_tests/issimple1.testcase \
+	sql_stmt_tests/issimple2.testcase \
+	sql_stmt_tests/issimple3.testcase \
+	sql_stmt_tests/issimple4.testcase \
+	sql_stmt_tests/issimple5.testcase \
+	sql_stmt_tests/isvalid1.testcase \
+	sql_stmt_tests/isvalid2.testcase \
+	sql_stmt_tests/isvalid3.testcase \
+	sql_stmt_tests/isvalid4.testcase \
+	sql_stmt_tests/isvalid5.testcase \
+	sql_stmt_tests/isvalid6.testcase \
+	sql_stmt_tests/km_m.testcase \
+	sql_stmt_tests/linefromtext1.testcase \
+	sql_stmt_tests/linefromtext2.testcase \
+	sql_stmt_tests/linemerge10.testcase\
+	sql_stmt_tests/linemerge1.testcase\
+	sql_stmt_tests/linemerge2.testcase\
+	sql_stmt_tests/linemerge3.testcase\
+	sql_stmt_tests/linemerge4.testcase\
+	sql_stmt_tests/linemerge5.testcase\
+	sql_stmt_tests/linemerge6.testcase\
+	sql_stmt_tests/linemerge7.testcase\
+	sql_stmt_tests/linemerge8.testcase\
+	sql_stmt_tests/linemerge9.testcase\
+	sql_stmt_tests/linesfromrings1.testcase \
+	sql_stmt_tests/linesfromrings2.testcase \
+	sql_stmt_tests/linesfromrings3.testcase \
+	sql_stmt_tests/linesfromrings4.testcase \
+	sql_stmt_tests/linesfromrings5.testcase \
+	sql_stmt_tests/linesfromrings6.testcase \
+	sql_stmt_tests/linesfromrings7.testcase \
+	sql_stmt_tests/linesubstring10.testcase\
+	sql_stmt_tests/linesubstring11.testcase\
+	sql_stmt_tests/linesubstring12.testcase\
+	sql_stmt_tests/linesubstring13.testcase\
+	sql_stmt_tests/linesubstring14.testcase\
+	sql_stmt_tests/linesubstring15.testcase\
+	sql_stmt_tests/linesubstring16.testcase\
+	sql_stmt_tests/linesubstring17.testcase\
+	sql_stmt_tests/linesubstring18.testcase \
+	sql_stmt_tests/linesubstring19.testcase\
+	sql_stmt_tests/linesubstring1.testcase\
+	sql_stmt_tests/linesubstring20.testcase\
+	sql_stmt_tests/linesubstring21.testcase\
+	sql_stmt_tests/linesubstring22.testcase\
+	sql_stmt_tests/linesubstring23.testcase\
+	sql_stmt_tests/linesubstring24.testcase\
+	sql_stmt_tests/linesubstring25.testcase\
+	sql_stmt_tests/linesubstring2.testcase\
+	sql_stmt_tests/linesubstring3.testcase\
+	sql_stmt_tests/linesubstring4.testcase\
+	sql_stmt_tests/linesubstring5.testcase\
+	sql_stmt_tests/linesubstring6.testcase\
+	sql_stmt_tests/linesubstring7.testcase\
+	sql_stmt_tests/linesubstring8.testcase\
+	sql_stmt_tests/linesubstring9.testcase\
+	sql_stmt_tests/link_m.testcase \
+	sql_stmt_tests/log10-0.0.testcase \
+	sql_stmt_tests/log10-100.0.testcase \
+	sql_stmt_tests/log10-100.testcase \
+	sql_stmt_tests/log10-text.testcase \
+	sql_stmt_tests/log2-0.0.testcase \
+	sql_stmt_tests/log2-0.testcase \
+	sql_stmt_tests/log2-4.0.testcase \
+	sql_stmt_tests/log2-4.testcase \
+	sql_stmt_tests/log2-text.testcase \
+	sql_stmt_tests/logn00.testcase \
+	sql_stmt_tests/logn0.testcase \
+	sql_stmt_tests/logn10.testcase \
+	sql_stmt_tests/logn1.testcase \
+	sql_stmt_tests/logn2-01.testcase \
+	sql_stmt_tests/logn2-02.testcase \
+	sql_stmt_tests/logn2-2.2.testcase \
+	sql_stmt_tests/logn2-4.2int.testcase \
+	sql_stmt_tests/logn2-4.2.testcase \
+	sql_stmt_tests/logn2-text2.testcase \
+	sql_stmt_tests/logn2-text3.testcase \
+	sql_stmt_tests/logn2-text4.testcase \
+	sql_stmt_tests/logn2-text.testcase \
+	sql_stmt_tests/logn-text.testcase \
+	sql_stmt_tests/makeline10.testcase \
+	sql_stmt_tests/makeline11.testcase \
+	sql_stmt_tests/makeline12.testcase \
+	sql_stmt_tests/makeline13.testcase \
+	sql_stmt_tests/makeline14.testcase \
+	sql_stmt_tests/makeline15.testcase \
+	sql_stmt_tests/makeline16.testcase \
+	sql_stmt_tests/makeline17.testcase \
+	sql_stmt_tests/makeline18.testcase \
+	sql_stmt_tests/makeline2.testcase \
+	sql_stmt_tests/makeline3.testcase \
+	sql_stmt_tests/makeline4.testcase \
+	sql_stmt_tests/makeline5.testcase \
+	sql_stmt_tests/makeline6.testcase \
+	sql_stmt_tests/makeline7.testcase \
+	sql_stmt_tests/makeline8.testcase \
+	sql_stmt_tests/makeline9.testcase \
+	sql_stmt_tests/makeline.testcase \
+	sql_stmt_tests/makepoint1.testcase \
+	sql_stmt_tests/makepoint2.testcase \
+	sql_stmt_tests/makepoint3.testcase \
+	sql_stmt_tests/makepoint4.testcase \
+	sql_stmt_tests/makepoint5.testcase \
+	sql_stmt_tests/makepoint6.testcase \
+	sql_stmt_tests/makepoint7.testcase \
+	sql_stmt_tests/makepoint-null1.testcase \
+	sql_stmt_tests/makepoint-null2.testcase \
+	sql_stmt_tests/makepoint-null3.testcase \
+	sql_stmt_tests/makepoint-null4.testcase \
+	sql_stmt_tests/makepoint-null5.testcase \
+	sql_stmt_tests/makepoint-null6.testcase \
+	sql_stmt_tests/makepoint-null7.testcase \
+	sql_stmt_tests/mbr10.testcase \
+	sql_stmt_tests/mbr11.testcase \
+	sql_stmt_tests/mbr12.testcase \
+	sql_stmt_tests/mbr13.testcase \
+	sql_stmt_tests/mbr14.testcase \
+	sql_stmt_tests/mbr15.testcase \
+	sql_stmt_tests/mbr16.testcase \
+	sql_stmt_tests/mbr17.testcase \
+	sql_stmt_tests/mbr18.testcase \
+	sql_stmt_tests/mbr19.testcase \
+	sql_stmt_tests/mbr1.testcase \
+	sql_stmt_tests/mbr20.testcase \
+	sql_stmt_tests/mbr21.testcase \
+	sql_stmt_tests/mbr22.testcase \
+	sql_stmt_tests/mbr23.testcase \
+	sql_stmt_tests/mbr24.testcase \
+	sql_stmt_tests/mbr25.testcase \
+	sql_stmt_tests/mbr26.testcase \
+	sql_stmt_tests/mbr27.testcase \
+	sql_stmt_tests/mbr28.testcase \
+	sql_stmt_tests/mbr29.testcase \
+	sql_stmt_tests/mbr2.testcase \
+	sql_stmt_tests/mbr30.testcase \
+	sql_stmt_tests/mbr31.testcase \
+	sql_stmt_tests/mbr32.testcase \
+	sql_stmt_tests/mbr3.testcase \
+	sql_stmt_tests/mbr4.testcase \
+	sql_stmt_tests/mbr5.testcase \
+	sql_stmt_tests/mbr6.testcase \
+	sql_stmt_tests/mbr7.testcase \
+	sql_stmt_tests/mbr8.testcase \
+	sql_stmt_tests/mbr9.testcase \
+	sql_stmt_tests/m_ch.testcase \
+	sql_stmt_tests/m_cm.testcase \
+	sql_stmt_tests/m_dm.testcase \
+	sql_stmt_tests/m_fath.testcase \
+	sql_stmt_tests/m_ft.testcase \
+	sql_stmt_tests/m_ft-text.testcase \
+	sql_stmt_tests/mi_m.testcase \
+	sql_stmt_tests/m_ind_ch.testcase \
+	sql_stmt_tests/m_ind_ft.testcase \
+	sql_stmt_tests/m_ind_yd.testcase \
+	sql_stmt_tests/m_in.testcase \
+	sql_stmt_tests/m_in_us.testcase \
+	sql_stmt_tests/m_km.testcase \
+	sql_stmt_tests/mlinefromtext1.testcase \
+	sql_stmt_tests/mlinefromtext2.testcase \
+	sql_stmt_tests/m_ln.testcase \
+	sql_stmt_tests/m_mi.testcase \
+	sql_stmt_tests/m_mm.testcase \
+	sql_stmt_tests/mm_m.testcase \
+	sql_stmt_tests/m_nm.testcase \
+	sql_stmt_tests/mpointfromtext1.testcase \
+	sql_stmt_tests/mpointfromtext2.testcase \
+	sql_stmt_tests/mpolygonfromtext1.testcase \
+	sql_stmt_tests/mpolygonfromtext2.testcase \
+	sql_stmt_tests/m_us_ch.testcase \
+	sql_stmt_tests/m_us_ft.testcase \
+	sql_stmt_tests/m_usmi.testcase \
+	sql_stmt_tests/m_yd.testcase \
+	sql_stmt_tests/m_yd_us.testcase \
+	sql_stmt_tests/nm_m.testcase \
+	sql_stmt_tests/NumPoints2.testcase \
+	sql_stmt_tests/NumPoints3.testcase \
+	sql_stmt_tests/NumPoints4.testcase \
+	sql_stmt_tests/NumPoints5.testcase \
+	sql_stmt_tests/NumPoints6.testcase \
+	sql_stmt_tests/NumPoints7.testcase \
+	sql_stmt_tests/NumPoints.testcase \
+	sql_stmt_tests/output1.testcase \
+	sql_stmt_tests/output2.testcase \
+	sql_stmt_tests/output3.testcase \
+	sql_stmt_tests/output4.testcase \
+	sql_stmt_tests/output5.testcase \
+	sql_stmt_tests/output6.testcase \
+	sql_stmt_tests/output7.testcase \
+	sql_stmt_tests/pi.testcase \
+	sql_stmt_tests/pointfromtext1.testcase \
+	sql_stmt_tests/pointfromtext2.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/polygonfromtext1.testcase \
+	sql_stmt_tests/polygonfromtext2.testcase \
+	sql_stmt_tests/polygonize1.testcase \
+	sql_stmt_tests/polygonize2.testcase \
+	sql_stmt_tests/polygonize3.testcase \
+	sql_stmt_tests/polygonize4.testcase \
+	sql_stmt_tests/pow00-1.testcase \
+	sql_stmt_tests/pow00-2.testcase \
+	sql_stmt_tests/pow00double.testcase \
+	sql_stmt_tests/pow00.testcase \
+	sql_stmt_tests/pow-badarg1.testcase \
+	sql_stmt_tests/pow-badarg2.testcase \
+	sql_stmt_tests/pow-edom.testcase \
+	sql_stmt_tests/pow-fp.testcase \
+	sql_stmt_tests/rad0.testcase \
+	sql_stmt_tests/radpi.testcase \
+	sql_stmt_tests/rad-text.testcase \
+	sql_stmt_tests/reflectcoords1.testcase \
+	sql_stmt_tests/reflectcoords2.testcase \
+	sql_stmt_tests/reflectcoords3.testcase \
+	sql_stmt_tests/reflectcoords4.testcase \
+	sql_stmt_tests/reflectcoords5.testcase \
+	sql_stmt_tests/reflectcoords6.testcase \
+	sql_stmt_tests/reflectcoords7.testcase \
+	sql_stmt_tests/reflectcoords8.testcase \
+	sql_stmt_tests/relations1.testcase \
+	sql_stmt_tests/relations2.testcase \
+	sql_stmt_tests/relations3.testcase \
+	sql_stmt_tests/relations4.testcase \
+	sql_stmt_tests/relations5.testcase \
+	sql_stmt_tests/relations6.testcase \
+	sql_stmt_tests/ring10.testcase \
+	sql_stmt_tests/ring11.testcase \
+	sql_stmt_tests/ring12.testcase \
+	sql_stmt_tests/ring13.testcase \
+	sql_stmt_tests/ring14.testcase \
+	sql_stmt_tests/ring15.testcase \
+	sql_stmt_tests/ring16.testcase \
+	sql_stmt_tests/ring17.testcase \
+	sql_stmt_tests/ring18.testcase \
+	sql_stmt_tests/ring19.testcase \
+	sql_stmt_tests/ring1.testcase \
+	sql_stmt_tests/ring20.testcase \
+	sql_stmt_tests/ring21.testcase \
+	sql_stmt_tests/ring22.testcase \
+	sql_stmt_tests/ring23.testcase \
+	sql_stmt_tests/ring24.testcase \
+	sql_stmt_tests/ring25.testcase \
+	sql_stmt_tests/ring26.testcase \
+	sql_stmt_tests/ring27.testcase \
+	sql_stmt_tests/ring2.testcase \
+	sql_stmt_tests/ring3.testcase \
+	sql_stmt_tests/ring4.testcase \
+	sql_stmt_tests/ring5.testcase \
+	sql_stmt_tests/ring6.testcase \
+	sql_stmt_tests/ring7.testcase \
+	sql_stmt_tests/ring8.testcase \
+	sql_stmt_tests/ring9.testcase \
+	sql_stmt_tests/rotatecoords10.testcase \
+	sql_stmt_tests/rotatecoords11.testcase \
+	sql_stmt_tests/rotatecoords12.testcase \
+	sql_stmt_tests/rotatecoords13.testcase \
+	sql_stmt_tests/rotatecoords14.testcase \
+	sql_stmt_tests/rotatecoords1.testcase \
+	sql_stmt_tests/rotatecoords2.testcase \
+	sql_stmt_tests/rotatecoords3.testcase \
+	sql_stmt_tests/rotatecoords4.testcase \
+	sql_stmt_tests/rotatecoords5.testcase \
+	sql_stmt_tests/rotatecoords6.testcase \
+	sql_stmt_tests/rotatecoords7.testcase \
+	sql_stmt_tests/rotatecoords8.testcase \
+	sql_stmt_tests/rotatecoords9.testcase \
+	sql_stmt_tests/round0.testcase \
+	sql_stmt_tests/round-29.testcase \
+	sql_stmt_tests/round29.testcase \
+	sql_stmt_tests/round30.testcase \
+	sql_stmt_tests/round-31.testcase \
+	sql_stmt_tests/round31.testcase \
+	sql_stmt_tests/round3.testcase \
+	sql_stmt_tests/round-text.testcase \
+	sql_stmt_tests/scalecoords10.testcase \
+	sql_stmt_tests/scalecoords11.testcase \
+	sql_stmt_tests/scalecoords12.testcase \
+	sql_stmt_tests/scalecoords13.testcase \
+	sql_stmt_tests/scalecoords1.testcase \
+	sql_stmt_tests/scalecoords2.testcase \
+	sql_stmt_tests/scalecoords3.testcase \
+	sql_stmt_tests/scalecoords4.testcase \
+	sql_stmt_tests/scalecoords5.testcase \
+	sql_stmt_tests/scalecoords6.testcase \
+	sql_stmt_tests/scalecoords7.testcase \
+	sql_stmt_tests/scalecoords8.testcase \
+	sql_stmt_tests/scalecoords9.testcase \
+	sql_stmt_tests/shiftcoords1.testcase \
+	sql_stmt_tests/shiftcoords2.testcase \
+	sql_stmt_tests/shiftcoords3.testcase \
+	sql_stmt_tests/shiftcoords4.testcase \
+	sql_stmt_tests/shiftcoords5.testcase \
+	sql_stmt_tests/shiftcoords6.testcase \
+	sql_stmt_tests/shiftcoords7.testcase \
+	sql_stmt_tests/sign00.testcase \
+	sql_stmt_tests/sign01.testcase \
+	sql_stmt_tests/sign0.testcase \
+	sql_stmt_tests/sign10.testcase \
+	sql_stmt_tests/signeg2int.testcase \
+	sql_stmt_tests/signeg2.testcase \
+	sql_stmt_tests/signeg.testcase \
+	sql_stmt_tests/signtext.testcase \
+	sql_stmt_tests/sin00.testcase \
+	sql_stmt_tests/sin0.testcase \
+	sql_stmt_tests/singlesidedbuffer11.testcase\
+	sql_stmt_tests/singlesidedbuffer12.testcase\
+	sql_stmt_tests/singlesidedbuffer13.testcase\
+	sql_stmt_tests/singlesidedbuffer14.testcase\
+	sql_stmt_tests/singlesidedbuffer1.testcase\
+	sql_stmt_tests/singlesidedbuffer2.testcase\
+	sql_stmt_tests/singlesidedbuffer3.testcase\
+	sql_stmt_tests/singlesidedbuffer4.testcase\
+	sql_stmt_tests/singlesidedbuffer5.testcase\
+	sql_stmt_tests/singlesidedbuffer6.testcase\
+	sql_stmt_tests/singlesidedbuffer7.testcase\
+	sql_stmt_tests/singlesidedbuffer8.testcase\
+	sql_stmt_tests/singlesidedbuffer9.testcase\
+	sql_stmt_tests/sin-pi2.testcase \
+	sql_stmt_tests/sinpi2.testcase \
+	sql_stmt_tests/sin-pi.testcase \
+	sql_stmt_tests/sinpi.testcase \
+	sql_stmt_tests/sin-text.testcase \
+	sql_stmt_tests/sqrt00.testcase \
+	sql_stmt_tests/sqrt0.testcase \
+	sql_stmt_tests/sqrt-10.testcase \
+	sql_stmt_tests/sqrt-1.testcase \
+	sql_stmt_tests/sqrt-640.testcase \
+	sql_stmt_tests/sqrt-64.testcase \
+	sql_stmt_tests/sqrt-text.testcase \
+	sql_stmt_tests/st_area1.testcase \
+	sql_stmt_tests/st_area2.testcase \
+	sql_stmt_tests/st_area3.testcase \
+	sql_stmt_tests/st_area4.testcase \
+	sql_stmt_tests/st_area5.testcase \
+	sql_stmt_tests/st_area6.testcase \
+	sql_stmt_tests/st_area7.testcase \
+	sql_stmt_tests/st_area8.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/stddev.testcase\
+	sql_stmt_tests/st_length1.testcase \
+	sql_stmt_tests/st_length2.testcase \
+	sql_stmt_tests/st_length3.testcase \
+	sql_stmt_tests/st_length4.testcase \
+	sql_stmt_tests/st_length5.testcase \
+	sql_stmt_tests/st_length6.testcase \
+	sql_stmt_tests/st_length7.testcase \
+	sql_stmt_tests/st_m1.testcase \
+	sql_stmt_tests/st_m2.testcase \
+	sql_stmt_tests/st_m3.testcase \
+	sql_stmt_tests/st_m4.testcase \
+	sql_stmt_tests/st_m5.testcase \
+	sql_stmt_tests/st_m6.testcase \
+	sql_stmt_tests/st_x1.testcase \
+	sql_stmt_tests/st_x2.testcase \
+	sql_stmt_tests/st_x3.testcase \
+	sql_stmt_tests/st_x4.testcase \
+	sql_stmt_tests/st_x5.testcase \
+	sql_stmt_tests/st_x6.testcase \
+	sql_stmt_tests/st_y1.testcase \
+	sql_stmt_tests/st_y2.testcase \
+	sql_stmt_tests/st_y3.testcase \
+	sql_stmt_tests/st_y4.testcase \
+	sql_stmt_tests/st_y5.testcase \
+	sql_stmt_tests/st_z1.testcase \
+	sql_stmt_tests/st_z2.testcase \
+	sql_stmt_tests/st_z3.testcase \
+	sql_stmt_tests/st_z4.testcase \
+	sql_stmt_tests/st_z5.testcase \
+	sql_stmt_tests/st_z6.testcase \
+	sql_stmt_tests/swapcoords1.testcase \
+	sql_stmt_tests/swapcoords2.testcase \
+	sql_stmt_tests/swapcoords3.testcase \
+	sql_stmt_tests/swapcoords4.testcase \
+	sql_stmt_tests/tan00.testcase \
+	sql_stmt_tests/tan0.testcase \
+	sql_stmt_tests/tanpi4.testcase \
+	sql_stmt_tests/tan-pi.testcase \
+	sql_stmt_tests/tanpi.testcase \
+	sql_stmt_tests/tan-text.testcase \
+	sql_stmt_tests/testdb1.sqlite\
+	sql_stmt_tests/trivial.sqlite_RO\
+	sql_stmt_tests/unaryunion1.testcase\
+	sql_stmt_tests/unaryunion2.testcase\
+	sql_stmt_tests/unaryunion3.testcase\
+	sql_stmt_tests/unaryunion4.testcase\
+	sql_stmt_tests/unaryunion5.testcase\
+	sql_stmt_tests/unaryunion6.testcase\
+	sql_stmt_tests/unaryunion7.testcase\
+	sql_stmt_tests/unaryunion8.testcase\
+	sql_stmt_tests/us_ch_m.testcase \
+	sql_stmt_tests/us_ft_m.testcase \
+	sql_stmt_tests/us_in_m.testcase \
+	sql_stmt_tests/us_mi_m.testcase \
+	sql_stmt_tests/us_yd_m.testcase \
+	sql_stmt_tests/variance.testcase\
+	sql_stmt_tests/yd_m.testcase
+
+
+
+
+
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/Makefile.in b/libspatialite/libspatialite-3.0.1/test/Makefile.in
new file mode 100644
index 0000000..4775c23
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/Makefile.in
@@ -0,0 +1,1507 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = check_version$(EXEEXT) check_init$(EXEEXT) \
+	check_create$(EXEEXT) check_dbf_load$(EXEEXT) \
+	check_shp_load$(EXEEXT) check_shp_load_3d$(EXEEXT) \
+	shape_cp1252$(EXEEXT) shape_utf8_1$(EXEEXT) \
+	shape_utf8_2$(EXEEXT) shape_3d$(EXEEXT) \
+	check_xls_load$(EXEEXT) check_math_funcs$(EXEEXT) \
+	check_gaia_util$(EXEEXT) check_gaia_utf8$(EXEEXT) \
+	check_extension$(EXEEXT) check_sql_stmt$(EXEEXT) \
+	check_virtualtable1$(EXEEXT) check_virtualtable2$(EXEEXT) \
+	check_virtualtable3$(EXEEXT) check_virtualtable4$(EXEEXT) \
+	check_virtualtable5$(EXEEXT) check_virtualtable6$(EXEEXT) \
+	check_mbrcache$(EXEEXT) check_spatialindex$(EXEEXT)
+subdir = test
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+check_create_SOURCES = check_create.c
+check_create_OBJECTS = check_create.$(OBJEXT)
+check_create_LDADD = $(LDADD)
+check_dbf_load_SOURCES = check_dbf_load.c
+check_dbf_load_OBJECTS = check_dbf_load.$(OBJEXT)
+check_dbf_load_LDADD = $(LDADD)
+check_extension_SOURCES = check_extension.c
+check_extension_OBJECTS = check_extension.$(OBJEXT)
+check_extension_LDADD = $(LDADD)
+check_gaia_utf8_SOURCES = check_gaia_utf8.c
+check_gaia_utf8_OBJECTS = check_gaia_utf8.$(OBJEXT)
+check_gaia_utf8_LDADD = $(LDADD)
+check_gaia_util_SOURCES = check_gaia_util.c
+check_gaia_util_OBJECTS = check_gaia_util.$(OBJEXT)
+check_gaia_util_LDADD = $(LDADD)
+check_init_SOURCES = check_init.c
+check_init_OBJECTS = check_init.$(OBJEXT)
+check_init_LDADD = $(LDADD)
+check_math_funcs_SOURCES = check_math_funcs.c
+check_math_funcs_OBJECTS = check_math_funcs.$(OBJEXT)
+check_math_funcs_LDADD = $(LDADD)
+check_mbrcache_SOURCES = check_mbrcache.c
+check_mbrcache_OBJECTS = check_mbrcache.$(OBJEXT)
+check_mbrcache_LDADD = $(LDADD)
+check_shp_load_SOURCES = check_shp_load.c
+check_shp_load_OBJECTS = check_shp_load.$(OBJEXT)
+check_shp_load_LDADD = $(LDADD)
+check_shp_load_3d_SOURCES = check_shp_load_3d.c
+check_shp_load_3d_OBJECTS = check_shp_load_3d.$(OBJEXT)
+check_shp_load_3d_LDADD = $(LDADD)
+check_spatialindex_SOURCES = check_spatialindex.c
+check_spatialindex_OBJECTS = check_spatialindex.$(OBJEXT)
+check_spatialindex_LDADD = $(LDADD)
+check_sql_stmt_SOURCES = check_sql_stmt.c
+check_sql_stmt_OBJECTS = check_sql_stmt.$(OBJEXT)
+check_sql_stmt_LDADD = $(LDADD)
+check_version_SOURCES = check_version.c
+check_version_OBJECTS = check_version.$(OBJEXT)
+check_version_LDADD = $(LDADD)
+check_virtualtable1_SOURCES = check_virtualtable1.c
+check_virtualtable1_OBJECTS = check_virtualtable1.$(OBJEXT)
+check_virtualtable1_LDADD = $(LDADD)
+check_virtualtable2_SOURCES = check_virtualtable2.c
+check_virtualtable2_OBJECTS = check_virtualtable2.$(OBJEXT)
+check_virtualtable2_LDADD = $(LDADD)
+check_virtualtable3_SOURCES = check_virtualtable3.c
+check_virtualtable3_OBJECTS = check_virtualtable3.$(OBJEXT)
+check_virtualtable3_LDADD = $(LDADD)
+check_virtualtable4_SOURCES = check_virtualtable4.c
+check_virtualtable4_OBJECTS = check_virtualtable4.$(OBJEXT)
+check_virtualtable4_LDADD = $(LDADD)
+check_virtualtable5_SOURCES = check_virtualtable5.c
+check_virtualtable5_OBJECTS = check_virtualtable5.$(OBJEXT)
+check_virtualtable5_LDADD = $(LDADD)
+check_virtualtable6_SOURCES = check_virtualtable6.c
+check_virtualtable6_OBJECTS = check_virtualtable6.$(OBJEXT)
+check_virtualtable6_LDADD = $(LDADD)
+check_xls_load_SOURCES = check_xls_load.c
+check_xls_load_OBJECTS = check_xls_load.$(OBJEXT)
+check_xls_load_LDADD = $(LDADD)
+shape_3d_SOURCES = shape_3d.c
+shape_3d_OBJECTS = shape_3d.$(OBJEXT)
+shape_3d_LDADD = $(LDADD)
+shape_cp1252_SOURCES = shape_cp1252.c
+shape_cp1252_OBJECTS = shape_cp1252.$(OBJEXT)
+shape_cp1252_LDADD = $(LDADD)
+shape_utf8_1_SOURCES = shape_utf8_1.c
+shape_utf8_1_OBJECTS = shape_utf8_1.$(OBJEXT)
+shape_utf8_1_LDADD = $(LDADD)
+shape_utf8_2_SOURCES = shape_utf8_2.c
+shape_utf8_2_OBJECTS = shape_utf8_2.$(OBJEXT)
+shape_utf8_2_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = check_create.c check_dbf_load.c check_extension.c \
+	check_gaia_utf8.c check_gaia_util.c check_init.c \
+	check_math_funcs.c check_mbrcache.c check_shp_load.c \
+	check_shp_load_3d.c check_spatialindex.c check_sql_stmt.c \
+	check_version.c check_virtualtable1.c check_virtualtable2.c \
+	check_virtualtable3.c check_virtualtable4.c \
+	check_virtualtable5.c check_virtualtable6.c check_xls_load.c \
+	shape_3d.c shape_cp1252.c shape_utf8_1.c shape_utf8_2.c
+DIST_SOURCES = check_create.c check_dbf_load.c check_extension.c \
+	check_gaia_utf8.c check_gaia_util.c check_init.c \
+	check_math_funcs.c check_mbrcache.c check_shp_load.c \
+	check_shp_load_3d.c check_spatialindex.c check_sql_stmt.c \
+	check_version.c check_virtualtable1.c check_virtualtable2.c \
+	check_virtualtable3.c check_virtualtable4.c \
+	check_virtualtable5.c check_virtualtable6.c check_xls_load.c \
+	shape_3d.c shape_cp1252.c shape_utf8_1.c shape_utf8_2.c
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -I at srcdir@/../src/headers
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+TESTS = $(check_PROGRAMS)
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+EXTRA_DIST = shapetest1.dbf \
+	shapetest1.prj \
+	shapetest1.qpj \
+	shapetest1.shp \
+	shapetest1.shx \
+	shp/new-caledonia/buildings.dbf \
+	shp/new-caledonia/buildings.prj \
+	shp/new-caledonia/buildings.shp \
+	shp/new-caledonia/buildings.shx \
+	shp/new-caledonia/points.dbf \
+	shp/new-caledonia/points.prj \
+	shp/new-caledonia/points.shp \
+	shp/new-caledonia/points.shx \
+	shp/new-caledonia/railways.dbf \
+	shp/new-caledonia/railways.shp \
+	shp/new-caledonia/railways.shx \
+	shp/gaza/aeroway.dbf \
+	shp/gaza/aeroway.prj \
+	shp/gaza/aeroway.shp \
+	shp/gaza/aeroway.shx \
+	shp/gaza/barrier.dbf \
+	shp/gaza/barrier.prj \
+	shp/gaza/barrier.shp \
+	shp/gaza/barrier.shx \
+	shp/gaza/route.dbf \
+	shp/gaza/route.prj \
+	shp/gaza/route.shp \
+	shp/gaza/route.shx \
+	shp/taiwan/hystoric.dbf \
+	shp/taiwan/hystoric.prj \
+	shp/taiwan/hystoric.shp \
+	shp/taiwan/hystoric.shx \
+	shp/taiwan/leisure.dbf \
+	shp/taiwan/leisure.prj \
+	shp/taiwan/leisure.shp \
+	shp/taiwan/leisure.shx \
+	shp/taiwan/route.dbf \
+	shp/taiwan/route.prj \
+	shp/taiwan/route.shp \
+	shp/taiwan/route.shx \
+	shp/merano-3d/points.dbf \
+	shp/merano-3d/points.prj \
+	shp/merano-3d/points.shp \
+	shp/merano-3d/points.shx \
+	shp/merano-3d/polygons.dbf \
+	shp/merano-3d/polygons.prj \
+	shp/merano-3d/polygons.shp \
+	shp/merano-3d/polygons.shx \
+	shp/merano-3d/roads.dbf \
+	shp/merano-3d/roads.prj \
+	shp/merano-3d/roads.shp \
+	shp/merano-3d/roads.shx \
+	shp/foggia/local_councils.dbf \
+	shp/foggia/local_councils.prj \
+	shp/foggia/local_councils.shp \
+	shp/foggia/local_councils.shx \
+	testcase1.xls \
+	testcase1.csv \
+	sql_stmt_tests/trivial.sqlite_RO \
+	sql_stmt_tests/fdo-wkb.sqlite_RO \
+	sql_stmt_tests/testdb1.sqlite \
+	sql_stmt_tests/acos10.testcase \
+	sql_stmt_tests/acos20.testcase \
+	sql_stmt_tests/acos2.testcase \
+	sql_stmt_tests/acos.testcase \
+	sql_stmt_tests/acos-text.testcase \
+	sql_stmt_tests/asgeojson1.testcase\
+	sql_stmt_tests/asgeojson2.testcase\
+	sql_stmt_tests/asgeojson3.testcase\
+	sql_stmt_tests/asgeojson4.testcase\
+	sql_stmt_tests/asgeojson5.testcase\
+	sql_stmt_tests/asgeojson6.testcase\
+	sql_stmt_tests/asgeojson7.testcase\
+	sql_stmt_tests/asgml10.testcase\
+	sql_stmt_tests/asgml11.testcase\
+	sql_stmt_tests/asgml1.testcase\
+	sql_stmt_tests/asgml2.testcase\
+	sql_stmt_tests/asgml3.testcase\
+	sql_stmt_tests/asgml4.testcase\
+	sql_stmt_tests/asgml5.testcase\
+	sql_stmt_tests/asgml6.testcase\
+	sql_stmt_tests/asgml7.testcase\
+	sql_stmt_tests/asgml8.testcase\
+	sql_stmt_tests/asgml9.testcase\
+	sql_stmt_tests/asin10.testcase \
+	sql_stmt_tests/asin1.testcase \
+	sql_stmt_tests/asin20.testcase \
+	sql_stmt_tests/asin2.testcase \
+	sql_stmt_tests/asin-text.testcase \
+	sql_stmt_tests/askml1.testcase\
+	sql_stmt_tests/askml2.testcase\
+	sql_stmt_tests/askml3.testcase\
+	sql_stmt_tests/askml4.testcase\
+	sql_stmt_tests/askml5.testcase\
+	sql_stmt_tests/askml6.testcase\
+	sql_stmt_tests/askml7.testcase\
+	sql_stmt_tests/askml8.testcase\
+	sql_stmt_tests/askml9.testcase\
+	sql_stmt_tests/aswkt-text.testcase \
+	sql_stmt_tests/atan00.testcase \
+	sql_stmt_tests/atan0.testcase \
+	sql_stmt_tests/atan-text.testcase \
+	sql_stmt_tests/buffer1.testcase \
+	sql_stmt_tests/buffer2.testcase \
+	sql_stmt_tests/buffer3.testcase \
+	sql_stmt_tests/buffer4.testcase \
+	sql_stmt_tests/buffer5.testcase \
+	sql_stmt_tests/buffer6.testcase \
+	sql_stmt_tests/buffer7.testcase \
+	sql_stmt_tests/ceilfloat2.testcase \
+	sql_stmt_tests/ceilfloat.testcase \
+	sql_stmt_tests/ceil-int.testcase \
+	sql_stmt_tests/ceilnull.testcase \
+	sql_stmt_tests/checkspatialmetadata1.testcase\
+	sql_stmt_tests/checkspatialmetadata2.testcase\
+	sql_stmt_tests/checkspatialmetadata3.testcase\
+	sql_stmt_tests/ch_m.testcase \
+	sql_stmt_tests/closestpoint10.testcase \
+	sql_stmt_tests/closestpoint11.testcase \
+	sql_stmt_tests/closestpoint12.testcase \
+	sql_stmt_tests/closestpoint13.testcase \
+	sql_stmt_tests/closestpoint14.testcase \
+	sql_stmt_tests/closestpoint15.testcase\
+	sql_stmt_tests/closestpoint16.testcase\
+	sql_stmt_tests/closestpoint1.testcase \
+	sql_stmt_tests/closestpoint2.testcase \
+	sql_stmt_tests/closestpoint3.testcase \
+	sql_stmt_tests/closestpoint4.testcase \
+	sql_stmt_tests/closestpoint5.testcase \
+	sql_stmt_tests/closestpoint6.testcase \
+	sql_stmt_tests/closestpoint7.testcase \
+	sql_stmt_tests/closestpoint8.testcase \
+	sql_stmt_tests/closestpoint9.testcase \
+	sql_stmt_tests/cm_m.testcase \
+	sql_stmt_tests/collectextract1.testcase \
+	sql_stmt_tests/collectextract2.testcase \
+	sql_stmt_tests/collectextract3.testcase \
+	sql_stmt_tests/collectextract4.testcase \
+	sql_stmt_tests/collectextract5.testcase \
+	sql_stmt_tests/collectextract6.testcase \
+	sql_stmt_tests/collectextract7.testcase \
+	sql_stmt_tests/collectextract8.testcase \
+	sql_stmt_tests/collectextract9.testcase \
+	sql_stmt_tests/cos00.testcase \
+	sql_stmt_tests/cos0.testcase \
+	sql_stmt_tests/cos-text.testcase \
+	sql_stmt_tests/cot00.testcase \
+	sql_stmt_tests/cot0.testcase \
+	sql_stmt_tests/cotpi2.testcase \
+	sql_stmt_tests/cot-text.testcase \
+	sql_stmt_tests/createtopo10.testcase \
+	sql_stmt_tests/createtopo11.testcase \
+	sql_stmt_tests/createtopo12.testcase \
+	sql_stmt_tests/createtopo13.testcase \
+	sql_stmt_tests/createtopo14.testcase \
+	sql_stmt_tests/createtopo15.testcase \
+	sql_stmt_tests/createtopo16.testcase \
+	sql_stmt_tests/createtopo17.testcase \
+	sql_stmt_tests/createtopo18.testcase \
+	sql_stmt_tests/createtopo1.testcase \
+	sql_stmt_tests/createtopo2.testcase \
+	sql_stmt_tests/createtopo3.testcase \
+	sql_stmt_tests/createtopo4.testcase \
+	sql_stmt_tests/createtopo5.testcase \
+	sql_stmt_tests/createtopo6.testcase \
+	sql_stmt_tests/createtopo7.testcase \
+	sql_stmt_tests/createtopo8.testcase \
+	sql_stmt_tests/createtopo9.testcase \
+	sql_stmt_tests/degrees45.testcase \
+	sql_stmt_tests/degrees.testcase \
+	sql_stmt_tests/degreestext.testcase \
+	sql_stmt_tests/dimension1.testcase \
+	sql_stmt_tests/dimension2.testcase \
+	sql_stmt_tests/dimension3.testcase \
+	sql_stmt_tests/dimension4.testcase \
+	sql_stmt_tests/dimension5.testcase \
+	sql_stmt_tests/dimension6.testcase \
+	sql_stmt_tests/dimension7.testcase \
+	sql_stmt_tests/dimension8.testcase \
+	sql_stmt_tests/dm_m.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/exp00.testcase \
+	sql_stmt_tests/exp0.testcase \
+	sql_stmt_tests/exp10.testcase \
+	sql_stmt_tests/exp1.testcase \
+	sql_stmt_tests/expneg.testcase \
+	sql_stmt_tests/exptext.testcase \
+	sql_stmt_tests/fath_m.testcase \
+	sql_stmt_tests/fdo_ogr1.testcase\
+	sql_stmt_tests/fdo_ogr2.testcase\
+	sql_stmt_tests/fdo-wkb.sqlite_RO\
+	sql_stmt_tests/floor32.testcase \
+	sql_stmt_tests/floorint.testcase \
+	sql_stmt_tests/floornull.testcase \
+	sql_stmt_tests/ft_m.testcase \
+	sql_stmt_tests/geomcollfromtext1.testcase \
+	sql_stmt_tests/geomcollfromtext2.testcase \
+	sql_stmt_tests/geomconstraints10.testcase\
+	sql_stmt_tests/geomconstraints11.testcase\
+	sql_stmt_tests/geomconstraints12.testcase\
+	sql_stmt_tests/geomconstraints13.testcase\
+	sql_stmt_tests/geomconstraints14.testcase\
+	sql_stmt_tests/geomconstraints1.testcase\
+	sql_stmt_tests/geomconstraints2.testcase\
+	sql_stmt_tests/geomconstraints3.testcase\
+	sql_stmt_tests/geomconstraints4.testcase\
+	sql_stmt_tests/geomconstraints5.testcase\
+	sql_stmt_tests/geomconstraints6.testcase\
+	sql_stmt_tests/geomconstraints7.testcase\
+	sql_stmt_tests/geomconstraints8.testcase\
+	sql_stmt_tests/geomconstraints9.testcase\
+	sql_stmt_tests/geometryn1.testcase \
+	sql_stmt_tests/geometryn2.testcase \
+	sql_stmt_tests/geometryn3.testcase \
+	sql_stmt_tests/geometryn4.testcase \
+	sql_stmt_tests/geometryn5.testcase \
+	sql_stmt_tests/geometryn6.testcase \
+	sql_stmt_tests/geometryn.testcase \
+	sql_stmt_tests/geomfromtext1.testcase \
+	sql_stmt_tests/geomfromtext2.testcase \
+	sql_stmt_tests/geomfromtext3.testcase \
+	sql_stmt_tests/geomfromtext4.testcase \
+	sql_stmt_tests/geomfromtext5.testcase \
+	sql_stmt_tests/geomfromtext6.testcase \
+	sql_stmt_tests/geomfromtext7.testcase \
+	sql_stmt_tests/geomfromtext8.testcase \
+	sql_stmt_tests/geomfromtext9.testcase \
+	sql_stmt_tests/geomtype10.testcase \
+	sql_stmt_tests/geomtype11.testcase \
+	sql_stmt_tests/geomtype12.testcase \
+	sql_stmt_tests/geomtype13.testcase \
+	sql_stmt_tests/geomtype14.testcase \
+	sql_stmt_tests/geomtype15.testcase \
+	sql_stmt_tests/geomtype16.testcase \
+	sql_stmt_tests/geomtype17.testcase \
+	sql_stmt_tests/geomtype18.testcase \
+	sql_stmt_tests/geomtype19.testcase \
+	sql_stmt_tests/geomtype1.testcase \
+	sql_stmt_tests/geomtype20.testcase \
+	sql_stmt_tests/geomtype21.testcase \
+	sql_stmt_tests/geomtype22.testcase \
+	sql_stmt_tests/geomtype23.testcase \
+	sql_stmt_tests/geomtype24.testcase \
+	sql_stmt_tests/geomtype25.testcase \
+	sql_stmt_tests/geomtype26.testcase \
+	sql_stmt_tests/geomtype27.testcase \
+	sql_stmt_tests/geomtype28.testcase \
+	sql_stmt_tests/geomtype29.testcase \
+	sql_stmt_tests/geomtype2.testcase \
+	sql_stmt_tests/geomtype30.testcase \
+	sql_stmt_tests/geomtype31.testcase \
+	sql_stmt_tests/geomtype32.testcase \
+	sql_stmt_tests/geomtype33.testcase \
+	sql_stmt_tests/geomtype34.testcase \
+	sql_stmt_tests/geomtype35.testcase \
+	sql_stmt_tests/geomtype36.testcase \
+	sql_stmt_tests/geomtype37.testcase \
+	sql_stmt_tests/geomtype38.testcase \
+	sql_stmt_tests/geomtype39.testcase \
+	sql_stmt_tests/geomtype3.testcase \
+	sql_stmt_tests/geomtype40.testcase \
+	sql_stmt_tests/geomtype41.testcase \
+	sql_stmt_tests/geomtype42.testcase \
+	sql_stmt_tests/geomtype43.testcase \
+	sql_stmt_tests/geomtype44.testcase \
+	sql_stmt_tests/geomtype45.testcase \
+	sql_stmt_tests/geomtype46.testcase \
+	sql_stmt_tests/geomtype47.testcase \
+	sql_stmt_tests/geomtype48.testcase \
+	sql_stmt_tests/geomtype49.testcase \
+	sql_stmt_tests/geomtype4.testcase \
+	sql_stmt_tests/geomtype50.testcase \
+	sql_stmt_tests/geomtype51.testcase \
+	sql_stmt_tests/geomtype52.testcase \
+	sql_stmt_tests/geomtype53.testcase \
+	sql_stmt_tests/geomtype54.testcase \
+	sql_stmt_tests/geomtype55.testcase \
+	sql_stmt_tests/geomtype56.testcase \
+	sql_stmt_tests/geomtype57.testcase \
+	sql_stmt_tests/geomtype58.testcase \
+	sql_stmt_tests/geomtype59.testcase \
+	sql_stmt_tests/geomtype5.testcase \
+	sql_stmt_tests/geomtype60.testcase \
+	sql_stmt_tests/geomtype61.testcase \
+	sql_stmt_tests/geomtype62.testcase \
+	sql_stmt_tests/geomtype63.testcase \
+	sql_stmt_tests/geomtype64.testcase \
+	sql_stmt_tests/geomtype65.testcase \
+	sql_stmt_tests/geomtype66.testcase \
+	sql_stmt_tests/geomtype67.testcase \
+	sql_stmt_tests/geomtype68.testcase \
+	sql_stmt_tests/geomtype69.testcase \
+	sql_stmt_tests/geomtype6.testcase \
+	sql_stmt_tests/geomtype7.testcase \
+	sql_stmt_tests/geomtype8.testcase \
+	sql_stmt_tests/geomtype9.testcase \
+	sql_stmt_tests/greatcircle-badblob.testcase \
+	sql_stmt_tests/greatcircle-poly2.testcase \
+	sql_stmt_tests/greatcircle-poly.testcase \
+	sql_stmt_tests/greatcircle.testcase \
+	sql_stmt_tests/greatcircle-text.testcase \
+	sql_stmt_tests/ind_ch_m.testcase \
+	sql_stmt_tests/ind_ft_m.testcase \
+	sql_stmt_tests/ind_yd_m.testcase \
+	sql_stmt_tests/in_m.testcase \
+	sql_stmt_tests/isclosed1.testcase \
+	sql_stmt_tests/isclosed2.testcase \
+	sql_stmt_tests/isclosed3.testcase \
+	sql_stmt_tests/isclosed4.testcase \
+	sql_stmt_tests/isclosed5.testcase \
+	sql_stmt_tests/isring1.testcase \
+	sql_stmt_tests/isring2.testcase \
+	sql_stmt_tests/isring3.testcase \
+	sql_stmt_tests/isring4.testcase \
+	sql_stmt_tests/issimple1.testcase \
+	sql_stmt_tests/issimple2.testcase \
+	sql_stmt_tests/issimple3.testcase \
+	sql_stmt_tests/issimple4.testcase \
+	sql_stmt_tests/issimple5.testcase \
+	sql_stmt_tests/isvalid1.testcase \
+	sql_stmt_tests/isvalid2.testcase \
+	sql_stmt_tests/isvalid3.testcase \
+	sql_stmt_tests/isvalid4.testcase \
+	sql_stmt_tests/isvalid5.testcase \
+	sql_stmt_tests/isvalid6.testcase \
+	sql_stmt_tests/km_m.testcase \
+	sql_stmt_tests/linefromtext1.testcase \
+	sql_stmt_tests/linefromtext2.testcase \
+	sql_stmt_tests/linemerge10.testcase\
+	sql_stmt_tests/linemerge1.testcase\
+	sql_stmt_tests/linemerge2.testcase\
+	sql_stmt_tests/linemerge3.testcase\
+	sql_stmt_tests/linemerge4.testcase\
+	sql_stmt_tests/linemerge5.testcase\
+	sql_stmt_tests/linemerge6.testcase\
+	sql_stmt_tests/linemerge7.testcase\
+	sql_stmt_tests/linemerge8.testcase\
+	sql_stmt_tests/linemerge9.testcase\
+	sql_stmt_tests/linesfromrings1.testcase \
+	sql_stmt_tests/linesfromrings2.testcase \
+	sql_stmt_tests/linesfromrings3.testcase \
+	sql_stmt_tests/linesfromrings4.testcase \
+	sql_stmt_tests/linesfromrings5.testcase \
+	sql_stmt_tests/linesfromrings6.testcase \
+	sql_stmt_tests/linesfromrings7.testcase \
+	sql_stmt_tests/linesubstring10.testcase\
+	sql_stmt_tests/linesubstring11.testcase\
+	sql_stmt_tests/linesubstring12.testcase\
+	sql_stmt_tests/linesubstring13.testcase\
+	sql_stmt_tests/linesubstring14.testcase\
+	sql_stmt_tests/linesubstring15.testcase\
+	sql_stmt_tests/linesubstring16.testcase\
+	sql_stmt_tests/linesubstring17.testcase\
+	sql_stmt_tests/linesubstring18.testcase \
+	sql_stmt_tests/linesubstring19.testcase\
+	sql_stmt_tests/linesubstring1.testcase\
+	sql_stmt_tests/linesubstring20.testcase\
+	sql_stmt_tests/linesubstring21.testcase\
+	sql_stmt_tests/linesubstring22.testcase\
+	sql_stmt_tests/linesubstring23.testcase\
+	sql_stmt_tests/linesubstring24.testcase\
+	sql_stmt_tests/linesubstring25.testcase\
+	sql_stmt_tests/linesubstring2.testcase\
+	sql_stmt_tests/linesubstring3.testcase\
+	sql_stmt_tests/linesubstring4.testcase\
+	sql_stmt_tests/linesubstring5.testcase\
+	sql_stmt_tests/linesubstring6.testcase\
+	sql_stmt_tests/linesubstring7.testcase\
+	sql_stmt_tests/linesubstring8.testcase\
+	sql_stmt_tests/linesubstring9.testcase\
+	sql_stmt_tests/link_m.testcase \
+	sql_stmt_tests/log10-0.0.testcase \
+	sql_stmt_tests/log10-100.0.testcase \
+	sql_stmt_tests/log10-100.testcase \
+	sql_stmt_tests/log10-text.testcase \
+	sql_stmt_tests/log2-0.0.testcase \
+	sql_stmt_tests/log2-0.testcase \
+	sql_stmt_tests/log2-4.0.testcase \
+	sql_stmt_tests/log2-4.testcase \
+	sql_stmt_tests/log2-text.testcase \
+	sql_stmt_tests/logn00.testcase \
+	sql_stmt_tests/logn0.testcase \
+	sql_stmt_tests/logn10.testcase \
+	sql_stmt_tests/logn1.testcase \
+	sql_stmt_tests/logn2-01.testcase \
+	sql_stmt_tests/logn2-02.testcase \
+	sql_stmt_tests/logn2-2.2.testcase \
+	sql_stmt_tests/logn2-4.2int.testcase \
+	sql_stmt_tests/logn2-4.2.testcase \
+	sql_stmt_tests/logn2-text2.testcase \
+	sql_stmt_tests/logn2-text3.testcase \
+	sql_stmt_tests/logn2-text4.testcase \
+	sql_stmt_tests/logn2-text.testcase \
+	sql_stmt_tests/logn-text.testcase \
+	sql_stmt_tests/makeline10.testcase \
+	sql_stmt_tests/makeline11.testcase \
+	sql_stmt_tests/makeline12.testcase \
+	sql_stmt_tests/makeline13.testcase \
+	sql_stmt_tests/makeline14.testcase \
+	sql_stmt_tests/makeline15.testcase \
+	sql_stmt_tests/makeline16.testcase \
+	sql_stmt_tests/makeline17.testcase \
+	sql_stmt_tests/makeline18.testcase \
+	sql_stmt_tests/makeline2.testcase \
+	sql_stmt_tests/makeline3.testcase \
+	sql_stmt_tests/makeline4.testcase \
+	sql_stmt_tests/makeline5.testcase \
+	sql_stmt_tests/makeline6.testcase \
+	sql_stmt_tests/makeline7.testcase \
+	sql_stmt_tests/makeline8.testcase \
+	sql_stmt_tests/makeline9.testcase \
+	sql_stmt_tests/makeline.testcase \
+	sql_stmt_tests/makepoint1.testcase \
+	sql_stmt_tests/makepoint2.testcase \
+	sql_stmt_tests/makepoint3.testcase \
+	sql_stmt_tests/makepoint4.testcase \
+	sql_stmt_tests/makepoint5.testcase \
+	sql_stmt_tests/makepoint6.testcase \
+	sql_stmt_tests/makepoint7.testcase \
+	sql_stmt_tests/makepoint-null1.testcase \
+	sql_stmt_tests/makepoint-null2.testcase \
+	sql_stmt_tests/makepoint-null3.testcase \
+	sql_stmt_tests/makepoint-null4.testcase \
+	sql_stmt_tests/makepoint-null5.testcase \
+	sql_stmt_tests/makepoint-null6.testcase \
+	sql_stmt_tests/makepoint-null7.testcase \
+	sql_stmt_tests/mbr10.testcase \
+	sql_stmt_tests/mbr11.testcase \
+	sql_stmt_tests/mbr12.testcase \
+	sql_stmt_tests/mbr13.testcase \
+	sql_stmt_tests/mbr14.testcase \
+	sql_stmt_tests/mbr15.testcase \
+	sql_stmt_tests/mbr16.testcase \
+	sql_stmt_tests/mbr17.testcase \
+	sql_stmt_tests/mbr18.testcase \
+	sql_stmt_tests/mbr19.testcase \
+	sql_stmt_tests/mbr1.testcase \
+	sql_stmt_tests/mbr20.testcase \
+	sql_stmt_tests/mbr21.testcase \
+	sql_stmt_tests/mbr22.testcase \
+	sql_stmt_tests/mbr23.testcase \
+	sql_stmt_tests/mbr24.testcase \
+	sql_stmt_tests/mbr25.testcase \
+	sql_stmt_tests/mbr26.testcase \
+	sql_stmt_tests/mbr27.testcase \
+	sql_stmt_tests/mbr28.testcase \
+	sql_stmt_tests/mbr29.testcase \
+	sql_stmt_tests/mbr2.testcase \
+	sql_stmt_tests/mbr30.testcase \
+	sql_stmt_tests/mbr31.testcase \
+	sql_stmt_tests/mbr32.testcase \
+	sql_stmt_tests/mbr3.testcase \
+	sql_stmt_tests/mbr4.testcase \
+	sql_stmt_tests/mbr5.testcase \
+	sql_stmt_tests/mbr6.testcase \
+	sql_stmt_tests/mbr7.testcase \
+	sql_stmt_tests/mbr8.testcase \
+	sql_stmt_tests/mbr9.testcase \
+	sql_stmt_tests/m_ch.testcase \
+	sql_stmt_tests/m_cm.testcase \
+	sql_stmt_tests/m_dm.testcase \
+	sql_stmt_tests/m_fath.testcase \
+	sql_stmt_tests/m_ft.testcase \
+	sql_stmt_tests/m_ft-text.testcase \
+	sql_stmt_tests/mi_m.testcase \
+	sql_stmt_tests/m_ind_ch.testcase \
+	sql_stmt_tests/m_ind_ft.testcase \
+	sql_stmt_tests/m_ind_yd.testcase \
+	sql_stmt_tests/m_in.testcase \
+	sql_stmt_tests/m_in_us.testcase \
+	sql_stmt_tests/m_km.testcase \
+	sql_stmt_tests/mlinefromtext1.testcase \
+	sql_stmt_tests/mlinefromtext2.testcase \
+	sql_stmt_tests/m_ln.testcase \
+	sql_stmt_tests/m_mi.testcase \
+	sql_stmt_tests/m_mm.testcase \
+	sql_stmt_tests/mm_m.testcase \
+	sql_stmt_tests/m_nm.testcase \
+	sql_stmt_tests/mpointfromtext1.testcase \
+	sql_stmt_tests/mpointfromtext2.testcase \
+	sql_stmt_tests/mpolygonfromtext1.testcase \
+	sql_stmt_tests/mpolygonfromtext2.testcase \
+	sql_stmt_tests/m_us_ch.testcase \
+	sql_stmt_tests/m_us_ft.testcase \
+	sql_stmt_tests/m_usmi.testcase \
+	sql_stmt_tests/m_yd.testcase \
+	sql_stmt_tests/m_yd_us.testcase \
+	sql_stmt_tests/nm_m.testcase \
+	sql_stmt_tests/NumPoints2.testcase \
+	sql_stmt_tests/NumPoints3.testcase \
+	sql_stmt_tests/NumPoints4.testcase \
+	sql_stmt_tests/NumPoints5.testcase \
+	sql_stmt_tests/NumPoints6.testcase \
+	sql_stmt_tests/NumPoints7.testcase \
+	sql_stmt_tests/NumPoints.testcase \
+	sql_stmt_tests/output1.testcase \
+	sql_stmt_tests/output2.testcase \
+	sql_stmt_tests/output3.testcase \
+	sql_stmt_tests/output4.testcase \
+	sql_stmt_tests/output5.testcase \
+	sql_stmt_tests/output6.testcase \
+	sql_stmt_tests/output7.testcase \
+	sql_stmt_tests/pi.testcase \
+	sql_stmt_tests/pointfromtext1.testcase \
+	sql_stmt_tests/pointfromtext2.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/polygonfromtext1.testcase \
+	sql_stmt_tests/polygonfromtext2.testcase \
+	sql_stmt_tests/polygonize1.testcase \
+	sql_stmt_tests/polygonize2.testcase \
+	sql_stmt_tests/polygonize3.testcase \
+	sql_stmt_tests/polygonize4.testcase \
+	sql_stmt_tests/pow00-1.testcase \
+	sql_stmt_tests/pow00-2.testcase \
+	sql_stmt_tests/pow00double.testcase \
+	sql_stmt_tests/pow00.testcase \
+	sql_stmt_tests/pow-badarg1.testcase \
+	sql_stmt_tests/pow-badarg2.testcase \
+	sql_stmt_tests/pow-edom.testcase \
+	sql_stmt_tests/pow-fp.testcase \
+	sql_stmt_tests/rad0.testcase \
+	sql_stmt_tests/radpi.testcase \
+	sql_stmt_tests/rad-text.testcase \
+	sql_stmt_tests/reflectcoords1.testcase \
+	sql_stmt_tests/reflectcoords2.testcase \
+	sql_stmt_tests/reflectcoords3.testcase \
+	sql_stmt_tests/reflectcoords4.testcase \
+	sql_stmt_tests/reflectcoords5.testcase \
+	sql_stmt_tests/reflectcoords6.testcase \
+	sql_stmt_tests/reflectcoords7.testcase \
+	sql_stmt_tests/reflectcoords8.testcase \
+	sql_stmt_tests/relations1.testcase \
+	sql_stmt_tests/relations2.testcase \
+	sql_stmt_tests/relations3.testcase \
+	sql_stmt_tests/relations4.testcase \
+	sql_stmt_tests/relations5.testcase \
+	sql_stmt_tests/relations6.testcase \
+	sql_stmt_tests/ring10.testcase \
+	sql_stmt_tests/ring11.testcase \
+	sql_stmt_tests/ring12.testcase \
+	sql_stmt_tests/ring13.testcase \
+	sql_stmt_tests/ring14.testcase \
+	sql_stmt_tests/ring15.testcase \
+	sql_stmt_tests/ring16.testcase \
+	sql_stmt_tests/ring17.testcase \
+	sql_stmt_tests/ring18.testcase \
+	sql_stmt_tests/ring19.testcase \
+	sql_stmt_tests/ring1.testcase \
+	sql_stmt_tests/ring20.testcase \
+	sql_stmt_tests/ring21.testcase \
+	sql_stmt_tests/ring22.testcase \
+	sql_stmt_tests/ring23.testcase \
+	sql_stmt_tests/ring24.testcase \
+	sql_stmt_tests/ring25.testcase \
+	sql_stmt_tests/ring26.testcase \
+	sql_stmt_tests/ring27.testcase \
+	sql_stmt_tests/ring2.testcase \
+	sql_stmt_tests/ring3.testcase \
+	sql_stmt_tests/ring4.testcase \
+	sql_stmt_tests/ring5.testcase \
+	sql_stmt_tests/ring6.testcase \
+	sql_stmt_tests/ring7.testcase \
+	sql_stmt_tests/ring8.testcase \
+	sql_stmt_tests/ring9.testcase \
+	sql_stmt_tests/rotatecoords10.testcase \
+	sql_stmt_tests/rotatecoords11.testcase \
+	sql_stmt_tests/rotatecoords12.testcase \
+	sql_stmt_tests/rotatecoords13.testcase \
+	sql_stmt_tests/rotatecoords14.testcase \
+	sql_stmt_tests/rotatecoords1.testcase \
+	sql_stmt_tests/rotatecoords2.testcase \
+	sql_stmt_tests/rotatecoords3.testcase \
+	sql_stmt_tests/rotatecoords4.testcase \
+	sql_stmt_tests/rotatecoords5.testcase \
+	sql_stmt_tests/rotatecoords6.testcase \
+	sql_stmt_tests/rotatecoords7.testcase \
+	sql_stmt_tests/rotatecoords8.testcase \
+	sql_stmt_tests/rotatecoords9.testcase \
+	sql_stmt_tests/round0.testcase \
+	sql_stmt_tests/round-29.testcase \
+	sql_stmt_tests/round29.testcase \
+	sql_stmt_tests/round30.testcase \
+	sql_stmt_tests/round-31.testcase \
+	sql_stmt_tests/round31.testcase \
+	sql_stmt_tests/round3.testcase \
+	sql_stmt_tests/round-text.testcase \
+	sql_stmt_tests/scalecoords10.testcase \
+	sql_stmt_tests/scalecoords11.testcase \
+	sql_stmt_tests/scalecoords12.testcase \
+	sql_stmt_tests/scalecoords13.testcase \
+	sql_stmt_tests/scalecoords1.testcase \
+	sql_stmt_tests/scalecoords2.testcase \
+	sql_stmt_tests/scalecoords3.testcase \
+	sql_stmt_tests/scalecoords4.testcase \
+	sql_stmt_tests/scalecoords5.testcase \
+	sql_stmt_tests/scalecoords6.testcase \
+	sql_stmt_tests/scalecoords7.testcase \
+	sql_stmt_tests/scalecoords8.testcase \
+	sql_stmt_tests/scalecoords9.testcase \
+	sql_stmt_tests/shiftcoords1.testcase \
+	sql_stmt_tests/shiftcoords2.testcase \
+	sql_stmt_tests/shiftcoords3.testcase \
+	sql_stmt_tests/shiftcoords4.testcase \
+	sql_stmt_tests/shiftcoords5.testcase \
+	sql_stmt_tests/shiftcoords6.testcase \
+	sql_stmt_tests/shiftcoords7.testcase \
+	sql_stmt_tests/sign00.testcase \
+	sql_stmt_tests/sign01.testcase \
+	sql_stmt_tests/sign0.testcase \
+	sql_stmt_tests/sign10.testcase \
+	sql_stmt_tests/signeg2int.testcase \
+	sql_stmt_tests/signeg2.testcase \
+	sql_stmt_tests/signeg.testcase \
+	sql_stmt_tests/signtext.testcase \
+	sql_stmt_tests/sin00.testcase \
+	sql_stmt_tests/sin0.testcase \
+	sql_stmt_tests/singlesidedbuffer11.testcase\
+	sql_stmt_tests/singlesidedbuffer12.testcase\
+	sql_stmt_tests/singlesidedbuffer13.testcase\
+	sql_stmt_tests/singlesidedbuffer14.testcase\
+	sql_stmt_tests/singlesidedbuffer1.testcase\
+	sql_stmt_tests/singlesidedbuffer2.testcase\
+	sql_stmt_tests/singlesidedbuffer3.testcase\
+	sql_stmt_tests/singlesidedbuffer4.testcase\
+	sql_stmt_tests/singlesidedbuffer5.testcase\
+	sql_stmt_tests/singlesidedbuffer6.testcase\
+	sql_stmt_tests/singlesidedbuffer7.testcase\
+	sql_stmt_tests/singlesidedbuffer8.testcase\
+	sql_stmt_tests/singlesidedbuffer9.testcase\
+	sql_stmt_tests/sin-pi2.testcase \
+	sql_stmt_tests/sinpi2.testcase \
+	sql_stmt_tests/sin-pi.testcase \
+	sql_stmt_tests/sinpi.testcase \
+	sql_stmt_tests/sin-text.testcase \
+	sql_stmt_tests/sqrt00.testcase \
+	sql_stmt_tests/sqrt0.testcase \
+	sql_stmt_tests/sqrt-10.testcase \
+	sql_stmt_tests/sqrt-1.testcase \
+	sql_stmt_tests/sqrt-640.testcase \
+	sql_stmt_tests/sqrt-64.testcase \
+	sql_stmt_tests/sqrt-text.testcase \
+	sql_stmt_tests/st_area1.testcase \
+	sql_stmt_tests/st_area2.testcase \
+	sql_stmt_tests/st_area3.testcase \
+	sql_stmt_tests/st_area4.testcase \
+	sql_stmt_tests/st_area5.testcase \
+	sql_stmt_tests/st_area6.testcase \
+	sql_stmt_tests/st_area7.testcase \
+	sql_stmt_tests/st_area8.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/stddev.testcase\
+	sql_stmt_tests/st_length1.testcase \
+	sql_stmt_tests/st_length2.testcase \
+	sql_stmt_tests/st_length3.testcase \
+	sql_stmt_tests/st_length4.testcase \
+	sql_stmt_tests/st_length5.testcase \
+	sql_stmt_tests/st_length6.testcase \
+	sql_stmt_tests/st_length7.testcase \
+	sql_stmt_tests/st_m1.testcase \
+	sql_stmt_tests/st_m2.testcase \
+	sql_stmt_tests/st_m3.testcase \
+	sql_stmt_tests/st_m4.testcase \
+	sql_stmt_tests/st_m5.testcase \
+	sql_stmt_tests/st_m6.testcase \
+	sql_stmt_tests/st_x1.testcase \
+	sql_stmt_tests/st_x2.testcase \
+	sql_stmt_tests/st_x3.testcase \
+	sql_stmt_tests/st_x4.testcase \
+	sql_stmt_tests/st_x5.testcase \
+	sql_stmt_tests/st_x6.testcase \
+	sql_stmt_tests/st_y1.testcase \
+	sql_stmt_tests/st_y2.testcase \
+	sql_stmt_tests/st_y3.testcase \
+	sql_stmt_tests/st_y4.testcase \
+	sql_stmt_tests/st_y5.testcase \
+	sql_stmt_tests/st_z1.testcase \
+	sql_stmt_tests/st_z2.testcase \
+	sql_stmt_tests/st_z3.testcase \
+	sql_stmt_tests/st_z4.testcase \
+	sql_stmt_tests/st_z5.testcase \
+	sql_stmt_tests/st_z6.testcase \
+	sql_stmt_tests/swapcoords1.testcase \
+	sql_stmt_tests/swapcoords2.testcase \
+	sql_stmt_tests/swapcoords3.testcase \
+	sql_stmt_tests/swapcoords4.testcase \
+	sql_stmt_tests/tan00.testcase \
+	sql_stmt_tests/tan0.testcase \
+	sql_stmt_tests/tanpi4.testcase \
+	sql_stmt_tests/tan-pi.testcase \
+	sql_stmt_tests/tanpi.testcase \
+	sql_stmt_tests/tan-text.testcase \
+	sql_stmt_tests/testdb1.sqlite\
+	sql_stmt_tests/trivial.sqlite_RO\
+	sql_stmt_tests/unaryunion1.testcase\
+	sql_stmt_tests/unaryunion2.testcase\
+	sql_stmt_tests/unaryunion3.testcase\
+	sql_stmt_tests/unaryunion4.testcase\
+	sql_stmt_tests/unaryunion5.testcase\
+	sql_stmt_tests/unaryunion6.testcase\
+	sql_stmt_tests/unaryunion7.testcase\
+	sql_stmt_tests/unaryunion8.testcase\
+	sql_stmt_tests/us_ch_m.testcase \
+	sql_stmt_tests/us_ft_m.testcase \
+	sql_stmt_tests/us_in_m.testcase \
+	sql_stmt_tests/us_mi_m.testcase \
+	sql_stmt_tests/us_yd_m.testcase \
+	sql_stmt_tests/variance.testcase\
+	sql_stmt_tests/yd_m.testcase
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+check_create$(EXEEXT): $(check_create_OBJECTS) $(check_create_DEPENDENCIES) 
+	@rm -f check_create$(EXEEXT)
+	$(LINK) $(check_create_OBJECTS) $(check_create_LDADD) $(LIBS)
+check_dbf_load$(EXEEXT): $(check_dbf_load_OBJECTS) $(check_dbf_load_DEPENDENCIES) 
+	@rm -f check_dbf_load$(EXEEXT)
+	$(LINK) $(check_dbf_load_OBJECTS) $(check_dbf_load_LDADD) $(LIBS)
+check_extension$(EXEEXT): $(check_extension_OBJECTS) $(check_extension_DEPENDENCIES) 
+	@rm -f check_extension$(EXEEXT)
+	$(LINK) $(check_extension_OBJECTS) $(check_extension_LDADD) $(LIBS)
+check_gaia_utf8$(EXEEXT): $(check_gaia_utf8_OBJECTS) $(check_gaia_utf8_DEPENDENCIES) 
+	@rm -f check_gaia_utf8$(EXEEXT)
+	$(LINK) $(check_gaia_utf8_OBJECTS) $(check_gaia_utf8_LDADD) $(LIBS)
+check_gaia_util$(EXEEXT): $(check_gaia_util_OBJECTS) $(check_gaia_util_DEPENDENCIES) 
+	@rm -f check_gaia_util$(EXEEXT)
+	$(LINK) $(check_gaia_util_OBJECTS) $(check_gaia_util_LDADD) $(LIBS)
+check_init$(EXEEXT): $(check_init_OBJECTS) $(check_init_DEPENDENCIES) 
+	@rm -f check_init$(EXEEXT)
+	$(LINK) $(check_init_OBJECTS) $(check_init_LDADD) $(LIBS)
+check_math_funcs$(EXEEXT): $(check_math_funcs_OBJECTS) $(check_math_funcs_DEPENDENCIES) 
+	@rm -f check_math_funcs$(EXEEXT)
+	$(LINK) $(check_math_funcs_OBJECTS) $(check_math_funcs_LDADD) $(LIBS)
+check_mbrcache$(EXEEXT): $(check_mbrcache_OBJECTS) $(check_mbrcache_DEPENDENCIES) 
+	@rm -f check_mbrcache$(EXEEXT)
+	$(LINK) $(check_mbrcache_OBJECTS) $(check_mbrcache_LDADD) $(LIBS)
+check_shp_load$(EXEEXT): $(check_shp_load_OBJECTS) $(check_shp_load_DEPENDENCIES) 
+	@rm -f check_shp_load$(EXEEXT)
+	$(LINK) $(check_shp_load_OBJECTS) $(check_shp_load_LDADD) $(LIBS)
+check_shp_load_3d$(EXEEXT): $(check_shp_load_3d_OBJECTS) $(check_shp_load_3d_DEPENDENCIES) 
+	@rm -f check_shp_load_3d$(EXEEXT)
+	$(LINK) $(check_shp_load_3d_OBJECTS) $(check_shp_load_3d_LDADD) $(LIBS)
+check_spatialindex$(EXEEXT): $(check_spatialindex_OBJECTS) $(check_spatialindex_DEPENDENCIES) 
+	@rm -f check_spatialindex$(EXEEXT)
+	$(LINK) $(check_spatialindex_OBJECTS) $(check_spatialindex_LDADD) $(LIBS)
+check_sql_stmt$(EXEEXT): $(check_sql_stmt_OBJECTS) $(check_sql_stmt_DEPENDENCIES) 
+	@rm -f check_sql_stmt$(EXEEXT)
+	$(LINK) $(check_sql_stmt_OBJECTS) $(check_sql_stmt_LDADD) $(LIBS)
+check_version$(EXEEXT): $(check_version_OBJECTS) $(check_version_DEPENDENCIES) 
+	@rm -f check_version$(EXEEXT)
+	$(LINK) $(check_version_OBJECTS) $(check_version_LDADD) $(LIBS)
+check_virtualtable1$(EXEEXT): $(check_virtualtable1_OBJECTS) $(check_virtualtable1_DEPENDENCIES) 
+	@rm -f check_virtualtable1$(EXEEXT)
+	$(LINK) $(check_virtualtable1_OBJECTS) $(check_virtualtable1_LDADD) $(LIBS)
+check_virtualtable2$(EXEEXT): $(check_virtualtable2_OBJECTS) $(check_virtualtable2_DEPENDENCIES) 
+	@rm -f check_virtualtable2$(EXEEXT)
+	$(LINK) $(check_virtualtable2_OBJECTS) $(check_virtualtable2_LDADD) $(LIBS)
+check_virtualtable3$(EXEEXT): $(check_virtualtable3_OBJECTS) $(check_virtualtable3_DEPENDENCIES) 
+	@rm -f check_virtualtable3$(EXEEXT)
+	$(LINK) $(check_virtualtable3_OBJECTS) $(check_virtualtable3_LDADD) $(LIBS)
+check_virtualtable4$(EXEEXT): $(check_virtualtable4_OBJECTS) $(check_virtualtable4_DEPENDENCIES) 
+	@rm -f check_virtualtable4$(EXEEXT)
+	$(LINK) $(check_virtualtable4_OBJECTS) $(check_virtualtable4_LDADD) $(LIBS)
+check_virtualtable5$(EXEEXT): $(check_virtualtable5_OBJECTS) $(check_virtualtable5_DEPENDENCIES) 
+	@rm -f check_virtualtable5$(EXEEXT)
+	$(LINK) $(check_virtualtable5_OBJECTS) $(check_virtualtable5_LDADD) $(LIBS)
+check_virtualtable6$(EXEEXT): $(check_virtualtable6_OBJECTS) $(check_virtualtable6_DEPENDENCIES) 
+	@rm -f check_virtualtable6$(EXEEXT)
+	$(LINK) $(check_virtualtable6_OBJECTS) $(check_virtualtable6_LDADD) $(LIBS)
+check_xls_load$(EXEEXT): $(check_xls_load_OBJECTS) $(check_xls_load_DEPENDENCIES) 
+	@rm -f check_xls_load$(EXEEXT)
+	$(LINK) $(check_xls_load_OBJECTS) $(check_xls_load_LDADD) $(LIBS)
+shape_3d$(EXEEXT): $(shape_3d_OBJECTS) $(shape_3d_DEPENDENCIES) 
+	@rm -f shape_3d$(EXEEXT)
+	$(LINK) $(shape_3d_OBJECTS) $(shape_3d_LDADD) $(LIBS)
+shape_cp1252$(EXEEXT): $(shape_cp1252_OBJECTS) $(shape_cp1252_DEPENDENCIES) 
+	@rm -f shape_cp1252$(EXEEXT)
+	$(LINK) $(shape_cp1252_OBJECTS) $(shape_cp1252_LDADD) $(LIBS)
+shape_utf8_1$(EXEEXT): $(shape_utf8_1_OBJECTS) $(shape_utf8_1_DEPENDENCIES) 
+	@rm -f shape_utf8_1$(EXEEXT)
+	$(LINK) $(shape_utf8_1_OBJECTS) $(shape_utf8_1_LDADD) $(LIBS)
+shape_utf8_2$(EXEEXT): $(shape_utf8_2_OBJECTS) $(shape_utf8_2_DEPENDENCIES) 
+	@rm -f shape_utf8_2$(EXEEXT)
+	$(LINK) $(shape_utf8_2_OBJECTS) $(shape_utf8_2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_create.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_dbf_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_extension.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_gaia_utf8.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_gaia_util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_init.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_math_funcs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_mbrcache.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_shp_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_shp_load_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_spatialindex.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_sql_stmt.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_version.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable3.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable4.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable5.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable6.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_xls_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_cp1252.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_utf8_1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_utf8_2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list=' $(TESTS) '; \
+	$(am__tty_colors); \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=XPASS; \
+	      ;; \
+	      *) \
+		col=$$grn; res=PASS; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xfail=`expr $$xfail + 1`; \
+		col=$$lgn; res=XFAIL; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=FAIL; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      col=$$blu; res=SKIP; \
+	    fi; \
+	    echo "$${col}$$res$${std}: $$tst"; \
+	  done; \
+	  if test "$$all" -eq 1; then \
+	    tests="test"; \
+	    All=""; \
+	  else \
+	    tests="tests"; \
+	    All="All "; \
+	  fi; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="$$All$$all $$tests passed"; \
+	    else \
+	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all $$tests failed"; \
+	    else \
+	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    if test "$$skip" -eq 1; then \
+	      skipped="($$skip test was not run)"; \
+	    else \
+	      skipped="($$skip tests were not run)"; \
+	    fi; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  if test "$$failed" -eq 0; then \
+	    echo "$$grn$$dashes"; \
+	  else \
+	    echo "$$red$$dashes"; \
+	  fi; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes$$std"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/libspatialite-3.0.1/test/check_create.c b/libspatialite/libspatialite-3.0.1/test/check_create.c
new file mode 100644
index 0000000..7cfafcb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_create.c
@@ -0,0 +1,82 @@
+/*
+
+ check_create.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -3;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_dbf_load.c b/libspatialite/libspatialite-3.0.1/test/check_dbf_load.c
new file mode 100644
index 0000000..aa8a077
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_dbf_load.c
@@ -0,0 +1,91 @@
+/*
+
+ check_dbf_load.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory databse: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_dbf (handle, "./shapetest1.dbf", "test1", "UTF-8", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_dbf() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -4;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_extension.c b/libspatialite/libspatialite-3.0.1/test/check_extension.c
new file mode 100644
index 0000000..a69746f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_extension.c
@@ -0,0 +1,143 @@
+/*
+
+ check_extension.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+      sqlite3_close (db_handle);
+      db_handle = NULL;
+      return -1;
+    }
+    
+    sqlite3_enable_load_extension (db_handle, 1);
+    
+    asprintf(&sql_statement, "SELECT load_extension('libspatialite.so')");
+    ret = sqlite3_exec (db_handle, sql_statement, NULL, NULL, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "load_extension() error: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -2;
+    }
+
+    asprintf(&sql_statement, "SELECT spatialite_version()");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -10;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: spatialite_version() bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[1], VERSION) != 0) {
+	fprintf (stderr, "Unexpected error: spatialite_version() bad result: %s.\n", results[1]);
+	return  -12;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "SELECT geos_version()");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error2: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -13;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: geos_version() bad result: %i/%i.\n", rows, columns);
+	return  -14;
+    }
+    /* we tolerate any string here, because versions always change */
+    if (strlen(results[1]) == 0) {
+	fprintf (stderr, "Unexpected error: geos_version() bad result.\n");
+	return  -15;
+    }
+    sqlite3_free_table (results);
+
+    
+    asprintf(&sql_statement, "SELECT proj4_version()");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error3: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -14;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: proj4_version() bad result: %i/%i.\n", rows, columns);
+	return  -14;
+    }
+    /* we tolerate any string here, because versions always change */
+    if (strlen(results[1]) == 0) {
+	fprintf (stderr, "Unexpected error: proj4_version() bad result.\n");
+	return  -15;
+    }
+    sqlite3_free_table (results);
+ 
+    sqlite3_close (db_handle);
+    
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_gaia_utf8.c b/libspatialite/libspatialite-3.0.1/test/check_gaia_utf8.c
new file mode 100644
index 0000000..0d4de77
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_gaia_utf8.c
@@ -0,0 +1,108 @@
+/*
+
+ check_gaia_utf8.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+#include "spatialite/gaiaaux.h"
+
+int main (int argc, char *argv[])
+{
+    void * converter;
+    char *test_str1;
+    int err;
+
+    asprintf(&test_str1, "Hello World");
+    gaiaConvertCharset(&test_str1, "ASCII", "UTF-8");
+    if (strcmp(test_str1, "Hello World") != 0) {
+	fprintf(stderr, "bad ASCII to UTF-8 conversion: %s\n", test_str1);
+	free(test_str1);
+	return -1;
+    }
+    free(test_str1);
+
+#if 0
+    /* TODO: this will cause a buffer overflow */
+    asprintf(&test_str1, "Hello World");
+    gaiaConvertCharset(&test_str1, "ASCII", "UTF-16LE");
+    if (memcmp(test_str1, "H\0e\0l\0l\0o\0 \0W\0o\0r\0l\0d\0\0\0", 24) != 0) {
+	fprintf(stderr, "bad ASCII to UTF-16LE conversion\n");
+	free(test_str1);
+	return -2;
+    }
+    free(test_str1);
+#endif
+
+    converter = gaiaCreateUTF8Converter ("CP1252");
+    if (! converter) {
+	fprintf(stderr, "null UTF8 converter\n");
+	return -3;
+    }
+    
+    test_str1 = gaiaConvertToUTF8(converter, "Hello world", strlen("Hello world"), &err);
+    if (memcmp("Hello world", test_str1, strlen("Hello world") + 1) != 0) {
+	fprintf(stderr, "bad conversion to UTF8: %s\n", test_str1);
+	free(test_str1);
+	return -4;
+    }
+    free(test_str1);
+    
+    gaiaFreeUTF8Converter (converter);
+    converter = NULL;
+    /* test null converter */
+    gaiaFreeUTF8Converter (converter);
+    
+    test_str1 = gaiaConvertToUTF8(converter, "Hello world", strlen("Hello world"), &err);
+    if ((test_str1 != NULL) || (err != 1)) {
+	fprintf(stderr, "unexpected null converter result: %s, %i\n", test_str1, err);
+	return -5;
+    }
+
+    /* there is no sane way to test this automatically */
+    printf("Local codeset: %s\n", gaiaGetLocaleCharset() );
+
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_gaia_util.c b/libspatialite/libspatialite-3.0.1/test/check_gaia_util.c
new file mode 100644
index 0000000..b5020ef
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_gaia_util.c
@@ -0,0 +1,408 @@
+/*
+
+ check_gaia_util.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+#include "spatialite/gaiaaux.h"
+
+int main (int argc, char *argv[])
+{
+    int result;
+    char *test_str1;
+    char *quoted_str;
+    
+    result = gaiaIsReservedSqliteName ("AUTOINCREMENT");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for AUTOINCREMENT: %i\n", result);
+	return -1;
+    }
+
+    result = gaiaIsReservedSqliteName ("AUTOINCREMEN");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for AUTOINCREMEN: %i\n", result);
+	return -2;
+    }
+
+    result = gaiaIsReservedSqliteName ("AUTOINCREMENTED");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for AUTOINCREMENT: %i\n", result);
+	return -3;
+    }
+
+    result = gaiaIsReservedSqliteName ("foo");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for foo: %i\n", result);
+	return -4;
+    }
+
+    result = gaiaIsReservedSqliteName ("ALL"); /* first item */
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for ALL: %i\n", result);
+	return -5;
+    }
+
+    result = gaiaIsReservedSqliteName ("WHERE"); /* last item */
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for WHERE: %i\n", result);
+	return -6;
+    }
+ 
+    result = gaiaIsReservedSqliteName ("autoincrement");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for autoincrement: %i\n", result);
+	return -7;
+    }
+ 
+    result = gaiaIsReservedSqlName ("SELECT");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for SELECT: %i\n", result);
+	return -8;
+    }
+
+    result = gaiaIsReservedSqlName ("select");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for select: %i\n", result);
+	return -9;
+    }
+ 
+    result = gaiaIsReservedSqlName ("foo");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for foo: %i\n", result);
+	return -10;
+    }
+
+    result = gaiaIsReservedSqlName ("ABSOLUTE");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for ABSOLUTE: %i\n", result);
+	return -11;
+    }
+
+    result = gaiaIsReservedSqlName ("ZONE");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for ZONE: %i\n", result);
+	return -12;
+    }
+
+    result = gaiaIsReservedSqlName ("SELECTED");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for SELECTED: %i\n", result);
+	return -13;
+    }
+ 
+    result = gaiaIsReservedSqlName ("SELEC");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for SELEC: %i\n", result);
+	return -14;
+    }
+
+    result = gaiaIllegalSqlName(NULL);
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for (NULL): %i\n", result);
+	return -15;
+    }
+
+    result = gaiaIllegalSqlName("a");
+    if (result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for a: %i\n", result);
+	return -16;
+    }
+    result = gaiaIllegalSqlName("-");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for -: %i\n", result);
+	return -17;
+    }
+    result = gaiaIllegalSqlName("AbbcdE0187r");
+    if (result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for AbbcdE0187r: %i\n", result);
+	return -18;
+    }
+    result = gaiaIllegalSqlName("AbbcdE0187+");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for AbbcdE0187r+: %i\n", result);
+	return -19;
+    }
+    result = gaiaIllegalSqlName("");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for (empty): %i\n", result);
+	return -20;
+    }
+    result = gaiaIllegalSqlName("_ABCedFg");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for (empty): %i\n", result);
+	return -21;
+    }
+
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "Bar");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -22;
+    }
+    free(test_str1);
+
+    asprintf(&test_str1, "SELECT %s from %s;           ", "Foo", "Bar");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -23;
+    }
+    free(test_str1);
+
+    asprintf(&test_str1, "SELECT %s from %s;           ", "Foo", "'");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from '';") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -24;
+    }
+    free(test_str1);
+
+#if 0
+    /* TODO: This will cause a buffer overflow */
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "'");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from '';") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -25;
+    }
+    free(test_str1);
+#endif
+
+    asprintf(&test_str1, "           ");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -26;
+    }
+    free(test_str1);
+
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -27;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s;           ", "Foo", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -28;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "'");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from '';") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -29;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s   ;    ", "Foo", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from Bar   ;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -30;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s;", "'", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT '' from Bar;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -31;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "My Name");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "My Name") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -32;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    quoted_str = gaiaDoubleQuotedSql(NULL);
+    if (quoted_str != NULL) {
+	fprintf(stderr, "gaiaDoubleQuotedSql NULL failure: %s\n", quoted_str);
+	free(quoted_str);
+	return -33;
+    }
+
+    quoted_str = gaiaSingleQuotedSql(NULL);
+    if (quoted_str != NULL) {
+	fprintf(stderr, "gaiaSingleQuotedSql NULL failure: %s\n", quoted_str);
+	free(quoted_str);
+	return -34;
+    }
+
+    quoted_str = gaiaQuotedSql("foo", GAIA_SQL_SINGLE_QUOTE);
+    if (strcmp(quoted_str, "foo") != 0) {
+	fprintf(stderr, "gaiaQuotedSql failure SINGLE_QUOTE: %s\n", quoted_str);
+	free(quoted_str);
+	return -35;
+    }
+    free(quoted_str);
+
+    quoted_str = gaiaQuotedSql("foo", GAIA_SQL_DOUBLE_QUOTE);
+    if (strcmp(quoted_str, "foo") != 0) {
+	fprintf(stderr, "gaiaQuotedSql failure DOUBLE_QUOTE: %s\n", quoted_str);
+	free(quoted_str);
+	return -36;
+    }
+    free(quoted_str);
+
+    quoted_str = gaiaQuotedSql("foo", 1000);
+    if (quoted_str != NULL) {
+	fprintf(stderr, "gaiaQuotedSql failure 1000: %s\n", quoted_str);
+	free(quoted_str);
+	return -37;
+    }
+
+    asprintf(&test_str1, "My \"Name");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "My \"\"Name") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -38;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "My \"Name                   ");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "My \"\"Name") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -39;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -40;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "          ");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: |%s|\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -41;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "'          ");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "'") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -42;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "'");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "'") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -43;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "\"");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "\"") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -44;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_init.c b/libspatialite/libspatialite-3.0.1/test/check_init.c
new file mode 100644
index 0000000..efbbe35
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_init.c
@@ -0,0 +1,62 @@
+/*
+
+ check_init.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    spatialite_init(0);
+    spatialite_cleanup();
+    
+    spatialite_init(1);
+    spatialite_cleanup();
+    
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_math_funcs.c b/libspatialite/libspatialite-3.0.1/test/check_math_funcs.c
new file mode 100644
index 0000000..a5296ec
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_math_funcs.c
@@ -0,0 +1,95 @@
+/*
+
+ check_math_funcs.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+static const double double_eps = 0.00000001;
+
+int main (int argc, char *argv[])
+{
+    double result;
+    sqlite3_int64 result64;
+    
+    result = math_round(3.4);
+    if (abs(result - 3) > double_eps) {
+	fprintf(stderr, "bad math_round() result for 3.4: %f\n", result);
+	return -1;
+    }
+
+    result = math_round(3.6);
+    if (abs(result - 4) > double_eps) {
+	fprintf(stderr, "bad math_round() result for 3.6: %f\n", result);
+	return -2;
+    }
+    
+    result = math_round(-3.4);
+    if (abs(result + 3) > double_eps) {
+	fprintf(stderr, "bad math_round() result for -3.4: %f\n", result);
+	return -3;
+    }
+
+    result = math_round(-3.6);
+    if (abs(result + 4) > double_eps) {
+	fprintf(stderr, "bad math_round() result for -3.6: %f\n", result);
+	return -4;
+    }
+
+    result64 = math_llabs((sqlite3_int64) 26);
+    if (result64 != 26) {
+	fprintf(stderr, "bad math_llabs() result for 26");
+	return -5;
+    }
+
+    result64 = math_llabs((sqlite3_int64) -26);
+    if (result64 != 26) {
+	fprintf(stderr, "bad math_llabs() result for -26");
+	return -6;
+    }
+
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_mbrcache.c b/libspatialite/libspatialite-3.0.1/test/check_mbrcache.c
new file mode 100644
index 0000000..2212e4f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_mbrcache.c
@@ -0,0 +1,357 @@
+/*
+
+ check_mbrcache.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "shp/foggia/local_councils", "Councils",
+			  "CP1252", 23032, "geom", 1, 0, 1, 0, &row_count,
+			  err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 61) {
+	fprintf (stderr, "unexpected number of rows loaded: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+    
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE MbrWithin(geom, BuildMbr(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -6;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -8;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "SELECT CreateMbrCache('Councils', 'geom');",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "CreateMbrCache error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -9;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -14;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -15;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -16;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -17;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrContains(997226.750031, 4627372.000018, 997226.750031, 4627372.000018)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT Contains: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -18;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -19;
+    }
+    if (strcmp(results[1], "Carlantino") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -20;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrIntersects(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+    if ((rows != 35) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -22;
+    }
+    if (strcmp(results[1], "Apricena") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -23;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DELETE FROM Councils WHERE lc_name = 'Zapponeta';",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DELETE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -24;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -25;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -26;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -27;
+    }
+    if (strcmp(results[21], "Vieste") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -28;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "INSERT INTO Councils (lc_name, geom) VALUES ('Quairading', GeomFromText('MULTIPOLYGON(((997226.750031 4627372.000018, 997301.750031 4627332.000018, 997402.500031 4627344.000018, 997541.500031 4627326.500018,997226.750031 4627372.000018)))', 23032));",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "INSERT error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -29;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT2: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -30;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -31;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -32;
+    }
+    if (strcmp(results[21], "Vieste") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -33;
+    }
+    sqlite3_free_table (results);
+    
+    ret = sqlite3_exec (handle, "UPDATE Councils SET geom = GeomFromText('MULTIPOLYGON(((987226.750031 4627372.000018, 997301.750031 4627331.000018, 997402.500032 4627344.000018, 997541.500031 4627326.500018, 987226.750031 4627372.000018)))', 23032) WHERE lc_name = \"Quairading\";",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT3: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -35;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -36;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -37;
+    }
+    if (strcmp(results[21], "Vieste") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -38;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT rowid, mbr FROM cache_Councils_geom;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -39;
+    }
+    if ((rows != 61) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache2 result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -40;
+    }
+    if (strcmp(results[2], "1") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[2]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -41;
+    }
+    if (strcmp(results[12], "6") != 0) {
+	fprintf (stderr, "unexpected mbr result at 6: %s\n", results[12]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -42;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DROP TABLE Councils;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE Councils error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -44;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -45;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/check_shp_load.c b/libspatialite/libspatialite-3.0.1/test/check_shp_load.c
new file mode 100644
index 0000000..e02e471
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_shp_load.c
@@ -0,0 +1,92 @@
+/*
+
+ check_shp_load.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "./shapetest1", "test1", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -4;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_shp_load_3d.c b/libspatialite/libspatialite-3.0.1/test/check_shp_load_3d.c
new file mode 100644
index 0000000..2860778
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_shp_load_3d.c
@@ -0,0 +1,165 @@
+/*
+
+ check_shp_load_3d.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+    const char *sql;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "shp/merano-3d/polygons", "polygons", "CP1252", 25832, 
+			  "geom", 0, 1, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+
+    ret = update_layer_statistics (handle, "polygons", "geom");
+    if (!ret) {
+        fprintf (stderr, "update_layer_statistics() error\n", err_msg);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = load_shapefile (handle, "shp/merano-3d/roads", "roads", "CP1252", 25832, 
+			  "geom", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "shp/merano-3d/points", "points", "CP1252", 25832, 
+			  "geom", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    
+    elementary_geometries (handle, "points", "geom", "elem_point", "pk_elem", "mul_id");
+    elementary_geometries (handle, "roads", "geom", "elem_linestring", "pk_elem", "mul_id");
+    elementary_geometries (handle, "polygons", "geom", "elem_poly", "pk_elem", "mul_id");
+
+    ret = update_layer_statistics (handle, NULL, NULL);
+    if (!ret) {
+        fprintf (stderr, "update_layer_statistics() error\n", err_msg);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    sql = "SELECT row_count, extent_min_x, extent_max_y "
+          "FROM layer_statistics "
+          "WHERE raster_layer = 0 AND table_name LIKE 'roads' "
+          "AND geometry_column LIKE 'geom'";
+    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "Error: %s\n", err_msg);
+        sqlite3_free (err_msg);
+        return -9;
+    }
+    if (rows != 1) {
+        fprintf (stderr, "Unexpected num of rows for LAYER_STATISTICS.\n");
+        return  -10;
+    }
+    if (atoi(results[columns+0]) != 18) {
+        fprintf (stderr, "Unexpected error: LAYER_STATISTICS bad result row_count: %s\n", results[columns+0]);
+        return -11;
+    }
+    if (atof(results[columns+1]) != 666057.648017325) {
+        fprintf (stderr, "Unexpected error: LAYER_STATISTICS bad result extent_min_x: %s\n", results[columns+1]);
+        return -12;
+    }
+    if (atof(results[columns+2]) != 5170671.31627796) {
+        fprintf (stderr, "Unexpected error: LAYER_STATISTICS bad result extent_max_y: %s\n", results[columns+2]);
+        return -13;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DROP TABLE polygons", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP polygons error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -6;
+    }
+    
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -7;
+    }
+
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_spatialindex.c b/libspatialite/libspatialite-3.0.1/test/check_spatialindex.c
new file mode 100644
index 0000000..48e3b89
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_spatialindex.c
@@ -0,0 +1,356 @@
+/*
+
+ check_spatialindex.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "shp/foggia/local_councils", "Councils",
+			  "CP1252", 23032, "geom", 1, 0, 1, 0, &row_count,
+			  err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 61) {
+	fprintf (stderr, "unexpected number of rows loaded: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+    
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE MbrWithin(geom, BuildMbr(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -6;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -8;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "SELECT CreateSpatialIndex('Councils', 'geom');",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "CreateMbrCache error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -9;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT pkid FROM idx_Councils_geom;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in idx SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 61) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select pkid bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -11;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT Contains: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -12;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -13;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -14;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -15;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "INSERT INTO Councils (lc_name, geom) VALUES ('Quairading', GeomFromText('MULTIPOLYGON(((997226.750031 4627372.000018, 997301.750031 4627332.000018, 997402.500031 4627344.000018, 997541.500031 4627326.500018,997226.750031 4627372.000018)))', 23032));",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "INSERT error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -16;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT2: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -17;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -18;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -19;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -20;
+    }
+    sqlite3_free_table (results);
+  
+    ret = sqlite3_exec (handle, "UPDATE Councils SET geom = GeomFromText('MULTIPOLYGON(((987226.750031 4627372.000018, 997301.750031 4627331.000018, 997402.500032 4627344.000018, 997541.500031 4627326.500018, 987226.750031 4627372.000018)))', 23032) WHERE lc_name = \"Quairading\";",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT3: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -35;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -36;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -37;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -38;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DELETE FROM Councils WHERE lc_name = \"Ascoli Satriano\";",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -39;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT3: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -40;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -41;
+    }
+    if (strcmp(results[1], "Cagnano Varano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -42;
+    }
+    if (strcmp(results[21], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -43;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT rowid, nodeno FROM idx_Councils_geom_rowid ORDER BY rowid;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -44;
+    }
+    if ((rows != 61) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select rowid bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -45;
+    }
+    if (strcmp(results[2], "1") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[2]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -46;
+    }
+    if (strcmp(results[12], "6") != 0) {
+	fprintf (stderr, "unexpected mbr result at 6: %s\n", results[12]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -47;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "SELECT CheckSpatialIndex('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "CheckSpatialIndex error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+
+    ret = sqlite3_exec (handle, "SELECT RebuildGeometryTriggers('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Rebuild triggers error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -49;
+    }
+
+    ret = sqlite3_exec (handle, "SELECT DisableSpatialIndex('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Disable index error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -50;
+    }
+
+    ret = sqlite3_exec (handle, "SELECT RebuildGeometryTriggers('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Disable index error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -51;
+    }
+
+    ret = sqlite3_exec (handle, "DROP TABLE Councils;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE Councils error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -52;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -53;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_sql_stmt.c b/libspatialite/libspatialite-3.0.1/test/check_sql_stmt.c
new file mode 100644
index 0000000..5128cb2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_sql_stmt.c
@@ -0,0 +1,279 @@
+/*
+
+ check_sql_stmt.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dirent.h>
+#include <fnmatch.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_data
+{
+    char * test_case_name;
+    char * database_name;
+    char * sql_statement;
+    int expected_rows;
+    int expected_columns;
+    char ** expected_results;
+    int *expected_precision;
+};
+
+int do_one_case (const struct test_data *data)
+{
+    sqlite3 *db_handle = NULL;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    fprintf(stderr, "Test case: %s\n", data->test_case_name);
+    // This hack checks if the name ends with _RO
+    if (strncmp("_RO", data->database_name + strlen(data->database_name) - 3, strlen("_RO")) == 0) {
+	fprintf(stderr, "opening read_only\n");
+	ret = sqlite3_open_v2 (data->database_name, &db_handle, SQLITE_OPEN_READONLY, NULL);
+    } else {
+	ret = sqlite3_open_v2 (data->database_name, &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    }
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "cannot open %s db: %s\n", data->database_name, sqlite3_errmsg (db_handle));
+      sqlite3_close (db_handle);
+      db_handle = NULL;
+      return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(db_handle);
+	return -2;
+    }
+
+    ret = sqlite3_get_table (db_handle, data->sql_statement, &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -10;
+    }
+    if ((rows != data->expected_rows) || (columns != data->expected_columns)) {
+	fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    for (i = 0; i < (data->expected_rows + 1) * data->expected_columns; ++i) {
+	if (results[i] != NULL && data->expected_precision[i] == 0) {
+	    data->expected_precision[i] = strlen(results[i]);
+	}
+	if (results[i] == NULL) {
+	    if (strcmp("(NULL)", data->expected_results[i]) == 0) {
+		/* we expected this */
+		continue;
+	    } else {
+		fprintf (stderr, "Null value at %i.\n", i);
+		fprintf (stderr, "Expected value was: %s\n", data->expected_results[i]);
+		return  -12;
+	    }
+	} else if (strlen(results[i]) == 0) {
+	    fprintf (stderr, "zero length result at %i\n", i);
+	    fprintf (stderr, "Expected value was    : %s|\n", data->expected_results[i]);
+	    return -13;
+	} else if (strncmp(results[i], data->expected_results[i], data->expected_precision[i]) != 0) {
+	    fprintf (stderr, "Unexpected value at %i: %s|\n", i, results[i]);
+	    fprintf (stderr, "Expected value was    : %s|\n", data->expected_results[i]);
+	    return  -14;
+	}
+    }
+    sqlite3_free_table (results);
+
+    sqlite3_close (db_handle);
+    
+    return 0;
+}
+
+int get_clean_line(FILE *f, char ** line)
+{
+    size_t len = 0;
+    ssize_t num_read = 0;
+    size_t end = 0;
+    char *tmp_line = NULL;
+    num_read = getline(&(tmp_line), &len, f);
+    if (num_read < 1) {
+	fprintf(stderr, "failed to read at %li: %zi\n", ftell(f), num_read);
+	return -1;
+    }
+    /* trim the trailing new line and any comments */
+    for (end = 0; end < num_read; ++end) {
+	if (*(tmp_line + end) == '\n')
+	    break;
+	if (*(tmp_line + end) == '#')
+	    break;
+    }
+    /* trim any trailing spaces */
+    while (end > 0) {
+	if (*(tmp_line + end -1) != ' ') {
+	    break;
+	}
+	*(tmp_line + end -1) = '\0';
+	end--;
+    }
+    *line = malloc(end + 1);
+    memcpy(*line, tmp_line, end);
+    (*line)[end] = '\0';
+    free(tmp_line);
+    return 0;
+}
+
+void handle_precision(char *expected_result, int *precision)
+{
+    int i;
+    int result_len = strlen(expected_result);
+    *precision = 0;
+    for (i = result_len - 1; i >= 0; --i) {
+	if (expected_result[i] == ':') {
+	    expected_result[i] = '\0';
+	    *precision = atoi(&(expected_result[i + 1]));
+	    break;
+	}
+    }
+}
+
+struct test_data *read_one_case(const char *filepath)
+{
+    int num_results;
+    int i;
+    size_t len;
+    ssize_t num_read;
+    char *tmp;
+    FILE *f;
+
+    f = fopen(filepath, "r");
+    
+    struct test_data* data;
+    data = malloc(sizeof(struct test_data));
+    get_clean_line(f, &(data->test_case_name));
+    get_clean_line(f, &(data->database_name));
+    get_clean_line(f, &(data->sql_statement));
+    get_clean_line(f, &(tmp));
+    data->expected_rows = atoi(tmp);
+    free(tmp);
+    get_clean_line(f, &(tmp));
+    data->expected_columns = atoi(tmp);
+    free(tmp);
+    num_results = (data->expected_rows + 1) * data->expected_columns;
+    data->expected_results = malloc(num_results * sizeof(char*));
+    data->expected_precision = malloc(num_results * sizeof(int));
+    for (i = 0; i < num_results; ++i) {
+	get_clean_line(f, &(data->expected_results[i]));
+	handle_precision(data->expected_results[i], &(data->expected_precision[i]));
+    }
+    fclose(f);
+    return data;
+}
+
+void cleanup_test_data(struct test_data *data)
+{
+    int i;
+    int num_results = (data->expected_rows + 1) * (data->expected_columns);
+
+    for (i = 0; i < num_results; ++i) {
+	free(data->expected_results[i]);
+    }
+    free(data->expected_results);
+    free(data->expected_precision);
+    free(data->test_case_name);
+    free(data->database_name);
+    free(data->sql_statement);
+    free(data);
+}
+
+int test_case_filter(const struct dirent *entry)
+{
+    int ret = 0;
+    return (fnmatch("*.testcase", entry->d_name, FNM_PERIOD) == 0);
+}
+
+int main (int argc, char *argv[])
+{
+    struct dirent **namelist;
+    int n;
+    int i;
+    int result = 0;
+
+    spatialite_init (0);
+
+    n = scandir("sql_stmt_tests", &namelist, test_case_filter, alphasort);
+    if (n < 0) {
+	perror("scandir");
+	return -1;
+    } else {
+	for (i = 0; i < n; ++i) {
+	    struct test_data *data;
+	    char *path;
+	    if (asprintf(&path, "sql_stmt_tests/%s", namelist[i]->d_name) < 0) {
+		result = -1;
+		break;
+	    }
+	    data = read_one_case(path);
+	    free(path);
+	    
+	    result = do_one_case(data);
+	    
+	    cleanup_test_data(data);
+	    if (result != 0) {
+		break;
+	    }
+	    free(namelist[i]);
+	}
+	free(namelist);
+    }
+
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+
+    return result;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_version.c b/libspatialite/libspatialite-3.0.1/test/check_version.c
new file mode 100644
index 0000000..9731b7a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_version.c
@@ -0,0 +1,60 @@
+/*
+
+ check_version.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    if (strcmp(spatialite_version(), VERSION) != 0) {
+	fprintf(stderr, "SpatiaLite version mismatch: %s and %s\n",
+		VERSION, spatialite_version());
+	return -1;
+    }
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_virtualtable1.c b/libspatialite/libspatialite-3.0.1/test/check_virtualtable1.c
new file mode 100644
index 0000000..1ffbb2e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_virtualtable1.c
@@ -0,0 +1,160 @@
+/*
+
+ check_virtualtable1.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE places USING VirtualText(\"testcase1.csv\", UTF-8, 0, POINT, DOUBLEQUOTE);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualText error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+    
+    asprintf(&sql_statement, "select col003, col005, col006, col008 from places WHERE col003 = \"Canal Creek\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 2) || (columns != 4)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "COL003") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[4], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name4() bad result: %s.\n", results[4]);
+	return  -13;
+    }
+    if (strncmp(results[5], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lat1() bad result: %s.\n", results[5]);
+	return  -14;
+    }
+    if (strncmp(results[6], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lon2() bad result: %s.\n", results[6]);
+	return  -15;
+    }
+    if (strcmp(results[8], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name8() bad result: %s.\n", results[8]);
+	return  -16;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM places WHERE col015 > 100000;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+ 
+    ret = sqlite3_get_table (db_handle, "SELECT col003, col015 FROM places WHERE col015 > 100000", &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -23;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result2: %i/%i.\n", rows, columns);
+	return  -24;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE places;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -25;
+    }
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_virtualtable2.c b/libspatialite/libspatialite-3.0.1/test/check_virtualtable2.c
new file mode 100644
index 0000000..7af2a21
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_virtualtable2.c
@@ -0,0 +1,595 @@
+/*
+
+ check_virtualtable2.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape(\"shapetest1\", UTF-8, 4326);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 < 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -4;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -5;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -6;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -7;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -8;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 <= 19;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -13;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -14;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -15;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 = 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -16;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -17;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -18;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -19;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer2() bad result: %s.\n", results[4]);
+	return  -20;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -21;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 > 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -23;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -24;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees2 bad result: %s.\n", results[3]);
+	return  -25;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer4() bad result: %s.\n", results[4]);
+	return  -26;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -27;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 >= 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -28;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -29;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -30;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees3 bad result: %s.\n", results[3]);
+	return  -31;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer5() bad result: %s.\n", results[4]);
+	return  -32;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -33;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 < \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -35;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -36;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -37;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -38;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -39;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 <= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -40;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -41;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -42;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -43;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -44;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -45;
+    }
+    sqlite3_free_table (results);
+
+    
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 > \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -49;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -50;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -51;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -52;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -53;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM shapetest WHERE testcase2 = 2;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+    sqlite3_free (err_msg);
+    
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -47;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 >= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -57;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -58;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -59;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 = \"windward\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -57;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -58;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -59;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID = 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -60;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -61;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -62;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -63;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -64;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -65;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID < 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -66;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -67;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -68;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -69;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -70;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -71;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID <= 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -72;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -73;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -74;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -75;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -76;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -77;
+    }
+    sqlite3_free_table (results);
+    
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID > 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -78;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -79;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -80;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -81;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -82;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -83;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID >= 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -84;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -85;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -86;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -87;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -88;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -89;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select PKUID, testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 LIKE \"wind\%\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -90;
+    }
+    if ((rows != 1) || (columns != 4)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -91;
+    }
+    if (strcmp(results[0], "PKUID") != 0) {
+	fprintf (stderr, "Unexpected error: header uid bad result: %s.\n", results[0]);
+	return  -92;
+    }
+    if (strcmp(results[1], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header bad result: %s.\n", results[1]);
+	return  -93;
+    }
+    if (strcmp(results[4], "1") != 0) {
+	fprintf (stderr, "Unexpected error: windward PK bad result: %s.\n", results[4]);
+	return  -93;
+    }
+    if (strcmp(results[5], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[5]);
+	return  -94;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -49;
+    }
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_virtualtable3.c b/libspatialite/libspatialite-3.0.1/test/check_virtualtable3.c
new file mode 100644
index 0000000..b6bb8b2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_virtualtable3.c
@@ -0,0 +1,580 @@
+/*
+
+ check_virtualtable3.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF(shapetest1.dbf, UTF-8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 < 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -4;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -5;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -6;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -7;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 <= 19;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -13;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -14;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 = 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -16;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -17;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -18;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -19;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer2() bad result: %s.\n", results[3]);
+	return  -20;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 > 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -23;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -24;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees2 bad result: %s.\n", results[2]);
+	return  -25;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer4() bad result: %s.\n", results[3]);
+	return  -26;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 >= 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -28;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -29;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -30;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees3 bad result: %s.\n", results[2]);
+	return  -31;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer5() bad result: %s.\n", results[3]);
+	return  -32;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 < \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -35;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -36;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -37;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -38;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 <= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -40;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -41;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -42;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -43;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -44;
+    }
+    sqlite3_free_table (results);
+    
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 > \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -49;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -50;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -51;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -52;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM dbftest WHERE testcase2 = 2;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -47;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 >= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -57;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -58;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 = \"windward\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -57;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -58;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID = 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -60;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -61;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -62;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -63;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -64;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID < 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -66;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -67;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -68;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -69;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -70;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID <= 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -72;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -73;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -74;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -75;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -76;
+    }
+    sqlite3_free_table (results);
+    
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID > 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -78;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -79;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -80;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -81;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -82;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID >= 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -84;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -85;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -86;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -87;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -88;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select PKUID, testcase1, testcase2 from dbftest where testcase1 LIKE \"wind\%\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -90;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -91;
+    }
+    if (strcmp(results[0], "PKUID") != 0) {
+	fprintf (stderr, "Unexpected error: header uid bad result: %s.\n", results[0]);
+	return  -92;
+    }
+    if (strcmp(results[1], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header bad result: %s.\n", results[1]);
+	return  -93;
+    }
+    if (strcmp(results[3], "1") != 0) {
+	fprintf (stderr, "Unexpected error: windward PK bad result: %s.\n", results[3]);
+	return  -93;
+    }
+    if (strcmp(results[4], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[4]);
+	return  -94;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -49;
+    }
+
+    /* error cases */
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toofewargs USING VirtualDBF(\"shapetest1.dbf\");", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualDBF unexpected result: %i\n", ret);
+	return -95;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toomanyargs USING VirtualDBF(\"shapetest1.dbf\", UTF-8, 1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualDBF unexpected result: %i\n", ret);
+	return -96;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchfile USING VirtualDBF(\"not_a_file.dbf\", UTF-8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -97;
+    }
+    ret = sqlite3_get_table (db_handle, "SELECT * from nosuchfile;", &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -98;
+    }
+    if ((rows != 0) || (columns != 0)) {
+	fprintf (stderr, "Unexpected error: select columns no suchfile: %i/%i.\n", rows, columns);
+	return  -99;
+    }
+    sqlite3_free_table (results);
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchfile;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -100;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE onesidedquote USING VirtualDBF('shapetest1.dbf, UTF-8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualDBF unexpected result: %i\n", ret);
+	return -101;
+    }
+    sqlite3_free (err_msg);
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_virtualtable4.c b/libspatialite/libspatialite-3.0.1/test/check_virtualtable4.c
new file mode 100644
index 0000000..64df37e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_virtualtable4.c
@@ -0,0 +1,342 @@
+/*
+
+ check_virtualtable4.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_step
+{
+    const char *sql;
+    const int num_rows;
+};
+
+#define NUMSTEPS 36
+
+struct test_step steps[NUMSTEPS] = {
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 > \"Canary Creek\";", 9 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 < \"Canary Creek\";", 7 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 >= \"Canary Creek\";", 10 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 <= \"Canary Creek\";", 8 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 = 3;", 0 }, 
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 > 100000;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 < 100000;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 < 100000 AND col_14 > 0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 = 895;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 = 895.0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 <= 895;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 >= 895;", 2 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 > 100000.0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 < 100000.0;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 = 895.0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 <= 895.0;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 >= 895.0;", 2 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no = 4", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no < 4", 3 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no <= 4", 4 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no >= 4", 14 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no > 4", 13 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no = 4.00", 0 },
+    { "select col_2, col_4, col_5 from xltest where col_4 < -30.0;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 > -30.0;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_4 <= -30.0;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 >= -30.0;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_5 = 149.1;", 1 },
+    { "select col_2, col_4, col_5 from xltest where col_4 < -30;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 > -30;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_4 <= -30;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 >= -30;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_4 = -30;", 0 },
+    { "SELECT row_no, col_4, col_5 from xltest", 17 },
+    { "select rowid, col_4, col_5 from xltest where col_4 = -26.0;", 1 },
+    { "select rowid, col_4, col_5 from xltest where col_4 = -26;", 1 },
+};
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE xltest USING VirtualXL(\"testcase1.xls\");", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    asprintf(&sql_statement, "select col_2, col_4, col_5, col_7, rowid from xltest WHERE col_2 = \"Canal Creek\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 2) || (columns != 5)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "col_2") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[5], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name5() bad result: %s.\n", results[5]);
+	return  -13;
+    }
+    if (strncmp(results[6], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lat1() bad result: %s.\n", results[6]);
+	return  -14;
+    }
+    if (strncmp(results[7], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lon2() bad result: %s.\n", results[7]);
+	return  -15;
+    }
+    if (strcmp(results[10], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name10() bad result: %s.\n", results[10]);
+	return  -16;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM xltest WHERE col_14 > 100000;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+ 
+    for (i = 0; i < NUMSTEPS; ++i) {
+	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
+	if (ret != SQLITE_OK) {
+	    fprintf (stderr, "Error: %s\n", err_msg);
+	    sqlite3_free (err_msg);
+	    return -23;
+	}
+	if (rows != steps[i].num_rows) {
+	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
+	    return  -24;
+	}
+	sqlite3_free_table (results);
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE xltest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -25;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchworksheet USING VirtualXL(\"testcase1.xls\", 3);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -26;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchworksheet;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -27;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchfile USING VirtualXL(\"not_a_file.xls\", 3);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -28;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchfile;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -29;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE sheet2 USING VirtualXL(\"testcase1.xls\", 1, 1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -30;
+    }
+    asprintf(&sql_statement, "select row_no, place, lat, lon, rowid from sheet2 WHERE place = \"Canal Creek\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -31;
+    }
+    if ((rows != 4) || (columns != 5)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -32;
+    }
+    if (strcmp(results[0], "row_no") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result: %s.\n", results[0]);
+	return  -33;
+    }
+    if (strcmp(results[6], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result place: %s.\n", results[6]);
+	return  -34;
+    }
+    if (strncmp(results[7], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lat: %s.\n", results[7]);
+	return  -35;
+    }
+    if (strncmp(results[8], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lon: %s.\n", results[8]);
+	return  -36;
+    }
+    if (strcmp(results[11], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result place2: %s.\n", results[11]);
+	return  -37;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select row_no, place, lat, lon, rowid from sheet2 WHERE row_no = 16");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -38;
+    }
+    if ((rows != 1) || (columns != 5)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -39;
+    }
+    if (strcmp(results[0], "row_no") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result: %s.\n", results[0]);
+	return  -40;
+    }
+    if (strcmp(results[6], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result place: %s.\n", results[6]);
+	return  -41;
+    }
+    if (strncmp(results[7], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lat: %s.\n", results[7]);
+	return  -42;
+    }
+    if (strncmp(results[8], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lon: %s.\n", results[8]);
+	return  -43;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE sheet2;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -44;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE noquote USING VirtualXL(testcase1.xls);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -45;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE noquote;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE noheader USING VirtualXL(\"testcase1.xls\", 0, 0);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -47;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE noheader;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nofile USING VirtualXL();", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualXL unexpected result: %i\n", ret);
+	return -49;
+    }
+    sqlite3_free (err_msg);
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_virtualtable5.c b/libspatialite/libspatialite-3.0.1/test/check_virtualtable5.c
new file mode 100644
index 0000000..63c8e5c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_virtualtable5.c
@@ -0,0 +1,170 @@
+/*
+
+ check_virtualtable5.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_step
+{
+    const char *sql;
+    const int num_rows;
+};
+
+struct test_step steps[] = {
+    { "select DATUM from dbftest WHERE DATUM = 2450514.5;", 18 },
+    { "select DATUM from dbftest WHERE DATUM < 2450514.5;", 0 },
+    { "select DATUM from dbftest WHERE DATUM > 2450514.5;", 0 },
+    { "select DATUM from dbftest WHERE DATUM >= 2450514.5;", 18 },
+    { "select DATUM from dbftest WHERE DATUM <= 2450514.5;", 18 },
+    { "select DATUM from dbftest WHERE DATUM = 2450514.5;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 0.0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 1.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE != 0.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE Length > 0.0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE Length >= 0.0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE Length <= 0.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE Length > 1.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE Length > 0.1;", 10 },
+    { "select Length, HOEHE from dbftest WHERE Length < 0.1;", 8 },
+    { "select Length, HOEHE from dbftest WHERE Length >= 0.1;", 10 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE >= 0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE <= 0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE > 0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE < 0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 1;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE <= 1;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE >= 1;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE < 1;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE > -1;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE < -1;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE <= -1;", 0 },
+    { NULL, 0 }
+};
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF(\"shp/merano-3d/roads.dbf\", 'CP1252');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF('shp/merano-3d/roads.dbf', \"CP1252\");", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -4;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF('shp/merano-3d/roads.dbf', CP1252);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -6;
+    }
+    
+    for (i = 0; steps[i].sql; ++i) {
+	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
+	if (ret != SQLITE_OK) {
+	    fprintf (stderr, "Error: %s\n", err_msg);
+	    sqlite3_free (err_msg);
+	    return -7;
+	}
+	if (rows != steps[i].num_rows) {
+	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
+	    return  -8;
+	}
+	sqlite3_free_table (results);
+    }
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -9;
+    }
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_virtualtable6.c b/libspatialite/libspatialite-3.0.1/test/check_virtualtable6.c
new file mode 100644
index 0000000..eed08b4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_virtualtable6.c
@@ -0,0 +1,214 @@
+/*
+
+ check_virtualtable6.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_step
+{
+    const char *sql;
+    const int num_rows;
+};
+
+struct test_step steps[] = {
+    { "select DATUM, Geometry from shapetest WHERE DATUM = 2450514.5;", 18 },
+    { "select DATUM from shapetest WHERE DATUM < 2450514.5;", 0 },
+    { "select DATUM from shapetest WHERE DATUM > 2450514.5;", 0 },
+    { "select DATUM from shapetest WHERE DATUM >= 2450514.5;", 18 },
+    { "select DATUM from shapetest WHERE DATUM <= 2450514.5;", 18 },
+    { "select DATUM from shapetest WHERE DATUM = 2450514.5;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 0.0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 1.0;", 0 },
+    { "select Length, HOEHE, Geometry from shapetest WHERE HOEHE != 0.0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE Length > 0.0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE Length >= 0.0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE Length <= 0.0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE Length > 1.0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE Length > 0.1;", 10 },
+    { "select Length, HOEHE from shapetest WHERE Length < 0.1;", 8 },
+    { "select Length, HOEHE from shapetest WHERE Length >= 0.1;", 10 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE >= 0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE <= 0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE > 0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE < 0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 1;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE <= 1;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE >= 1;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE < 1;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE > -1;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE < -1;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE <= -1;", 0 },
+    { "select * from shapetest LIMIT 5 OFFSET 2;", 5 },
+    { NULL, 0 }
+};
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    const char *sql;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape('shp/merano-3d/roads', CP1252, 25832);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape(\"shp/merano-3d/roads\", 'CP1252', -1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -4;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE unquoted USING VirtualShape(shapetest1, UTF8, -1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -6;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE unquoted;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -7;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape('shp/merano-3d/roads', \"CP1252\", 25832);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -8;
+    }
+
+    for (i = 0; steps[i].sql; ++i) {
+	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
+	if (ret != SQLITE_OK) {
+	    fprintf (stderr, "Error: %s\n", err_msg);
+	    sqlite3_free (err_msg);
+	    return -9;
+	}
+	if (rows != steps[i].num_rows) {
+	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
+	    return  -10;
+	}
+	sqlite3_free_table (results);
+    }
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -11;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchfile USING VirtualShape(nosuchfile, UTF8, -1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -12;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchfile;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -13;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toofewargs USING VirtualShape(\"shapetest1\", UTF8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualShape unexpected result: %i\n", ret);
+	return -14;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toomanyargs USING VirtualShape(\"shapetest1\", UTF8, 4386, 1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualShape unexpected result: %i\n", ret);
+	return -15;
+    }
+    sqlite3_free (err_msg);
+    
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/check_xls_load.c b/libspatialite/libspatialite-3.0.1/test/check_xls_load.c
new file mode 100644
index 0000000..2b2c460
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/check_xls_load.c
@@ -0,0 +1,125 @@
+/*
+
+ check_xls_load.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_XL (handle, "./testcase1.xls", "test1", 0, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_XL() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 17) {
+	fprintf (stderr, "load_XL() unexpected row count: %u\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_XL (handle, "./testcase1.xls", "test2", 1, 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_XL() error sheet 2: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 19) {
+	fprintf (stderr, "load_XL() unexpected row count sheet 2: %u\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    check_duplicated_rows (handle, "test1", &row_count);
+    if (row_count != 0) {
+	fprintf (stderr, "check_duplicated_rows() unexpected duplicate count: %d\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    check_duplicated_rows (handle, "test2", &row_count);
+    if (row_count != 2) {
+	fprintf (stderr, "check_duplicated_rows() unexpected duplicate count sheet 2: %d\n", row_count);
+	sqlite3_close(handle);
+	return -10;
+    }
+
+    remove_duplicated_rows (handle, "test1");
+
+    remove_duplicated_rows (handle, "test2");
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -11;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/shape_3d.c b/libspatialite/libspatialite-3.0.1/test/shape_3d.c
new file mode 100644
index 0000000..489a5f4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shape_3d.c
@@ -0,0 +1,181 @@
+/*
+
+ shape_3d.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+void cleanup_shapefile(const char *filename)
+{
+    char nam[1000];
+    
+    if (!filename) {
+	return;
+    }
+    
+    snprintf(nam, 1000, "%s.dbf", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.prj", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shp", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shx", filename);
+    unlink(nam);
+}
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *dumpname = __FILE__"dump";
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/merano-3d/points", "points", "CP1252", 25832, 
+			  "col1", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/merano-3d/points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 20) {
+	fprintf (stderr, "unexpected row count for shp/merano-3d/points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/merano-3d/polygons", "polygons", "CP1252", 25832, 
+			  "col1", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/merano-3d/polygons: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for shp/merano-3d/polygons: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/merano-3d/roads", "roads", "CP1252", 25832, 
+			  "col1", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/merano-3d/roads: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 18) {
+	fprintf (stderr, "unexpected row count for shp/merano-3d/roads: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = dump_shapefile (handle, "roads", "col1", dumpname, "CP1252", "LINESTRING", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for 3d roads: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -9;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 18) {
+	fprintf (stderr, "unexpected row count for 3d roads: %i\n", row_count);
+	sqlite3_close(handle);
+	return -10;
+    }
+
+    ret = dump_shapefile (handle, "polygons", "col1", dumpname, "CP1252", "POLYGON", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for 3d polygons: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -11;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for 3d polygons: %i\n", row_count);
+	sqlite3_close(handle);
+	return -12;
+    }
+
+    ret = dump_shapefile (handle, "points", "col1", dumpname, "CP1252", "POINT", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for 3d points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -13;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 20) {
+	fprintf (stderr, "unexpected row count for 3d points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -14;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -15;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/shape_cp1252.c b/libspatialite/libspatialite-3.0.1/test/shape_cp1252.c
new file mode 100644
index 0000000..6e32f25
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shape_cp1252.c
@@ -0,0 +1,131 @@
+/*
+
+ shape_cp1252.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *dbfname = __FILE__"test.dbf";
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/new-caledonia/points", "points", "CP1252", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/new-caledonia/points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for shp/new-caledonia/points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/new-caledonia/railways", "railways", "CP1252", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/new-caledonia/railways: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 13) {
+	fprintf (stderr, "unexpected row count for shp/new-caledonia/points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/new-caledonia/buildings", "buildings", "CP1252", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/new-caledonia/buildings: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for shp/new-caledonia/buildings: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = dump_dbf (handle, "points", dbfname, "CP1252", err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_dbf() error for points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -9;
+    }
+    unlink(dbfname);
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -9;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/shape_utf8_1.c b/libspatialite/libspatialite-3.0.1/test/shape_utf8_1.c
new file mode 100644
index 0000000..4abed27
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shape_utf8_1.c
@@ -0,0 +1,168 @@
+/*
+
+ shape_utf8_1.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+void cleanup_shapefile(const char *filename)
+{
+    char nam[1000];
+    
+    if (!filename) {
+	return;
+    }
+    
+    snprintf(nam, 1000, "%s.dbf", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.prj", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shp", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shx", filename);
+    unlink(nam);
+}
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *dumpname = __FILE__"dump";
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/gaza/barrier", "barrier", "UTF-8", 4326, 
+			  NULL, 1, 0, 1, 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/gaza/barrier: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 5) {
+	fprintf (stderr, "unexpected row count for shp/gaza/barrier: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/gaza/aeroway", "aeroway", "UTF-8", 4326, 
+			  "col1", 1, 0, 0, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/gaza/aeroway: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 1) {
+	fprintf (stderr, "unexpected row count for shp/gaza/aeroway: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/gaza/route", "route", "UTF-8", 4326, 
+			  NULL, 1, 0, 1, 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/gaza/route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 2) {
+	fprintf (stderr, "unexpected row count for shp/gaza/route: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = dump_shapefile (handle, "route", "Geometry", dumpname, "UTF-8", "", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for UTF-8_1 route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -9;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 2) {
+	fprintf (stderr, "unexpected dump row count for UTF-8_1 route: %i\n", row_count);
+	sqlite3_close(handle);
+	return -10;
+    }
+
+    ret = dump_shapefile (handle, "route", "Geometry", dumpname, "UTF-8", "LINESTRING", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for UTF-8_1 route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -13;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 2) {
+	fprintf (stderr, "unexpected dump row count for UTF-8_1 route LINESTRING: %i\n", row_count);
+	sqlite3_close(handle);
+	return -14;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -15;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/shape_utf8_2.c b/libspatialite/libspatialite-3.0.1/test/shape_utf8_2.c
new file mode 100644
index 0000000..4229f61
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shape_utf8_2.c
@@ -0,0 +1,150 @@
+/*
+
+ shape_utf8_2.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *kmlname = __FILE__"test.kml";
+    char *geojsonname = __FILE__"test.geojson"; 
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/taiwan/hystoric", "hystoric", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/taiwan/hystoric: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 15) {
+	fprintf (stderr, "unexpected row count for shp/taiwan/hystoric: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/taiwan/leisure", "leisure", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/taiwan/leisure: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 5) {
+	fprintf (stderr, "unexpected row count for shp/taiwan/leisure: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/taiwan/route", "route", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/taiwan/route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 4) {
+	fprintf (stderr, "unexpected row count for shp/taiwan/route: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    if (is_kml_constant (handle, "route", "name")) {
+	fprintf(stderr, "unexpected result for is_kml_constant (1)\n");
+	return -9;
+    }
+    if (! is_kml_constant (handle, "route", "foo")) {
+	fprintf(stderr, "unexpected result for is_kml_constant (2)\n");
+	return -10;
+    }
+    
+    ret = dump_kml (handle, "route", "col1", kmlname, NULL, NULL, 10);
+    if (!ret) {
+        fprintf (stderr, "dump_kml() error for shp/taiwan/route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -11;
+    }
+    unlink(kmlname);
+
+    ret = dump_geojson(handle, "route", "col1", geojsonname, 10, 5);
+    if (!ret) {
+        fprintf (stderr, "dump_geojson() error for shp/taiwan/route: %s\n", err_msg);
+       sqlite3_close(handle);
+       return -12;
+    }
+    unlink(geojsonname);
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -13;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/libspatialite-3.0.1/test/shapetest1.dbf b/libspatialite/libspatialite-3.0.1/test/shapetest1.dbf
new file mode 100644
index 0000000..8d914b1
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shapetest1.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shapetest1.prj b/libspatialite/libspatialite-3.0.1/test/shapetest1.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shapetest1.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/shapetest1.qpj b/libspatialite/libspatialite-3.0.1/test/shapetest1.qpj
new file mode 100644
index 0000000..edb0142
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shapetest1.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shapetest1.shp b/libspatialite/libspatialite-3.0.1/test/shapetest1.shp
new file mode 100644
index 0000000..6c1d7ff
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shapetest1.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shapetest1.shx b/libspatialite/libspatialite-3.0.1/test/shapetest1.shx
new file mode 100644
index 0000000..5124cfd
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shapetest1.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.dbf b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.dbf
new file mode 100644
index 0000000..4d5e819
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.prj b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.prj
new file mode 100644
index 0000000..152d9d7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.prj
@@ -0,0 +1 @@
+PROJCS["ED50 / UTM zone 32N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.shp b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.shp
new file mode 100644
index 0000000..ba18fff
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.shx b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.shx
new file mode 100644
index 0000000..5ee7429
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/foggia/local_councils.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.dbf b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.dbf
new file mode 100644
index 0000000..f72da79
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.prj b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.shp b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.shp
new file mode 100644
index 0000000..0ddc32c
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.shx b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.shx
new file mode 100644
index 0000000..63a857e
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/aeroway.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.dbf b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.dbf
new file mode 100644
index 0000000..c515011
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.prj b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.shp b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.shp
new file mode 100644
index 0000000..92e061b
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.shx b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.shx
new file mode 100644
index 0000000..2029cff
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/barrier.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.dbf b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.dbf
new file mode 100644
index 0000000..2bdc31c
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.prj b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.shp b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.shp
new file mode 100644
index 0000000..d7d72a3
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.shx b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.shx
new file mode 100644
index 0000000..1c6578d
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/gaza/route.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.dbf b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.dbf
new file mode 100644
index 0000000..49b67a4
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.prj b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.prj
new file mode 100644
index 0000000..9ff5cda
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.prj
@@ -0,0 +1 @@
+PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.shp b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.shp
new file mode 100644
index 0000000..511ba4c
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.shx b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.shx
new file mode 100644
index 0000000..9b86b63
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/points.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.dbf b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.dbf
new file mode 100644
index 0000000..64f2715
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.prj b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.prj
new file mode 100644
index 0000000..9ff5cda
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.prj
@@ -0,0 +1 @@
+PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.shp b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.shp
new file mode 100644
index 0000000..d3c7a5a
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.shx b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.shx
new file mode 100644
index 0000000..d87cedb
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/polygons.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.dbf b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.dbf
new file mode 100644
index 0000000..7324026
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.prj b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.prj
new file mode 100644
index 0000000..9ff5cda
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.prj
@@ -0,0 +1 @@
+PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.shp b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.shp
new file mode 100644
index 0000000..70573d9
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.shx b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.shx
new file mode 100644
index 0000000..72032ee
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/merano-3d/roads.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.dbf b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.dbf
new file mode 100644
index 0000000..02bb2a3
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.prj b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.shp b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.shp
new file mode 100644
index 0000000..fb965a7
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.shx b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.shx
new file mode 100644
index 0000000..3f8bd9b
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/buildings.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.dbf b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.dbf
new file mode 100644
index 0000000..1d6da57
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.prj b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.shp b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.shp
new file mode 100644
index 0000000..592b275
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.shx b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.shx
new file mode 100644
index 0000000..68fcc36
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/points.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.dbf b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.dbf
new file mode 100644
index 0000000..2c6c35f
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.shp b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.shp
new file mode 100644
index 0000000..85db7ba
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.shx b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.shx
new file mode 100644
index 0000000..8bc271d
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/new-caledonia/railways.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.dbf b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.dbf
new file mode 100644
index 0000000..67de617
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.prj b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.shp b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.shp
new file mode 100644
index 0000000..75bb113
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.shx b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.shx
new file mode 100644
index 0000000..3cde1b8
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/hystoric.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.dbf b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.dbf
new file mode 100644
index 0000000..07bbebb
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.prj b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.shp b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.shp
new file mode 100644
index 0000000..a871613
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.shx b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.shx
new file mode 100644
index 0000000..bd0a93e
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/leisure.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.dbf b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.dbf
new file mode 100644
index 0000000..d749b0a
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.dbf differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.prj b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.shp b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.shp
new file mode 100644
index 0000000..812ba13
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.shp differ
diff --git a/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.shx b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.shx
new file mode 100644
index 0000000..1bcc91d
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/shp/taiwan/route.shx differ
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints.testcase
new file mode 100644
index 0000000..6fcec7f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints.testcase
@@ -0,0 +1,7 @@
+NumPoints - bad blob (error)
+:memory: #use in-memory database
+SELECT NumPoints(zeroblob(12));
+1 # rows (not including the header row)
+1 # column
+NumPoints(zeroblob(12))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints2.testcase
new file mode 100644
index 0000000..c3c30df
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints2.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRING(0 0, 1 2)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRING(0 0, 1 2)"))
+2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints3.testcase
new file mode 100644
index 0000000..487ab10
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints3.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line Z
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRINGZ(0 0 0, 1 2 1)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRINGZ(0 0 0, 1 2 1)"))
+2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints4.testcase
new file mode 100644
index 0000000..076b536
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints4.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line M
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRINGM(0 0 0, 1 2 1)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRINGM(0 0 0, 1 2 1)"))
+2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints5.testcase
new file mode 100644
index 0000000..955a824
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints5.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line ZM
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRINGZM(0 0 0 1, 1 2 1 2)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRINGZM(0 0 0 1, 1 2 1 2)"))
+2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints6.testcase
new file mode 100644
index 0000000..5c0b337
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints6.testcase
@@ -0,0 +1,7 @@
+NumPoints - text (error)
+:memory: #use in-memory database
+SELECT NumPoints("hello");
+1 # rows (not including the header row)
+1 # column
+NumPoints("hello")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints7.testcase
new file mode 100644
index 0000000..cc2b0a3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/NumPoints7.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line Z
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("POINT(0 0)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("POINT(0 0)"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos-text.testcase
new file mode 100644
index 0000000..10c6848
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos-text.testcase
@@ -0,0 +1,7 @@
+acos-text # check of text argument to acos()
+:memory: #use in-memory database
+SELECT acos("test");
+1 # rows (not including the header row)
+1 # columns
+acos("test") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos.testcase
new file mode 100644
index 0000000..d9847ef
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos.testcase
@@ -0,0 +1,7 @@
+acos(1)
+:memory: #use in-memory database
+SELECT acos(1);
+1 # rows (not including the header row)
+1 # columns
+acos(1) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos10.testcase
new file mode 100644
index 0000000..fbaf4b4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos10.testcase
@@ -0,0 +1,7 @@
+acos(1.0)
+:memory: #use in-memory database
+SELECT acos(1.0);
+1 # rows (not including the header row)
+1 # columns
+acos(1.0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos2.testcase
new file mode 100644
index 0000000..a1604ad
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos2.testcase
@@ -0,0 +1,7 @@
+acos(2)
+:memory: #use in-memory database
+SELECT acos(2);
+1 # rows (not including the header row)
+1 # columns
+acos(2) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos20.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos20.testcase
new file mode 100644
index 0000000..0c61a1a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/acos20.testcase
@@ -0,0 +1,7 @@
+acos(2.0)
+:memory: #use in-memory database
+SELECT acos(2.0);
+1 # rows (not including the header row)
+1 # columns
+acos(2.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson1.testcase
new file mode 100644
index 0000000..d1bb649
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson1.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (broken blob, 2 arg)
+:memory: #use in-memory database
+SELECT asgeojson(zeroblob(20), 4);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(zeroblob(20), 4)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson2.testcase
new file mode 100644
index 0000000..54ae340
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson2.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (non-blob, 2 arg)
+:memory: #use in-memory database
+SELECT asgeojson("hello", 4);
+1 # rows (not including the header row)
+1 # columns
+asgeojson("hello", 4)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson3.testcase
new file mode 100644
index 0000000..0f6597c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson3.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (2 arg, bad precision)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4.2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4.2)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson4.testcase
new file mode 100644
index 0000000..d7381e1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson4.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, bad precision)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4.2, 2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4.2, 2)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson5.testcase
new file mode 100644
index 0000000..3b229e2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson5.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, bad option type)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4, 2.2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4, 2.2)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson6.testcase
new file mode 100644
index 0000000..9411a26
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson6.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, non-blob type)
+:memory: #use in-memory database
+SELECT asgeojson("hello", 4, 2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson("hello", 4, 2)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson7.testcase
new file mode 100644
index 0000000..7834e23
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgeojson7.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, out of range option)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4, 22);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4, 22)
+{"type":"Point","coordinates":[1,2]}:0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml1.testcase
new file mode 100644
index 0000000..c31adaa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml1.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (broken blob)
+:memory: #use in-memory database
+SELECT asgml(zeroblob(20));
+1 # rows (not including the header row)
+1 # columns
+asgml(zeroblob(20))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml10.testcase
new file mode 100644
index 0000000..9081492
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml10.testcase
@@ -0,0 +1,7 @@
+asgml - 2 arg
+:memory: #use in-memory database
+SELECT asgml(GeomFromText("Point(1 2)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+asgml(GeomFromText("Point(1 2)", 4326), 4)
+<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>:0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml11.testcase
new file mode 100644
index 0000000..3dee931
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml11.testcase
@@ -0,0 +1,7 @@
+asgml - 2 arg
+:memory: #use in-memory database
+SELECT asgml(2, "hello");
+1 # rows (not including the header row)
+1 # columns
+asgml(2, "hello")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml2.testcase
new file mode 100644
index 0000000..7fd77de
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml2.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (broken blob, 2 arg)
+:memory: #use in-memory database
+SELECT asgml(2, zeroblob(20));
+1 # rows (not including the header row)
+1 # columns
+asgml(2, zeroblob(20))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml3.testcase
new file mode 100644
index 0000000..aae487c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml3.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (broken blob, 3 arg)
+:memory: #use in-memory database
+SELECT asgml(2, zeroblob(20), 5);
+1 # rows (not including the header row)
+1 # columns
+asgml(2, zeroblob(20), 5)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml4.testcase
new file mode 100644
index 0000000..cffeaf9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml4.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-blob, 3 arg)
+:memory: #use in-memory database
+SELECT asgml(2, "hello", 5);
+1 # rows (not including the header row)
+1 # columns
+asgml(2, "hello", 5)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml5.testcase
new file mode 100644
index 0000000..cffeaf9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml5.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-blob, 3 arg)
+:memory: #use in-memory database
+SELECT asgml(2, "hello", 5);
+1 # rows (not including the header row)
+1 # columns
+asgml(2, "hello", 5)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml6.testcase
new file mode 100644
index 0000000..af45329
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml6.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int, 2 arg)
+:memory: #use in-memory database
+SELECT asgml("hello", GeomFromText("Point(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+asgml("hello", GeomFromText("Point(1 2)"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml7.testcase
new file mode 100644
index 0000000..d433188
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml7.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int, 3 arg)
+:memory: #use in-memory database
+SELECT asgml("hello", GeomFromText("Point(1 2)"), 4);
+1 # rows (not including the header row)
+1 # columns
+asgml("hello", GeomFromText("Point(1 2)"), 4)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml8.testcase
new file mode 100644
index 0000000..301dcaa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml8.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int 3rd arg)
+:memory: #use in-memory database
+SELECT asgml(3, GeomFromText("Point(1 2)"), "four");
+1 # rows (not including the header row)
+1 # columns
+asgml(3, GeomFromText("Point(1 2)"), "four")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml9.testcase
new file mode 100644
index 0000000..c086797
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asgml9.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int 2nd arg)
+:memory: #use in-memory database
+SELECT asgml(GeomFromText("Point(1 2)"), "four");
+1 # rows (not including the header row)
+1 # columns
+asgml(GeomFromText("Point(1 2)"), "four")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin-text.testcase
new file mode 100644
index 0000000..0cce86d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin-text.testcase
@@ -0,0 +1,7 @@
+asin-text # check of text argument to asin()
+:memory: #use in-memory database
+SELECT asin("test");
+1 # rows (not including the header row)
+1 # columns
+asin("test") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin1.testcase
new file mode 100644
index 0000000..bb00f60
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin1.testcase
@@ -0,0 +1,7 @@
+asin(1)
+:memory: #use in-memory database
+SELECT asin(1);
+1 # rows (not including the header row)
+1 # columns
+asin(1) # header
+1.570796326794:14 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin10.testcase
new file mode 100644
index 0000000..a9f752b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin10.testcase
@@ -0,0 +1,7 @@
+asin(1.0)
+:memory: #use in-memory database
+SELECT asin(1.0);
+1 # rows (not including the header row)
+1 # columns
+asin(1.0) # header
+1.570796326794:14 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin2.testcase
new file mode 100644
index 0000000..8ed485d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin2.testcase
@@ -0,0 +1,7 @@
+asin(2)
+:memory: #use in-memory database
+SELECT asin(2);
+1 # rows (not including the header row)
+1 # columns
+asin(2) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin20.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin20.testcase
new file mode 100644
index 0000000..a437a45
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/asin20.testcase
@@ -0,0 +1,7 @@
+asin(2.0)
+:memory: #use in-memory database
+SELECT asin(2.0);
+1 # rows (not including the header row)
+1 # columns
+asin(2.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml1.testcase
new file mode 100644
index 0000000..2197d26
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml1.testcase
@@ -0,0 +1,7 @@
+askml - 2 arg bad precision (error)
+:memory: #use in-memory database
+SELECT askml(GeomFromText("Point(1 2)", 4326), "hello")
+1 # rows (not including the header row)
+1 # columns
+askml(GeomFromText("Point(1 2)", 4326), "hello")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml2.testcase
new file mode 100644
index 0000000..7a59fb9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml2.testcase
@@ -0,0 +1,7 @@
+askml - 2 arg weird SRID (error)
+:memory: #use in-memory database
+SELECT askml(GeomFromText("Point(1 2)", 9999989), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(GeomFromText("Point(1 2)", 9999989), 4)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml3.testcase
new file mode 100644
index 0000000..7184d3f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml3.testcase
@@ -0,0 +1,7 @@
+askml - 4 arg int descriptions
+:memory: #use in-memory database
+SELECT askml(2, 3, GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(2, 3, GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>2</name><description>3</description><Point><coordinates>1,2</coordinates></Point></Placemark>
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml4.testcase
new file mode 100644
index 0000000..dd5d254
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml4.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg float descriptions
+:memory: #use in-memory database
+SELECT askml(2.5, 3.2, GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(2.5, 3.2, GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>2.500000</name><description>3.200000</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml5.testcase
new file mode 100644
index 0000000..fd48289
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml5.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>BLOB</name><description>BLOB</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml6.testcase
new file mode 100644
index 0000000..6ba20e8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml6.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions, bad precision (error)
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4.2)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4.2)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml7.testcase
new file mode 100644
index 0000000..b4b9ec9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml7.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions, weird SRID (error)
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 9999989), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 9999989), 4)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml8.testcase
new file mode 100644
index 0000000..b53d017
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml8.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions, GDA94
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4283), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4283), 4)
+<Placemark><name>BLOB</name><description>BLOB</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml9.testcase
new file mode 100644
index 0000000..811da35
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/askml9.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg null descriptions
+:memory: #use in-memory database
+SELECT askml(null, null, GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(null, null, GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>NULL</name><description>NULL</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/aswkt-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/aswkt-text.testcase
new file mode 100644
index 0000000..cb46865
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/aswkt-text.testcase
@@ -0,0 +1,7 @@
+aswkt-text
+:memory: #use in-memory database
+SELECT AsWkt("not a blob", 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt("not a blob", 4)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan-text.testcase
new file mode 100644
index 0000000..f3e0a9d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan-text.testcase
@@ -0,0 +1,8 @@
+atan-text
+:memory: # use in-memory database
+SELECT atan('test');
+1 # rows (not including the header row)
+1 # columns
+atan('test') # header
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan0.testcase
new file mode 100644
index 0000000..ee53585
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan0.testcase
@@ -0,0 +1,7 @@
+atan(0)
+:memory: #use in-memory database
+SELECT atan(0);
+1 # rows (not including the header row)
+1 # columns
+atan(0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan00.testcase
new file mode 100644
index 0000000..82962a4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/atan00.testcase
@@ -0,0 +1,7 @@
+atan(0.0)
+:memory: # use in-memory database
+SELECT atan(0.0);
+1 # rows (not including the header row)
+1 # columns
+atan(0.0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer1.testcase
new file mode 100644
index 0000000..4db5c82
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer1.testcase
@@ -0,0 +1,8 @@
+buffer1
+:memory: #use in-memory database
+SELECT AsText(Buffer(GeomFromText("LINESTRING(0 0, 1 0)"), 0.2));
+1 # rows (not including the header row)
+1 # columns
+AsText(Buffer(GeomFromText("LINESTRING(0 0, 1 0)"), 0.2))
+POLYGON((1 0.2, 1.010467 0.199726, 1.020906 0.198904, 1.031287 0.197538, 1.041582 0.19563, 1.051764 0.193185, 1.061803 0.190211, 1.071674 0.186716, 1.081347 0.182709, 1.090798 0.178201, 1.1 0.173205, 1.108928 0.167734, 1.117557 0.161803, 1.125864 0.155429, 1.133826 0.148629, 1.141421 0.141421, 1.148629 0.133826, 1.155429 0.125864, 1.161803 0.117557, 1.167734 0.108928, 1.173205 0.1, 1.178201 0.090798, 1.182709 0.081347, 1.186716 0.071674, 1.190211 0.061803, 1.193185 0.051764, 1.19563 0.041582, 1.197538 0.031287, 1.198904 0.020906, 1.199726 0.010467, 1.2 0, 1.199726 -0.010467, 1.198904 -0.020906, 1.197538 -0.031287, 1.19563 -0.041582, 1.193185 -0.051764, 1.190211 -0.061803, 1.186716 -0.071674, 1.182709 -0.081347, 1.178201 -0.090798, 1.173205 -0.1, 1.167734 -0.108928, 1.161803 -0.117557, 1.155429 -0.125864, 1.148629 -0.133826, 1.141421 -0.141421, 1.133826 -0.148629, 1.125864 -0.155429, 1.117557 -0.161803, 1.108928 -0.167734, 1.1 -0.173205, 1.090798 -0.178201, 1.081347 -0.182709, 1.071674 -0.186716, 1.061803 -0.190211, 1.051764 -0.193185, 1.041582 -0.19563, 1.031287 -0.197538, 1.020906 -0.198904, 1.010467 -0.199726, 1 -0.2, 0 -0.2, -0.010467 -0.199726, -0.020906 -0.198904, -0.031287 -0.197538, -0.041582 -0.19563, -0.051764 -0.193185, -0.061803 -0.190211, -0.071674 -0.186716, -0.081347 -0.182709, -0.090798 -0.178201, -0.1 -0.173205, -0.108928 -0.167734, -0.117557 -0.161803, -0.125864 -0.155429, -0.133826 -0.148629, -0.141421 -0.141421, -0.148629 -0.133826, -0.155429 -0.125864, -0.161803 -0.117557, -0.167734 -0.108928, -0.173205 -0.1, -0.178201 -0.090798, -0.182709 -0.081347, -0.186716 -0.071674, -0.190211 -0.061803, -0.193185 -0.051764, -0.19563 -0.041582, -0.197538 -0.031287, -0.198904 -0.020906, -0.199726 -0.010467, -0.2 -0, -0.199726 0.010467, -0.198904 0.020906, -0.197538 0.031287, -0.19563 0.041582, -0.193185 0.051764, -0.190211 0.061803, -0.186716 0.071674, -0.182709 0.081347, -0.178201 0.090798, -0.173205 0.1, -0.167734 0.108928, -0.161803 0.117557, -0.155429 0.125864, -0.148629 0.133826, -0.141421 0.141421, -0.133826 0.148629, -0.125864 0.155429, -0.117557 0.161803, -0.108928 0.167734, -0.1 0.173205, -0.090798 0.178201, -0.081347 0.182709, -0.071674 0.186716, -0.061803 0.190211, -0.051764 0.193185, -0.041582 0.19563, -0.031287 0.197538, -0.020906 0.198904, -0.010467 0.199726, -0 0.2, 1 0.2))
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer2.testcase
new file mode 100644
index 0000000..e718dad
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer2.testcase
@@ -0,0 +1,8 @@
+buffer2
+:memory: #use in-memory database
+SELECT AsText(Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), 1))
+POLYGON((100 1, 100.052336 0.99863, 100.104528 0.994522, 100.156434 0.987688, 100.207912 0.978148, 100.258819 0.965926, 100.309017 0.951057, 100.358368 0.93358, 100.406737 0.913545, 100.45399 0.891007, 100.5 0.866025, 100.544639 0.838671, 100.587785 0.809017, 100.62932 0.777146, 100.669131 0.743145, 100.707107 0.707107, 100.743145 0.669131, 100.777146 0.62932, 100.809017 0.587785, 100.838671 0.544639, 100.866025 0.5, 100.891007 0.45399, 100.913545 0.406737, 100.93358 0.358368, 100.951057 0.309017, 100.965926 0.258819, 100.978148 0.207912, 100.987688 0.156434, 100.994522 0.104528, 100.99863 0.052336, 101 0, 100.99863 -0.052336, 100.994522 -0.104528, 100.987688 -0.156434, 100.978148 -0.207912, 100.965926 -0.258819, 100.951057 -0.309017, 100.93358 -0.358368, 100.913545 -0.406737, 100.891007 -0.45399, 100.866025 -0.5, 100.838671 -0.544639, 100.809017 -0.587785, 100.777146 -0.62932, 100.743145 -0.669131, 100.707107 -0.707107, 100.669131 -0.743145, 100.62932 -0.777146, 100.587785 -0.809017, 100.544639 -0.838671, 100.5 -0.866025, 100.45399 -0.891007, 100.406737 -0.913545, 100.358368 -0.93358, 100.309017 -0.951057, 100.258819 -0.965926, 100.207912 -0.978148, 100.156434 -0.987688, 100.104528 -0.994522, 100.052336 -0.99863, 100 -1, 0 -1, -0.052336 -0.99863, -0.104528 -0.994522, -0.156434 -0.987688, -0.207912 -0.978148, -0.258819 -0.965926, -0.309017 -0.951057, -0.358368 -0.93358, -0.406737 -0.913545, -0.45399 -0.891007, -0.5 -0.866025, -0.544639 -0.838671, -0.587785 -0.809017, -0.62932 -0.777146, -0.669131 -0.743145, -0.707107 -0.707107, -0.743145 -0.669131, -0.777146 -0.62932, -0.809017 -0.587785, -0.838671 -0.544639, -0.866025 -0.5, -0.891007 -0.45399, -0.913545 -0.406737, -0.93358 -0.358368, -0.951057 -0.309017, -0.965926 -0.258819, -0.978148 -0.207912, -0.987688 -0.156434, -0.994522 -0.104528, -0.99863 -0.052336, -1 -0, -0.99863 0.052336, -0.994522 0.104528, -0.987688 0.156434, -0.978148 0.207912, -0.965926 0.258819, -0.951057 0.309017, -0.93358 0.358368, -0.913545 0.406737, -0.891007 0.45399, -0.866025 0.5, -0.838671 0.544639, -0.809017 0.587785, -0.777146 0.62932, -0.743145 0.669131, -0.707107 0.707107, -0.669131 0.743145, -0.62932 0.777146, -0.587785 0.809017, -0.544639 0.838671, -0.5 0.866025, -0.45399 0.891007, -0.406737 0.913545, -0.358368 0.93358, -0.309017 0.951057, -0.258819 0.965926, -0.207912 0.978148, -0.156434 0.987688, -0.104528 0.994522, -0.052336 0.99863, -0 1, 100 1))
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer3.testcase
new file mode 100644
index 0000000..110281f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer3.testcase
@@ -0,0 +1,7 @@
+buffer3
+:memory: #use in-memory database
+SELECT Buffer("foo", 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer("foo", 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer4.testcase
new file mode 100644
index 0000000..92abc64
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer4.testcase
@@ -0,0 +1,7 @@
+buffer4
+:memory: #use in-memory database
+SELECT Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), "foo");
+1 # rows (not including the header row)
+1 # columns
+Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), "foo")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer5.testcase
new file mode 100644
index 0000000..c5029e2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer5.testcase
@@ -0,0 +1,7 @@
+buffer5
+:memory: #use in-memory database
+SELECT Buffer(zeroblob(40), 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer(zeroblob(40), 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer6.testcase
new file mode 100644
index 0000000..01ab4b6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer6.testcase
@@ -0,0 +1,7 @@
+buffer6
+:memory: #use in-memory database
+SELECT Buffer(GeomFromText("LINESTRING()"), 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer(GeomFromText("LINESTRING()"), 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer7.testcase
new file mode 100644
index 0000000..84fa38c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/buffer7.testcase
@@ -0,0 +1,7 @@
+buffer7
+:memory: #use in-memory database
+SELECT Buffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceil-int.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceil-int.testcase
new file mode 100644
index 0000000..819cbf3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceil-int.testcase
@@ -0,0 +1,7 @@
+ceil(integer) # integer input - this is just the name remember
+:memory:
+SELECT ceil(3); # the SQL to run
+1 # rows
+1 # column
+ceil(3) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilfloat.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilfloat.testcase
new file mode 100644
index 0000000..22d5d2d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilfloat.testcase
@@ -0,0 +1,7 @@
+ceil-float
+:memory:
+SELECT ceil(3.0); # the SQL to run
+1 # rows
+1 # column
+ceil(3.0) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilfloat2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilfloat2.testcase
new file mode 100644
index 0000000..338b171
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilfloat2.testcase
@@ -0,0 +1,7 @@
+ceil-float2
+:memory:
+SELECT ceil(3.1); # the SQL to run
+1 # rows
+1 # column
+ceil(3.1) # this is the header row
+4.0 # this is really the result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilnull.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilnull.testcase
new file mode 100644
index 0000000..99bb1ac
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ceilnull.testcase
@@ -0,0 +1,7 @@
+ceil(null) # text input, expecting null output
+:memory:
+SELECT ceil("some text"); # the SQL to run
+1 # rows
+1 # columns
+ceil("some text") # this is the header row
+(NULL) # this is really the result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ch_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ch_m.testcase
new file mode 100644
index 0000000..8cbbed2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ch_m.testcase
@@ -0,0 +1,7 @@
+chains to metres
+:memory: #use in-memory database
+SELECT CvtFromCh(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromCh(100);
+2011.68
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata1.testcase
new file mode 100644
index 0000000..05a499d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata1.testcase
@@ -0,0 +1,7 @@
+checkspatialmetadata
+:memory: #use in-memory database
+SELECT CheckSpatialMetaData()
+1 # rows (not including the header row)
+1 # columns
+CheckSpatialMetaData()
+1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata2.testcase
new file mode 100644
index 0000000..fdffee1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata2.testcase
@@ -0,0 +1,7 @@
+checkspatialmetadata - pure sqlite3
+sql_stmt_tests/trivial.sqlite_RO #use special test database, read only
+SELECT CheckSpatialMetaData()
+1 # rows (not including the header row)
+1 # columns
+CheckSpatialMetaData()
+0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata3.testcase
new file mode 100644
index 0000000..922dafb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/checkspatialmetadata3.testcase
@@ -0,0 +1,7 @@
+checkspatialmetadata - FDO
+sql_stmt_tests/fdo-wkb.sqlite_RO #use special test database, read only
+SELECT CheckSpatialMetaData()
+1 # rows (not including the header row)
+1 # columns
+CheckSpatialMetaData()
+2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint1.testcase
new file mode 100644
index 0000000..9b3480f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint1.testcase
@@ -0,0 +1,8 @@
+Closest Point - two points
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(MakePoint(1, 2), MakePoint(4, 6)));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(MakePoint(1, 2), MakePoint(4, 6)))
+POINT(1 2)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint10.testcase
new file mode 100644
index 0000000..06e4ada
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint10.testcase
@@ -0,0 +1,8 @@
+Closest Point - Point and line
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), MakePoint(4, 6)));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), MakePoint(4, 6)))
+POINT(0 6)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint11.testcase
new file mode 100644
index 0000000..b2d4da6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint11.testcase
@@ -0,0 +1,8 @@
+Closest Point - Point and lineZ
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)"), MakePoint(4, 6)));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)"), MakePoint(4, 6)))
+POINT Z(0 6 3)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint12.testcase
new file mode 100644
index 0000000..c814ef8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint12.testcase
@@ -0,0 +1,8 @@
+Closest Point - PointZ and line
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), GeomFromText("POINTZ(4 6 4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), GeomFromText("POINTZ(4 6 4)")))
+POINT(0 6)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint13.testcase
new file mode 100644
index 0000000..d4fe2fe
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint13.testcase
@@ -0,0 +1,8 @@
+Closest Point - lineZ and Point
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(MakePoint(4, 6), GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(MakePoint(4, 6), GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)")))
+POINT(4 6)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint14.testcase
new file mode 100644
index 0000000..8e401e2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint14.testcase
@@ -0,0 +1,8 @@
+Closest Point - LINE AND PointZ
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTZ(4 6 4)"), GeomFromText("LINESTRING(0 0, 0 10)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTZ(4 6 4)"), GeomFromText("LINESTRING(0 0, 0 10)")))
+POINT Z(4 6 4)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint15.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint15.testcase
new file mode 100644
index 0000000..bfefd70
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint15.testcase
@@ -0,0 +1,8 @@
+Closest Point - toxic geom
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), MakePoint(130, -35)))
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), MakePoint(130, -35)))
+POINT(135.2 -34.5)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint16.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint16.testcase
new file mode 100644
index 0000000..36deea9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint16.testcase
@@ -0,0 +1,8 @@
+Closest Point - toxic geom + line
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), GeomFromText("LINESTRING(130 -35, 0 0)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), GeomFromText("LINESTRING(130 -35, 0 0)")))
+POINT(135.2 -34.5)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint2.testcase
new file mode 100644
index 0000000..0c023e9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint2.testcase
@@ -0,0 +1,8 @@
+Closest Point - coincident points
+:memory: #use in-memory database
+SELECT ClosestPoint(MakePoint(1, 2), MakePoint(1, 2));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(MakePoint(1, 2), MakePoint(1, 2))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint3.testcase
new file mode 100644
index 0000000..a1d8a63
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint3.testcase
@@ -0,0 +1,8 @@
+Closest Point - bad first geom
+:memory: #use in-memory database
+SELECT ClosestPoint(zeroblob(67), MakePoint(1, 2));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(zeroblob(67), MakePoint(1, 2))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint4.testcase
new file mode 100644
index 0000000..75d18dd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint4.testcase
@@ -0,0 +1,8 @@
+Closest Point - bad second blob
+:memory: #use in-memory database
+SELECT ClosestPoint(MakePoint(1, 2), zeroblob(25));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(MakePoint(1, 2), zeroblob(25))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint5.testcase
new file mode 100644
index 0000000..8c4be8a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint5.testcase
@@ -0,0 +1,8 @@
+Closest Point - text first geom
+:memory: #use in-memory database
+SELECT ClosestPoint("world", MakePoint(1, 2));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint("world", MakePoint(1, 2))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint6.testcase
new file mode 100644
index 0000000..d341fb6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint6.testcase
@@ -0,0 +1,8 @@
+Closest Point - text second blob
+:memory: #use in-memory database
+SELECT ClosestPoint(MakePoint(1, 2), "hello");
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(MakePoint(1, 2), "hello")
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint7.testcase
new file mode 100644
index 0000000..f07738a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint7.testcase
@@ -0,0 +1,8 @@
+Closest Point - two pointZs
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTZ(1 2 3)"), GeomFromText("POINTZ(4 6 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTZ(1 2 3)"), GeomFromText("POINTZ(4 6 0)")))
+POINT Z(1 2 3)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint8.testcase
new file mode 100644
index 0000000..dd5addd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint8.testcase
@@ -0,0 +1,8 @@
+Closest Point - two pointMs
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTM(1 2 4)"), GeomFromText("POINTM(4 6 5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTM(1 2 4)"), GeomFromText("POINTM(4 6 5)")))
+POINT M(1 2 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint9.testcase
new file mode 100644
index 0000000..a717cb0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/closestpoint9.testcase
@@ -0,0 +1,8 @@
+Closest Point - two pointZMs
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTZM(1 2 0 4)"), GeomFromText("POINTZM(4 6 1 5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTZM(1 2 0 4)"), GeomFromText("POINTZM(4 6 1 5)")))
+POINT ZM(1 2 0 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cm_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cm_m.testcase
new file mode 100644
index 0000000..e3b9758
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cm_m.testcase
@@ -0,0 +1,7 @@
+centimetres to metres
+:memory: #use in-memory database
+SELECT CvtFromCm(-2100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromCm(-2100);
+-21.0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract1.testcase
new file mode 100644
index 0000000..40af387
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract1.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 1))
+MULTIPOINT(1 2)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract2.testcase
new file mode 100644
index 0000000..19a2369
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract2.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point (NULL)
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 2))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract3.testcase
new file mode 100644
index 0000000..051532e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract3.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point (NULL)
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 3));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 3))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract4.testcase
new file mode 100644
index 0000000..213e0aa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract4.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point invalid type
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 4));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 4))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract5.testcase
new file mode 100644
index 0000000..49bbdb3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract5.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point invalid type 0
+:memory: #use in-memory database
+SELECT CollectionExtract(GeomFromText("POINT(1 2)"), 0);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(GeomFromText("POINT(1 2)"), 0)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract6.testcase
new file mode 100644
index 0000000..38a5753
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract6.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Bad blob
+:memory: #use in-memory database
+SELECT CollectionExtract(zeroblob(4), 0);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(zeroblob(4), 0)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract7.testcase
new file mode 100644
index 0000000..6f83e87
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract7.testcase
@@ -0,0 +1,8 @@
+Collection Extract - text arg
+:memory: #use in-memory database
+SELECT CollectionExtract("text", 1);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract("text", 1)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract8.testcase
new file mode 100644
index 0000000..578cc9f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract8.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point Float idx (NULL)
+:memory: #use in-memory database
+SELECT CollectionExtract(GeomFromText("POINT(1 2)"), 3.2);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(GeomFromText("POINT(1 2)"), 3.2)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract9.testcase
new file mode 100644
index 0000000..5a6677d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/collectextract9.testcase
@@ -0,0 +1,8 @@
+Collection Extract - bad blob (NULL)
+:memory: #use in-memory database
+SELECT CollectionExtract(zeroblob(40), 3);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(zeroblob(40), 3)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos-text.testcase
new file mode 100644
index 0000000..e105038
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos-text.testcase
@@ -0,0 +1,7 @@
+cos-text
+:memory: #use in-memory database
+SELECT cos('test');
+1 # rows (not including the header row)
+1 # columns
+cos('test') # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos0.testcase
new file mode 100644
index 0000000..7831518
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos0.testcase
@@ -0,0 +1,7 @@
+cos(0)
+:memory: #use in-memory database
+SELECT cos(0);
+1 # rows (not including the header row)
+1 # columns
+cos(0) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos00.testcase
new file mode 100644
index 0000000..c3d2a60
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cos00.testcase
@@ -0,0 +1,7 @@
+cos(0.0)
+:memory: #use in-memory database
+SELECT cos(0.0);
+1 # rows (not including the header row)
+1 # columns
+cos(0.0) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot-text.testcase
new file mode 100644
index 0000000..08eff3b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot-text.testcase
@@ -0,0 +1,7 @@
+cot(text)
+:memory: #use in-memory database
+SELECT cot("text");
+1 # rows (not including the header row)
+1 # columns
+cot("text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot0.testcase
new file mode 100644
index 0000000..540f43b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot0.testcase
@@ -0,0 +1,7 @@
+cot(0)
+:memory: #use in-memory database
+SELECT cot(0);
+1 # rows (not including the header row)
+1 # columns
+cot(0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot00.testcase
new file mode 100644
index 0000000..cfb0659
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cot00.testcase
@@ -0,0 +1,7 @@
+cot(0.0)
+:memory: #use in-memory database
+SELECT cot(0.0);
+1 # rows (not including the header row)
+1 # columns
+cot(0.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cotpi2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cotpi2.testcase
new file mode 100644
index 0000000..6e49225
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/cotpi2.testcase
@@ -0,0 +1,7 @@
+cot(pi2)
+:memory: #use in-memory database
+SELECT (1 + cot(pi()/2));
+1 # rows (not including the header row)
+1 # columns
+(1 + cot(pi()/2)) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo1.testcase
new file mode 100644
index 0000000..920de0b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo1.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 2D
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, "XY");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, "XY")
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo10.testcase
new file mode 100644
index 0000000..55cad2c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo10.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, integer prefix (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables(3, 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(3, 4326, 3)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo11.testcase
new file mode 100644
index 0000000..fffd330
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo11.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, float dim (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("hello_world", 4326, 3.3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("hello_world", 4326, 3.3)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo12.testcase
new file mode 100644
index 0000000..8b12dfc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo12.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, spaces in prefix
+:memory: #use in-memory database
+SELECT CreateTopologyTables("hello world", 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("hello world", 4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo13.testcase
new file mode 100644
index 0000000..068d863
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo13.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, quote in prefix
+:memory: #use in-memory database
+SELECT CreateTopologyTables("hello'_world", 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("hello'_world", 4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo14.testcase
new file mode 100644
index 0000000..a155ed5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo14.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 2D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 2);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 2)
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo15.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo15.testcase
new file mode 100644
index 0000000..92c20c8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo15.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 3D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo16.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo16.testcase
new file mode 100644
index 0000000..a32e31e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo16.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 4D int (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 4);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 4)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo17.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo17.testcase
new file mode 100644
index 0000000..c2e9c50
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo17.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, text SRID (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("4326", 2);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("4326", 2)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo18.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo18.testcase
new file mode 100644
index 0000000..8ea52ed
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo18.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, float dims (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 2.0);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 2.0)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo2.testcase
new file mode 100644
index 0000000..64f2b61
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo2.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 3D
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, "XYZ");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, "XYZ")
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo3.testcase
new file mode 100644
index 0000000..586f181
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo3.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 2D
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, "XY");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, "XY")
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo4.testcase
new file mode 100644
index 0000000..3e75e6b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo4.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 3D
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, "XYZ");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, "XYZ")
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo5.testcase
new file mode 100644
index 0000000..0a1b86d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo5.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 3D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo6.testcase
new file mode 100644
index 0000000..ae3429c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo6.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 2D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, 2);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, 2)
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo7.testcase
new file mode 100644
index 0000000..bffbf4e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo7.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 4D (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, 4);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, 4)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo8.testcase
new file mode 100644
index 0000000..fbb59d8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo8.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, text SRID (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", "WGS-84", 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", "WGS-84", 3)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo9.testcase
new file mode 100644
index 0000000..b01f8b2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/createtopo9.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 0 SRID (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 0, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 0, 3)
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degrees.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degrees.testcase
new file mode 100644
index 0000000..ccd59c1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degrees.testcase
@@ -0,0 +1,7 @@
+degrees(0)
+:memory: #use in-memory database
+SELECT degrees(0);
+1 # rows (not including the header row)
+1 # columns
+degrees(0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degrees45.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degrees45.testcase
new file mode 100644
index 0000000..7b89773
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degrees45.testcase
@@ -0,0 +1,7 @@
+degrees45
+:memory: #use in-memory database
+SELECT degrees(pi()/4);
+1 # rows (not including the header row)
+1 # columns
+degrees(pi()/4) # header
+45.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degreestext.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degreestext.testcase
new file mode 100644
index 0000000..fa6cf49
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/degreestext.testcase
@@ -0,0 +1,7 @@
+degrees-text
+:memory: #use in-memory database
+SELECT degrees("foo");
+1 # rows (not including the header row)
+1 # columns
+degrees("foo") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension1.testcase
new file mode 100644
index 0000000..5eabe4e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension1.testcase
@@ -0,0 +1,7 @@
+dimension1 - POINT
+:memory: #use in-memory database
+SELECT Dimension(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"));
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"))
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension2.testcase
new file mode 100644
index 0000000..7196838
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension2.testcase
@@ -0,0 +1,7 @@
+dimension 2 - float (error)
+:memory: #use in-memory database
+SELECT Dimension(3.14);
+1 # rows (not including the header row)
+1 # columns
+Dimension(3.14)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension3.testcase
new file mode 100644
index 0000000..6a589ac
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension3.testcase
@@ -0,0 +1,7 @@
+dimension3 - linestring
+:memory: #use in-memory database
+SELECT Dimension(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"))
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"))
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension4.testcase
new file mode 100644
index 0000000..d52f6a4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension4.testcase
@@ -0,0 +1,7 @@
+dimension4 - bad blob
+:memory: #use in-memory database
+SELECT Dimension(zeroblob(20))
+1 # rows (not including the header row)
+1 # columns
+Dimension(zeroblob(20))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension5.testcase
new file mode 100644
index 0000000..61f68c3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension5.testcase
@@ -0,0 +1,7 @@
+dimension5 - GeometryCollection
+:memory: #use in-memory database
+SELECT Dimension(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension6.testcase
new file mode 100644
index 0000000..0b72b27
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension6.testcase
@@ -0,0 +1,7 @@
+dimension6 - POLYGON
+:memory: #use in-memory database
+SELECT Dimension(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326));
+1 # rows (not including the header row)
+1 # columns
+Dimension(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326))
+2
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension7.testcase
new file mode 100644
index 0000000..c0a7422
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension7.testcase
@@ -0,0 +1,7 @@
+dimension7 - MPOLYGON
+:memory: #use in-memory database
+SELECT Dimension(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+1 # rows (not including the header row)
+1 # columns
+Dimension(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+2
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension8.testcase
new file mode 100644
index 0000000..ef6eb69
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dimension8.testcase
@@ -0,0 +1,7 @@
+dimension5 - GeometryCollection
+:memory: #use in-memory database
+SELECT Dimension(GeometryFromText("POINT EMPTY"))
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeometryFromText("POINT EMPTY"))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dm_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dm_m.testcase
new file mode 100644
index 0000000..d64d5c8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/dm_m.testcase
@@ -0,0 +1,7 @@
+decimetres to metres
+:memory: #use in-memory database
+SELECT CvtFromDm(2.4);
+1 # rows (not including the header row)
+1 # columns
+CvtFromDm(2.4);
+0.24
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/endpoint1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/endpoint1.testcase
new file mode 100644
index 0000000..89614d0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/endpoint1.testcase
@@ -0,0 +1,7 @@
+endpoint - regular LINESTRING
+:memory: #use in-memory database
+SELECT AsText(EndPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(EndPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")))
+POINT(8 4)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp0.testcase
new file mode 100644
index 0000000..c5c7a69
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp0.testcase
@@ -0,0 +1,8 @@
+exp(0) # test of exp() function, with argument 0
+:memory: #use in-memory database
+SELECT exp(0);
+1 # rows (not including the header row)
+1 # columns
+exp(0)# header
+1.0#result
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp00.testcase
new file mode 100644
index 0000000..a66071d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp00.testcase
@@ -0,0 +1,8 @@
+exp(0.0) # test of exp() function, with argument 0 (i.e. a float)
+:memory: #use in-memory database
+SELECT exp(0.0);
+1 # rows (not including the header row)
+1 # columns
+exp(0.0)# header
+1.0#result
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp1.testcase
new file mode 100644
index 0000000..aec7953
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp1.testcase
@@ -0,0 +1,8 @@
+exp(1) # test of exp() function, with argument 1
+:memory: #use in-memory database
+SELECT exp(1);
+1 # rows (not including the header row)
+1 # columns
+exp(1)# header
+2.71828182845905:8#result, with limited precision comparision
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp10.testcase
new file mode 100644
index 0000000..b5c3e05
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exp10.testcase
@@ -0,0 +1,8 @@
+exp(1.0) # test of exp() function, with argument 1.0
+:memory: #use in-memory database
+SELECT exp(1.0);
+1 # rows (not including the header row)
+1 # columns
+exp(1.0)# header
+2.71828182845905:8#result, with limited precision comparision
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/expneg.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/expneg.testcase
new file mode 100644
index 0000000..6983762
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/expneg.testcase
@@ -0,0 +1,7 @@
+exp-neg # test of exp() function, with negative
+:memory: #use in-memory database
+SELECT exp(-1.0);
+1 # rows (not including the header row)
+1 # columns
+exp(-1.0)# header
+0.36787944:8
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exptext.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exptext.testcase
new file mode 100644
index 0000000..64290d1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/exptext.testcase
@@ -0,0 +1,8 @@
+exp-text # test of exp() function, with text argument
+:memory: #use in-memory database
+SELECT exp("hello world");
+1 # rows (not including the header row)
+1 # columns
+exp("hello world") # header
+(NULL)  #result
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fath_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fath_m.testcase
new file mode 100644
index 0000000..93d8e3f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fath_m.testcase
@@ -0,0 +1,7 @@
+fathoms to metres
+:memory: #use in-memory database
+SELECT CvtFromFath(546.806650);
+1 # rows (not including the header row)
+1 # columns
+CvtFromFath(546.806650)
+1000.0:6
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo-wkb.sqlite_RO b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo-wkb.sqlite_RO
new file mode 100644
index 0000000..22428f7
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo-wkb.sqlite_RO differ
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo_ogr1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo_ogr1.testcase
new file mode 100644
index 0000000..cc77d47
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo_ogr1.testcase
@@ -0,0 +1,7 @@
+FDO_OGR1
+:memory: #use in-memory database
+SELECT AutoFDOStart()
+1 # rows (not including the header row)
+1 # columns
+AutoFDOStart()
+0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo_ogr2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo_ogr2.testcase
new file mode 100644
index 0000000..4d68927
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/fdo_ogr2.testcase
@@ -0,0 +1,7 @@
+FDO_OGR2
+:memory: #use in-memory database
+SELECT AutoFDOStop()
+1 # rows (not including the header row)
+1 # columns
+AutoFDOStop()
+0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floor32.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floor32.testcase
new file mode 100644
index 0000000..6c48125
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floor32.testcase
@@ -0,0 +1,7 @@
+floor(3.2) # you can use the SQL if you're not feeling imaginative.
+:memory:
+SELECT floor(3.2);
+1 # rows
+1 # columns
+floor(3.2) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floorint.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floorint.testcase
new file mode 100644
index 0000000..b841b1a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floorint.testcase
@@ -0,0 +1,7 @@
+floor(integer) # integer input - this is just the name remember
+:memory:
+SELECT floor(3); # the SQL to run
+1 # rows
+1 # columns
+floor(3) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floornull.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floornull.testcase
new file mode 100644
index 0000000..0591ce7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/floornull.testcase
@@ -0,0 +1,7 @@
+floor(null) # text input, expecting null output
+:memory:
+SELECT floor("some text"); # the SQL to run
+1 # rows
+1 # columns
+floor("some text") # this is the header row
+(NULL) # this is really the result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ft_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ft_m.testcase
new file mode 100644
index 0000000..7dfc497
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ft_m.testcase
@@ -0,0 +1,7 @@
+feet to metres
+:memory: #use in-memory database
+SELECT CvtFromFt(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromFt(10);
+3.048
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomcollfromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomcollfromtext1.testcase
new file mode 100644
index 0000000..6a9f61b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomcollfromtext1.testcase
@@ -0,0 +1,7 @@
+geometrycollectionfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomcollfromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomcollfromtext2.testcase
new file mode 100644
index 0000000..c4a9977
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomcollfromtext2.testcase
@@ -0,0 +1,7 @@
+geometrycollectionfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))"))
+GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints1.testcase
new file mode 100644
index 0000000..861ad41
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints1.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, null
+:memory: #use in-memory database
+SELECT GeometryConstraints(null, "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(null, "POINT", 4326)
+1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints10.testcase
new file mode 100644
index 0000000..fa0da3a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints10.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, zeroblob 4
+:memory: #use in-memory database
+SELECT GeometryConstraints(zeroblob(4), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(zeroblob(4), "POINT", 4326, "XYM")
+-1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints11.testcase
new file mode 100644
index 0000000..7178220
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints11.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, zeroblob 20
+:memory: #use in-memory database
+SELECT GeometryConstraints(zeroblob(20), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(zeroblob(20), "POINT", 4326, "XYM")
+-1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints12.testcase
new file mode 100644
index 0000000..d18f466
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints12.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, zeroblob 50
+:memory: #use in-memory database
+SELECT GeometryConstraints(zeroblob(50), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(zeroblob(50), "POINT", 4326, "XYM")
+-1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints13.testcase
new file mode 100644
index 0000000..af24b9b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints13.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, int arg 2
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("POINT(1 2)", 4326), 40, 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("POINT(1 2)", 4326), 40, 4326)
+-1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints14.testcase
new file mode 100644
index 0000000..193a6dc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints14.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, text arg 3
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("POINT(1 2)", 4326), "POINT", "hello", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("POINT(1 2)", 4326), "POINT", "hello", 4326)
+-1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints2.testcase
new file mode 100644
index 0000000..46906fb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints2.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, blob
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326)
+1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints3.testcase
new file mode 100644
index 0000000..ffe0d38
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints3.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, POINT / LINESTRING
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "LINESTRING", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "LINESTRING", 4326)
+0
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints4.testcase
new file mode 100644
index 0000000..0a090b6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints4.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, POINT / MULTIPOINT
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "MULTIPOINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "MULTIPOINT", 4326)
+0
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints5.testcase
new file mode 100644
index 0000000..3b4492b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints5.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, POINT bad SRID
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4386), "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4386), "POINT", 4326)
+0
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints6.testcase
new file mode 100644
index 0000000..0bd8047
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints6.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, POINT
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XY")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XY")
+1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints7.testcase
new file mode 100644
index 0000000..ec00e9b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints7.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, POINT vs XYZ
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYZ")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYZ")
+0
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints8.testcase
new file mode 100644
index 0000000..d05a4f7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints8.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, text
+:memory: #use in-memory database
+SELECT GeometryConstraints("hello", "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints("hello", "POINT", 4326)
+-1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints9.testcase
new file mode 100644
index 0000000..33ddd6c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomconstraints9.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, POINT vs XYM
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYM")
+0
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn.testcase
new file mode 100644
index 0000000..fc9b6f7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 1))
+POINT(1 2)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn1.testcase
new file mode 100644
index 0000000..aca6bf1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn1.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint - out of range 0
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn2.testcase
new file mode 100644
index 0000000..ac9dd66
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn2.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint - out of range 2
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 2))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn3.testcase
new file mode 100644
index 0000000..34c41f5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn3.testcase
@@ -0,0 +1,7 @@
+Geometry N - text input (error)
+:memory: #use in-memory database
+SELECT GeometryN("text", 2);
+1 # rows (not including the header row)
+1 # columns
+GeometryN("text", 2)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn4.testcase
new file mode 100644
index 0000000..42f355f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn4.testcase
@@ -0,0 +1,7 @@
+Geometry N - bad blob input (error)
+:memory: #use in-memory database
+SELECT GeometryN(zeroblob(2), 1);
+1 # rows (not including the header row)
+1 # columns
+GeometryN(zeroblob(2), 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn5.testcase
new file mode 100644
index 0000000..132e633
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn5.testcase
@@ -0,0 +1,8 @@
+Geometry N - toxic blob
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1))
+POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn6.testcase
new file mode 100644
index 0000000..ddf9b31
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geometryn6.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint - float index
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0.2));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0.2))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext1.testcase
new file mode 100644
index 0000000..89ac942
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext1.testcase
@@ -0,0 +1,7 @@
+geomfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext2.testcase
new file mode 100644
index 0000000..ff998df
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext2.testcase
@@ -0,0 +1,7 @@
+geomfromtext2
+:memory: #use in-memory database
+SELECT GeomFromText(3.14);
+1 # rows (not including the header row)
+1 # columns
+GeomFromText(3.14)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext3.testcase
new file mode 100644
index 0000000..0c39740
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext3.testcase
@@ -0,0 +1,7 @@
+geomfromtext3
+:memory: #use in-memory database
+SELECT AsWkt(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 4)
+LINESTRING(4 0,4 4,8 4)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext4.testcase
new file mode 100644
index 0000000..182ba56
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext4.testcase
@@ -0,0 +1,7 @@
+geomfromtext4
+:memory: #use in-memory database
+SELECT GeomFromText("POINT(0 1 2 3)");
+1 # rows (not including the header row)
+1 # columns
+GeomFromText("POINT(0 1 2 3)")
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext5.testcase
new file mode 100644
index 0000000..0b3e136
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext5.testcase
@@ -0,0 +1,7 @@
+geomfromtext5
+:memory: #use in-memory database
+SELECT AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext6.testcase
new file mode 100644
index 0000000..822bb41
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext6.testcase
@@ -0,0 +1,7 @@
+geomfromtext6
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326))
+SRID=4326;POINT(-71.1043443253471 42.315067601582903)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext7.testcase
new file mode 100644
index 0000000..423956f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext7.testcase
@@ -0,0 +1,7 @@
+geomfromtext7
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", "WGS-84"));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", "WGS-84"))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext8.testcase
new file mode 100644
index 0000000..976eef9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext8.testcase
@@ -0,0 +1,7 @@
+geomfromtext8
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText(3.14, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText(3.14, 4326))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext9.testcase
new file mode 100644
index 0000000..da410f2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomfromtext9.testcase
@@ -0,0 +1,7 @@
+geomfromtext9
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900 45)", 4326));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900 45)", 4326))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype1.testcase
new file mode 100644
index 0000000..747454b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype1.testcase
@@ -0,0 +1,9 @@
+geometrytype1 - POINT
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINT(-71.1043443253471 42.315067601582900)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT
+XY
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype10.testcase
new file mode 100644
index 0000000..51569e5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype10.testcase
@@ -0,0 +1,9 @@
+geometrytype - LINESTRING ZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRINGZM(4 0 4 1, 4 4 4 2, 8 4 2 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype11.testcase
new file mode 100644
index 0000000..1f6bb3a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype11.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTION
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION
+XY
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype12.testcase
new file mode 100644
index 0000000..76be6ac
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype12.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINT
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINT (10 40, 40 30, 20 20, 30 10)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT
+XY
+MULTIPOINT
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype13.testcase
new file mode 100644
index 0000000..9d6e355
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype13.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGON
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON
+XY
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype14.testcase
new file mode 100644
index 0000000..c214893
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype14.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOLYGONZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOLYGONZ(((30 20 1, 10 40 1, 45 40 1, 30 20 1)),((15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2)))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOLYGON Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype15.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype15.testcase
new file mode 100644
index 0000000..ead0611
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype15.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOLYGONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOLYGONM(((30 20 1, 10 40 1, 45 40 1, 30 20 1)),((15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2)))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOLYGON M
+XYM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype16.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype16.testcase
new file mode 100644
index 0000000..ec70367
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype16.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOLYGONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOLYGONZM(((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2)),((15 5 2 3, 40 10 2 3, 10 20 2 3, 5 10 2 3, 15 5 2 3)))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOLYGON ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype17.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype17.testcase
new file mode 100644
index 0000000..fc9a53a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype17.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTILINESTRING
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTILINESTRING ((30 20, 10 40, 45 40, 30 20),(15 5, 40 10, 10 20, 5 10, 15 5))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTILINESTRING
+XY
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype18.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype18.testcase
new file mode 100644
index 0000000..a972d9f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype18.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTILINESTRINGZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTILINESTRINGZ((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTILINESTRING Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype19.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype19.testcase
new file mode 100644
index 0000000..9229034
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype19.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTILINESTRINGZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTILINESTRINGZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2),(15 5 2 3, 40 10 2 3, 10 20 2 3, 5 10 2 3, 15 5 2 3))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTILINESTRING ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype2.testcase
new file mode 100644
index 0000000..c8e00a8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype2.testcase
@@ -0,0 +1,9 @@
+geometrytype2 - POINTZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINTZ(-71.1043443253471 42.315067601582900 26.2)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype20.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype20.testcase
new file mode 100644
index 0000000..30cc09e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype20.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGM((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING M
+XYM
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype21.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype21.testcase
new file mode 100644
index 0000000..b0651dc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype21.testcase
@@ -0,0 +1,11 @@
+geometrytype - POLYGON
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("POLYGON ((30 20, 10 40, 45 40, 30 20),(15 5, 40 10, 10 20, 5 10, 15 5))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+POLYGON
+XY
+POLYGON
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype22.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype22.testcase
new file mode 100644
index 0000000..e782cec
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype22.testcase
@@ -0,0 +1,9 @@
+geometrytype - POLYGONZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POLYGONZ((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POLYGON Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype23.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype23.testcase
new file mode 100644
index 0000000..a2ce734
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype23.testcase
@@ -0,0 +1,11 @@
+geometrytype - POLYGONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("POLYGONM((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+POLYGON M
+XYM
+POLYGON
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype24.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype24.testcase
new file mode 100644
index 0000000..a142b2f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype24.testcase
@@ -0,0 +1,9 @@
+geometrytype - POLYGONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POLYGONZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2),(15 5 2 3, 40 10 2 3, 10 20 2 3, 5 10 2 3, 15 5 2 3))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POLYGON ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype25.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype25.testcase
new file mode 100644
index 0000000..d6f8874
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype25.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTZM(-71 42 26.2 3)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT ZM
+XYZM
+MULTIPOINT
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype26.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype26.testcase
new file mode 100644
index 0000000..b4b30d6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype26.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINTZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINTZ(-71 42 26.2)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype27.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype27.testcase
new file mode 100644
index 0000000..90cab18
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype27.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINTM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINTM(-71 42 26.2)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT M
+XYM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype28.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype28.testcase
new file mode 100644
index 0000000..4d11150
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype28.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINT
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINT(-71 42, 4 22)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT
+XY
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype29.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype29.testcase
new file mode 100644
index 0000000..0454716
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype29.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTIONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(4 6 4 1), POINTZM(3 3 29 1), LINESTRINGZM(4 6 0 0,7 10 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype3.testcase
new file mode 100644
index 0000000..75ba452
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype3.testcase
@@ -0,0 +1,9 @@
+geometrytype3 - POINTZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINTZM(-71.1043443253471 42.315067601582900 26.2 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype30.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype30.testcase
new file mode 100644
index 0000000..8d65be3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype30.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(4 6 4), POINTZ(3 3 29), LINESTRINGZ(4 6 0,7 10 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype31.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype31.testcase
new file mode 100644
index 0000000..2ecab79
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype31.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(4 6 4), POINTM(3 3 29), LINESTRINGM(4 6 0,7 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype32.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype32.testcase
new file mode 100644
index 0000000..d71ab98
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype32.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTIONM only linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(LINESTRINGM(4 6 0,7 10 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION M
+XYM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype33.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype33.testcase
new file mode 100644
index 0000000..8cc509c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype33.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ only linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(LINESTRINGZ(4 6 0, 10 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype34.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype34.testcase
new file mode 100644
index 0000000..718cf36
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype34.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTIONZM only Linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(LINESTRINGZM(4 6 0 0,7 10 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype35.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype35.testcase
new file mode 100644
index 0000000..711bd82
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype35.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTION only linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(LINESTRING(4 6, 10 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION
+XY
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype36.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype36.testcase
new file mode 100644
index 0000000..0897680
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype36.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(LINESTRINGZ(4 6 0, 10 0 0), LINESTRINGZ(2 3 0, 5 1 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype37.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype37.testcase
new file mode 100644
index 0000000..1c72ea8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype37.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(LINESTRINGM(4 6 0, 10 0 0), LINESTRINGM(2 3 0, 5 1 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype38.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype38.testcase
new file mode 100644
index 0000000..56a0ec5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype38.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(4 6 4), POINTM(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype39.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype39.testcase
new file mode 100644
index 0000000..b6fb06f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype39.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype4.testcase
new file mode 100644
index 0000000..d40a67e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype4.testcase
@@ -0,0 +1,9 @@
+geometrytype4 - POINTM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINTM(-71.1043443253471 42.315067601582900 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT M
+XYM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype40.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype40.testcase
new file mode 100644
index 0000000..af18c73
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype40.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POLYGONZ((4 6 0,7 10 0, 12 3 1, 4 6 0)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype41.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype41.testcase
new file mode 100644
index 0000000..4fa4796
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype41.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POLYGONZ((4 6 0,7 10 0, 12 3 1, 4 6 0)),POLYGONZ((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype42.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype42.testcase
new file mode 100644
index 0000000..b77da32
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype42.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGM - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGM((30 20 1, 10 40 1, 45 40 1, 30 20 1))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING M
+XYM
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype43.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype43.testcase
new file mode 100644
index 0000000..9aac294
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype43.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGONZM - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGONZM(((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON ZM
+XYZM
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype44.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype44.testcase
new file mode 100644
index 0000000..114d995
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype44.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - linestring and polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(LINESTRINGZ(4 6 0,7 10 0, 12 3 1),POLYGONZ((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype45.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype45.testcase
new file mode 100644
index 0000000..d8a7bb0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype45.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - point and polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(4 6 0),POLYGONZ((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype46.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype46.testcase
new file mode 100644
index 0000000..1df4fff
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype46.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - point and polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(4 6 0),POLYGONM((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype47.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype47.testcase
new file mode 100644
index 0000000..885b87f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype47.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGONZ - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGONZ(((30 20 1, 10 40 1, 45 40 1, 30 20 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON Z
+XYZ
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype48.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype48.testcase
new file mode 100644
index 0000000..9151c28
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype48.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGONM - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGONM(((30 20 1, 10 40 1, 45 40 1, 30 20 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON M
+XYM
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype49.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype49.testcase
new file mode 100644
index 0000000..a925176
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype49.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - one POLYGONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POLYGONM((30 20 1, 10 40 1, 45 40 1, 30 20 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype5.testcase
new file mode 100644
index 0000000..0197691
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype5.testcase
@@ -0,0 +1,11 @@
+geometrytype5 - zeroblob
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT zeroblob(20) as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype50.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype50.testcase
new file mode 100644
index 0000000..4a26351
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype50.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - one POLYGONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POLYGONZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype51.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype51.testcase
new file mode 100644
index 0000000..17df0c3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype51.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - one POLYGON
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POLYGON((30 20, 10 40, 45 40, 30 20)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype52.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype52.testcase
new file mode 100644
index 0000000..1e25f9a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype52.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(LINESTRINGZM(4 6 0 1,7 10 0 1, 12 3 1 1),LINESTRINGZM(1 2 3 4,5 4 3 4, 12 3 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype53.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype53.testcase
new file mode 100644
index 0000000..ec089f3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype53.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(LINESTRING(4 6,7 10, 12 3),LINESTRING(1 2, 3 4))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype54.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype54.testcase
new file mode 100644
index 0000000..7d9e12d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype54.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POLYGONM((4 6 0,7 10 0, 12 3 1, 4 6 0)),POLYGONM((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype55.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype55.testcase
new file mode 100644
index 0000000..6807d5e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype55.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION ZM - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POLYGONZM((4 6 0 1,7 10 0 1, 12 3 1 1, 4 6 0 1)),POLYGONZM((4 6 1 2,7 10 1 2, 12 3 2 2, 4 6 1 2)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype56.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype56.testcase
new file mode 100644
index 0000000..1b75bbd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype56.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POLYGON((4 6,7 10, 12 3, 4 6)),POLYGON((4 6,7 10, 12 3, 4 6)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype57.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype57.testcase
new file mode 100644
index 0000000..1f16fdd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype57.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(4 6 4), POINTZ(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype58.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype58.testcase
new file mode 100644
index 0000000..5a672f8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype58.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(4 6 4 1), POINTZM(3 3 29 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype59.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype59.testcase
new file mode 100644
index 0000000..269cff0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype59.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINT - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINT(-71 42)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT
+XY
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype6.testcase
new file mode 100644
index 0000000..d0ccb52
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype6.testcase
@@ -0,0 +1,9 @@
+geometrytype6 - LINESTRING
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRING(4 0, 4 4, 8 4)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING
+XY
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype60.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype60.testcase
new file mode 100644
index 0000000..630fdec
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype60.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype61.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype61.testcase
new file mode 100644
index 0000000..da09c4f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype61.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(3 3 29 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype62.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype62.testcase
new file mode 100644
index 0000000..554c1d4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype62.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POINT(3 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype63.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype63.testcase
new file mode 100644
index 0000000..d885f3b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype63.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POINT(3 2), POINT(1 4))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype64.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype64.testcase
new file mode 100644
index 0000000..06e9437
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype64.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTZ (10 40 10, 40 30 15, 20 20 20, 30 10 9)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT Z
+XYZ
+MULTIPOINT
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype65.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype65.testcase
new file mode 100644
index 0000000..50d8f26
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype65.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTM (10 40 10, 40 30 15, 20 20 20, 30 10 9)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT M
+XYM
+MULTIPOINT
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype66.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype66.testcase
new file mode 100644
index 0000000..683b5fe
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype66.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTZM (10 40 10 1, 40 30 15 2, 20 20 20 2, 30 10 9 1)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT ZM
+XYZM
+MULTIPOINT
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype67.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype67.testcase
new file mode 100644
index 0000000..40abe33
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype67.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGZ - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGZ((30 20 1, 10 40 1, 45 40 1, 30 20 1))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING Z
+XYZ
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype68.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype68.testcase
new file mode 100644
index 0000000..4894a00
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype68.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGZM - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING ZM
+XYZM
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype69.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype69.testcase
new file mode 100644
index 0000000..2631c0d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype69.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRING - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRING((30 20, 10 40, 45 40, 30 20))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING
+XY
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype7.testcase
new file mode 100644
index 0000000..14e25a1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype7.testcase
@@ -0,0 +1,11 @@
+geometrytype - 3 + 2
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT 3 + 2 as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype8.testcase
new file mode 100644
index 0000000..1024539
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype8.testcase
@@ -0,0 +1,9 @@
+geometrytype - LINESTRINGZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRINGZ(4 0 1, 4 4 2, 8 4 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype9.testcase
new file mode 100644
index 0000000..564ff88
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/geomtype9.testcase
@@ -0,0 +1,9 @@
+geometrytype - LINESTRINGM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRINGM(4 0 1, 4 4 2, 8 4 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING M
+XYM
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-badblob.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-badblob.testcase
new file mode 100644
index 0000000..1a00767
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-badblob.testcase
@@ -0,0 +1,7 @@
+great circle distance - bad blob
+:memory:
+SELECT GreatCircleLength(zeroblob(34));
+1 # rows
+1 # column
+GreatCircleLength(zeroblob(34))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-poly.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-poly.testcase
new file mode 100644
index 0000000..0cce87e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-poly.testcase
@@ -0,0 +1,7 @@
+great circle distance polygon
+:memory:
+SELECT GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0))", 4326));
+1 # rows
+1 # column
+GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0))", 4326))
+222390.15:9
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-poly2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-poly2.testcase
new file mode 100644
index 0000000..771d59f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-poly2.testcase
@@ -0,0 +1,7 @@
+great circle distance polygon
+:memory:
+SELECT GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0),(0 0, 0 0, 0 0, 0 0))", 4326));
+1 # rows
+1 # column
+GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0),(0 0, 0 0, 0 0, 0 0))", 4326))
+222390.15:9
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-text.testcase
new file mode 100644
index 0000000..6d3806b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle-text.testcase
@@ -0,0 +1,7 @@
+great circle distance - text
+:memory:
+SELECT GreatCircleLength("Hello");
+1 # rows
+1 # column
+GreatCircleLength("Hello")
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle.testcase
new file mode 100644
index 0000000..d97d608
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/greatcircle.testcase
@@ -0,0 +1,7 @@
+great circle distance
+:memory:
+SELECT GreatCircleLength(GeomFromText("LINESTRING(0 0, 1 0)", 4326));
+1 # rows
+1 # column
+GreatCircleLength(GeomFromText("LINESTRING(0 0, 1 0)", 4326))
+111195.07:9
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/in_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/in_m.testcase
new file mode 100644
index 0000000..71b225c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/in_m.testcase
@@ -0,0 +1,7 @@
+inches to metres
+:memory: #use in-memory database
+SELECT CvtFromIn(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIn(100);
+2.54
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_ch_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_ch_m.testcase
new file mode 100644
index 0000000..fdf4d9b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_ch_m.testcase
@@ -0,0 +1,7 @@
+Indian chains to metres
+:memory: #use in-memory database
+SELECT CvtFromIndCh(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIndCh(100);
+2011.6695:9
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_ft_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_ft_m.testcase
new file mode 100644
index 0000000..7e9c52e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_ft_m.testcase
@@ -0,0 +1,7 @@
+ind_feet to metres
+:memory: #use in-memory database
+SELECT CvtFromIndFt(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIndFt(10);
+3.047984:8
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_yd_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_yd_m.testcase
new file mode 100644
index 0000000..3d302bb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ind_yd_m.testcase
@@ -0,0 +1,7 @@
+Indian yards to metres
+:memory: #use in-memory database
+SELECT CvtFromIndYd(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIndYd(10);
+9.14395:7
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed1.testcase
new file mode 100644
index 0000000..79ca1a4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed1.testcase
@@ -0,0 +1,7 @@
+isclosed1
+:memory: #use in-memory database
+SELECT IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"))
+1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed2.testcase
new file mode 100644
index 0000000..f9b28f5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed2.testcase
@@ -0,0 +1,8 @@
+isclosed2
+:memory: #use in-memory database
+SELECT IsClosed(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed3.testcase
new file mode 100644
index 0000000..9e6ebaa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed3.testcase
@@ -0,0 +1,7 @@
+isclosed3
+:memory: #use in-memory database
+SELECT IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)"));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)"))
+0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed4.testcase
new file mode 100644
index 0000000..8373258
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed4.testcase
@@ -0,0 +1,7 @@
+isclosed4
+:memory: #use in-memory database
+SELECT IsClosed(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(zeroblob(10))
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed5.testcase
new file mode 100644
index 0000000..964755f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isclosed5.testcase
@@ -0,0 +1,7 @@
+isclosed5
+:memory: #use in-memory database
+SELECT IsClosed(3);
+1 # rows (not including the header row)
+1 # columns
+IsClosed(3)
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring1.testcase
new file mode 100644
index 0000000..f321ac4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring1.testcase
@@ -0,0 +1,7 @@
+isring1
+:memory: #use in-memory database
+SELECT IsRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"));
+1 # rows (not including the header row)
+1 # columns
+IsRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"))
+1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring2.testcase
new file mode 100644
index 0000000..b124da9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring2.testcase
@@ -0,0 +1,8 @@
+isring2
+:memory: #use in-memory database
+SELECT IsRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+-1
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring3.testcase
new file mode 100644
index 0000000..dfc61bd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring3.testcase
@@ -0,0 +1,7 @@
+isring3
+:memory: #use in-memory database
+SELECT IsRing("hello");
+1 # rows (not including the header row)
+1 # columns
+IsRing("hello")
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring4.testcase
new file mode 100644
index 0000000..4c87475
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isring4.testcase
@@ -0,0 +1,7 @@
+isring4
+:memory: #use in-memory database
+SELECT IsRing(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsRing(zeroblob(10))
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple1.testcase
new file mode 100644
index 0000000..a61bff3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple1.testcase
@@ -0,0 +1,7 @@
+issimple1
+:memory: #use in-memory database
+SELECT IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"))
+1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple2.testcase
new file mode 100644
index 0000000..4552786
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple2.testcase
@@ -0,0 +1,8 @@
+issimple2
+:memory: #use in-memory database
+SELECT IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple3.testcase
new file mode 100644
index 0000000..14ccb64
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple3.testcase
@@ -0,0 +1,7 @@
+issimple3
+:memory: #use in-memory database
+SELECT IsSimple(GeomFromText("POLYGON()"));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(GeomFromText("POLYGON()"))
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple4.testcase
new file mode 100644
index 0000000..22a1f9f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple4.testcase
@@ -0,0 +1,7 @@
+issimple4
+:memory: #use in-memory database
+SELECT IsSimple(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(zeroblob(10))
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple5.testcase
new file mode 100644
index 0000000..c331ee0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/issimple5.testcase
@@ -0,0 +1,7 @@
+issimple5
+:memory: #use in-memory database
+SELECT IsSimple("hello");
+1 # rows (not including the header row)
+1 # columns
+IsSimple("hello")
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid1.testcase
new file mode 100644
index 0000000..beaf998
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid1.testcase
@@ -0,0 +1,7 @@
+isvalid1
+:memory: #use in-memory database
+SELECT IsValid(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsValid(zeroblob(10))
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid2.testcase
new file mode 100644
index 0000000..27c34fe
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid2.testcase
@@ -0,0 +1,7 @@
+isvalid2
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid3.testcase
new file mode 100644
index 0000000..98249aa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid3.testcase
@@ -0,0 +1,7 @@
+isvalid3
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"))
+1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid4.testcase
new file mode 100644
index 0000000..39381e1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid4.testcase
@@ -0,0 +1,7 @@
+isvalid4
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid5.testcase
new file mode 100644
index 0000000..7fec46b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid5.testcase
@@ -0,0 +1,7 @@
+isvalid5
+:memory: #use in-memory database
+SELECT IsValid("hello");
+1 # rows (not including the header row)
+1 # columns
+IsValid("hello")
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid6.testcase
new file mode 100644
index 0000000..89733ad
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/isvalid6.testcase
@@ -0,0 +1,7 @@
+isvalid6
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("POLYGON()"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("POLYGON()"))
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/km_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/km_m.testcase
new file mode 100644
index 0000000..5f55cb4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/km_m.testcase
@@ -0,0 +1,7 @@
+kilometres to metres
+:memory: #use in-memory database
+SELECT CvtFromKm(6.76);
+1 # rows (not including the header row)
+1 # columns
+CvtFromKm(6.76);
+6760.0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linefromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linefromtext1.testcase
new file mode 100644
index 0000000..58bae86
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linefromtext1.testcase
@@ -0,0 +1,7 @@
+linefromtext1
+:memory: #use in-memory database
+SELECT AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)"), 4)
+LINESTRING(-71.1043 42.3151,-71 42)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linefromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linefromtext2.testcase
new file mode 100644
index 0000000..babbe7b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linefromtext2.testcase
@@ -0,0 +1,7 @@
+linefromtext2
+:memory: #use in-memory database
+SELECT AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)", 4326), 4)
+LINESTRING(-71.1043 42.3151,-71 42)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge1.testcase
new file mode 100644
index 0000000..c98c289
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge1.testcase
@@ -0,0 +1,8 @@
+linemerge - bad blob
+:memory: #use in-memory database
+SELECT LineMerge(zeroblob(44))
+1 # rows (not including the header row)
+1 # columns
+LineMerge(zeroblob(44))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge10.testcase
new file mode 100644
index 0000000..239f95c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge10.testcase
@@ -0,0 +1,9 @@
+linemerge - weird linestring
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)")))
+LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge2.testcase
new file mode 100644
index 0000000..10d4fa6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge2.testcase
@@ -0,0 +1,8 @@
+linemerge - non-blob
+:memory: #use in-memory database
+SELECT LineMerge(44)
+1 # rows (not including the header row)
+1 # columns
+LineMerge(44)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge3.testcase
new file mode 100644
index 0000000..5dfc403
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge3.testcase
@@ -0,0 +1,8 @@
+linemerge - single line
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("LINESTRING(0 0, 2 3)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("LINESTRING(0 0, 2 3)")))
+LINESTRING(0 0, 2 3)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge4.testcase
new file mode 100644
index 0000000..1c5e1a2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge4.testcase
@@ -0,0 +1,8 @@
+linemerge - single line Z
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("LINESTRINGZ(0 0 1, 2 3 3)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("LINESTRINGZ(0 0 1, 2 3 3)")))
+LINESTRING Z(0 0 1, 2 3 3)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge5.testcase
new file mode 100644
index 0000000..9d5907a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge5.testcase
@@ -0,0 +1,8 @@
+linemerge - POINT
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("POINT(3 3)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("POINT(3 3)")))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge6.testcase
new file mode 100644
index 0000000..b941fcf
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge6.testcase
@@ -0,0 +1,8 @@
+linemerge - GEOMETRY COLLECTION
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("GeometryCollection(LINESTRING(0 1, 1 2),LINESTRING(1 2, 3 4))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("GeometryCollection(LINESTRING(0 1, 1 2),LINESTRING(1 2, 3 4))")))
+LINESTRING(0 1, 1 2, 3 4)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge7.testcase
new file mode 100644
index 0000000..b1e8d65
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge7.testcase
@@ -0,0 +1,8 @@
+linemerge - GEOMETRY COLLECTION M
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("GeometryCollectionM(LINESTRINGM(0 1 0, 1 2 0),LINESTRINGM(1 2 0, 3 4 0))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("GeometryCollectionM(LINESTRINGM(0 1 0, 1 2 0),LINESTRINGM(1 2 0, 3 4 0))")))
+LINESTRING M(0 1 0, 1 2 0, 3 4 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge8.testcase
new file mode 100644
index 0000000..324609e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge8.testcase
@@ -0,0 +1,8 @@
+linemerge - GEOMETRY COLLECTION ZM
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("GeometryCollectionZM(LINESTRINGZM(0 1 1 0, 1 2 1 0),LINESTRINGZM(1 2 1 0, 3 4 1 0))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("GeometryCollectionZM(LINESTRINGZM(0 1 1 0, 1 2 1 0),LINESTRINGZM(1 2 1 0, 3 4 1 0))")))
+LINESTRING ZM(0 1 1 0, 1 2 1 0, 3 4 1 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge9.testcase
new file mode 100644
index 0000000..5c61128
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linemerge9.testcase
@@ -0,0 +1,9 @@
+linemerge - toxic blob
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")))
+(NULL)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings1.testcase
new file mode 100644
index 0000000..79f55ac
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings1.testcase
@@ -0,0 +1,8 @@
+LinesFromRings - Simple polygon, no multi
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 0))
+LINESTRING(0 0, 1 1, 0 2, -1 1, 0 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings2.testcase
new file mode 100644
index 0000000..8c9c625
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings2.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - Simple polygon, default
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))")))
+MULTILINESTRING((0 0, 1 1, 0 2, -1 1, 0 0))
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings3.testcase
new file mode 100644
index 0000000..b9f8899
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings3.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - Simple polygon, explicit multi
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 1))
+MULTILINESTRING((0 0, 1 1, 0 2, -1 1, 0 0))
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings4.testcase
new file mode 100644
index 0000000..9717319
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings4.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - bad blob
+:memory: #use in-memory database
+SELECT LinesFromRings(zeroblob(4), 1);
+1 # rows (not including the header row)
+1 # columns
+LinesFromRings(zeroblob(4), 1)
+(NULL)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings5.testcase
new file mode 100644
index 0000000..e93f057
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings5.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - text input
+:memory: #use in-memory database
+SELECT LinesFromRings("hello", 1);
+1 # rows (not including the header row)
+1 # columns
+LinesFromRings("hello", 1)
+(NULL)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings6.testcase
new file mode 100644
index 0000000..624debb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings6.testcase
@@ -0,0 +1,8 @@
+LinesFromRings - Simple polygon, non-int select
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), "hello"));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), "hello"))
+MULTILINESTRING((0 0, 1 1, 0 2, -1 1, 0 0))
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings7.testcase
new file mode 100644
index 0000000..e46255e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesfromrings7.testcase
@@ -0,0 +1,8 @@
+LinesFromRings - Toxic polygon
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1))
+MULTILINESTRING((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring1.testcase
new file mode 100644
index 0000000..cd3aecb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring1.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 10, 10 0 10)"), 0, 0.4))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 10, 10 0 10)"), 0, 0.4))
+LINESTRING Z(0 0 10, 4 0 10)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring10.testcase
new file mode 100644
index 0000000..089b170
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring10.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - line
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 1 2))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 1 2))"), 0.2, 0.6))
+LINESTRING(0.2 0.4, 0.6 1.2)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring11.testcase
new file mode 100644
index 0000000..87ace1e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring11.testcase
@@ -0,0 +1,8 @@
+linesubstring - bad blob
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(zeroblob(10), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(zeroblob(10), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring12.testcase
new file mode 100644
index 0000000..fc70b13
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring12.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - point
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(POINT(1 2))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(POINT(1 2))"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring13.testcase
new file mode 100644
index 0000000..2f70ce4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring13.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - polygon
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring14.testcase
new file mode 100644
index 0000000..161d41d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring14.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - polygon and linestring
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 10 0),POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 10 0),POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring15.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring15.testcase
new file mode 100644
index 0000000..bd030c5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring15.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic vary Z
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 0, 10 0 5)"), 0.2, 0.7))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 0, 10 0 5)"), 0.2, 0.7))
+LINESTRING Z(2 0 1, 7 0 3.5)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring16.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring16.testcase
new file mode 100644
index 0000000..8b62cb7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring16.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic vary M
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 5)"), 0.2, 0.7))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 5)"), 0.2, 0.7))
+LINESTRING M(2 0 0, 7 0 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring17.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring17.testcase
new file mode 100644
index 0000000..ff58bca
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring17.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic vary ZM
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 10 5, 10 0 5 0)"), 0.2, 0.7))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 10 5, 10 0 5 0)"), 0.2, 0.7))
+LINESTRING ZM(2 0 9 0, 7 0 6.5 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring18.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring18.testcase
new file mode 100644
index 0000000..d2b5656
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring18.testcase
@@ -0,0 +1,8 @@
+linesubstring - ignoring second segment
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0, 0.2))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0, 0.2))
+LINESTRING(0 0, 4 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring19.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring19.testcase
new file mode 100644
index 0000000..abcdb9d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring19.testcase
@@ -0,0 +1,8 @@
+linesubstring - using second segment
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.6, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.6, 0.8))
+LINESTRING(10 2, 10 6)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring2.testcase
new file mode 100644
index 0000000..14dfe09
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring2.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0.2, 0.6))
+LINESTRING(2 0, 6 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring20.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring20.testcase
new file mode 100644
index 0000000..02d0307
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring20.testcase
@@ -0,0 +1,8 @@
+linesubstring - using both segments
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.2, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.2, 0.8))
+LINESTRING(4 0, 10 0, 10 6)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring21.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring21.testcase
new file mode 100644
index 0000000..ac758c6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring21.testcase
@@ -0,0 +1,8 @@
+linesubstring - using both segments M
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 0, 10 10 0)"), 0.2, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 0, 10 10 0)"), 0.2, 0.8))
+LINESTRING M(4 0 0, 10 0 0, 10 6 0) # yeah, it would have been m = 0.0 anyway.
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring22.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring22.testcase
new file mode 100644
index 0000000..fa22b98
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring22.testcase
@@ -0,0 +1,8 @@
+linesubstring - using both segments ZM
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0.2, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0.2, 0.8))
+LINESTRING ZM(4 0 1 0, 10 0 1 0, 10 6 1 0) # yeah, it would have been m = 0.0 anyway.
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring23.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring23.testcase
new file mode 100644
index 0000000..fb25cee
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring23.testcase
@@ -0,0 +1,8 @@
+linesubstring - using no segments ZM
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0, 0))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring24.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring24.testcase
new file mode 100644
index 0000000..3c89399
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring24.testcase
@@ -0,0 +1,8 @@
+linesubstring - zero length
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 0 0 2 2, 0 0 3 4)"), 0, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 0 0 2 2, 0 0 3 4)"), 0, 1))
+LINESTRING ZM(0 0 1 0, 0 0 1 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring25.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring25.testcase
new file mode 100644
index 0000000..6b84643
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring25.testcase
@@ -0,0 +1,8 @@
+linesubstring - zero length 2d
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(1 1, 1 1)"), 0, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(1 1, 1 1)"), 0, 1))
+LINESTRING(1 1, 1 1)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring3.testcase
new file mode 100644
index 0000000..fb12e0c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring3.testcase
@@ -0,0 +1,8 @@
+linesubstring - int limits
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, 1))
+LINESTRING(0 0, 10 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring4.testcase
new file mode 100644
index 0000000..8b854de
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring4.testcase
@@ -0,0 +1,9 @@
+linesubstring - out-of-range limits
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), -1, 2))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), -1, 2))
+LINESTRING(0 0, 10 0)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring5.testcase
new file mode 100644
index 0000000..e829fbf
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring5.testcase
@@ -0,0 +1,8 @@
+linesubstring - bad geom
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("POINT(0 0"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("POINT(0 0"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring6.testcase
new file mode 100644
index 0000000..5d9a5a3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring6.testcase
@@ -0,0 +1,8 @@
+linesubstring - bad arg
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(null, 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(null, 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring7.testcase
new file mode 100644
index 0000000..183bd42
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring7.testcase
@@ -0,0 +1,9 @@
+linesubstring - out-of-range limits 2
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 2, -0.5))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 2, -0.5))
+(NULL)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring8.testcase
new file mode 100644
index 0000000..81f7840
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring8.testcase
@@ -0,0 +1,9 @@
+linesubstring - wrong type of limits 1
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), "hello", null))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), "hello", null))
+(NULL)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring9.testcase
new file mode 100644
index 0000000..d113c82
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/linesubstring9.testcase
@@ -0,0 +1,9 @@
+linesubstring - wrong type of limits 2
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, null))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, null))
+(NULL)
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/link_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/link_m.testcase
new file mode 100644
index 0000000..299a881
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/link_m.testcase
@@ -0,0 +1,7 @@
+links to metres
+:memory: #use in-memory database
+SELECT CvtFromLink(4971);
+1 # rows (not including the header row)
+1 # columns
+CvtFromLink(4971)
+1000:4
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-0.0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-0.0.testcase
new file mode 100644
index 0000000..e80eb3d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-0.0.testcase
@@ -0,0 +1,7 @@
+log10(0.0)
+:memory: #use in-memory database
+SELECT log10(0.0);
+1 # rows (not including the header row)
+1 # columns
+log10(0.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-100.0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-100.0.testcase
new file mode 100644
index 0000000..b01b50c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-100.0.testcase
@@ -0,0 +1,7 @@
+log10(100.0)
+:memory: #use in-memory database
+SELECT log10(100.0);
+1 # rows (not including the header row)
+1 # columns
+log10(100.0) # header
+2.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-100.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-100.testcase
new file mode 100644
index 0000000..703abb0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-100.testcase
@@ -0,0 +1,7 @@
+log10(100)
+:memory: #use in-memory database
+SELECT log10(100);
+1 # rows (not including the header row)
+1 # columns
+log10(100) # header
+2.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-text.testcase
new file mode 100644
index 0000000..f437a08
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log10-text.testcase
@@ -0,0 +1,7 @@
+log10(text)
+:memory: #use in-memory database
+SELECT log10("text");
+1 # rows (not including the header row)
+1 # columns
+log10("text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-0.0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-0.0.testcase
new file mode 100644
index 0000000..84f4d57
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-0.0.testcase
@@ -0,0 +1,7 @@
+log2(0.0)
+:memory: #use in-memory database
+SELECT log2(0.0);
+1 # rows (not including the header row)
+1 # columns
+log2(0.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-0.testcase
new file mode 100644
index 0000000..d063948
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-0.testcase
@@ -0,0 +1,7 @@
+log2(0)
+:memory: #use in-memory database
+SELECT log2(0);
+1 # rows (not including the header row)
+1 # columns
+log2(0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-4.0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-4.0.testcase
new file mode 100644
index 0000000..c4e9e1b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-4.0.testcase
@@ -0,0 +1,7 @@
+log2(4.0)
+:memory: #use in-memory database
+SELECT log2(4.0);
+1 # rows (not including the header row)
+1 # columns
+log2(4.0) # header
+2.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-4.testcase
new file mode 100644
index 0000000..e2c82b0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-4.testcase
@@ -0,0 +1,7 @@
+log2(4)
+:memory: #use in-memory database
+SELECT log2(4);
+1 # rows (not including the header row)
+1 # columns
+log2(4) # header
+2.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-text.testcase
new file mode 100644
index 0000000..fb342de
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/log2-text.testcase
@@ -0,0 +1,7 @@
+log2(text)
+:memory: #use in-memory database
+SELECT log2("text");
+1 # rows (not including the header row)
+1 # columns
+log2("text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn-text.testcase
new file mode 100644
index 0000000..8d7382e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn-text.testcase
@@ -0,0 +1,7 @@
+logn(text)
+:memory: #use in-memory database
+SELECT log("text");
+1 # rows (not including the header row)
+1 # columns
+log("text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn0.testcase
new file mode 100644
index 0000000..77256ae
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn0.testcase
@@ -0,0 +1,7 @@
+log(0)
+:memory: #use in-memory database
+SELECT log(0);
+1 # rows (not including the header row)
+1 # columns
+log(0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn00.testcase
new file mode 100644
index 0000000..037fc80
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn00.testcase
@@ -0,0 +1,7 @@
+log(0.0)
+:memory: #use in-memory database
+SELECT log(0.0);
+1 # rows (not including the header row)
+1 # columns
+log(0.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn1.testcase
new file mode 100644
index 0000000..f01e8bd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn1.testcase
@@ -0,0 +1,7 @@
+logn(1)
+:memory: #use in-memory database
+SELECT log(1);
+1 # rows (not including the header row)
+1 # columns
+log(1) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn10.testcase
new file mode 100644
index 0000000..805e7ec
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn10.testcase
@@ -0,0 +1,7 @@
+logn(1.0)
+:memory: #use in-memory database
+SELECT log(1.0);
+1 # rows (not including the header row)
+1 # columns
+log(1.0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-01.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-01.testcase
new file mode 100644
index 0000000..944c56a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-01.testcase
@@ -0,0 +1,7 @@
+logn(-0.1, 2)
+:memory: #use in-memory database
+SELECT log(-0.1, 2);
+1 # rows (not including the header row)
+1 # columns
+log(-0.1, 2) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-02.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-02.testcase
new file mode 100644
index 0000000..5906ab6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-02.testcase
@@ -0,0 +1,7 @@
+logn(1.0, 1.0)
+:memory: #use in-memory database
+SELECT log(1.0, 1.0);
+1 # rows (not including the header row)
+1 # columns
+log(1.0, 1.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-2.2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-2.2.testcase
new file mode 100644
index 0000000..55f3014
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-2.2.testcase
@@ -0,0 +1,7 @@
+logn(2.0, 2.0)
+:memory: #use in-memory database
+SELECT log(2.0, 2.0);
+1 # rows (not including the header row)
+1 # columns
+log(2.0, 2.0) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-4.2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-4.2.testcase
new file mode 100644
index 0000000..6b81202
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-4.2.testcase
@@ -0,0 +1,7 @@
+logn(4.0, 2.0)
+:memory: #use in-memory database
+SELECT log(4.0, 2.0);
+1 # rows (not including the header row)
+1 # columns
+log(4.0, 2.0) # header
+2.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-4.2int.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-4.2int.testcase
new file mode 100644
index 0000000..1c13a40
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-4.2int.testcase
@@ -0,0 +1,7 @@
+logn(4, 2)
+:memory: #use in-memory database
+SELECT log(4, 2);
+1 # rows (not including the header row)
+1 # columns
+log(4, 2) # header
+2.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text.testcase
new file mode 100644
index 0000000..27420d9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log("text", 0.0);
+1 # rows (not including the header row)
+1 # columns
+log("text", 0.0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text2.testcase
new file mode 100644
index 0000000..c9b7d21
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text2.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log("text", 0);
+1 # rows (not including the header row)
+1 # columns
+log("text", 0) # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text3.testcase
new file mode 100644
index 0000000..4576048
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text3.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log(1, "text");
+1 # rows (not including the header row)
+1 # columns
+log(1, "text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text4.testcase
new file mode 100644
index 0000000..b4b102b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/logn2-text4.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log(1.0, "text");
+1 # rows (not including the header row)
+1 # columns
+log(1.0, "text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ch.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ch.testcase
new file mode 100644
index 0000000..39a2110
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ch.testcase
@@ -0,0 +1,7 @@
+metres to chains
+:memory: #use in-memory database
+SELECT CvtToCh(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToCh(1000)
+49.7096954:9
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_cm.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_cm.testcase
new file mode 100644
index 0000000..fe3d278
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_cm.testcase
@@ -0,0 +1,7 @@
+metres to centimetres
+:memory: #use in-memory database
+SELECT CvtToCm(21.00);
+1 # rows (not including the header row)
+1 # columns
+CvtToCm(21.00);
+2100.0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_dm.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_dm.testcase
new file mode 100644
index 0000000..c4691e1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_dm.testcase
@@ -0,0 +1,7 @@
+metres to decimetres
+:memory: #use in-memory database
+SELECT CvtToDm(21.50);
+1 # rows (not including the header row)
+1 # columns
+CvtToDm(21.50);
+215.0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_fath.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_fath.testcase
new file mode 100644
index 0000000..22ad445
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_fath.testcase
@@ -0,0 +1,7 @@
+metres to fathoms
+:memory: #use in-memory database
+SELECT CvtToFath(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToFath(1000)
+546.806649:10
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ft-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ft-text.testcase
new file mode 100644
index 0000000..8bbd319
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ft-text.testcase
@@ -0,0 +1,7 @@
+metres to feet text
+:memory: #use in-memory database
+SELECT CvtToFt("one");
+1 # rows (not including the header row)
+1 # columns
+CvtToFt("one");
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ft.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ft.testcase
new file mode 100644
index 0000000..7952bc0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ft.testcase
@@ -0,0 +1,7 @@
+metres to feet
+:memory: #use in-memory database
+SELECT CvtToFt(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToFt(1.0);
+3.28083989:10
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_in.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_in.testcase
new file mode 100644
index 0000000..1e185c1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_in.testcase
@@ -0,0 +1,7 @@
+metres to inches
+:memory: #use in-memory database
+SELECT CvtToIn(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToIn(1.0);
+39.37007:8
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_in_us.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_in_us.testcase
new file mode 100644
index 0000000..c8c2e83
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_in_us.testcase
@@ -0,0 +1,7 @@
+metres to US inches
+:memory: #use in-memory database
+SELECT CvtToUsIn(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsIn(1.0);
+39.37:5
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_ch.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_ch.testcase
new file mode 100644
index 0000000..e329e82
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_ch.testcase
@@ -0,0 +1,7 @@
+metres to Indian chains
+:memory: #use in-memory database
+SELECT CvtToIndCh(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToIndCh(1000)
+49.70995:8
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_ft.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_ft.testcase
new file mode 100644
index 0000000..f907575
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_ft.testcase
@@ -0,0 +1,7 @@
+metres to Indian feet
+:memory: #use in-memory database
+SELECT CvtToIndFt(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToIndFt(1.0);
+3.2808570:9
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_yd.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_yd.testcase
new file mode 100644
index 0000000..01ab952
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ind_yd.testcase
@@ -0,0 +1,7 @@
+metres to Indian yards
+:memory: #use in-memory database
+SELECT CvtToIndYd(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToIndYd(1.0);
+1.0936190:8
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_km.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_km.testcase
new file mode 100644
index 0000000..216b857
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_km.testcase
@@ -0,0 +1,7 @@
+metres to kilometres
+:memory: #use in-memory database
+SELECT CvtToKm(2100);
+1 # rows (not including the header row)
+1 # columns
+CvtToKm(2100);
+2.1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ln.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ln.testcase
new file mode 100644
index 0000000..1977183
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_ln.testcase
@@ -0,0 +1,7 @@
+metres to links
+:memory: #use in-memory database
+SELECT CvtToLink(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToLink(1000)
+4970.96954:9
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_mi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_mi.testcase
new file mode 100644
index 0000000..5210469
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_mi.testcase
@@ -0,0 +1,7 @@
+metres to miles
+:memory: #use in-memory database
+SELECT CvtToMi(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToMi(1000);
+0.6213:6
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_mm.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_mm.testcase
new file mode 100644
index 0000000..3b4e456
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_mm.testcase
@@ -0,0 +1,7 @@
+metres to millimetres
+:memory: #use in-memory database
+SELECT CvtToMm(2.51);
+1 # rows (not including the header row)
+1 # columns
+CvtToMm(2.51);
+2510.0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_nm.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_nm.testcase
new file mode 100644
index 0000000..8fa4223
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_nm.testcase
@@ -0,0 +1,7 @@
+metres to nautical miles
+:memory: #use in-memory database
+SELECT CvtToKmi(2000.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToKmi(2000.0)
+1.07991361:7
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_us_ch.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_us_ch.testcase
new file mode 100644
index 0000000..591e34f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_us_ch.testcase
@@ -0,0 +1,7 @@
+metres to US chains
+:memory: #use in-memory database
+SELECT CvtToUsCh(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsCh(1000)
+49.709:6
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_us_ft.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_us_ft.testcase
new file mode 100644
index 0000000..48e872a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_us_ft.testcase
@@ -0,0 +1,7 @@
+metres to US feet
+:memory: #use in-memory database
+SELECT CvtToUsFt(100.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsFt(100.0);
+328.08:6
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_usmi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_usmi.testcase
new file mode 100644
index 0000000..82d05b0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_usmi.testcase
@@ -0,0 +1,7 @@
+metres to US miles
+:memory: #use in-memory database
+SELECT CvtToUsMi(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsMi(1000);
+0.6213:6
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_yd.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_yd.testcase
new file mode 100644
index 0000000..c791203
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_yd.testcase
@@ -0,0 +1,7 @@
+metres to yards
+:memory: #use in-memory database
+SELECT CvtToYd(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToYd(1.0);
+1.0936133:8
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_yd_us.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_yd_us.testcase
new file mode 100644
index 0000000..97c953a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/m_yd_us.testcase
@@ -0,0 +1,7 @@
+metres to US yards
+:memory: #use in-memory database
+SELECT CvtToUsYd(100.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsYd(100.0);
+109.36:6
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline.testcase
new file mode 100644
index 0000000..33954a6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline.testcase
@@ -0,0 +1,8 @@
+makeline1
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT(1 2)")))
+LINESTRING(0 0, 1 2)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline10.testcase
new file mode 100644
index 0000000..63938ae
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline10.testcase
@@ -0,0 +1,8 @@
+makeline10
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTM(0 0 38.5)"), GeomFromText("POINTM(1 2 38.64)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTM(0 0 38.5)"), GeomFromText("POINTM(1 2 38.64)")))
+LINESTRING M(0 0 38.5, 1 2 38.64)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline11.testcase
new file mode 100644
index 0000000..4b499fd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline11.testcase
@@ -0,0 +1,8 @@
+makeline11
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZM(0 0 1.3 38.5)"), GeomFromText("POINTM(1 2 38.64)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZM(0 0 1.3 38.5)"), GeomFromText("POINTM(1 2 38.64)")))
+LINESTRING ZM(0 0 1.3 38.5, 1 2 0 38.64)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline12.testcase
new file mode 100644
index 0000000..e638f5f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline12.testcase
@@ -0,0 +1,8 @@
+makeline12
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTM(1 2 38.64)"), GeomFromText("POINTZM(0 0 1.3 38.5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTM(1 2 38.64)"), GeomFromText("POINTZM(0 0 1.3 38.5)")))
+LINESTRING ZM(1 2 0 38.64, 0 0 1.3 38.5)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline13.testcase
new file mode 100644
index 0000000..a725410
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline13.testcase
@@ -0,0 +1,8 @@
+makeline13
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(1 2)"), GeomFromText("POINTZM(0 0 1.3 38.5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(1 2)"), GeomFromText("POINTZM(0 0 1.3 38.5)")))
+LINESTRING ZM(1 2 0 0, 0 0 1.3 38.5)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline14.testcase
new file mode 100644
index 0000000..ed5e6e7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline14.testcase
@@ -0,0 +1,8 @@
+makeline14
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT M(1 2 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT M(1 2 0)")))
+LINESTRING M(0 0 0, 1 2 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline15.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline15.testcase
new file mode 100644
index 0000000..1180ec5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline15.testcase
@@ -0,0 +1,8 @@
+makeline15
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZ(0 0 4)"), GeomFromText("POINTM(1 2 0.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZ(0 0 4)"), GeomFromText("POINTM(1 2 0.4)")))
+LINESTRING ZM(0 0 4 0, 1 2 0 0.4)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline16.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline16.testcase
new file mode 100644
index 0000000..c80fc19
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline16.testcase
@@ -0,0 +1,8 @@
+makeline16
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTM(0 0 4.1)"), GeomFromText("POINTZ(1 2 2.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTM(0 0 4.1)"), GeomFromText("POINTZ(1 2 2.4)")))
+LINESTRING ZM(0 0 0 4.1, 1 2 2.4 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline17.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline17.testcase
new file mode 100644
index 0000000..ff1d299
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline17.testcase
@@ -0,0 +1,8 @@
+makeline17
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTZ(1 2 2.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTZ(1 2 2.4)")))
+LINESTRING Z(0 0 0, 1 2 2.4)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline18.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline18.testcase
new file mode 100644
index 0000000..20eac24
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline18.testcase
@@ -0,0 +1,8 @@
+makeline18
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTM(1 2 12.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTM(1 2 12.4)")))
+LINESTRING M(0 0 0, 1 2 12.4)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline2.testcase
new file mode 100644
index 0000000..5bb6a5e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline2.testcase
@@ -0,0 +1,8 @@
+makeline2
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)")))
+LINESTRING(0 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline3.testcase
new file mode 100644
index 0000000..1f3637a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline3.testcase
@@ -0,0 +1,8 @@
+makeline3
+:memory: #use in-memory database
+SELECT MakeLine("text");
+1 # rows (not including the header row)
+1 # columns
+MakeLine("text")
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline4.testcase
new file mode 100644
index 0000000..5e670fd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline4.testcase
@@ -0,0 +1,8 @@
+makeline4
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), zeroblob(10)));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), zeroblob(10)))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline5.testcase
new file mode 100644
index 0000000..139abbb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline5.testcase
@@ -0,0 +1,8 @@
+makeline5
+:memory: #use in-memory database
+SELECT AsText(MakeLine(zeroblob(10), GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(zeroblob(10), GeomFromText("POINT(1 2)")))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline6.testcase
new file mode 100644
index 0000000..c514a44
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline6.testcase
@@ -0,0 +1,8 @@
+makeline6
+:memory: #use in-memory database
+SELECT MakeLine("hello", GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MakeLine("hello", GeomFromText("POINT(1 2)"))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline7.testcase
new file mode 100644
index 0000000..b05115b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline7.testcase
@@ -0,0 +1,8 @@
+makeline7
+:memory: #use in-memory database
+SELECT MakeLine(GeomFromText("POINT(0 0)"), "world");
+1 # rows (not including the header row)
+1 # columns
+MakeLine(GeomFromText("POINT(0 0)"), "world")
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline8.testcase
new file mode 100644
index 0000000..7266120
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline8.testcase
@@ -0,0 +1,8 @@
+makeline8
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZ(0 0 0)"), GeomFromText("POINTZ(1 2 0.2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZ(0 0 0)"), GeomFromText("POINTZ(1 2 0.2)")))
+LINESTRING Z(0 0 0, 1 2 0.2)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline9.testcase
new file mode 100644
index 0000000..499e8d5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makeline9.testcase
@@ -0,0 +1,8 @@
+makeline9
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZ(0 0 0.2)"), GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZ(0 0 0.2)"), GeomFromText("POINT(1 2)")))
+LINESTRING Z(0 0 0.2, 1 2 0)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null1.testcase
new file mode 100644
index 0000000..28cd977
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null1.testcase
@@ -0,0 +1,7 @@
+makepoint-null1
+:memory: #use in-memory database
+SELECT AsText(MakePoint("hello", 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint("hello", 42.3150676015829))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null2.testcase
new file mode 100644
index 0000000..52fcc14
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null2.testcase
@@ -0,0 +1,7 @@
+makepoint-null2
+:memory: #use in-memory database
+SELECT AsText(MakePoint(26.0, "world"));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(26.0, "world"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null3.testcase
new file mode 100644
index 0000000..d2d2081
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null3.testcase
@@ -0,0 +1,7 @@
+makepoint-null3
+:memory: #use in-memory database
+SELECT AsText(MakePoint(26.0, "world", 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(26.0, "world", 4326))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null4.testcase
new file mode 100644
index 0000000..e314a4b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null4.testcase
@@ -0,0 +1,7 @@
+makepoint-null4
+:memory: #use in-memory database
+SELECT AsText(MakePoint("hello", 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint("hello", 42.3150676015829, 4326))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null5.testcase
new file mode 100644
index 0000000..4f15494
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null5.testcase
@@ -0,0 +1,7 @@
+makepoint-null5
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-26.0, 42.3150676015829, 4326.0));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-26.0, 42.3150676015829, 4326.0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null6.testcase
new file mode 100644
index 0000000..84399e5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null6.testcase
@@ -0,0 +1,7 @@
+makepoint-null5
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-26.0, 42.3150676015829, "WGS84"));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-26.0, 42.3150676015829, "WGS84"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null7.testcase
new file mode 100644
index 0000000..4330591
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint-null7.testcase
@@ -0,0 +1,7 @@
+makepoint-null7
+:memory: #use in-memory database
+SELECT AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4.1);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4.1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint1.testcase
new file mode 100644
index 0000000..f1edced
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint1.testcase
@@ -0,0 +1,7 @@
+makepoint1
+:memory: #use in-memory database
+SELECT AsText(MakePoint(136, -35));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(136, -35))
+POINT(136 -35)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint2.testcase
new file mode 100644
index 0000000..c21733b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint2.testcase
@@ -0,0 +1,7 @@
+makepoint2
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+POINT(-71.104344 42.315068)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint3.testcase
new file mode 100644
index 0000000..f798e40
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint3.testcase
@@ -0,0 +1,7 @@
+makepoint3
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-71.1043443253471, 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-71.1043443253471, 42.3150676015829))
+POINT(-71.104344 42.315068)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint4.testcase
new file mode 100644
index 0000000..8092f94
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint4.testcase
@@ -0,0 +1,7 @@
+makepoint4
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-71, 42, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-71, 42, 4326))
+POINT(-71 42)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint5.testcase
new file mode 100644
index 0000000..4d7a97d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint5.testcase
@@ -0,0 +1,7 @@
+makepoint5
+:memory: #use in-memory database
+SELECT AsWkt(MakePoint(-71.1043443253471, 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MakePoint(-71.1043443253471, 42.3150676015829))
+POINT(-71.1043443253471 42.315067601582903)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint6.testcase
new file mode 100644
index 0000000..64d0e70
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint6.testcase
@@ -0,0 +1,7 @@
+makepoint6
+:memory: #use in-memory database
+SELECT AsEWkt(MakePoint(-71.1043443253471, 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(MakePoint(-71.1043443253471, 42.3150676015829))
+SRID=-1;POINT(-71.1043443253471 42.315067601582903)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint7.testcase
new file mode 100644
index 0000000..91952b6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/makepoint7.testcase
@@ -0,0 +1,7 @@
+makepoint7
+:memory: #use in-memory database
+SELECT AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4)
+POINT(-71.1043 42.3151)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr1.testcase
new file mode 100644
index 0000000..dbc8c56
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr1.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + Point
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr10.testcase
new file mode 100644
index 0000000..7cb0927
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr10.testcase
@@ -0,0 +1,7 @@
+MbrIntersects - Line + Point inside
+:memory: #use in-memory database
+SELECT MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr11.testcase
new file mode 100644
index 0000000..b456b45
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr11.testcase
@@ -0,0 +1,7 @@
+MbrIntersects - Line + Point outside
+:memory: #use in-memory database
+SELECT MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr12.testcase
new file mode 100644
index 0000000..bc1f590
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr12.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Point on
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr13.testcase
new file mode 100644
index 0000000..c08e8de
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr13.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Line
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(1 0, 0 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(1 0, 0 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr14.testcase
new file mode 100644
index 0000000..1d079a0
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr14.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + same Line
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr15.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr15.testcase
new file mode 100644
index 0000000..c9a884d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr15.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Polygon
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"))
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr16.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr16.testcase
new file mode 100644
index 0000000..988c72c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr16.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Different Polygon
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 -2, 1 -2, 1 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 -2, 1 -2, 1 0, 0 0))"))
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr17.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr17.testcase
new file mode 100644
index 0000000..3b88e6f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr17.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Toxic Polygon
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr18.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr18.testcase
new file mode 100644
index 0000000..f2ec8e9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr18.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Polygon
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"))
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr19.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr19.testcase
new file mode 100644
index 0000000..2f24321
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr19.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + same Line
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr2.testcase
new file mode 100644
index 0000000..73cab73
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr2.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + Point 
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr20.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr20.testcase
new file mode 100644
index 0000000..4f0fb64
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr20.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Point outside
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr21.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr21.testcase
new file mode 100644
index 0000000..4f0fb64
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr21.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Point outside
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr22.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr22.testcase
new file mode 100644
index 0000000..9df3579
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr22.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Point on
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr23.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr23.testcase
new file mode 100644
index 0000000..ca87acd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr23.testcase
@@ -0,0 +1,7 @@
+MbrTouches - Line + Point on
+:memory: #use in-memory database
+SELECT MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr24.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr24.testcase
new file mode 100644
index 0000000..073a057
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr24.testcase
@@ -0,0 +1,7 @@
+MbrTouches - Line + Point inside
+:memory: #use in-memory database
+SELECT MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr25.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr25.testcase
new file mode 100644
index 0000000..28391e3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr25.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point inside
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr26.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr26.testcase
new file mode 100644
index 0000000..beddfc8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr26.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point outside 
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr27.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr27.testcase
new file mode 100644
index 0000000..ebeb491
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr27.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point up
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 6)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 6)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr28.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr28.testcase
new file mode 100644
index 0000000..24856bb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr28.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point down
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 -2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 -2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr29.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr29.testcase
new file mode 100644
index 0000000..54b3a14
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr29.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point down
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 -2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 -2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr3.testcase
new file mode 100644
index 0000000..a48bdac
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr3.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + Point 
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 1)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr30.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr30.testcase
new file mode 100644
index 0000000..d7609d2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr30.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point left
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr31.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr31.testcase
new file mode 100644
index 0000000..7ebb23c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr31.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point right
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(3 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(3 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr32.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr32.testcase
new file mode 100644
index 0000000..7f853ad
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr32.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Line right
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(3 1, 4 0)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(3 1, 4 0)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr4.testcase
new file mode 100644
index 0000000..76fa078
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr4.testcase
@@ -0,0 +1,7 @@
+MbrContains - Text + Point (error)
+:memory: #use in-memory database
+SELECT MbrContains("hello", GeomFromText("POINT(2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains("hello", GeomFromText("POINT(2 1)")) # header
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr5.testcase
new file mode 100644
index 0000000..5ec1fa1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr5.testcase
@@ -0,0 +1,7 @@
+MbrContains - Point + Text (error)
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("POINT(2 1)"), "hello");
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("POINT(2 1)"), "hello")
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr6.testcase
new file mode 100644
index 0000000..a2c0cc8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr6.testcase
@@ -0,0 +1,7 @@
+MbrContains - Point + bad blob (error)
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("POINT(2 1)"), zeroblob(49));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("POINT(2 1)"), zeroblob(49))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr7.testcase
new file mode 100644
index 0000000..1f8c241
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr7.testcase
@@ -0,0 +1,7 @@
+MbrContains - bad blob (error) + Point
+:memory: #use in-memory database
+SELECT MbrContains(zeroblob(49), GeomFromText("POINT(2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(zeroblob(49), GeomFromText("POINT(2 1)"))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr8.testcase
new file mode 100644
index 0000000..9c5daa2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr8.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + PointZ
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINTZ(1 2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINTZ(1 2 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr9.testcase
new file mode 100644
index 0000000..556a8f4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mbr9.testcase
@@ -0,0 +1,7 @@
+MbrIntersects - Line + Point on
+:memory: #use in-memory database
+SELECT MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mi_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mi_m.testcase
new file mode 100644
index 0000000..c8f43d5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mi_m.testcase
@@ -0,0 +1,7 @@
+miles to metres
+:memory: #use in-memory database
+SELECT CvtFromMi(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtFromMi(1.0);
+1609.344
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mlinefromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mlinefromtext1.testcase
new file mode 100644
index 0000000..cccad12
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mlinefromtext1.testcase
@@ -0,0 +1,7 @@
+multilinefromtext1
+:memory: #use in-memory database
+SELECT AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))", 4326))
+MULTILINESTRING((10 10,20 20,10 40),(40 40,30 30,40 20,30 10))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mlinefromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mlinefromtext2.testcase
new file mode 100644
index 0000000..6f7f7af
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mlinefromtext2.testcase
@@ -0,0 +1,7 @@
+multilinefromtext2
+:memory: #use in-memory database
+SELECT AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))"))
+MULTILINESTRING((10 10,20 20,10 40),(40 40,30 30,40 20,30 10))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mm_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mm_m.testcase
new file mode 100644
index 0000000..9ffce78
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mm_m.testcase
@@ -0,0 +1,7 @@
+millimetres to metres
+:memory: #use in-memory database
+SELECT CvtFromMm(2100.4);
+1 # rows (not including the header row)
+1 # columns
+CvtFromMm(2100.4);
+2.1004
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpointfromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpointfromtext1.testcase
new file mode 100644
index 0000000..11223d5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpointfromtext1.testcase
@@ -0,0 +1,7 @@
+multipointfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)"))
+MULTIPOINT(-71 42,-70 41,-70 42,-70 42,-71 42)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpointfromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpointfromtext2.testcase
new file mode 100644
index 0000000..f23c525
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpointfromtext2.testcase
@@ -0,0 +1,7 @@
+multipointfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)", 4326))
+MULTIPOINT(-71 42,-70 41,-70 42,-70 42,-71 42)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpolygonfromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpolygonfromtext1.testcase
new file mode 100644
index 0000000..3185895
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpolygonfromtext1.testcase
@@ -0,0 +1,7 @@
+multipolygonfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+MULTIPOLYGON(((30 20,10 40,45 40,30 20)),((15 5,40 10,10 20,5 10,15 5)))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpolygonfromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpolygonfromtext2.testcase
new file mode 100644
index 0000000..1ecc310
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/mpolygonfromtext2.testcase
@@ -0,0 +1,7 @@
+multipolygonfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))", 4326))
+MULTIPOLYGON(((30 20,10 40,45 40,30 20)),((15 5,40 10,10 20,5 10,15 5)))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/nm_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/nm_m.testcase
new file mode 100644
index 0000000..ac7f637
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/nm_m.testcase
@@ -0,0 +1,7 @@
+nautical miles to metres
+:memory: #use in-memory database
+SELECT CvtFromKmi(1);
+1 # rows (not including the header row)
+1 # columns
+CvtFromKmi(1);
+1852.0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output1.testcase
new file mode 100644
index 0000000..9f4abd9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output1.testcase
@@ -0,0 +1,18 @@
+Output format tests - POLYGON, WGS-84
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT GeomFromEWkt("SRID=4326;POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+6 # columns
+AsText(geom)
+AsKML(geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))
+<Polygon><outerBoundaryIs><LinearRing><coordinates>0,0 1,1 0,2 -1,1 0,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
+<gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,0 1,1 0,2 -1,1 0,0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>:0
+{"type":"Polygon","coordinates":[[[0,0],[1,1],[0,2],[-1,1],[0,0]]]}:0
+POLYGON((0 0,1 1,0 2,-1 1,0 0))
+SRID=4326;POLYGON((0 0,1 1,0 2,-1 1,0 0))
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output2.testcase
new file mode 100644
index 0000000..65a9b29
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output2.testcase
@@ -0,0 +1,20 @@
+Output format tests - POLYGON, no SRID
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+POLYGON((0 0,1 1,0 2,-1 1,0 0))
+SRID=-1;POLYGON((0 0,1 1,0 2,-1 1,0 0))
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output3.testcase
new file mode 100644
index 0000000..6203fbe
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output3.testcase
@@ -0,0 +1,20 @@
+Output format tests - bad blob input
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT zeroblob(40) as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output4.testcase
new file mode 100644
index 0000000..0600668
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output4.testcase
@@ -0,0 +1,20 @@
+Output format tests - text input
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT "hello" as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output5.testcase
new file mode 100644
index 0000000..c011e84
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output5.testcase
@@ -0,0 +1,20 @@
+Output format tests - POINT input, no SRID
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT MakePoint(1,2) as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POINT(1 2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+POINT(1 2)
+SRID=-1;POINT(1 2)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output6.testcase
new file mode 100644
index 0000000..3c0fa55
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output6.testcase
@@ -0,0 +1,20 @@
+Output format tests - POINT input, WGS-84
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT MakePoint(1, 2, 4326) as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POINT(1 2)
+<Point><coordinates>1,2</coordinates></Point>
+<Placemark><name>myname</name><description>mydesc</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>:0
+{"type":"Point","coordinates":[1,2]}:0
+POINT(1 2)
+SRID=4326;POINT(1 2)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output7.testcase
new file mode 100644
index 0000000..208018e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/output7.testcase
@@ -0,0 +1,19 @@
+Output format tests - Linestring, NAD83
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom, 6), AsGML(2, geom, 7), AsGML(3, geom, 8), AsGeoJSON(geom, 6), AsGeoJSON(geom, 5, 4), AsWkt(geom, 5) FROM (SELECT GeomFromEwkt("SRID=3636;LINESTRING(1065407.0674 116445.5897, 2968193.5686 805860.5650)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom, 6)
+AsGML(2, geom, 7)
+AsGML(3, geom, 8)
+AsGeoJSON(geom, 6)
+AsGeoJSON(geom, 5, 4)
+AsWkt(geom, 5)
+LINESTRING(1065407.0674 116445.5897, 2968193.5686 805860.565)
+<LineString><coordinates>-104.05,45.93 -96.430658,47.805216</coordinates></LineString>
+<gml:LineString srsName="EPSG:3636"><gml:coordinates>1065407.0674,116445.5897 2968193.5686,805860.565</gml:coordinates></gml:LineString>:0
+<gml:Curve srsName="EPSG:3636"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">1065407.0674 116445.5897 2968193.5686 805860.565</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>:0
+{"type":"LineString","coordinates":[[1065407.0674,116445.5897],[2968193.5686,805860.565]]}:0
+{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG:3636"}},"coordinates":[[1065407.0674,116445.5897],[2968193.5686,805860.565]]}:0
+LINESTRING(1065407.0674 116445.5897,2968193.5686 805860.565)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pi.testcase
new file mode 100644
index 0000000..db27b22
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pi.testcase
@@ -0,0 +1,7 @@
+pi
+:memory: # use in-memory database
+SELECT pi();
+1 # rows (not including the header row)
+1 # columns
+pi() # header
+3.141592653589:14 # result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointfromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointfromtext1.testcase
new file mode 100644
index 0000000..27f39bd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointfromtext1.testcase
@@ -0,0 +1,7 @@
+pointfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)"), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointfromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointfromtext2.testcase
new file mode 100644
index 0000000..2ada024
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointfromtext2.testcase
@@ -0,0 +1,7 @@
+pointfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn1.testcase
new file mode 100644
index 0000000..0eecabc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn1.testcase
@@ -0,0 +1,7 @@
+pointn - text input (error)
+:memory: #use in-memory database
+SELECT PointN("hello world", 0);
+1 # rows (not including the header row)
+1 # columns
+PointN("hello world", 0)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn10.testcase
new file mode 100644
index 0000000..ed8e012
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn10.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGM (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGM(4 0 9, 4 4 8, 8 4 7)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGM(4 0 9, 4 4 8, 8 4 7)"), -1))
+POINT M(8 4 7)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn11.testcase
new file mode 100644
index 0000000..8ebfc25
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn11.testcase
@@ -0,0 +1,7 @@
+pointN - nasty geometry
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn12.testcase
new file mode 100644
index 0000000..3972635
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn12.testcase
@@ -0,0 +1,7 @@
+pointN - point input
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("POINT(136 -35)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("POINT(136 -35)"), 1))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn13.testcase
new file mode 100644
index 0000000..49e19d4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn13.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGZ out of range (error)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), 4));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), 4))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn14.testcase
new file mode 100644
index 0000000..5a8ec2a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn14.testcase
@@ -0,0 +1,7 @@
+pointN - empty LINESTRINGZ (error)
+:memory: #use in-memory database
+SELECT PointN(GeomFromText("LINESTRINGZ()"), 0);
+1 # rows (not including the header row)
+1 # columns
+PointN(GeomFromText("LINESTRINGZ()"), 0)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn2.testcase
new file mode 100644
index 0000000..196ce62
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn2.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (first point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 1))
+POINT(4 0)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn3.testcase
new file mode 100644
index 0000000..3e1b63d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn3.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (second point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 2))
+POINT(4 4)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn4.testcase
new file mode 100644
index 0000000..d1bba49
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn4.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (third point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 3));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 3))
+POINT(8 4)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn5.testcase
new file mode 100644
index 0000000..ed66d33
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn5.testcase
@@ -0,0 +1,7 @@
+pointN - text index (error)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), "three"));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), "three"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn6.testcase
new file mode 100644
index 0000000..5069b15
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn6.testcase
@@ -0,0 +1,7 @@
+pointN - text arg (error)
+:memory: #use in-memory database
+SELECT PointN("hello", 1);
+1 # rows (not including the header row)
+1 # columns
+PointN("hello", 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn7.testcase
new file mode 100644
index 0000000..5da1b7a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn7.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), -1))
+POINT(8 4)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn8.testcase
new file mode 100644
index 0000000..a92d516
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn8.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGZ (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), -1))
+POINT Z(8 4 3.3)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn9.testcase
new file mode 100644
index 0000000..cafc9e5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pointn9.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGZM (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGZM(4 0 4.4 9, 4 4 2.2 8, 8 4 3.3 7)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGZM(4 0 4.4 9, 4 4 2.2 8, 8 4 3.3 7)"), -1))
+POINT ZM(8 4 3.3 7)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonfromtext1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonfromtext1.testcase
new file mode 100644
index 0000000..7d76c36
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonfromtext1.testcase
@@ -0,0 +1,7 @@
+polygonfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))"), 4)
+POLYGON((-71 42,-70 41,-70 42,-70 42,-71 42))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonfromtext2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonfromtext2.testcase
new file mode 100644
index 0000000..7af86e5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonfromtext2.testcase
@@ -0,0 +1,7 @@
+polygonfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326), 4)
+POLYGON((-71 42,-70 41,-70 42,-70 42,-71 42))
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize1.testcase
new file mode 100644
index 0000000..6229f6c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize1.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - simple polygon
+:memory: #use in-memory database
+SELECT AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1, 0 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1, 0 0)")))
+POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))
+
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize2.testcase
new file mode 100644
index 0000000..a8196d8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize2.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - not ring
+:memory: #use in-memory database
+SELECT AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1)")))
+(NULL)
+
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize3.testcase
new file mode 100644
index 0000000..1349c12
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize3.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - bad blob
+:memory: #use in-memory database
+SELECT Polygonize(zeroblob(9));
+1 # rows (not including the header row)
+1 # columns
+Polygonize(zeroblob(9))
+(NULL)
+
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize4.testcase
new file mode 100644
index 0000000..462703f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/polygonize4.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - text
+:memory: #use in-memory database
+SELECT Polygonize("hello world");
+1 # rows (not including the header row)
+1 # columns
+Polygonize("hello world")
+(NULL)
+
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-badarg1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-badarg1.testcase
new file mode 100644
index 0000000..919ff56
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-badarg1.testcase
@@ -0,0 +1,7 @@
+pow(0.0, "test") # test of pow() function with bad arguments
+:memory: #use in-memory database
+SELECT pow(0.0, "test");
+1 # rows (not including the header row)
+1 # columns
+pow(0.0, "test") # header
+(NULL) # result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-badarg2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-badarg2.testcase
new file mode 100644
index 0000000..fcfbc8d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-badarg2.testcase
@@ -0,0 +1,7 @@
+pow("test", 1) # test of pow() function with bad arguments
+:memory: #use in-memory database
+SELECT pow("test", 1);
+1 # rows (not including the header row)
+1 # columns
+pow("test", 1) # header
+(NULL) # result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-edom.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-edom.testcase
new file mode 100644
index 0000000..0a0e3c7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-edom.testcase
@@ -0,0 +1,7 @@
+pow(-2.1, 3.6) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(-2.1, 3.6);
+1 # rows (not including the header row)
+1 # columns
+pow(-2.1, 3.6) # header
+(NULL) # result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-fp.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-fp.testcase
new file mode 100644
index 0000000..b0c3e4c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow-fp.testcase
@@ -0,0 +1,7 @@
+pow(0, -3.6) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0, -3.6);
+1 # rows (not including the header row)
+1 # columns
+pow(0, -3.6) # header
+Inf # result - its basically division by zero.
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00-1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00-1.testcase
new file mode 100644
index 0000000..24ade7c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00-1.testcase
@@ -0,0 +1,7 @@
+pow(0.0, 0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0.0, 0);
+1 # rows (not including the header row)
+1 # columns
+pow(0.0, 0) # header
+1.0 # result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00-2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00-2.testcase
new file mode 100644
index 0000000..b7ee8f7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00-2.testcase
@@ -0,0 +1,7 @@
+pow(0, 0.0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0, 0.0);
+1 # rows (not including the header row)
+1 # columns
+pow(0, 0.0) # header
+1.0 # result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00.testcase
new file mode 100644
index 0000000..e535008
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00.testcase
@@ -0,0 +1,7 @@
+pow(0, 0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0, 0);
+1 # rows (not including the header row)
+1 # columns
+pow(0, 0) # header
+1.0 # result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00double.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00double.testcase
new file mode 100644
index 0000000..d7eadc6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/pow00double.testcase
@@ -0,0 +1,7 @@
+pow(0.0, 0.0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0.0, 0.0);
+1 # rows (not including the header row)
+1 # columns
+pow(0.0, 0.0) # header
+1.0 # result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rad-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rad-text.testcase
new file mode 100644
index 0000000..e71b308
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rad-text.testcase
@@ -0,0 +1,7 @@
+radians(text) # test of radians() 
+:memory: #use in-memory database
+SELECT radians("text");
+1 # rows (not including the header row)
+1 # columns
+radians("text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rad0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rad0.testcase
new file mode 100644
index 0000000..ec08505
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rad0.testcase
@@ -0,0 +1,7 @@
+radians(0) # test of radians() 
+:memory: #use in-memory database
+SELECT radians(0);
+1 # rows (not including the header row)
+1 # columns
+radians(0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/radpi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/radpi.testcase
new file mode 100644
index 0000000..ee265a4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/radpi.testcase
@@ -0,0 +1,7 @@
+radians(pi()) # test of radians() 
+:memory: #use in-memory database
+SELECT radians(180.0);
+1 # rows (not including the header row)
+1 # columns
+radians(180.0) # header
+3.1415:6 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords1.testcase
new file mode 100644
index 0000000..01884e8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords1.testcase
@@ -0,0 +1,7 @@
+reflectcoords1
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 0))
+POINT(-1 2)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords2.testcase
new file mode 100644
index 0000000..01cc29b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords2.testcase
@@ -0,0 +1,7 @@
+reflectcoords2
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 1))
+POINT(-1 -2)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords3.testcase
new file mode 100644
index 0000000..32f54ed
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords3.testcase
@@ -0,0 +1,7 @@
+reflectcoords3
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 0, 1))
+POINT(1 -2)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords4.testcase
new file mode 100644
index 0000000..6c7610d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords4.testcase
@@ -0,0 +1,7 @@
+reflectcoords4
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(zeroblob(20), 0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(zeroblob(20), 0, 1))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords5.testcase
new file mode 100644
index 0000000..21a1e83
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords5.testcase
@@ -0,0 +1,7 @@
+reflectcoords5
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords("hello", 0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords("hello", 0, 1))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords6.testcase
new file mode 100644
index 0000000..bdcd0e7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords6.testcase
@@ -0,0 +1,7 @@
+reflectcoords6
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1.0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1.0, 1))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords7.testcase
new file mode 100644
index 0000000..39432a1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords7.testcase
@@ -0,0 +1,7 @@
+reflectcoords7
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, -23.3));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, -23.3))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords8.testcase
new file mode 100644
index 0000000..d1cf601
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/reflectcoords8.testcase
@@ -0,0 +1,7 @@
+reflectcoords8
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("LINESTRING(-1 -1, 1 0, 0 1)"), 1, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("LINESTRING(-1 -1, 1 0, 0 1)"), 1, 1))
+LINESTRING(1 1, -1 -0, -0 -1) # TODO: check these -0 values...
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations1.testcase
new file mode 100644
index 0000000..241c539
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations1.testcase
@@ -0,0 +1,21 @@
+Relationship tests - POINTs identical
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(1 2)") as geom1, GeomFromText("POINT(1 2)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+1
+1
+0
+0
+0
+0
+1
+1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations2.testcase
new file mode 100644
index 0000000..6438754
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations2.testcase
@@ -0,0 +1,21 @@
+Relationship tests - POINTs different
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(1 2)") as geom1, GeomFromText("POINT(3 4)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+0
+0
+1
+0
+0
+0
+0
+0
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations3.testcase
new file mode 100644
index 0000000..eda1fa7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations3.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad first blob
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT zeroblob(10) as geom1, GeomFromText("POINT(3 4)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations4.testcase
new file mode 100644
index 0000000..2e5310a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations4.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad second blob
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(3 4)") as geom1, zeroblob(10) as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations5.testcase
new file mode 100644
index 0000000..9830665
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations5.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad second arg
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(3 4)") as geom1, "hello" as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations6.testcase
new file mode 100644
index 0000000..a645dc6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/relations6.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad first arg
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT "hello" as geom1, GeomFromText("POINT(3 4)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring1.testcase
new file mode 100644
index 0000000..6a84c62
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring1.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Linestring (error)
+:memory: #use in-memory database
+SELECT ExteriorRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"));
+1 # rows (not including the header row)
+1 # columns
+ExteriorRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring10.testcase
new file mode 100644
index 0000000..c47a099
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring10.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Simple Polygon
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"))
+0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring11.testcase
new file mode 100644
index 0000000..689854d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring11.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Polygon with 1 interior
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"))
+1
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring12.testcase
new file mode 100644
index 0000000..b756ae2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring12.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Polygon with 2 interior
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"))
+2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring13.testcase
new file mode 100644
index 0000000..428d227
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring13.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - float input (error)
+:memory: #use in-memory database
+SELECT NumInteriorRings(3.14);
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(3.14)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring14.testcase
new file mode 100644
index 0000000..73a1d67
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring14.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - bad blob (error)
+:memory: #use in-memory database
+SELECT NumInteriorRings(zeroblob(12));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(zeroblob(12))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring15.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring15.testcase
new file mode 100644
index 0000000..7297586
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring15.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - bad blob (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(zeroblob(12), 1);
+1 # rows (not including the header row)
+1 # column
+InteriorRingN(zeroblob(12), 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring16.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring16.testcase
new file mode 100644
index 0000000..9678bd9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring16.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - text input (error)
+:memory: #use in-memory database
+SELECT InteriorRingN("hello", 1);
+1 # rows (not including the header row)
+1 # column
+InteriorRingN("hello", 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring17.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring17.testcase
new file mode 100644
index 0000000..69184aa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring17.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2))
+LINESTRING(2 2, 2 3, 3 3, 3 2, 2 2)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring18.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring18.testcase
new file mode 100644
index 0000000..5535c27
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring18.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - first interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 1))
+LINESTRING(1 1, 1 3, 3 3, 3 1, 1 1)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring19.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring19.testcase
new file mode 100644
index 0000000..6acee8a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring19.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - out-of-range interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 3);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 3)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring2.testcase
new file mode 100644
index 0000000..151754d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring2.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))")))
+LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring20.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring20.testcase
new file mode 100644
index 0000000..242df4b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring20.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - float interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2.3);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2.3)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring21.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring21.testcase
new file mode 100644
index 0000000..15107d5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring21.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POINT (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POINT(1 2)"), 1);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POINT(1 2)"), 1)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring22.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring22.testcase
new file mode 100644
index 0000000..af2238f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring22.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON Z second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2))
+LINESTRING Z(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring23.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring23.testcase
new file mode 100644
index 0000000..1b0de03
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring23.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON M second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONM((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONM((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2))
+LINESTRING M(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring24.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring24.testcase
new file mode 100644
index 0000000..188d3ca
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring24.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON ZM second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONZM((0 0 0 1, 0 4 1 1, 4 4 2 1, 4 0 3 1, 0 0 0 1),(1 1 2 2, 1 3 2 2, 3 3 2 2, 3 1 2 2, 1 1 2 2),(2 2 1 3, 2 3 1 3, 3 3 1 3, 3 2 1 3, 2 2 1 3))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONZM((0 0 0 1, 0 4 1 1, 4 4 2 1, 4 0 3 1, 0 0 0 1),(1 1 2 2, 1 3 2 2, 3 3 2 2, 3 1 2 2, 1 1 2 2),(2 2 1 3, 2 3 1 3, 3 3 1 3, 3 2 1 3, 2 2 1 3))"), 2))
+LINESTRING ZM(2 2 1 3, 2 3 1 3, 3 3 1 3, 3 2 1 3, 2 2 1 3)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring25.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring25.testcase
new file mode 100644
index 0000000..e9f9901
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring25.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON Z third interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 3);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 3)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring26.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring26.testcase
new file mode 100644
index 0000000..5f9b781
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring26.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON Z zeroth interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 0);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 0)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring27.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring27.testcase
new file mode 100644
index 0000000..bfea875
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring27.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - broken second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 2))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 2))"), 2))
+LINESTRING Z(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 2)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring3.testcase
new file mode 100644
index 0000000..ddc5b51
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring3.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon Z
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGONZ((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGONZ((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+LINESTRING Z(136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring4.testcase
new file mode 100644
index 0000000..752fae3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring4.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon M
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGONM((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGONM((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+LINESTRING M(136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring5.testcase
new file mode 100644
index 0000000..270c02d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring5.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Bad blob (error)
+:memory: #use in-memory database
+SELECT ExteriorRing(zeroblob(27));
+1 # rows (not including the header row)
+1 # columns
+ExteriorRing(zeroblob(27))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring6.testcase
new file mode 100644
index 0000000..de4c1f8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring6.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - float input (error)
+:memory: #use in-memory database
+SELECT ExteriorRing(3.14);
+1 # rows (not including the header row)
+1 # columns
+ExteriorRing(3.14)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring7.testcase
new file mode 100644
index 0000000..740855d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring7.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon ZM
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGONZM((136 -35 4 0, 135.2 -34.5 6.5 1, 136 -35.2 9.4 2, 136 -35 4 0))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGONZM((136 -35 4 0, 135.2 -34.5 6.5 1, 136 -35.2 9.4 2, 136 -35 4 0))")))
+LINESTRING ZM(136 -35 4 0, 135.2 -34.5 6.5 1, 136 -35.2 9.4 2, 136 -35 4 0)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring8.testcase
new file mode 100644
index 0000000..8fcc474
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring8.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Toxic polygon
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")))
+LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring9.testcase
new file mode 100644
index 0000000..682d46c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/ring9.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Toxic polygon
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords1.testcase
new file mode 100644
index 0000000..f4956d1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords1.testcase
@@ -0,0 +1,19 @@
+rotate coords - Point
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POINT(1 2)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POINT(1 2)
+POINT(2 -1)
+POINT(-1 -2)
+POINT(-2 1)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords10.testcase
new file mode 100644
index 0000000..8eecc0d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords10.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygonzm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZM((0 0 1 5, 1 1 2 6, 1 2 3 7, -1 1 4 8, 0 0 1 5))") as geom) dummy; 
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON ZM((0 0 1 5, 1 1 2 6, 1 2 3 7, -1 1 4 8, 0 0 1 5))
+POLYGON ZM((0 0 1 5, 1 -1 2 6, 2 -1 3 7, 1 1 4 8, 0 0 1 5))
+POLYGON ZM((0 -0 1 5, -1 -1 2 6, -1 -2 3 7, 1 -1 4 8, 0 -0 1 5))
+POLYGON ZM((0 0 1 5, -1 1 2 6, -2 1 3 7, -1 -1 4 8, 0 0 1 5))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords11.testcase
new file mode 100644
index 0000000..22dcff8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords11.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygon
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGON((0 0, 2 2, 2 4, -2 2, 0 0),(0 0, 1 1, 1 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON((0 0, 2 2, 2 4, -2 2, 0 0), (0 0, 1 1, 1 2, -1 1, 0 0))
+POLYGON((0 0, 2 -2, 4 -2, 2 2, 0 0), (0 0, 1 -1, 2 -1, 1 1, 0 0))
+POLYGON((0 -0, -2 -2, -2 -4, 2 -2, 0 -0), (0 -0, -1 -1, -1 -2, 1 -1, 0 -0))
+POLYGON((0 0, -2 2, -4 2, -2 -2, 0 0), (0 0, -1 1, -2 1, -1 -1, 0 0))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords12.testcase
new file mode 100644
index 0000000..98ac741
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords12.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygonz
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZ((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1),(0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON Z((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1), (0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))
+POLYGON Z((0 0 1, 2 -2 2, 4 -2 3, 2 2 4, 0 0 1), (0 0 5, 1 -1 6, 2 -1 7, 1 1 8, 0 0 5))
+POLYGON Z((0 -0 1, -2 -2 2, -2 -4 3, 2 -2 4, 0 -0 1), (0 -0 5, -1 -1 6, -1 -2 7, 1 -1 8, 0 -0 5))
+POLYGON Z((0 0 1, -2 2 2, -4 2 3, -2 -2 4, 0 0 1), (0 0 5, -1 1 6, -2 1 7, -1 -1 8, 0 0 5))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords13.testcase
new file mode 100644
index 0000000..c7b2a4e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords13.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygonm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONM((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1),(0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON M((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1), (0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))
+POLYGON M((0 0 1, 2 -2 2, 4 -2 3, 2 2 4, 0 0 1), (0 0 5, 1 -1 6, 2 -1 7, 1 1 8, 0 0 5))
+POLYGON M((0 -0 1, -2 -2 2, -2 -4 3, 2 -2 4, 0 -0 1), (0 -0 5, -1 -1 6, -1 -2 7, 1 -1 8, 0 -0 5))
+POLYGON M((0 0 1, -2 2 2, -4 2 3, -2 -2 4, 0 0 1), (0 0 5, -1 1 6, -2 1 7, -1 -1 8, 0 0 5))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords14.testcase
new file mode 100644
index 0000000..f3c44dc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords14.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygonzm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZM((0 0 1 1, 2 2 2 2, 2 4 3 3, -2 2 4 4, 0 0 1 1),(0 0 5 0, 1 1 6 1, 1 2 7 2, -1 1 8 3, 0 0 5 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON ZM((0 0 1 1, 2 2 2 2, 2 4 3 3, -2 2 4 4, 0 0 1 1), (0 0 5 0, 1 1 6 1, 1 2 7 2, -1 1 8 3, 0 0 5 0))
+POLYGON ZM((0 0 1 1, 2 -2 2 2, 4 -2 3 3, 2 2 4 4, 0 0 1 1), (0 0 5 0, 1 -1 6 1, 2 -1 7 2, 1 1 8 3, 0 0 5 0))
+POLYGON ZM((0 -0 1 1, -2 -2 2 2, -2 -4 3 3, 2 -2 4 4, 0 -0 1 1), (0 -0 5 0, -1 -1 6 1, -1 -2 7 2, 1 -1 8 3, 0 -0 5 0))
+POLYGON ZM((0 0 1 1, -2 2 2 2, -4 2 3 3, -2 -2 4 4, 0 0 1 1), (0 0 5 0, -1 1 6 1, -2 1 7 2, -1 -1 8 3, 0 0 5 0))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords2.testcase
new file mode 100644
index 0000000..6e63c63
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords2.testcase
@@ -0,0 +1,19 @@
+rotate coords - PointZ
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POINTZ(1 2 1.5)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POINT Z(1 2 1.5)
+POINT Z(2 -1 1.5)
+POINT Z(-1 -2 1.5)
+POINT Z(-2 1 1.5)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords3.testcase
new file mode 100644
index 0000000..82a7848
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords3.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRING(0 0, 1 1)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING(0 0, 1 1)
+LINESTRING(0 0, 1 -1)
+LINESTRING(0 -0, -1 -1)
+LINESTRING(0 0, -1 1)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords4.testcase
new file mode 100644
index 0000000..8f52126
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords4.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING Z
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRINGZ(0 0 2, 1 1 3)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING Z(0 0 2, 1 1 3)
+LINESTRING Z(0 0 2, 1 -1 3)
+LINESTRING Z(0 -0 2, -1 -1 3)
+LINESTRING Z(0 0 2, -1 1 3)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords5.testcase
new file mode 100644
index 0000000..855a6a6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords5.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING M
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRINGM(0 0 2, 1 1 3)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING M(0 0 2, 1 1 3)
+LINESTRING M(0 0 2, 1 -1 3)
+LINESTRING M(0 -0 2, -1 -1 3)
+LINESTRING M(0 0 2, -1 1 3)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords6.testcase
new file mode 100644
index 0000000..50c1133
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords6.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING ZM
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRINGZM(0 0 2 4, 1 1 3 5)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING ZM(0 0 2 4, 1 1 3 5)
+LINESTRING ZM(0 0 2 4, 1 -1 3 5)
+LINESTRING ZM(0 -0 2 4, -1 -1 3 5)
+LINESTRING ZM(0 0 2 4, -1 1 3 5)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords7.testcase
new file mode 100644
index 0000000..468c11d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords7.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygon
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGON((0 0, 1 1, 1 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON((0 0, 1 1, 1 2, -1 1, 0 0))
+POLYGON((0 0, 1 -1, 2 -1, 1 1, 0 0))
+POLYGON((0 -0, -1 -1, -1 -2, 1 -1, 0 -0))
+POLYGON((0 0, -1 1, -2 1, -1 -1, 0 0))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords8.testcase
new file mode 100644
index 0000000..1344a76
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords8.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygonz
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZ((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))") as geom) dummy; 
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON Z((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))
+POLYGON Z((0 0 1, 1 -1 2, 2 -1 3, 1 1 4, 0 0 1))
+POLYGON Z((0 -0 1, -1 -1 2, -1 -2 3, 1 -1 4, 0 -0 1))
+POLYGON Z((0 0 1, -1 1 2, -2 1 3, -1 -1 4, 0 0 1))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords9.testcase
new file mode 100644
index 0000000..33755b1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/rotatecoords9.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygonm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONM((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))") as geom) dummy; 
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON M((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))
+POLYGON M((0 0 1, 1 -1 2, 2 -1 3, 1 1 4, 0 0 1))
+POLYGON M((0 -0 1, -1 -1 2, -1 -2 3, 1 -1 4, 0 -0 1))
+POLYGON M((0 0 1, -1 1 2, -2 1 3, -1 -1 4, 0 0 1))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-29.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-29.testcase
new file mode 100644
index 0000000..bfdd3be
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-29.testcase
@@ -0,0 +1,7 @@
+round(-2.9)
+:memory:
+SELECT round(-2.9); # the SQL to run
+1 # rows
+1 # column
+round(-2.9) # this is the header row
+-3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-31.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-31.testcase
new file mode 100644
index 0000000..9960065
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-31.testcase
@@ -0,0 +1,7 @@
+round(-3.1)
+:memory:
+SELECT round(-3.1); # the SQL to run
+1 # rows
+1 # column
+round(-3.1) # this is the header row
+-3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-text.testcase
new file mode 100644
index 0000000..9962b01
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round-text.testcase
@@ -0,0 +1,7 @@
+round(text)
+:memory:
+SELECT round("text"); # the SQL to run
+1 # rows
+1 # column
+round("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round0.testcase
new file mode 100644
index 0000000..bfe58db
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round0.testcase
@@ -0,0 +1,7 @@
+round(0)
+:memory:
+SELECT round(0); # the SQL to run
+1 # rows
+1 # column
+round(0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round29.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round29.testcase
new file mode 100644
index 0000000..8c060bb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round29.testcase
@@ -0,0 +1,7 @@
+round(2.9)
+:memory:
+SELECT round(2.9); # the SQL to run
+1 # rows
+1 # column
+round(2.9) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round3.testcase
new file mode 100644
index 0000000..f6e8eb5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round3.testcase
@@ -0,0 +1,7 @@
+round(3)
+:memory:
+SELECT round(3); # the SQL to run
+1 # rows
+1 # column
+round(3) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round30.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round30.testcase
new file mode 100644
index 0000000..2bdad47
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round30.testcase
@@ -0,0 +1,7 @@
+round(3.0)
+:memory:
+SELECT round(3.0); # the SQL to run
+1 # rows
+1 # column
+round(3.0) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round31.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round31.testcase
new file mode 100644
index 0000000..561d151
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/round31.testcase
@@ -0,0 +1,7 @@
+round(3.1)
+:memory:
+SELECT round(3.1); # the SQL to run
+1 # rows
+1 # column
+round(3.1) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords1.testcase
new file mode 100644
index 0000000..c4e3693
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords1.testcase
@@ -0,0 +1,21 @@
+scale coords - Point
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POINT(1 2)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POINT(0 0)
+POINT(0 0)
+POINT(2 6)
+POINT(1 -2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords10.testcase
new file mode 100644
index 0000000..62bc203
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords10.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGON with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 2, 1 3, 2 3, 2 2, 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0), (0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0), (0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((0 0, 0 12, 8 12, 8 0, 0 0), (2 6, 2 9, 4 9, 4 6, 2 6))
+POLYGON((0 -0, 0 -4, 4 -4, 4 -0, 0 -0), (1 -2, 1 -3, 2 -3, 2 -2, 1 -2))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords11.testcase
new file mode 100644
index 0000000..efd55bf
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords11.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZ with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZ((0 0 1, 0 4 1, 4 4 1, 4 0 1, 0 0 1),(1 2 1, 1 3 1, 2 3 1, 2 2 1, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON Z((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON Z((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON Z((0 0 1, 0 12 1, 8 12 1, 8 0 1, 0 0 1), (2 6 1, 2 9 1, 4 9 1, 4 6 1, 2 6 1))
+POLYGON Z((0 -0 1, 0 -4 1, 4 -4 1, 4 -0 1, 0 -0 1), (1 -2 1, 1 -3 1, 2 -3 1, 2 -2 1, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords12.testcase
new file mode 100644
index 0000000..5ccf77c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords12.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONM with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONM((0 0 1, 0 4 1, 4 4 1, 4 0 1, 0 0 1),(1 2 1, 1 3 1, 2 3 1, 2 2 1, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON M((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON M((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON M((0 0 1, 0 12 1, 8 12 1, 8 0 1, 0 0 1), (2 6 1, 2 9 1, 4 9 1, 4 6 1, 2 6 1))
+POLYGON M((0 -0 1, 0 -4 1, 4 -4 1, 4 -0 1, 0 -0 1), (1 -2 1, 1 -3 1, 2 -3 1, 2 -2 1, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords13.testcase
new file mode 100644
index 0000000..8721298
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords13.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZM with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZM((0 0 1 2, 0 4 1 2, 4 4 1 2, 4 0 1 2, 0 0 1 2),(1 2 1 2, 1 3 1 2, 2 3 1 2, 2 2 1 2, 1 2 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON ZM((0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2), (0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2))
+POLYGON ZM((0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2), (0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2))
+POLYGON ZM((0 0 1 2, 0 12 1 2, 8 12 1 2, 8 0 1 2, 0 0 1 2), (2 6 1 2, 2 9 1 2, 4 9 1 2, 4 6 1 2, 2 6 1 2))
+POLYGON ZM((0 -0 1 2, 0 -4 1 2, 4 -4 1 2, 4 -0 1 2, 0 -0 1 2), (1 -2 1 2, 1 -3 1 2, 2 -3 1 2, 2 -2 1 2, 1 -2 1 2))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords2.testcase
new file mode 100644
index 0000000..0fcfc82
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords2.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRING
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRING(1 2, 4 5)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING(0 0, 0 0)
+LINESTRING(0 0, 0 0)
+LINESTRING(2 6, 8 15)
+LINESTRING(1 -2, 4 -5)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords3.testcase
new file mode 100644
index 0000000..7215e0a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords3.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRINGZ
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRINGZ(1 2 1, 4 5 2)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING Z(0 0 1, 0 0 2)
+LINESTRING Z(0 0 1, 0 0 2)
+LINESTRING Z(2 6 1, 8 15 2)
+LINESTRING Z(1 -2 1, 4 -5 2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords4.testcase
new file mode 100644
index 0000000..8261024
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords4.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRINGM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRINGM(1 2 1, 4 5 2)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING M(0 0 1, 0 0 2)
+LINESTRING M(0 0 1, 0 0 2)
+LINESTRING M(2 6 1, 8 15 2)
+LINESTRING M(1 -2 1, 4 -5 2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords5.testcase
new file mode 100644
index 0000000..7e97cd6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords5.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRINGZM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRINGZM(1 2 1 3, 4 5 2 4)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING ZM(0 0 1 3, 0 0 2 4)
+LINESTRING ZM(0 0 1 3, 0 0 2 4)
+LINESTRING ZM(2 6 1 3, 8 15 2 4)
+LINESTRING ZM(1 -2 1 3, 4 -5 2 4)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords6.testcase
new file mode 100644
index 0000000..f31ce9e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords6.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGON
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGON((1 2, 1 3, 2 3, 2 2, 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((2 6, 2 9, 4 9, 4 6, 2 6))
+POLYGON((1 -2, 1 -3, 2 -3, 2 -2, 1 -2))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords7.testcase
new file mode 100644
index 0000000..baada04
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords7.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZ
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZ((1 2 1, 1 3 1, 2 3 2, 2 2 2, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON Z((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON Z((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON Z((2 6 1, 2 9 1, 4 9 2, 4 6 2, 2 6 1))
+POLYGON Z((1 -2 1, 1 -3 1, 2 -3 2, 2 -2 2, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords8.testcase
new file mode 100644
index 0000000..a3e03c1
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords8.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONM((1 2 1, 1 3 1, 2 3 2, 2 2 2, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON M((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON M((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON M((2 6 1, 2 9 1, 4 9 2, 4 6 2, 2 6 1))
+POLYGON M((1 -2 1, 1 -3 1, 2 -3 2, 2 -2 2, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords9.testcase
new file mode 100644
index 0000000..dcc62de
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/scalecoords9.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZM((1 2 1 0 , 1 3 1 2, 2 3 2 4, 2 2 2 6, 1 2 1 0))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON ZM((0 0 1 0, 0 0 1 2, 0 0 2 4, 0 0 2 6, 0 0 1 0))
+POLYGON ZM((0 0 1 0, 0 0 1 2, 0 0 2 4, 0 0 2 6, 0 0 1 0))
+POLYGON ZM((2 6 1 0, 2 9 1 2, 4 9 2 4, 4 6 2 6, 2 6 1 0))
+POLYGON ZM((1 -2 1 0, 1 -3 1 2, 2 -3 2 4, 2 -2 2 6, 1 -2 1 0))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords1.testcase
new file mode 100644
index 0000000..31cd6d6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords1.testcase
@@ -0,0 +1,7 @@
+shiftcoords1
+:memory: #use in-memory database
+SELECT AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1, 3));
+1 # rows (not including the header row)
+1 # columns
+AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1, 3))
+POINT(2 5)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords2.testcase
new file mode 100644
index 0000000..23d4c76
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords2.testcase
@@ -0,0 +1,7 @@
+shiftcoords2
+:memory: #use in-memory database
+SELECT AsText(ShiftCoords(GeomFromText("POINT(1 2)"), -1, -3));
+1 # rows (not including the header row)
+1 # columns
+AsText(ShiftCoords(GeomFromText("POINT(1 2)"), -1, -3))
+POINT(0 -1)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords3.testcase
new file mode 100644
index 0000000..6e21650
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords3.testcase
@@ -0,0 +1,7 @@
+shiftcoords - bad blob (null)
+:memory: #use in-memory database
+SELECT ShiftCoords(zeroblob(4), -1, -3);
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords(zeroblob(4), -1, -3)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords4.testcase
new file mode 100644
index 0000000..24dca2e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords4.testcase
@@ -0,0 +1,7 @@
+shiftcoords - text input (null)
+:memory: #use in-memory database
+SELECT ShiftCoords("shift", -1, -3);
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords("shift", -1, -3)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords5.testcase
new file mode 100644
index 0000000..873491a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords5.testcase
@@ -0,0 +1,10 @@
+shiftcoords - text shift (error)
+:memory: #use in-memory database
+SELECT ShiftCoords(GeomFromText("POINT(1 2)"), 1, "three");
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords(GeomFromText("POINT(1 2)"), 1, "three")
+(NULL)
+
+
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords6.testcase
new file mode 100644
index 0000000..67340a8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords6.testcase
@@ -0,0 +1,7 @@
+shiftcoords - text shift both (error)
+:memory: #use in-memory database
+SELECT ShiftCoords(GeomFromText("POINT(1 2)"), "text", "three");
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords(GeomFromText("POINT(1 2)"), "text", "three")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords7.testcase
new file mode 100644
index 0000000..9076ea7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/shiftcoords7.testcase
@@ -0,0 +1,7 @@
+shiftcoords - float shift
+:memory: #use in-memory database
+SELECT AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1.4, 3.9));
+1 # rows (not including the header row)
+1 # columns
+AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1.4, 3.9))
+POINT(2.4 5.9)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign0.testcase
new file mode 100644
index 0000000..4603047
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign0.testcase
@@ -0,0 +1,7 @@
+sign0
+:memory:
+SELECT sign(0); # the SQL to run
+1 # rows
+1 # column
+sign(0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign00.testcase
new file mode 100644
index 0000000..6916676
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign00.testcase
@@ -0,0 +1,7 @@
+sign00
+:memory:
+SELECT sign(0.0); # the SQL to run
+1 # rows
+1 # column
+sign(0.0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign01.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign01.testcase
new file mode 100644
index 0000000..c371cb3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign01.testcase
@@ -0,0 +1,7 @@
+sign01
+:memory:
+SELECT sign(0.1); # the SQL to run
+1 # rows
+1 # column
+sign(0.1) # this is the header row
+1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign10.testcase
new file mode 100644
index 0000000..78a4c48
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sign10.testcase
@@ -0,0 +1,7 @@
+sign10
+:memory:
+SELECT sign(1.0); # the SQL to run
+1 # rows
+1 # column
+sign(1.0) # this is the header row
+1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg.testcase
new file mode 100644
index 0000000..8f7d982
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg.testcase
@@ -0,0 +1,7 @@
+sign-neg
+:memory:
+SELECT sign(-1.0); # the SQL to run
+1 # rows
+1 # column
+sign(-1.0) # this is the header row
+-1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg2.testcase
new file mode 100644
index 0000000..a41b35f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg2.testcase
@@ -0,0 +1,7 @@
+sign-neg2
+:memory:
+SELECT sign(-2.0); # the SQL to run
+1 # rows
+1 # column
+sign(-2.0) # this is the header row
+-1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg2int.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg2int.testcase
new file mode 100644
index 0000000..f644772
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signeg2int.testcase
@@ -0,0 +1,7 @@
+sign-neg2int
+:memory:
+SELECT sign(-2); # the SQL to run
+1 # rows
+1 # column
+sign(-2) # this is the header row
+-1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signtext.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signtext.testcase
new file mode 100644
index 0000000..0668d73
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/signtext.testcase
@@ -0,0 +1,7 @@
+sign-text
+:memory:
+SELECT sign("text"); # the SQL to run
+1 # rows
+1 # column
+sign("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-pi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-pi.testcase
new file mode 100644
index 0000000..27784a8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-pi.testcase
@@ -0,0 +1,7 @@
+sin(-pi)
+:memory: #use in-memory database
+SELECT 1 + sin(-pi());
+1 # rows (not including the header row)
+1 # columns
+1 + sin(-pi()) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-pi2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-pi2.testcase
new file mode 100644
index 0000000..310ef51
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-pi2.testcase
@@ -0,0 +1,7 @@
+sin(-pi/2)
+:memory: #use in-memory database
+SELECT sin(-pi()/2);
+1 # rows (not including the header row)
+1 # columns
+sin(-pi()/2) # header
+-1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-text.testcase
new file mode 100644
index 0000000..12b274b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin-text.testcase
@@ -0,0 +1,7 @@
+sin(text)
+:memory: #use in-memory database
+SELECT sin("text");
+1 # rows (not including the header row)
+1 # columns
+sin("text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin0.testcase
new file mode 100644
index 0000000..5fc40f4
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin0.testcase
@@ -0,0 +1,7 @@
+sin(0)
+:memory: #use in-memory database
+SELECT sin(0);
+1 # rows (not including the header row)
+1 # columns
+sin(0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin00.testcase
new file mode 100644
index 0000000..1c00940
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sin00.testcase
@@ -0,0 +1,7 @@
+sin(0.0)
+:memory: #use in-memory database
+SELECT sin(0.0);
+1 # rows (not including the header row)
+1 # columns
+sin(0.0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer1.testcase
new file mode 100644
index 0000000..2c710df
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer1.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - bad args (point, left side)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("Point(1 2)", 4326), 3, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("Point(1 2)", 4326), 3, 1))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer11.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer11.testcase
new file mode 100644
index 0000000..438d13b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer11.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - closed LINESTRING, int radius, left side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20, 1 20, 1 0, 0 0)"), 3, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20, 1 20, 1 0, 0 0)"), 3, 1))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer12.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer12.testcase
new file mode 100644
index 0000000..97418a9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer12.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - POLYGON, int radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer13.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer13.testcase
new file mode 100644
index 0000000..97418a9
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer13.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - POLYGON, int radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer14.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer14.testcase
new file mode 100644
index 0000000..353b420
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer14.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - toxic blob
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 3, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 3, 0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer2.testcase
new file mode 100644
index 0000000..a35f3b3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer2.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, int radius, left side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 1))
+POLYGON((0 20, 0 0, -3 0, -3 20, 0 20))
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer3.testcase
new file mode 100644
index 0000000..3be0d22
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer3.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, int radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 0))
+POLYGON((0 0, 0 20, 3 20, 3 0, 0 0))
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer4.testcase
new file mode 100644
index 0000000..5579388
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer4.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, float radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3.5, 0))
+POLYGON((0 0, 0 20, 3.5 20, 3.5 0, 0 0))
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer5.testcase
new file mode 100644
index 0000000..0c04149
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer5.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - text arg, float radius, right side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer("hello", 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer("hello", 3.5, 0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer6.testcase
new file mode 100644
index 0000000..07b4828
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer6.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - bad blob, float radius, right side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(zeroblob(20), 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(zeroblob(20), 3.5, 0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer7.testcase
new file mode 100644
index 0000000..299a96b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer7.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING -X, float radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 20, 0 0)"), 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 20, 0 0)"), 3.5, 0))
+POLYGON((0 20, 0 0, -3.5 0, -3.5 20, 0 20))
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer8.testcase
new file mode 100644
index 0000000..1b57f29
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer8.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, bad radius, right side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), "foo", 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), "foo", 0))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer9.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer9.testcase
new file mode 100644
index 0000000..397d2f6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/singlesidedbuffer9.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, int radius, bad side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 3.5));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 3.5))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sinpi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sinpi.testcase
new file mode 100644
index 0000000..9b8f8c3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sinpi.testcase
@@ -0,0 +1,7 @@
+sin(pi)
+:memory: #use in-memory database
+SELECT 1 + sin(pi());
+1 # rows (not including the header row)
+1 # columns
+1 + sin(pi()) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sinpi2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sinpi2.testcase
new file mode 100644
index 0000000..b11de6f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sinpi2.testcase
@@ -0,0 +1,7 @@
+sin(pi/2)
+:memory: #use in-memory database
+SELECT sin(pi()/2);
+1 # rows (not including the header row)
+1 # columns
+sin(pi()/2) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-1.testcase
new file mode 100644
index 0000000..547f894
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-1.testcase
@@ -0,0 +1,7 @@
+sqrt(-1)
+:memory:
+SELECT sqrt(-1); # the SQL to run
+1 # rows
+1 # column
+sqrt(-1) # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-10.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-10.testcase
new file mode 100644
index 0000000..6308f3f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-10.testcase
@@ -0,0 +1,7 @@
+sqrt(-1.0)
+:memory:
+SELECT sqrt(-1.0); # the SQL to run
+1 # rows
+1 # column
+sqrt(-1.0) # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-64.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-64.testcase
new file mode 100644
index 0000000..9497eed
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-64.testcase
@@ -0,0 +1,7 @@
+sqrt(64)
+:memory:
+SELECT sqrt(64); # the SQL to run
+1 # rows
+1 # column
+sqrt(64) # this is the header row
+8.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-640.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-640.testcase
new file mode 100644
index 0000000..ad69f51
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-640.testcase
@@ -0,0 +1,7 @@
+sqrt(64.0)
+:memory:
+SELECT sqrt(64.0); # the SQL to run
+1 # rows
+1 # column
+sqrt(64.0) # this is the header row
+8.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-text.testcase
new file mode 100644
index 0000000..23d7beb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt-text.testcase
@@ -0,0 +1,7 @@
+sqrt(text)
+:memory:
+SELECT sqrt("text"); # the SQL to run
+1 # rows
+1 # column
+sqrt("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt0.testcase
new file mode 100644
index 0000000..23d7beb
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt0.testcase
@@ -0,0 +1,7 @@
+sqrt(text)
+:memory:
+SELECT sqrt("text"); # the SQL to run
+1 # rows
+1 # column
+sqrt("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt00.testcase
new file mode 100644
index 0000000..9f9dbc5
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/sqrt00.testcase
@@ -0,0 +1,7 @@
+sqrt(0)
+:memory:
+SELECT sqrt(0); # the SQL to run
+1 # rows
+1 # column
+sqrt(0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area1.testcase
new file mode 100644
index 0000000..db47265
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area1.testcase
@@ -0,0 +1,7 @@
+ST_Area - Polygon with 1 interior
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"))
+12.0 # 16.0 for the exterior, 4.0 for the interior
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area2.testcase
new file mode 100644
index 0000000..dc297ea
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area2.testcase
@@ -0,0 +1,7 @@
+ST_Area - Simple Polygon
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"))
+16.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area3.testcase
new file mode 100644
index 0000000..194d9fd
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area3.testcase
@@ -0,0 +1,7 @@
+ST_Area - Linestring
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"))
+0.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area4.testcase
new file mode 100644
index 0000000..755bbfa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area4.testcase
@@ -0,0 +1,7 @@
+ST_Area - Linestring not closed
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"))
+0.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area5.testcase
new file mode 100644
index 0000000..aa0737e
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area5.testcase
@@ -0,0 +1,7 @@
+ST_Area - Point
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("POINT(0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("POINT(0 0)"))
+0.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area6.testcase
new file mode 100644
index 0000000..9e3c3f2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area6.testcase
@@ -0,0 +1,7 @@
+ST_Area - bad blob (error)
+:memory: #use in-memory database
+SELECT ST_Area(zeroblob(4));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(zeroblob(4))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area7.testcase
new file mode 100644
index 0000000..b9fc315
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area7.testcase
@@ -0,0 +1,7 @@
+ST_Area - Empty linestring
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("LINESTRING()"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("LINESTRING()"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area8.testcase
new file mode 100644
index 0000000..76c6605
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_area8.testcase
@@ -0,0 +1,7 @@
+ST_Area - text (error)
+:memory: #use in-memory database
+SELECT ST_Area("hello");
+1 # rows (not including the header row)
+1 # columns
+ST_Area("hello")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length1.testcase
new file mode 100644
index 0000000..82f2301
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length1.testcase
@@ -0,0 +1,7 @@
+ST_Length - Polygon with 1 interior
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"))
+24.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length2.testcase
new file mode 100644
index 0000000..b7333ca
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length2.testcase
@@ -0,0 +1,7 @@
+ST_Length - Simple Polygon
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"))
+16.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length3.testcase
new file mode 100644
index 0000000..44ae959
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length3.testcase
@@ -0,0 +1,7 @@
+ST_Length - Linestring
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"))
+16.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length4.testcase
new file mode 100644
index 0000000..ae27c54
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length4.testcase
@@ -0,0 +1,7 @@
+ST_Length - Linestring not closed
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"))
+12.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length5.testcase
new file mode 100644
index 0000000..8e551b7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length5.testcase
@@ -0,0 +1,7 @@
+ST_Length - Point
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("POINT(0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("POINT(0 0)"))
+0.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length6.testcase
new file mode 100644
index 0000000..e72696b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length6.testcase
@@ -0,0 +1,7 @@
+ST_Length - bad blob (error)
+:memory: #use in-memory database
+SELECT ST_Length(zeroblob(4));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(zeroblob(4))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length7.testcase
new file mode 100644
index 0000000..56fa9ed
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_length7.testcase
@@ -0,0 +1,7 @@
+ST_Length - Empty linestring
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("LINESTRING()"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("LINESTRING()"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m1.testcase
new file mode 100644
index 0000000..81dddfc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m1.testcase
@@ -0,0 +1,7 @@
+ST_M1
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("POINTZM(136 -35 635.2 10.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("POINTZM(136 -35 635.2 10.2)"))
+10.2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m2.testcase
new file mode 100644
index 0000000..ae2f751
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m2.testcase
@@ -0,0 +1,8 @@
+ST_M2
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("POINTZ(136 -35 635.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("POINTZ(136 -35 635.2)"))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m3.testcase
new file mode 100644
index 0000000..3d7a832
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m3.testcase
@@ -0,0 +1,7 @@
+ST_M3
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("POINTM(136 -35 -8.6)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("POINTM(136 -35 -8.6)"))
+-8.6
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m4.testcase
new file mode 100644
index 0000000..9a189a2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m4.testcase
@@ -0,0 +1,7 @@
+ST_M - text
+:memory: #use in-memory database
+SELECT M("hello world");
+1 # rows (not including the header row)
+1 # columns
+M("hello world")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m5.testcase
new file mode 100644
index 0000000..3acc145
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m5.testcase
@@ -0,0 +1,8 @@
+ST_M5
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m6.testcase
new file mode 100644
index 0000000..e8aaf50
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_m6.testcase
@@ -0,0 +1,8 @@
+ST_M6
+:memory: #use in-memory database
+SELECT ST_M(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_M(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x1.testcase
new file mode 100644
index 0000000..2b961a2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x1.testcase
@@ -0,0 +1,7 @@
+ST_X1
+:memory: #use in-memory database
+SELECT ST_X(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+ST_X(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+-71.1043443253471
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x2.testcase
new file mode 100644
index 0000000..fc41755
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x2.testcase
@@ -0,0 +1,7 @@
+ST_X2
+:memory: #use in-memory database
+SELECT X(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+X(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+-71.1043443253471
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x3.testcase
new file mode 100644
index 0000000..8f2a6e2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x3.testcase
@@ -0,0 +1,7 @@
+ST_X - text
+:memory: #use in-memory database
+SELECT X("hello world");
+1 # rows (not including the header row)
+1 # columns
+X("hello world")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x4.testcase
new file mode 100644
index 0000000..19eeebf
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x4.testcase
@@ -0,0 +1,7 @@
+ST_X4
+:memory: #use in-memory database
+SELECT ST_X(GeomFromText("POINTM(136 -35 -8.6)"));
+1 # rows (not including the header row)
+1 # columns
+ST_X(GeomFromText("POINTM(136 -35 -8.6)"))
+136.0
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x5.testcase
new file mode 100644
index 0000000..4eaa131
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x5.testcase
@@ -0,0 +1,8 @@
+ST_X5
+:memory: #use in-memory database
+SELECT ST_X(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_X(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x6.testcase
new file mode 100644
index 0000000..32a65b8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_x6.testcase
@@ -0,0 +1,8 @@
+ST_X6
+:memory: #use in-memory database
+SELECT ST_X(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_X(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y1.testcase
new file mode 100644
index 0000000..12d1e57
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y1.testcase
@@ -0,0 +1,7 @@
+ST_Y1
+:memory: #use in-memory database
+SELECT ST_Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+ST_Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+42.3150676015829
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y2.testcase
new file mode 100644
index 0000000..8f265ff
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y2.testcase
@@ -0,0 +1,7 @@
+ST_Y2
+:memory: #use in-memory database
+SELECT Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+42.3150676015829
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y3.testcase
new file mode 100644
index 0000000..6058e69
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y3.testcase
@@ -0,0 +1,7 @@
+ST_Y - text
+:memory: #use in-memory database
+SELECT Y("hello world");
+1 # rows (not including the header row)
+1 # columns
+Y("hello world")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y4.testcase
new file mode 100644
index 0000000..63bb14d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y4.testcase
@@ -0,0 +1,8 @@
+ST_Y4
+:memory: #use in-memory database
+SELECT ST_Y(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Y(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y5.testcase
new file mode 100644
index 0000000..eba94e7
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_y5.testcase
@@ -0,0 +1,8 @@
+ST_Y5
+:memory: #use in-memory database
+SELECT ST_Y(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_Y(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z1.testcase
new file mode 100644
index 0000000..f442d02
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z1.testcase
@@ -0,0 +1,7 @@
+ST_Z1
+:memory: #use in-memory database
+SELECT ST_Z(GeomFromText("POINTZ(136 -35 635.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(GeomFromText("POINTZ(136 -35 635.2)"))
+635.2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z2.testcase
new file mode 100644
index 0000000..9a98ff3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z2.testcase
@@ -0,0 +1,7 @@
+ST_Z2
+:memory: #use in-memory database
+SELECT Z(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+Z(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z3.testcase
new file mode 100644
index 0000000..b5effa6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z3.testcase
@@ -0,0 +1,7 @@
+ST_Z - text
+:memory: #use in-memory database
+SELECT Z("hello world");
+1 # rows (not including the header row)
+1 # columns
+Z("hello world")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z4.testcase
new file mode 100644
index 0000000..3f38a13
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z4.testcase
@@ -0,0 +1,7 @@
+ST_Z4
+:memory: #use in-memory database
+SELECT ST_Z(GeomFromText("POINTZM(136 -35 635.2 10.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(GeomFromText("POINTZM(136 -35 635.2 10.2)"))
+635.2
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z5.testcase
new file mode 100644
index 0000000..fdb5b85
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z5.testcase
@@ -0,0 +1,8 @@
+ST_Z5
+:memory: #use in-memory database
+SELECT ST_Z(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z6.testcase
new file mode 100644
index 0000000..f56d832
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/st_z6.testcase
@@ -0,0 +1,8 @@
+ST_Z6
+:memory: #use in-memory database
+SELECT ST_Z(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint1.testcase
new file mode 100644
index 0000000..b15eed2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint1.testcase
@@ -0,0 +1,7 @@
+startpoint - regular LINESTRING
+:memory: #use in-memory database
+SELECT AsText(StartPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(StartPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")))
+POINT(4 0)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint2.testcase
new file mode 100644
index 0000000..a9a6aad
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint2.testcase
@@ -0,0 +1,7 @@
+startpoint - bad blob (error)
+:memory: #use in-memory database
+SELECT StartPoint(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+StartPoint(zeroblob(10))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint3.testcase
new file mode 100644
index 0000000..ef172b3
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/startpoint3.testcase
@@ -0,0 +1,7 @@
+startpoint - text input (error)
+:memory: #use in-memory database
+SELECT StartPoint("hello world");
+1 # rows (not including the header row)
+1 # columns
+StartPoint("hello world")
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/stddev.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/stddev.testcase
new file mode 100644
index 0000000..cbaa13b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/stddev.testcase
@@ -0,0 +1,21 @@
+stddev
+sql_stmt_tests/testdb1.sqlite
+SELECT stddev_pop(a), stddev_pop(b), stddev_pop(nulls), stddev_pop(blobs), stddev_samp(a), stddev_samp(b), stddev_samp(blobs), stddev_samp(nulls) from data1;
+1 # rows (not including the header row)
+8 # columns
+stddev_pop(a)
+stddev_pop(b)
+stddev_pop(nulls)
+stddev_pop(blobs)
+stddev_samp(a)
+stddev_samp(b)
+stddev_samp(blobs)
+stddev_samp(nulls)
+10.2211654:8
+12.252709:8
+(NULL)
+(NULL)
+11.1967257:8
+13.422171:8
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords1.testcase
new file mode 100644
index 0000000..717dcae
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords1.testcase
@@ -0,0 +1,7 @@
+swapcoords1
+:memory: #use in-memory database
+SELECT AsText(SwapCoords(GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(SwapCoords(GeomFromText("POINT(1 2)")))
+POINT(2 1)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords2.testcase
new file mode 100644
index 0000000..8614286
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords2.testcase
@@ -0,0 +1,7 @@
+swapcoords2
+:memory: #use in-memory database
+SELECT SwapCoords("hello");
+1 # rows (not including the header row)
+1 # columns
+SwapCoords("hello");
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords3.testcase
new file mode 100644
index 0000000..b12a033
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords3.testcase
@@ -0,0 +1,7 @@
+swapcoords3
+:memory: #use in-memory database
+SELECT SwapCoords(zeroblob(4));
+1 # rows (not including the header row)
+1 # columns
+SwapCoords(zeroblob(4));
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords4.testcase
new file mode 100644
index 0000000..86e9a8c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/swapcoords4.testcase
@@ -0,0 +1,7 @@
+swapcoords4
+:memory: #use in-memory database
+SELECT AsText(SwapCoords(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(SwapCoords(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)")));
+LINESTRING(-35 136, -34.5 135.2, -35.2 136, -36 136)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan-pi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan-pi.testcase
new file mode 100644
index 0000000..145335b
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan-pi.testcase
@@ -0,0 +1,7 @@
+tan(-pi)
+:memory: #use in-memory database
+SELECT 1 + tan(-pi());
+1 # rows (not including the header row)
+1 # columns
+1 + tan(-pi()) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan-text.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan-text.testcase
new file mode 100644
index 0000000..0c437d6
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan-text.testcase
@@ -0,0 +1,7 @@
+tan(text)
+:memory: #use in-memory database
+SELECT tan("text");
+1 # rows (not including the header row)
+1 # columns
+tan("text") # header
+(NULL) #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan0.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan0.testcase
new file mode 100644
index 0000000..917a4c2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan0.testcase
@@ -0,0 +1,7 @@
+tan(0)
+:memory: #use in-memory database
+SELECT tan(0);
+1 # rows (not including the header row)
+1 # columns
+tan(0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan00.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan00.testcase
new file mode 100644
index 0000000..ae17b9c
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tan00.testcase
@@ -0,0 +1,7 @@
+tan(0.0)
+:memory: #use in-memory database
+SELECT tan(0.0);
+1 # rows (not including the header row)
+1 # columns
+tan(0.0) # header
+0.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tanpi.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tanpi.testcase
new file mode 100644
index 0000000..be34bde
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tanpi.testcase
@@ -0,0 +1,7 @@
+tan(pi)
+:memory: #use in-memory database
+SELECT 1 + tan(pi());
+1 # rows (not including the header row)
+1 # columns
+1 + tan(pi()) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tanpi4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tanpi4.testcase
new file mode 100644
index 0000000..11c98d2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/tanpi4.testcase
@@ -0,0 +1,7 @@
+tan(pi/4)
+:memory: #use in-memory database
+SELECT tan(pi()/4);
+1 # rows (not including the header row)
+1 # columns
+tan(pi()/4) # header
+1.0 #result
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/testdb1.sqlite b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/testdb1.sqlite
new file mode 100644
index 0000000..cb03988
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/testdb1.sqlite differ
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/trivial.sqlite_RO b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/trivial.sqlite_RO
new file mode 100644
index 0000000..85fc08f
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/trivial.sqlite_RO differ
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion1.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion1.testcase
new file mode 100644
index 0000000..0d914dc
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion1.testcase
@@ -0,0 +1,7 @@
+unaryunion - point
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("POINT(1 2)")))
+POINT(1 2)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion2.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion2.testcase
new file mode 100644
index 0000000..e785689
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion2.testcase
@@ -0,0 +1,7 @@
+unaryunion - points
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTION(POINT(1 2), POINT(2 3))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTION(POINT(1 2), POINT(2 3))")));
+MULTIPOINT(1 2, 2 3)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion3.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion3.testcase
new file mode 100644
index 0000000..72e2b74
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion3.testcase
@@ -0,0 +1,7 @@
+unaryunion - points Z
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(1 2 3), POINTZ(2 3 4))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(1 2 3), POINTZ(2 3 4))")));
+MULTIPOINT Z(1 2 3, 2 3 4)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion4.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion4.testcase
new file mode 100644
index 0000000..42631f8
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion4.testcase
@@ -0,0 +1,7 @@
+unaryunion - points M
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONM(POINTM(1 2 3), POINTM(2 3 4))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONM(POINTM(1 2 3), POINTM(2 3 4))")));
+MULTIPOINT M(1 2 0, 2 3 0)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion5.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion5.testcase
new file mode 100644
index 0000000..2e6623f
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion5.testcase
@@ -0,0 +1,7 @@
+unaryunion - points ZM
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(1 2 3 1), POINTZM(2 3 4 1))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(1 2 3 1), POINTZM(2 3 4 1))")));
+MULTIPOINT ZM(1 2 3 0, 2 3 4 0)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion6.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion6.testcase
new file mode 100644
index 0000000..c25c693
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion6.testcase
@@ -0,0 +1,7 @@
+unaryunion - non-blob
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(3.14))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(3.14))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion7.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion7.testcase
new file mode 100644
index 0000000..0572565
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion7.testcase
@@ -0,0 +1,7 @@
+unaryunion - bad blob
+:memory: #use in-memory database
+SELECT UnaryUnion(zeroblob(40))
+1 # rows (not including the header row)
+1 # columns
+UnaryUnion(zeroblob(40))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion8.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion8.testcase
new file mode 100644
index 0000000..3698a10
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/unaryunion8.testcase
@@ -0,0 +1,7 @@
+unaryunion - toxic blob
+:memory: #use in-memory database
+SELECT UnaryUnion(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+1 # rows (not including the header row)
+1 # columns
+UnaryUnion(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_ch_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_ch_m.testcase
new file mode 100644
index 0000000..a12d59d
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_ch_m.testcase
@@ -0,0 +1,7 @@
+US chains to metres
+:memory: #use in-memory database
+SELECT CvtFromUsCh(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsCh(100);
+2011.684:8
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_ft_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_ft_m.testcase
new file mode 100644
index 0000000..e3cdeaa
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_ft_m.testcase
@@ -0,0 +1,7 @@
+US feet to metres
+:memory: #use in-memory database
+SELECT CvtFromUsFt(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsFt(10);
+3.048:5
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_in_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_in_m.testcase
new file mode 100644
index 0000000..883a833
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_in_m.testcase
@@ -0,0 +1,7 @@
+us inches to metres
+:memory: #use in-memory database
+SELECT CvtFromUsIn(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsIn(10);
+0.254:5
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_mi_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_mi_m.testcase
new file mode 100644
index 0000000..549770a
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_mi_m.testcase
@@ -0,0 +1,7 @@
+US miles to metres
+:memory: #use in-memory database
+SELECT CvtFromUsMi(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsMi(1.0);
+1609.347:8
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_yd_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_yd_m.testcase
new file mode 100644
index 0000000..5b85e59
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/us_yd_m.testcase
@@ -0,0 +1,7 @@
+US yards to metres
+:memory: #use in-memory database
+SELECT CvtFromUsYd(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsYd(10);
+9.144:5
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/variance.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/variance.testcase
new file mode 100644
index 0000000..33f9ae2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/variance.testcase
@@ -0,0 +1,21 @@
+variance
+sql_stmt_tests/testdb1.sqlite
+SELECT var_pop(a), var_pop(b), var_pop(nulls), var_pop(blobs), var_samp(a), var_samp(b), var_samp(blobs), var_samp(nulls) from data1;
+1 # rows (not including the header row)
+8 # columns
+var_pop(a)
+var_pop(b)
+var_pop(nulls)
+var_pop(blobs)
+var_samp(a)
+var_samp(b)
+var_samp(blobs)
+var_samp(nulls)
+104.472222222222:10
+150.12888888888:10
+(NULL)
+(NULL)
+125.36666666666:10
+180.15466666666:10
+(NULL)
+(NULL)
diff --git a/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/yd_m.testcase b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/yd_m.testcase
new file mode 100644
index 0000000..f09d163
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/sql_stmt_tests/yd_m.testcase
@@ -0,0 +1,7 @@
+yards to metres
+:memory: #use in-memory database
+SELECT CvtFromYd(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromYd(10);
+9.144
\ No newline at end of file
diff --git a/libspatialite/libspatialite-3.0.1/test/testcase1.csv b/libspatialite/libspatialite-3.0.1/test/testcase1.csv
new file mode 100644
index 0000000..ad474b2
--- /dev/null
+++ b/libspatialite/libspatialite-3.0.1/test/testcase1.csv
@@ -0,0 +1,17 @@
+2172515	"Candelo"	"Candelo"	"Candelo,Kandelo,Кандело"	-36.76667	149.68333	"P"	"PPL"	"AU"		2	10550			895		152	"Australia/Sydney"	"2011-08-08"
+2172516	"Canbrae"	"Canbrae"		-28.21667	149.1	"S"	"FRM"	"AU"		4	33610			0		212	"Australia/Brisbane"	"2011-06-04"
+2172517	"Canberra"	"Canberra"	"Camberra,Canberra,Gorad Kanbera,Kamberra,Kambra,Kampera,Kanapera,Kanbera,Kanbero,Kanberra,Kanberrae,Kanbérra,Kānapera,kaenbeola,kainabara,kan pei la,kanbra,kanpara,kenabera,kyanabera,kyanbera,kynbra,qnbrh,Καμπέρα,Горад Канбера,Канбера,Канберрæ,Канберра,Канбє́ра,Կանբեռա,קאנבערא,קנברה,كانبرا,کانبرا,کینبرا,कॅनबेरा,कैनबरा,ক্যানবেরা,கான்பரா,แคนเบอร์รา,ཁན་པེ་ར།,კანბერა,ካንበራ,キャンベラ,坎培拉,堪培拉,캔버라"	-35.28346	149.12807	"P"	"PPLC"	"AU"		1				327700		609	"Australia/Sydney"	"2009-08-04"
+2172518	"Canberra"	"Canberra"		-26.78333	148.43333	"S"	"FRM"	"AU"		4	34860			0		386	"Australia/Brisbane"	"2011-06-04"
+2172519	"Canbelego"	"Canbelego"		-31.56667	146.31667	"P"	"PPL"	"AU"		2	11750			0		347	"Australia/Sydney"	"2011-06-04"
+2172520	"Canaway Range"	"Canaway Range"		-26.11667	142.86667	"T"	"MTS"	"AU"		4				0		175	"Australia/Brisbane"	"1993-12-30"
+2172521	"Mount Canaway"	"Mount Canaway"		-26	143.91667	"T"	"MT"	"AU"		4				0		305	"Australia/Brisbane"	"1993-12-30"
+2172522	"Canary Island South"	"Canary Island South"		-36.05	143.86667	"P"	"PPL"	"AU"		7	23940			0		124	"Australia/Melbourne"	"2011-06-04"
+2172523	"Canary Island"	"Canary Island"		-35.98333	143.85	"P"	"PPL"	"AU"		7	23940			0		105	"Australia/Melbourne"	"2011-06-04"
+2172524	"Canary Creek"	"Canary Creek"		-24.28333	148.61667	"H"	"STM"	"AU"		4				0		221	"Australia/Brisbane"	"1993-12-30"
+2172525	"Canara Creek"	"Canara Creek"		-26.36667	144.23333	"H"	"STM"	"AU"		4				0		269	"Australia/Brisbane"	"1993-12-30"
+2172526	"Canally"	"Canally"		-34.7	143.43333	"S"	"FRM"	"AU"		2	10300			0		62	"Australia/Sydney"	"2011-06-04"
+2172527	"Canally"	"Canally"		-32.61667	144.38333	"S"	"FRM"	"AU"		2	11700			0		93	"Australia/Sydney"	"2011-06-04"
+2172528	"Canal Lagoon"	"Canal Lagoon"		-35.21667	150.55	"H"	"LGN"	"AU"		2				0		-9999	"Australia/Sydney"	"1993-12-30"
+2172529	"Canal Creek Bore"	"Canal Creek Bore"		-20.63333	140.9	"H"	"WLL"	"AU"		4				0		252	"Australia/Brisbane"	"1993-12-30"
+2172530	"Canal Creek"	"Canal Creek"		-27.86667	151.51667	"H"	"STM"	"AU"		4				0		459	"Australia/Brisbane"	"1993-12-30"
+2172531	"Canal Creek"	"Canal Creek"		-25.91667	149.48333	"H"	"STM"	"AU"		4				0		287	"Australia/Brisbane"	"1993-12-30"
diff --git a/libspatialite/libspatialite-3.0.1/test/testcase1.xls b/libspatialite/libspatialite-3.0.1/test/testcase1.xls
new file mode 100644
index 0000000..2f12b10
Binary files /dev/null and b/libspatialite/libspatialite-3.0.1/test/testcase1.xls differ
diff --git a/libspatialite/libspatialite.def b/libspatialite/libspatialite.def
deleted file mode 100644
index f96c6a9..0000000
--- a/libspatialite/libspatialite.def
+++ /dev/null
@@ -1,273 +0,0 @@
-LIBRARY spatialite.dll
-EXPORTS
-gaiaAllocShapefile
-gaiaAllocDbf
-gaiaAllocDbfList
-gaiaCloneDbfEntity
-gaiaAddLinestringToGeomColl
-gaiaAppendPointToDynamicLine
-gaiaPrependPointToDynamicLine
-gaiaReverseDynamicLine
-gaiaDynamicLineSplitBefore
-gaiaDynamicLineSplitAfter
-gaiaDynamicLineJoinAfter
-gaiaDynamicLineJoinBefore
-gaiaGeomCollSimplify
-gaiaGeomCollSimplifyPreserveTopology
-gaiaGetLocaleCharset
-gaiaConvertCharset
-gaiaCreateUTF8Converter
-gaiaFreeUTF8Converter
-gaiaConvertToUTF8
-gaiaIsReservedSqliteName
-gaiaIsReservedSqlName
-gaiaIllegalSqlName
-gaiaCleanSqlString
-gaiaEndianArch
-gaiaImport16
-gaiaImport32
-gaiaImportF32
-gaiaImport64
-gaiaImportI64
-gaiaExport16
-gaiaExport32
-gaiaExportF32
-gaiaExport64
-gaiaExportI64
-gaiaAllocPoint
-gaiaAllocPointXYZ
-gaiaAllocPointXYM
-gaiaAllocPointXYZM
-gaiaFreePoint
-gaiaAllocLinestring
-gaiaAllocLinestringXYZ
-gaiaAllocLinestringXYM
-gaiaAllocLinestringXYZM
-gaiaFreeLinestring
-gaiaCopyLinestringCoords
-gaiaAllocRing
-gaiaAllocRingXYZ
-gaiaAllocRingXYM
-gaiaAllocRingXYZM
-gaiaFreeRing
-gaiaCopyRingCoords
-gaiaAllocPolygon
-gaiaAllocPolygonXYZ
-gaiaAllocPolygonXYM
-gaiaAllocPolygonXYZM
-gaiaCreatePolygon
-gaiaFreePolygon
-gaiaAllocGeomColl
-gaiaAllocGeomCollXYZ
-gaiaAllocGeomCollXYM
-gaiaAllocGeomCollXYZM
-gaiaFreeGeomColl
-gaiaAddPointToGeomColl
-gaiaAddPointToGeomCollXYZ
-gaiaAddPointToGeomCollXYM
-gaiaAddPointToGeomCollXYZM
-gaiaMbrLinestring
-gaiaMbrRing
-gaiaMbrPolygon
-gaiaMbrGeometry
-gaiaZRangeLinestring
-gaiaZRangeRing
-gaiaZRangePolygon
-gaiaZRangeGeometry
-gaiaMRangeLinestring
-gaiaMRangeRing
-gaiaMRangePolygon
-gaiaMRangeGeometry
-gaiaInsertLinestringInGeomColl
-gaiaAddPolygonToGeomColl
-gaiaInsertPolygonInGeomColl
-gaiaAddInteriorRing
-gaiaInsertInteriorRing
-gaiaAddRingToPolyg
-gaiaAllocDynamicLine
-gaiaFreeDynamicLine
-gaiaDynamicLineInsertAfter
-gaiaDynamicLineInsertBefore
-gaiaDynamicLineDeletePoint
-gaiaCloneDynamicLine
-gaiaDynamicLineFindByCoords
-gaiaDynamicLineFindByPos
-gaiaCreateDynamicLine
-gaiaMeasureLength
-gaiaMeasureArea
-gaiaRingCentroid
-gaiaClockwise
-gaiaIsPointOnRingSurface
-gaiaMinDistance
-gaiaIsPointOnPolygonSurface
-gaiaIntersect
-gaiaFromSpatiaLiteBlobWkb
-gaiaToSpatiaLiteBlobWkb
-gaiaToCompressedBlobWkb
-gaiaFromSpatiaLiteBlobMbr
-gaiaFromWkb
-gaiaToWkb
-gaiaToHexWkb
-gaiaFreeValue
-gaiaSetNullValue
-gaiaSetIntValue
-gaiaSetDoubleValue
-gaiaSetStrValue
-gaiaAllocDbfField
-gaiaFreeDbfField
-gaiaCloneDbfField
-gaiaFreeDbfList
-gaiaIsValidDbfList
-gaiaAddDbfField
-gaiaResetDbfEntity
-gaiaCloneValue
-gaiaFreeShapefile
-gaiaOpenShpRead
-gaiaOpenShpWrite
-gaiaReadShpEntity
-gaiaShpAnalyze
-gaiaWriteShpEntity
-gaiaFlushShpHeaders
-gaiaFreeDbf
-gaiaOpenDbfRead
-gaiaReadDbfEntity
-gaiaParseWkt
-gaiaOutWkt
-gaiaOutSvg
-gaiaOutBareKml
-gaiaOutFullKml
-gaiaOutGml
-gaiaFromFgf
-gaiaToFgf
-gaiaDimension
-gaiaGeometryType
-gaiaGeometryAliasType
-gaiaIsEmpty
-gaiaMbrsContains
-gaiaMbrsDisjoint
-gaiaMbrsEqual
-gaiaMbrsIntersects
-gaiaMbrsOverlaps
-gaiaMbrsTouches
-gaiaMbrsWithin
-gaiaShiftCoords
-gaiaScaleCoords
-gaiaRotateCoords
-gaiaReflectCoords
-gaiaSwapCoords
-gaiaCastGeomCollToXY
-gaiaCastGeomCollToXYZ
-gaiaCastGeomCollToXYM
-gaiaCastGeomCollToXYZM
-gaiaCloneGeomColl
-gaiaCloneLinestring
-gaiaCloneRing
-gaiaClonePolygon
-gaiaLinestringEquals
-gaiaPolygonEquals
-gaiaMakePoint
-gaiaBuildMbr
-gaiaBuildFilterMbr
-gaiaParseFilterMbr
-gaiaBuildCircleMbr
-gaiaGetMbrMinX
-gaiaGetMbrMaxX
-gaiaGetMbrMinY
-gaiaGetMbrMaxY
-gaiaBuildRings
-gaiaFree
-gaiaEllipseParams
-gaiaGreatCircleDistance
-gaiaGeodesicDistance
-gaiaGreatCircleTotalLength
-gaiaGeodesicTotalLength
-gaiaConvertLength
-gaiaLineGetPoint
-gaiaLineSetPoint
-gaiaRingGetPoint
-gaiaRingSetPoint
-gaiaSanitize
-gaiaIsToxic
-gaiaOutBufferInitialize
-gaiaOutBufferReset
-gaiaAppendToOutBuffer
-gaiaRadsToDegs
-gaiaDegsToRads
-gaiaTransform
-gaiaResetGeosMsg
-gaiaGetGeosErrorMsg
-gaiaGetGeosWarningMsg
-gaiaSetGeosErrorMsg
-gaiaSetGeosWarningMsg
-gaiaGeomCollEquals
-gaiaGeomCollDisjoint
-gaiaGeomCollIntersects
-gaiaGeomCollOverlaps
-gaiaGeomCollCrosses
-gaiaGeomCollContains
-gaiaGeomCollWithin
-gaiaGeomCollTouches
-gaiaGeomCollRelate
-gaiaGeomCollDistance
-gaiaGeometryIntersection
-gaiaGeometryUnion
-gaiaGeometryDifference
-gaiaGeometrySymDifference
-gaiaBoundary
-gaiaGeomCollCentroid
-gaiaGetPointOnSurface
-gaiaGeomCollSimplify
-gaiaGeomCollLength
-gaiaGeomCollArea
-gaiaIsSimple
-gaiaIsClosed
-gaiaIsRing
-gaiaIsValid
-gaiaConvexHull
-gaiaGeomCollBuffer
-gaiaPolygonize
-gaiaToGeos
-gaiaFromGeos_XY
-gaiaFromGeos_XYZ
-gaiaFromGeos_XYM
-gaiaFromGeos_XYZM
-gaiaTextReaderDestroy
-gaiaTextReaderParse
-gaiaTextReaderGetRow
-gaiaTextReaderFetchField
-gaiaGetExifTags
-gaiaExifTagsFree
-gaiaGetExifTagsCount
-gaiaGetExifTagByPos
-gaiaGetExifTagById
-gaiaGetExifGpsTagById
-gaiaGetExifTagByName
-gaiaExifTagGetId
-gaiaExifTagGetName
-gaiaIsExifGpsTag
-gaiaExifTagGetValueType
-gaiaExifTagGetNumValues
-gaiaExifTagGetByteValue
-gaiaExifTagGetStringValue
-gaiaExifTagGetShortValue
-gaiaExifTagGetLongValue
-gaiaExifTagGetRational1Value
-gaiaExifTagGetRational2Value
-gaiaExifTagGetRationalValue
-gaiaExifTagGetSignedShortValue
-gaiaExifTagGetSignedLongValue
-gaiaExifTagGetSignedRational1Value
-gaiaExifTagGetSignedRational2Value
-gaiaExifTagGetSignedRationalValue
-gaiaExifTagGetFloatValue
-gaiaExifTagGetDoubleValue
-gaiaExifTagGetHumanReadable
-gaiaGuessBlobType
-gaiaGetGpsCoords
-gaiaGetGpsLatLong
-spatialite_version
-spatialite_init
-math_round
-math_llabs
-spatial_ref_sys_init
-sqlite3_extension_init
diff --git a/libspatialite/ltmain.sh b/libspatialite/ltmain.sh
index d88da2c..aa5624c 100755
--- a/libspatialite/ltmain.sh
+++ b/libspatialite/ltmain.sh
@@ -1,9 +1,9 @@
-# Generated from ltmain.m4sh.
 
-# ltmain.sh (GNU libtool) 2.2.6b
+# libtool (GNU libtool) 2.4
 # Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -32,50 +32,56 @@
 #
 # Provide generalized library-building support services.
 #
-#     --config             show all configuration variables
-#     --debug              enable verbose shell tracing
-# -n, --dry-run            display commands without modifying any files
-#     --features           display basic configuration information and exit
-#     --mode=MODE          use operation mode MODE
-#     --preserve-dup-deps  don't remove duplicate dependency libraries
-#     --quiet, --silent    don't print informational messages
-#     --tag=TAG            use configuration variables from tag TAG
-# -v, --verbose            print informational messages (default)
-#     --version            print version information
-# -h, --help               print short or long help message
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
 #
 # MODE must be one of the following:
 #
-#       clean              remove files from the build directory
-#       compile            compile a source file into a libtool object
-#       execute            automatically set library path, then run a program
-#       finish             complete the installation of libtool libraries
-#       install            install libraries or executables
-#       link               create a library or an executable
-#       uninstall          remove libraries from an installed directory
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
 #
-# MODE-ARGS vary depending on the MODE.
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
 #
 # When reporting a bug, please describe a test case to reproduce it and
 # include the following information:
 #
-#       host-triplet:	$host
-#       shell:		$SHELL
-#       compiler:		$LTCC
-#       compiler flags:		$LTCFLAGS
-#       linker:		$LD (gnu? $with_gnu_ld)
-#       $progname:		(GNU libtool) 2.2.6b Debian-2.2.6b-2
-#       automake:		$automake_version
-#       autoconf:		$autoconf_version
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
 #
 # Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
-PROGRAM=ltmain.sh
+PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.2.6b Debian-2.2.6b-2"
+VERSION=2.4
 TIMESTAMP=""
-package_revision=1.3017
+package_revision=1.3293
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -91,10 +97,15 @@ fi
 BIN_SH=xpg4; export BIN_SH # for Tru64
 DUALCASE=1; export DUALCASE # for MKS sh
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
 # NLS nuisances: We save the old values to restore during execute mode.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
 lt_user_locale=
 lt_safe_locale=
 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
@@ -107,15 +118,24 @@ do
 	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
 	fi"
 done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
 
 $lt_unset CDPATH
 
 
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
 
 
 
 : ${CP="cp -f"}
-: ${ECHO="echo"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
 : ${EGREP="/bin/grep -E"}
 : ${FGREP="/bin/grep -F"}
 : ${GREP="/bin/grep"}
@@ -144,6 +164,27 @@ IFS=" 	$lt_nl"
 dirname="s,/[^/]*$,,"
 basename="s,^.*/,,"
 
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
 # func_dirname_and_basename file append nondir_replacement
 # perform func_basename and func_dirname in a single function
 # call:
@@ -158,33 +199,183 @@ basename="s,^.*/,,"
 # those functions but instead duplicate the functionality here.
 func_dirname_and_basename ()
 {
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
 }
 
-# Generated shell functions inserted here.
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
 
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
 
 # The name of this program:
-# In the unlikely event $progname began with a '-', it would play havoc with
-# func_echo (imagine progname=-n), so we prepend ./ in that case:
 func_dirname_and_basename "$progpath"
 progname=$func_basename_result
-case $progname in
-  -*) progname=./$progname ;;
-esac
 
 # Make sure we have an absolute path for reexecution:
 case $progpath in
@@ -215,6 +406,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
 # Same as above, but do not quote variable references.
 double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
 # Re-`\' parameter expansions in output of double_quote_subst that were
 # `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
 # in input to double_quote_subst, that '$' was protected from expansion.
@@ -243,7 +443,7 @@ opt_warning=:
 # name if it has been set yet.
 func_echo ()
 {
-    $ECHO "$progname${mode+: }$mode: $*"
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
 }
 
 # func_verbose arg...
@@ -258,18 +458,25 @@ func_verbose ()
     :
 }
 
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
 # func_error arg...
 # Echo program name prefixed message to standard error.
 func_error ()
 {
-    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
 }
 
 # func_warning arg...
 # Echo program name prefixed warning message to standard error.
 func_warning ()
 {
-    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
 
     # bash bug again:
     :
@@ -326,9 +533,9 @@ func_mkdir_p ()
         case $my_directory_path in */*) ;; *) break ;; esac
 
         # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
       done
-      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
 
       save_mkdir_p_IFS="$IFS"; IFS=':'
       for my_dir in $my_dir_list; do
@@ -378,7 +585,7 @@ func_mktempdir ()
         func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
     fi
 
-    $ECHO "X$my_tmpdir" | $Xsed
+    $ECHO "$my_tmpdir"
 }
 
 
@@ -392,7 +599,7 @@ func_quote_for_eval ()
 {
     case $1 in
       *[\\\`\"\$]*)
-	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
       *)
         func_quote_for_eval_unquoted_result="$1" ;;
     esac
@@ -419,7 +626,7 @@ func_quote_for_expand ()
 {
     case $1 in
       *[\\\`\"]*)
-	my_arg=`$ECHO "X$1" | $Xsed \
+	my_arg=`$ECHO "$1" | $SED \
 	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
       *)
         my_arg="$1" ;;
@@ -488,15 +695,39 @@ func_show_eval_locale ()
     fi
 }
 
-
-
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
 
 
 # func_version
 # Echo version message to standard output and exit.
 func_version ()
 {
-    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
         s/^# //
 	s/^# *$//
         s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
@@ -509,22 +740,28 @@ func_version ()
 # Echo short help message to standard output and exit.
 func_usage ()
 {
-    $SED -n '/^# Usage:/,/# -h/ {
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
         s/^# //
 	s/^# *$//
 	s/\$progname/'$progname'/
 	p
     }' < "$progpath"
-    $ECHO
+    echo
     $ECHO "run \`$progname --help | more' for full usage"
     exit $?
 }
 
-# func_help
-# Echo long help message to standard output and exit.
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
 func_help ()
 {
+    $opt_debug
+
     $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
         s/^# //
 	s/^# *$//
 	s*\$progname*'$progname'*
@@ -537,8 +774,15 @@ func_help ()
 	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
 	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
 	p
-     }' < "$progpath"
-    exit $?
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
 }
 
 # func_missing_arg argname
@@ -546,63 +790,106 @@ func_help ()
 # exit_cmd.
 func_missing_arg ()
 {
-    func_error "missing argument for $1"
+    $opt_debug
+
+    func_error "missing argument for $1."
     exit_cmd=exit
 }
 
-exit_cmd=:
 
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
 
 
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
 
 
-# Check that we have a working $ECHO.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell, and then maybe $ECHO will work.
-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
 
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit $EXIT_SUCCESS
-fi
 
 magic="%%%MAGIC variable%%%"
 magic_exe="%%%MAGIC EXE variable%%%"
 
 # Global variables.
-# $mode is unset
 nonopt=
-execute_dlfiles=
 preserve_args=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
 extracted_archives=
 extracted_serial=0
 
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
 # If this variable is set in any of the actions, the command in it
 # will be execed at the end.  This prevents here-documents from being
 # left over by shells.
 exec_cmd=
 
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
 # func_fatal_configuration arg...
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
@@ -636,16 +923,16 @@ func_config ()
 # Display the features supported by this script.
 func_features ()
 {
-    $ECHO "host: $host"
+    echo "host: $host"
     if test "$build_libtool_libs" = yes; then
-      $ECHO "enable shared libraries"
+      echo "enable shared libraries"
     else
-      $ECHO "disable shared libraries"
+      echo "disable shared libraries"
     fi
     if test "$build_old_libs" = yes; then
-      $ECHO "enable static libraries"
+      echo "enable static libraries"
     else
-      $ECHO "disable static libraries"
+      echo "disable static libraries"
     fi
 
     exit $?
@@ -692,117 +979,204 @@ func_enable_tag ()
   esac
 }
 
-# Parse options once, thoroughly.  This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
 {
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
 
-  # Shorthand for --mode=foo, only valid as the first argument
-  case $1 in
-  clean|clea|cle|cl)
-    shift; set dummy --mode clean ${1+"$@"}; shift
-    ;;
-  compile|compil|compi|comp|com|co|c)
-    shift; set dummy --mode compile ${1+"$@"}; shift
-    ;;
-  execute|execut|execu|exec|exe|ex|e)
-    shift; set dummy --mode execute ${1+"$@"}; shift
-    ;;
-  finish|finis|fini|fin|fi|f)
-    shift; set dummy --mode finish ${1+"$@"}; shift
-    ;;
-  install|instal|insta|inst|ins|in|i)
-    shift; set dummy --mode install ${1+"$@"}; shift
-    ;;
-  link|lin|li|l)
-    shift; set dummy --mode link ${1+"$@"}; shift
-    ;;
-  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-    shift; set dummy --mode uninstall ${1+"$@"}; shift
-    ;;
-  esac
 
-  # Parse non-mode specific arguments:
-  while test "$#" -gt 0; do
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
     opt="$1"
     shift
-
     case $opt in
-      --config)		func_config					;;
-
-      --debug)		preserve_args="$preserve_args $opt"
+      --debug|-x)	opt_debug='set -x'
 			func_echo "enabling shell trace mode"
-			opt_debug='set -x'
 			$opt_debug
 			;;
-
-      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			execute_dlfiles="$execute_dlfiles $1"
-			shift
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
 			;;
-
-      --dry-run | -n)	opt_dry_run=:					;;
-      --features)       func_features					;;
-      --finish)		mode="finish"					;;
-
-      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			case $1 in
-			  # Valid mode arguments:
-			  clean)	;;
-			  compile)	;;
-			  execute)	;;
-			  finish)	;;
-			  install)	;;
-			  link)		;;
-			  relink)	;;
-			  uninstall)	;;
-
-			  # Catch anything else as an error
-			  *) func_error "invalid argument for $opt"
-			     exit_cmd=exit
-			     break
-			     ;;
-		        esac
-
-			mode="$1"
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
 			shift
 			;;
-
       --preserve-dup-deps)
-			opt_duplicate_deps=:				;;
-
-      --quiet|--silent)	preserve_args="$preserve_args $opt"
-			opt_silent=:
+			opt_preserve_dup_deps=:
 			;;
-
-      --verbose| -v)	preserve_args="$preserve_args $opt"
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
 			opt_silent=false
+func_append preserve_args " $opt"
 			;;
-
-      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			preserve_args="$preserve_args $opt $1"
-			func_enable_tag "$1"	# tagname is set here
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
 			shift
 			;;
 
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
       # Separate optargs to long options:
-      -dlopen=*|--mode=*|--tag=*)
-			func_opt_split "$opt"
-			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
 			shift
 			;;
 
-      -\?|-h)		func_usage					;;
-      --help)		opt_help=:					;;
-      --version)	func_version					;;
-
-      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
-
-      *)		nonopt="$opt"
-			break
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
 			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
     esac
   done
 
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
 
   case $host in
     *cygwin* | *mingw* | *pw32* | *cegcc*)
@@ -810,82 +1184,44 @@ func_enable_tag ()
       opt_duplicate_compiler_generated_deps=:
       ;;
     *)
-      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
       ;;
   esac
 
-  # Having warned about all mis-specified options, bail out if
-  # anything was wrong.
-  $exit_cmd $EXIT_FAILURE
-}
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
 
-# func_check_version_match
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      else
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
     fi
 
-    exit $EXIT_MISMATCH
-  fi
-}
-
-
-## ----------- ##
-##    Main.    ##
-## ----------- ##
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
 
-$opt_help || {
-  # Sanity checks first:
-  func_check_version_match
-
-  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-    func_fatal_configuration "not configured to build any kind of library"
-  fi
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
 
-  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
 
 
-  # Darwin sucks
-  eval std_shrext=\"$shrext_cmds\"
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
 
 
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    func_error "unrecognized option \`-dlopen'"
-    $ECHO "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
 
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$progname --help --mode=$mode' for more information."
-}
 
+## ----------- ##
+##    Main.    ##
+## ----------- ##
 
 # func_lalib_p file
 # True iff FILE is a libtool `.la' library or `.lo' object file.
@@ -950,12 +1286,9 @@ func_ltwrapper_executable_p ()
 # temporary ltwrapper_script.
 func_ltwrapper_scriptname ()
 {
-    func_ltwrapper_scriptname_result=""
-    if func_ltwrapper_executable_p "$1"; then
-	func_dirname_and_basename "$1" "" "."
-	func_stripname '' '.exe' "$func_basename_result"
-	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-    fi
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
 }
 
 # func_ltwrapper_p file
@@ -1001,6 +1334,37 @@ func_source ()
 }
 
 
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
 # func_infer_tag arg
 # Infer tagged configuration to use if any are available and
 # if one wasn't chosen via the "--tag" command line option.
@@ -1013,13 +1377,15 @@ func_infer_tag ()
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
-        func_quote_for_eval "$arg"
-	CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	func_append_quoted CC_quoted "$arg"
       done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
       case $@ in
       # Blanks in the command may have been stripped by the calling shell,
       # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
       # Blanks at the start of $base_compile will cause this to fail
       # if we don't check for them as well.
       *)
@@ -1030,11 +1396,13 @@ func_infer_tag ()
 	    CC_quoted=
 	    for arg in $CC; do
 	      # Double-quote args containing other shell metacharacters.
-	      func_quote_for_eval "$arg"
-	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	      func_append_quoted CC_quoted "$arg"
 	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
 	    case "$@ " in
-	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
 	      # The compiler in the base compile command matches
 	      # the one in the tagged configuration.
 	      # Assume this is the tagged configuration we want.
@@ -1097,6 +1465,486 @@ EOF
     }
 }
 
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
@@ -1137,12 +1985,12 @@ func_mode_compile ()
 	  ;;
 
 	-pie | -fpie | -fPIE)
-          pie_flag="$pie_flag $arg"
+          func_append pie_flag " $arg"
 	  continue
 	  ;;
 
 	-shared | -static | -prefer-pic | -prefer-non-pic)
-	  later="$later $arg"
+	  func_append later " $arg"
 	  continue
 	  ;;
 
@@ -1163,15 +2011,14 @@ func_mode_compile ()
 	  save_ifs="$IFS"; IFS=','
 	  for arg in $args; do
 	    IFS="$save_ifs"
-	    func_quote_for_eval "$arg"
-	    lastarg="$lastarg $func_quote_for_eval_result"
+	    func_append_quoted lastarg "$arg"
 	  done
 	  IFS="$save_ifs"
 	  func_stripname ' ' '' "$lastarg"
 	  lastarg=$func_stripname_result
 
 	  # Add the arguments to base_compile.
-	  base_compile="$base_compile $lastarg"
+	  func_append base_compile " $lastarg"
 	  continue
 	  ;;
 
@@ -1187,8 +2034,7 @@ func_mode_compile ()
       esac    #  case $arg_mode
 
       # Aesthetically quote the previous argument.
-      func_quote_for_eval "$lastarg"
-      base_compile="$base_compile $func_quote_for_eval_result"
+      func_append_quoted base_compile "$lastarg"
     done # for arg
 
     case $arg_mode in
@@ -1213,7 +2059,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -1288,7 +2134,7 @@ func_mode_compile ()
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
     if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
       lockfile="$output_obj.lock"
     else
       output_obj=
@@ -1319,17 +2165,16 @@ compiler."
 	$opt_dry_run || $RM $removelist
 	exit $EXIT_FAILURE
       fi
-      removelist="$removelist $output_obj"
+      func_append removelist " $output_obj"
       $ECHO "$srcfile" > "$lockfile"
     fi
 
     $opt_dry_run || $RM $removelist
-    removelist="$removelist $lockfile"
+    func_append removelist " $lockfile"
     trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
 
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
     func_quote_for_eval "$srcfile"
     qsrcfile=$func_quote_for_eval_result
 
@@ -1349,7 +2194,7 @@ compiler."
 
       if test -z "$output_obj"; then
 	# Place PIC objects in $objdir
-	command="$command -o $lobj"
+	func_append command " -o $lobj"
       fi
 
       func_show_eval_locale "$command"	\
@@ -1396,11 +2241,11 @@ compiler."
 	command="$base_compile $qsrcfile $pic_flag"
       fi
       if test "$compiler_c_o" = yes; then
-	command="$command -o $obj"
+	func_append command " -o $obj"
       fi
 
       # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
+      func_append command "$suppress_output"
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
@@ -1445,13 +2290,13 @@ compiler."
 }
 
 $opt_help || {
-test "$mode" = compile && func_mode_compile ${1+"$@"}
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
 {
     # We need to display help for each of the modes.
-    case $mode in
+    case $opt_mode in
       "")
         # Generic help is extracted from the usage comments
         # at the start of this file.
@@ -1482,10 +2327,11 @@ This mode accepts the following additional options:
 
   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
   -no-suppress      do not suppress compiler output for multiple passes
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
   -shared           do not build a \`.o' file suitable for static linking
   -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
 
 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
 from the given SOURCEFILE.
@@ -1538,7 +2384,7 @@ either the \`install' or \`cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
-  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
 
 The rest of the components are interpreted as arguments to that command (only
 BSD-compatible install options are recognized)."
@@ -1558,6 +2404,8 @@ The following components of LINK-COMMAND are treated specially:
 
   -all-static       do not do any dynamic linking at all
   -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
@@ -1586,6 +2434,11 @@ The following components of LINK-COMMAND are treated specially:
   -version-info CURRENT[:REVISION[:AGE]]
                     specify library version info [each variable defaults to 0]
   -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
 All other options (arguments beginning with \`-') are ignored.
 
@@ -1619,18 +2472,44 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$mode'"
+        func_fatal_help "invalid operation mode \`$opt_mode'"
         ;;
     esac
 
-    $ECHO
+    echo
     $ECHO "Try \`$progname --help' for more information about other modes."
-
-    exit $?
 }
 
-  # Now that we've collected a possible --mode arg, show help if necessary
-  $opt_help && func_mode_help
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
 
 
 # func_mode_execute arg...
@@ -1643,13 +2522,16 @@ func_mode_execute ()
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
+    for file in $opt_dlopen; do
       test -f "$file" \
 	|| func_fatal_help "\`$file' is not a file"
 
       dir=
       case $file in
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$lib' is not a valid libtool archive"
@@ -1671,7 +2553,7 @@ func_mode_execute ()
 	dir="$func_dirname_result"
 
 	if test -f "$dir/$objdir/$dlname"; then
-	  dir="$dir/$objdir"
+	  func_append dir "/$objdir"
 	else
 	  if test ! -f "$dir/$dlname"; then
 	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
@@ -1712,7 +2594,7 @@ func_mode_execute ()
     for file
     do
       case $file in
-      -*) ;;
+      -* | *.la | *.lo ) ;;
       *)
 	# Do a test to see if this is really a libtool program.
 	if func_ltwrapper_script_p "$file"; then
@@ -1728,8 +2610,7 @@ func_mode_execute ()
 	;;
       esac
       # Quote arguments (to preserve shell metacharacters).
-      func_quote_for_eval "$file"
-      args="$args $func_quote_for_eval_result"
+      func_append_quoted args "$file"
     done
 
     if test "X$opt_dry_run" = Xfalse; then
@@ -1754,29 +2635,66 @@ func_mode_execute ()
       # Display what would be done.
       if test -n "$shlibpath_var"; then
 	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-	$ECHO "export $shlibpath_var"
+	echo "export $shlibpath_var"
       fi
       $ECHO "$cmd$args"
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$mode" = execute && func_mode_execute ${1+"$@"}
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
     $opt_debug
-    libdirs="$nonopt"
+    libs=
+    libdirs=
     admincmds=
 
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-	libdirs="$libdirs $dir"
-      done
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
 
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       for libdir in $libdirs; do
 	if test -n "$finish_cmds"; then
 	  # Do each command in the finish commands.
@@ -1786,7 +2704,7 @@ func_mode_finish ()
 	if test -n "$finish_eval"; then
 	  # Do the single finish_eval.
 	  eval cmds=\"$finish_eval\"
-	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
        $cmds"
 	fi
       done
@@ -1795,53 +2713,55 @@ func_mode_finish ()
     # Exit here if they wanted silent mode.
     $opt_silent && exit $EXIT_SUCCESS
 
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
-    $ECHO "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $ECHO "   $libdir"
-    done
-    $ECHO
-    $ECHO "If you ever happen to want to link against installed libraries"
-    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
-    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $ECHO "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $ECHO "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $ECHO "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
 
-      $ECHO "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $ECHO "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $ECHO
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
 
-    $ECHO "See any operating system documentation about shared libraries for"
-    case $host in
-      solaris2.[6789]|solaris2.1[0-9])
-        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-	$ECHO "pages."
-	;;
-      *)
-        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
-        ;;
-    esac
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
     exit $EXIT_SUCCESS
 }
 
-test "$mode" = finish && func_mode_finish ${1+"$@"}
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
@@ -1852,7 +2772,7 @@ func_mode_install ()
     # install_prog (especially on Windows NT).
     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
        # Allow the use of GNU shtool's install command.
-       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+       case $nonopt in *shtool*) :;; *) false;; esac; then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -1866,7 +2786,12 @@ func_mode_install ()
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
     func_quote_for_eval "$arg"
-    install_prog="$install_prog$func_quote_for_eval_result"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
 
     # We need to accept at least all the BSD install flags.
     dest=
@@ -1876,10 +2801,12 @@ func_mode_install ()
     install_type=
     isdir=no
     stripme=
+    no_mode=:
     for arg
     do
+      arg2=
       if test -n "$dest"; then
-	files="$files $dest"
+	func_append files " $dest"
 	dest=$arg
 	continue
       fi
@@ -1887,10 +2814,9 @@ func_mode_install ()
       case $arg in
       -d) isdir=yes ;;
       -f)
-	case " $install_prog " in
-	*[\\\ /]cp\ *) ;;
-	*) prev=$arg ;;
-	esac
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
 	;;
       -g | -m | -o)
 	prev=$arg
@@ -1904,6 +2830,10 @@ func_mode_install ()
       *)
 	# If the previous option needed an argument, then skip it.
 	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
 	  prev=
 	else
 	  dest=$arg
@@ -1914,7 +2844,11 @@ func_mode_install ()
 
       # Aesthetically quote the argument.
       func_quote_for_eval "$arg"
-      install_prog="$install_prog $func_quote_for_eval_result"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
     done
 
     test -z "$install_prog" && \
@@ -1923,6 +2857,13 @@ func_mode_install ()
     test -n "$prev" && \
       func_fatal_help "the \`$prev' option requires an argument"
 
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
     if test -z "$files"; then
       if test -z "$dest"; then
 	func_fatal_help "no file or destination specified"
@@ -1977,10 +2918,13 @@ func_mode_install ()
       case $file in
       *.$libext)
 	# Do the static libraries later.
-	staticlibs="$staticlibs $file"
+	func_append staticlibs " $file"
 	;;
 
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$file' is not a valid libtool archive"
@@ -1994,23 +2938,23 @@ func_mode_install ()
 	if test "X$destdir" = "X$libdir"; then
 	  case "$current_libdirs " in
 	  *" $libdir "*) ;;
-	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  *) func_append current_libdirs " $libdir" ;;
 	  esac
 	else
 	  # Note the libdir as a future libdir.
 	  case "$future_libdirs " in
 	  *" $libdir "*) ;;
-	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  *) func_append future_libdirs " $libdir" ;;
 	  esac
 	fi
 
 	func_dirname "$file" "/" ""
 	dir="$func_dirname_result"
-	dir="$dir$objdir"
+	func_append dir "$objdir"
 
 	if test -n "$relink_command"; then
 	  # Determine the prefix the user has applied to our future dir.
-	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
 
 	  # Don't allow the user to place us outside of our expected
 	  # location b/c this prevents finding dependent libraries that
@@ -2023,9 +2967,9 @@ func_mode_install ()
 
 	  if test -n "$inst_prefix_dir"; then
 	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
 	  else
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
 	  fi
 
 	  func_warning "relinking \`$file'"
@@ -2043,7 +2987,7 @@ func_mode_install ()
 	  test -n "$relink_command" && srcname="$realname"T
 
 	  # Install the shared library and build the symlinks.
-	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
 	      'exit $?'
 	  tstripme="$stripme"
 	  case $host_os in
@@ -2083,7 +3027,7 @@ func_mode_install ()
 	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
 	# Maybe install the static library, too.
-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
 	;;
 
       *.lo)
@@ -2183,7 +3127,7 @@ func_mode_install ()
 	    if test -f "$lib"; then
 	      func_source "$lib"
 	    fi
-	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
 	    if test -n "$libdir" && test ! -f "$libfile"; then
 	      func_warning "\`$lib' has not been installed in \`$libdir'"
 	      finalize=no
@@ -2202,7 +3146,7 @@ func_mode_install ()
 		file="$func_basename_result"
 	        outputname="$tmpdir/$file"
 	        # Replace the output file specification.
-	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
 	        $opt_silent || {
 	          func_quote_for_expand "$relink_command"
@@ -2221,7 +3165,7 @@ func_mode_install ()
 	    }
 	  else
 	    # Install the binary that we compiled earlier.
-	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
 	  fi
 	fi
 
@@ -2280,7 +3224,7 @@ func_mode_install ()
     fi
 }
 
-test "$mode" = install && func_mode_install ${1+"$@"}
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -2323,6 +3267,22 @@ func_generate_dlsyms ()
 extern \"C\" {
 #endif
 
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 /* External symbol declarations for the compiler. */\
 "
 
@@ -2332,10 +3292,11 @@ extern \"C\" {
 	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
 	  # Add our own program objects to the symbol list.
-	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	  for progfile in $progfiles; do
-	    func_verbose "extracting global C symbols from \`$progfile'"
-	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
 	  done
 
 	  if test -n "$exclude_expsyms"; then
@@ -2371,7 +3332,7 @@ extern \"C\" {
 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
 	      eval '$MV "$nlist"T "$nlist"'
 	      case $host in
-	        *cygwin | *mingw* | *cegcc* )
+	        *cygwin* | *mingw* | *cegcc* )
 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
 	          ;;
@@ -2384,10 +3345,52 @@ extern \"C\" {
 	  func_verbose "extracting global C symbols from \`$dlprefile'"
 	  func_basename "$dlprefile"
 	  name="$func_basename_result"
-	  $opt_dry_run || {
-	    eval '$ECHO ": $name " >> "$nlist"'
-	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-	  }
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
 	done
 
 	$opt_dry_run || {
@@ -2415,36 +3418,19 @@ extern \"C\" {
 	  if test -f "$nlist"S; then
 	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
 	  else
-	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
 	  fi
 
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
 typedef struct {
   const char *name;
   void *address;
 } lt_dlsymlist;
-"
-	  case $host in
-	  *cygwin* | *mingw* | *cegcc* )
-	    $ECHO >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs.  */"
-	    lt_dlsym_const= ;;
-	  *osf5*)
-	    echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
-	    lt_dlsym_const= ;;
-	  *)
-	    lt_dlsym_const=const ;;
-	  esac
-
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
+extern LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
+LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
 {\
   { \"$my_originator\", (void *) 0 },"
@@ -2457,7 +3443,7 @@ lt_${my_prefix}_LTX_preloaded_symbols[] =
 	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
 	    ;;
 	  esac
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
   {0, (void *) 0}
 };
 
@@ -2500,7 +3486,7 @@ static const void *lt_preloaded_setup() {
 	for arg in $LTCFLAGS; do
 	  case $arg in
 	  -pie | -fpie | -fPIE) ;;
-	  *) symtab_cflags="$symtab_cflags $arg" ;;
+	  *) func_append symtab_cflags " $arg" ;;
 	  esac
 	done
 
@@ -2515,16 +3501,16 @@ static const void *lt_preloaded_setup() {
 	case $host in
 	*cygwin* | *mingw* | *cegcc* )
 	  if test -f "$output_objdir/$my_outputname.def"; then
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
 	  else
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  fi
 	  ;;
 	*)
-	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  ;;
 	esac
 	;;
@@ -2538,8 +3524,8 @@ static const void *lt_preloaded_setup() {
       # really was required.
 
       # Nullify the symbol file.
-      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
     fi
 }
 
@@ -2549,6 +3535,7 @@ static const void *lt_preloaded_setup() {
 # Need a lot of goo to handle *both* DLLs and import libs
 # Has to be a shell function in order to 'eat' the argument
 # that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
   $opt_debug
@@ -2559,9 +3546,11 @@ func_win32_libid ()
     win32_libid_type="x86 archive import"
     ;;
   *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
 	$SED -n -e '
 	    1,100{
 		/ I /{
@@ -2590,6 +3579,131 @@ func_win32_libid ()
   $ECHO "$win32_libid_type"
 }
 
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
 
 
 # func_extract_an_archive dir oldlib
@@ -2598,7 +3712,18 @@ func_extract_an_archive ()
     $opt_debug
     f_ex_an_ar_dir="$1"; shift
     f_ex_an_ar_oldlib="$1"
-    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
      :
     else
@@ -2669,7 +3794,7 @@ func_extract_archives ()
 	    darwin_file=
 	    darwin_files=
 	    for darwin_file in $darwin_filelist; do
-	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
 	      $LIPO -create -output "$darwin_file" $darwin_files
 	    done # $darwin_filelist
 	    $RM -rf unfat-$$
@@ -2684,25 +3809,30 @@ func_extract_archives ()
         func_extract_an_archive "$my_xdir" "$my_xabs"
 	;;
       esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
     func_extract_archives_result="$my_oldobjs"
 }
 
 
-
-# func_emit_wrapper_part1 [arg=no]
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
 #
-# Emit the first part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part1 ()
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
 {
-	func_emit_wrapper_part1_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part1_arg1=$1
-	fi
+	func_emit_wrapper_arg1=${1-no}
 
 	$ECHO "\
 #! $SHELL
@@ -2718,7 +3848,6 @@ func_emit_wrapper_part1 ()
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
 # Be Bourne compatible
@@ -2749,31 +3878,132 @@ if test \"\$libtool_install_magic\" = \"$magic\"; then
 else
   # When we are sourced in execute mode, \$file and \$ECHO are already set.
   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    ECHO=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$ECHO works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$ECHO will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
 "
-	$ECHO "\
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  for lt_wr_arg
+  do
+    case \$lt_wr_arg in
+    --lt-*) ;;
+    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+    esac
+    shift
+  done
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
 
   # Find the directory that this script lives in.
-  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 
   # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
   while test -n \"\$file\"; do
-    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
 
     # If there was a directory component, then change thisdir.
     if test \"x\$destdir\" != \"x\$file\"; then
@@ -2783,30 +4013,13 @@ else
       esac
     fi
 
-    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
   done
-"
-}
-# end: func_emit_wrapper_part1
-
-# func_emit_wrapper_part2 [arg=no]
-#
-# Emit the second part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part2 ()
-{
-	func_emit_wrapper_part2_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part2_arg1=$1
-	fi
-
-	$ECHO "\
 
   # Usually 'no', except on cygwin/mingw when embedded into
   # the cwrapper.
-  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
   if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
     # special case for '.'
     if test \"\$thisdir\" = \".\"; then
@@ -2814,7 +4027,7 @@ func_emit_wrapper_part2 ()
     fi
     # remove .libs from thisdir
     case \"\$thisdir\" in
-    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
     $objdir )   thisdir=. ;;
     esac
   fi
@@ -2869,6 +4082,18 @@ func_emit_wrapper_part2 ()
 
   if test -f \"\$progdir/\$program\"; then"
 
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
 	# Export our shlibpath_var if we have one.
 	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
 	  $ECHO "\
@@ -2877,254 +4102,29 @@ func_emit_wrapper_part2 ()
 
     # Some systems cannot cope with colon-terminated $shlibpath_var
     # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
 
     export $shlibpath_var
 "
 	fi
 
-	# fixup the dll searchpath if we need to.
-	if test -n "$dllsearchpath"; then
-	  $ECHO "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
 	$ECHO "\
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
       # Run the actual program with our arguments.
-"
-	case $host in
-	# Backslashes separate directories on plain windows
-	*-*-mingw | *-*-os2* | *-cegcc*)
-	  $ECHO "\
-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
-	  ;;
-
-	*)
-	  $ECHO "\
-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
-	  ;;
-	esac
-	$ECHO "\
-      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-      exit 1
+      func_exec_program \${1+\"\$@\"}
     fi
   else
     # The program doesn't exist.
     \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
-    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
   fi
 fi\
 "
 }
-# end: func_emit_wrapper_part2
-
-
-# func_emit_wrapper [arg=no]
-#
-# Emit a libtool wrapper script on stdout.
-# Don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable.  Must ONLY be called from within
-# func_mode_link because it depends on a number of variables
-# set therein.
-#
-# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the $objdir directory.  This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
-	func_emit_wrapper_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_arg1=$1
-	fi
-
-	# split this up so that func_emit_cwrapperexe_src
-	# can call each part independently.
-	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
-	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
-}
 
 
-# func_to_host_path arg
-#
-# Convert paths to host format when used with build tools.
-# Intended for use with "native" mingw (where libtool itself
-# is running under the msys shell), or in the following cross-
-# build environments:
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-# where wine is equipped with the `winepath' executable.
-# In the native mingw case, the (msys) shell automatically
-# converts paths for any non-msys applications it launches,
-# but that facility isn't available from inside the cwrapper.
-# Similar accommodations are necessary for $host mingw and
-# $build cygwin.  Calling this function does no harm for other
-# $host/$build combinations not listed above.
-#
-# ARG is the path (on $build) that should be converted to
-# the proper representation for $host. The result is stored
-# in $func_to_host_path_result.
-func_to_host_path ()
-{
-  func_to_host_path_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        case $build in
-          *mingw* ) # actually, msys
-            # awkward: cmd appends spaces to result
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_path_tmp1=`cygpath -w "$1"`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # Unfortunately, winepath does not exit with a non-zero
-            # error code, so we are forced to check the contents of
-            # stdout. On the other hand, if the command is not
-            # found, the shell will set an exit code of 127 and print
-            # *an error message* to stdout. So we must check for both
-            # error code of zero AND non-empty stdout, which explains
-            # the odd construction:
-            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
-            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
-              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-                $SED -e "$lt_sed_naive_backslashify"`
-            else
-              # Allow warning below.
-              func_to_host_path_result=""
-            fi
-            ;;
-        esac
-        if test -z "$func_to_host_path_result" ; then
-          func_error "Could not determine host path corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback:
-          func_to_host_path_result="$1"
-        fi
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_path
-
-# func_to_host_pathlist arg
-#
-# Convert pathlists to host format when used with build tools.
-# See func_to_host_path(), above. This function supports the
-# following $build/$host combinations (but does no harm for
-# combinations not listed here):
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-#
-# Path separators are also converted from $build format to
-# $host format. If ARG begins or ends with a path separator
-# character, it is preserved (but converted to $host format)
-# on output.
-#
-# ARG is a pathlist (on $build) that should be converted to
-# the proper representation on $host. The result is stored
-# in $func_to_host_pathlist_result.
-func_to_host_pathlist ()
-{
-  func_to_host_pathlist_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        # Remove leading and trailing path separator characters from
-        # ARG. msys behavior is inconsistent here, cygpath turns them
-        # into '.;' and ';.', and winepath ignores them completely.
-        func_to_host_pathlist_tmp2="$1"
-        # Once set for this call, this variable should not be
-        # reassigned. It is used in tha fallback case.
-        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
-          $SED -e 's|^:*||' -e 's|:*$||'`
-        case $build in
-          *mingw* ) # Actually, msys.
-            # Awkward: cmd appends spaces to result.
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # unfortunately, winepath doesn't convert pathlists
-            func_to_host_pathlist_result=""
-            func_to_host_pathlist_oldIFS=$IFS
-            IFS=:
-            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
-              IFS=$func_to_host_pathlist_oldIFS
-              if test -n "$func_to_host_pathlist_f" ; then
-                func_to_host_path "$func_to_host_pathlist_f"
-                if test -n "$func_to_host_path_result" ; then
-                  if test -z "$func_to_host_pathlist_result" ; then
-                    func_to_host_pathlist_result="$func_to_host_path_result"
-                  else
-                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
-                  fi
-                fi
-              fi
-              IFS=:
-            done
-            IFS=$func_to_host_pathlist_oldIFS
-            ;;
-        esac
-        if test -z "$func_to_host_pathlist_result" ; then
-          func_error "Could not determine the host path(s) corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback. This may break if $1 contains DOS-style drive
-          # specifications. The fix is not to complicate the expression
-          # below, but for the user to provide a working wine installation
-          # with winepath so that path translation in the cross-to-mingw
-          # case works properly.
-          lt_replace_pathsep_nix_to_dos="s|:|;|g"
-          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
-            $SED -e "$lt_replace_pathsep_nix_to_dos"`
-        fi
-        # Now, add the leading and trailing path separators back
-        case "$1" in
-          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
-            ;;
-        esac
-        case "$1" in
-          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
-            ;;
-        esac
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_pathlist
-
 # func_emit_cwrapperexe_src
 # emit the source code for a wrapper executable on stdout
 # Must ONLY be called from within func_mode_link because
@@ -3141,41 +4141,71 @@ func_emit_cwrapperexe_src ()
 
    This wrapper executable should never be moved out of the build directory.
    If it is, it will not operate correctly.
-
-   Currently, it simply execs the wrapper *script* "$SHELL $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
 */
 EOF
 	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #ifdef _MSC_VER
 # include <direct.h>
 # include <process.h>
 # include <io.h>
-# define setmode _setmode
 #else
 # include <unistd.h>
 # include <stdint.h>
 # ifdef __CYGWIN__
 #  include <io.h>
-#  define HAVE_SETENV
-#  ifdef __STRICT_ANSI__
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
 char *realpath (const char *, char *);
 int putenv (char *);
 int setenv (const char *, const char *, int);
-#  endif
 # endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
 #endif
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
 
 #if defined(PATH_MAX)
 # define LT_PATHMAX PATH_MAX
@@ -3192,14 +4222,7 @@ int setenv (const char *, const char *, int);
 # define S_IXGRP 0
 #endif
 
-#ifdef _MSC_VER
-# define S_IXUSR _S_IEXEC
-# define stat _stat
-# ifndef _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#endif
-
+/* path handling portability macros */
 #ifndef DIR_SEPARATOR
 # define DIR_SEPARATOR '/'
 # define PATH_SEPARATOR ':'
@@ -3230,10 +4253,6 @@ int setenv (const char *, const char *, int);
 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
 #endif /* PATH_SEPARATOR_2 */
 
-#ifdef __CYGWIN__
-# define FOPEN_WB "wb"
-#endif
-
 #ifndef FOPEN_WB
 # define FOPEN_WB "w"
 #endif
@@ -3246,22 +4265,13 @@ int setenv (const char *, const char *, int);
   if (stale) { free ((void *) stale); stale = 0; } \
 } while (0)
 
-#undef LTWRAPPER_DEBUGPRINTF
-#if defined DEBUGWRAPPER
-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
-static void
-ltwrapper_debugprintf (const char *fmt, ...)
-{
-    va_list args;
-    va_start (args, fmt);
-    (void) vfprintf (stderr, fmt, args);
-    va_end (args);
-}
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
 #else
-# define LTWRAPPER_DEBUGPRINTF(args)
+static int lt_debug = 0;
 #endif
 
-const char *program_name = NULL;
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
 
 void *xmalloc (size_t num);
 char *xstrdup (const char *string);
@@ -3271,41 +4281,27 @@ char *chase_symlinks (const char *pathspec);
 int make_executable (const char *path);
 int check_executable (const char *path);
 char *strendzap (char *str, const char *pat);
-void lt_fatal (const char *message, ...);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
 void lt_setenv (const char *name, const char *value);
 char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-void lt_opt_process_env_set (const char *arg);
-void lt_opt_process_env_prepend (const char *arg);
-void lt_opt_process_env_append (const char *arg);
-int lt_split_name_value (const char *arg, char** name, char** value);
 void lt_update_exe_path (const char *name, const char *value);
 void lt_update_lib_path (const char *name, const char *value);
-
-static const char *script_text_part1 =
-EOF
-
-	    func_emit_wrapper_part1 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
-	    cat <<EOF
-
-static const char *script_text_part2 =
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
 EOF
-	    func_emit_wrapper_part2 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
 
 	    cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
+volatile const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
 	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-              func_to_host_pathlist "$temp_rpath"
+              func_to_host_path "$temp_rpath"
 	      cat <<EOF
-const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3314,10 +4310,10 @@ EOF
 	    fi
 
 	    if test -n "$dllsearchpath"; then
-              func_to_host_pathlist "$dllsearchpath:"
+              func_to_host_path "$dllsearchpath:"
 	      cat <<EOF
 const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3340,24 +4336,10 @@ EOF
 	    cat <<"EOF"
 
 #define LTWRAPPER_OPTION_PREFIX         "--lt-"
-#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
 
-static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
 static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-
 static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
-
-static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
-static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
-  /* argument is putenv-style "foo=bar", value of foo is set to bar */
-
-static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
-static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
-  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
-
-static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
-static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
-  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
 
 int
 main (int argc, char *argv[])
@@ -3374,10 +4356,13 @@ main (int argc, char *argv[])
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+  newargz = XMALLOC (char *, argc + 1);
 
-  /* very simple arg parsing; don't want to rely on getopt */
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
   for (i = 1; i < argc; i++)
     {
       if (strcmp (argv[i], dumpscript_opt) == 0)
@@ -3391,25 +4376,57 @@ EOF
 	      esac
 
 	    cat <<"EOF"
-	  printf ("%s", script_text_part1);
-	  printf ("%s", script_text_part2);
+	  lt_dump_script (stdout);
 	  return 0;
 	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
     }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
 
-  newargz = XMALLOC (char *, argc + 1);
   tmp_pathspec = find_executable (argv[0]);
   if (tmp_pathspec == NULL)
-    lt_fatal ("Couldn't find %s", argv[0]);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
-			  tmp_pathspec));
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
 
   actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
-			  actual_cwrapper_path));
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
   XFREE (tmp_pathspec);
 
-  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
   strendzap (actual_cwrapper_path, actual_cwrapper_name);
 
   /* wrapper name transforms */
@@ -3427,8 +4444,9 @@ EOF
   target_name = tmp_pathspec;
   tmp_pathspec = 0;
 
-  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
-			  target_name));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
 EOF
 
 	    cat <<EOF
@@ -3478,80 +4496,19 @@ EOF
 
   lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
   lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
   lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
 
-  newargc=0;
-  for (i = 1; i < argc; i++)
-    {
-      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
-        {
-          if (argv[i][env_set_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_set_opt_len + 1;
-              lt_opt_process_env_set (p);
-            }
-          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_set (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_set_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
-        {
-          if (argv[i][env_prepend_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_prepend_opt_len + 1;
-              lt_opt_process_env_prepend (p);
-            }
-          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_prepend_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
-        {
-          if (argv[i][env_append_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_append_opt_len + 1;
-              lt_opt_process_env_append (p);
-            }
-          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_append (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_append_opt);
-          continue;
-        }
-      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
-        {
-          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-             namespace, but it is not one of the ones we know about and
-             have already dealt with, above (inluding dump-script), then
-             report an error. Otherwise, targets might begin to believe
-             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-             namespace. The first time any user complains about this, we'll
-             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-             or a configure.ac-settable value.
-           */
-          lt_fatal ("Unrecognized option in %s namespace: '%s'",
-                    ltwrapper_option_prefix, argv[i]);
-        }
-      /* otherwise ... */
-      newargz[++newargc] = xstrdup (argv[i]);
-    }
-  newargz[++newargc] = NULL;
-
-  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
   for (i = 0; i < newargc; i++)
     {
-      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
     }
 
 EOF
@@ -3560,11 +4517,14 @@ EOF
 	      mingw*)
 		cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
   rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
-      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
       return 127;
     }
   return rval;
@@ -3586,7 +4546,7 @@ xmalloc (size_t num)
 {
   void *p = (void *) malloc (num);
   if (!p)
-    lt_fatal ("Memory exhausted");
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
 
   return p;
 }
@@ -3620,8 +4580,8 @@ check_executable (const char *path)
 {
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3638,8 +4598,8 @@ make_executable (const char *path)
   int rval = 0;
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3665,8 +4625,8 @@ find_executable (const char *wrapper)
   int tmp_len;
   char *concat_name;
 
-  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
-			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
 
   if ((wrapper == NULL) || (*wrapper == '\0'))
     return NULL;
@@ -3719,7 +4679,8 @@ find_executable (const char *wrapper)
 		{
 		  /* empty path: current directory */
 		  if (getcwd (tmp, LT_PATHMAX) == NULL)
-		    lt_fatal ("getcwd failed");
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
 		  tmp_len = strlen (tmp);
 		  concat_name =
 		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
@@ -3744,7 +4705,8 @@ find_executable (const char *wrapper)
     }
   /* Relative path | not found in path: prepend cwd */
   if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
   tmp_len = strlen (tmp);
   concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
   memcpy (concat_name, tmp, tmp_len);
@@ -3770,8 +4732,9 @@ chase_symlinks (const char *pathspec)
   int has_symlinks = 0;
   while (strlen (tmp_pathspec) && !has_symlinks)
     {
-      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
-			      tmp_pathspec));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
       if (lstat (tmp_pathspec, &s) == 0)
 	{
 	  if (S_ISLNK (s.st_mode) != 0)
@@ -3793,8 +4756,9 @@ chase_symlinks (const char *pathspec)
 	}
       else
 	{
-	  char *errstr = strerror (errno);
-	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
 	}
     }
   XFREE (tmp_pathspec);
@@ -3807,7 +4771,8 @@ chase_symlinks (const char *pathspec)
   tmp_pathspec = realpath (pathspec, buf);
   if (tmp_pathspec == 0)
     {
-      lt_fatal ("Could not follow symlinks for %s", pathspec);
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
     }
   return xstrdup (tmp_pathspec);
 #endif
@@ -3833,11 +4798,25 @@ strendzap (char *str, const char *pat)
   return str;
 }
 
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
 static void
-lt_error_core (int exit_status, const char *mode,
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
 	       const char *message, va_list ap)
 {
-  fprintf (stderr, "%s: %s: ", program_name, mode);
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
   vfprintf (stderr, message, ap);
   fprintf (stderr, ".\n");
 
@@ -3846,20 +4825,32 @@ lt_error_core (int exit_status, const char *mode,
 }
 
 void
-lt_fatal (const char *message, ...)
+lt_fatal (const char *file, int line, const char *message, ...)
 {
   va_list ap;
   va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
   va_end (ap);
 }
 
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
 void
 lt_setenv (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
   {
 #ifdef HAVE_SETENV
     /* always make a copy, for consistency with !HAVE_SETENV */
@@ -3904,95 +4895,12 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
   return new_value;
 }
 
-int
-lt_split_name_value (const char *arg, char** name, char** value)
-{
-  const char *p;
-  int len;
-  if (!arg || !*arg)
-    return 1;
-
-  p = strchr (arg, (int)'=');
-
-  if (!p)
-    return 1;
-
-  *value = xstrdup (++p);
-
-  len = strlen (arg) - strlen (*value);
-  *name = XMALLOC (char, len);
-  strncpy (*name, arg, len-1);
-  (*name)[len - 1] = '\0';
-
-  return 0;
-}
-
-void
-lt_opt_process_env_set (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
-    }
-
-  lt_setenv (name, value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_prepend (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 0);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_append (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 1);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
 void
 lt_update_exe_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4011,9 +4919,9 @@ lt_update_exe_path (const char *name, const char *value)
 void
 lt_update_lib_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4023,11 +4931,152 @@ lt_update_lib_path (const char *name, const char *value)
     }
 }
 
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+              $SED -e 's/\([\\"]\)/\\\1/g' \
+	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
 
+            cat <<"EOF"
+}
 EOF
 }
 # end: func_emit_cwrapperexe_src
 
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
 # func_mode_link arg...
 func_mode_link ()
 {
@@ -4072,6 +5121,7 @@ func_mode_link ()
     new_inherited_linker_flags=
 
     avoid_version=no
+    bindir=
     dlfiles=
     dlprefiles=
     dlself=no
@@ -4164,6 +5214,11 @@ func_mode_link ()
 	esac
 
 	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
 	dlfiles|dlprefiles)
 	  if test "$preload" = no; then
 	    # Add the symbol object into the linking commands.
@@ -4195,9 +5250,9 @@ func_mode_link ()
 	    ;;
 	  *)
 	    if test "$prev" = dlfiles; then
-	      dlfiles="$dlfiles $arg"
+	      func_append dlfiles " $arg"
 	    else
-	      dlprefiles="$dlprefiles $arg"
+	      func_append dlprefiles " $arg"
 	    fi
 	    prev=
 	    continue
@@ -4221,7 +5276,7 @@ func_mode_link ()
 	    *-*-darwin*)
 	      case "$deplibs " in
 		*" $qarg.ltframework "*) ;;
-		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
 		   ;;
 	      esac
 	      ;;
@@ -4240,7 +5295,7 @@ func_mode_link ()
 	    moreargs=
 	    for fil in `cat "$save_arg"`
 	    do
-#	      moreargs="$moreargs $fil"
+#	      func_append moreargs " $fil"
 	      arg=$fil
 	      # A libtool-controlled object.
 
@@ -4269,7 +5324,7 @@ func_mode_link ()
 
 		  if test "$prev" = dlfiles; then
 		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		      dlfiles="$dlfiles $pic_object"
+		      func_append dlfiles " $pic_object"
 		      prev=
 		      continue
 		    else
@@ -4281,7 +5336,7 @@ func_mode_link ()
 		  # CHECK ME:  I think I busted this.  -Ossama
 		  if test "$prev" = dlprefiles; then
 		    # Preload the old-style object.
-		    dlprefiles="$dlprefiles $pic_object"
+		    func_append dlprefiles " $pic_object"
 		    prev=
 		  fi
 
@@ -4351,12 +5406,12 @@ func_mode_link ()
 	  if test "$prev" = rpath; then
 	    case "$rpath " in
 	    *" $arg "*) ;;
-	    *) rpath="$rpath $arg" ;;
+	    *) func_append rpath " $arg" ;;
 	    esac
 	  else
 	    case "$xrpath " in
 	    *" $arg "*) ;;
-	    *) xrpath="$xrpath $arg" ;;
+	    *) func_append xrpath " $arg" ;;
 	    esac
 	  fi
 	  prev=
@@ -4368,28 +5423,28 @@ func_mode_link ()
 	  continue
 	  ;;
 	weak)
-	  weak_libs="$weak_libs $arg"
+	  func_append weak_libs " $arg"
 	  prev=
 	  continue
 	  ;;
 	xcclinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xcompiler)
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xlinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $wl$qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
 	  prev=
 	  func_append compile_command " $wl$qarg"
 	  func_append finalize_command " $wl$qarg"
@@ -4425,6 +5480,11 @@ func_mode_link ()
 	continue
 	;;
 
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
       -dlopen)
 	prev=dlfiles
 	continue
@@ -4475,15 +5535,16 @@ func_mode_link ()
 	;;
 
       -L*)
-	func_stripname '-L' '' "$arg"
-	dir=$func_stripname_result
-	if test -z "$dir"; then
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
 	  if test "$#" -gt 0; then
 	    func_fatal_error "require no space between \`-L' and \`$1'"
 	  else
 	    func_fatal_error "need path for \`-L' option"
 	  fi
 	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -4495,24 +5556,30 @@ func_mode_link ()
 	  ;;
 	esac
 	case "$deplibs " in
-	*" -L$dir "*) ;;
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
 	*)
-	  deplibs="$deplibs -L$dir"
-	  lib_search_path="$lib_search_path $dir"
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
 	  ;;
 	esac
 	case $host in
 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
 	  case :$dllsearchpath: in
 	  *":$dir:"*) ;;
 	  ::) dllsearchpath=$dir;;
-	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  *) func_append dllsearchpath ":$dir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -4522,7 +5589,7 @@ func_mode_link ()
       -l*)
 	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # These systems don't actually have a C or math library (as such)
 	    continue
 	    ;;
@@ -4536,7 +5603,7 @@ func_mode_link ()
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C and math libraries are in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    continue
 	    ;;
 	  *-*-sco3.2v5* | *-*-sco5v6*)
@@ -4556,7 +5623,7 @@ func_mode_link ()
 	   ;;
 	 esac
 	fi
-	deplibs="$deplibs $arg"
+	func_append deplibs " $arg"
 	continue
 	;;
 
@@ -4568,8 +5635,8 @@ func_mode_link ()
       # Tru64 UNIX uses -model [arg] to determine the layout of C++
       # classes, name mangling, and exception handling.
       # Darwin uses the -arch flag to determine output architecture.
-      -model|-arch|-isysroot)
-	compiler_flags="$compiler_flags $arg"
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	prev=xcompiler
@@ -4577,12 +5644,12 @@ func_mode_link ()
 	;;
 
       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-	compiler_flags="$compiler_flags $arg"
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	case "$new_inherited_linker_flags " in
 	    *" $arg "*) ;;
-	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
 	esac
 	continue
 	;;
@@ -4649,13 +5716,17 @@ func_mode_link ()
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
 	*)
 	  func_fatal_error "only absolute run-paths are allowed"
 	  ;;
 	esac
 	case "$xrpath " in
 	*" $dir "*) ;;
-	*) xrpath="$xrpath $dir" ;;
+	*) func_append xrpath " $dir" ;;
 	esac
 	continue
 	;;
@@ -4708,8 +5779,8 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4724,9 +5795,9 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
-	  linker_flags="$linker_flags $func_quote_for_eval_result"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4754,23 +5825,27 @@ func_mode_link ()
 	arg="$func_quote_for_eval_result"
 	;;
 
-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-      # +DA*, +DD* enable 64-bit mode on the HP compiler
-      # -q* pass through compiler args for the IBM compiler
-      # -m*, -t[45]*, -txscale* pass through architecture-specific
-      # compiler args for GCC
-      # -F/path gives path to uninstalled frameworks, gcc on darwin
-      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
-      # @file GCC response files
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
         func_quote_for_eval "$arg"
 	arg="$func_quote_for_eval_result"
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
-        compiler_flags="$compiler_flags $arg"
+        func_append compiler_flags " $arg"
         continue
         ;;
 
@@ -4782,7 +5857,7 @@ func_mode_link ()
 
       *.$objext)
 	# A standard object.
-	objs="$objs $arg"
+	func_append objs " $arg"
 	;;
 
       *.lo)
@@ -4813,7 +5888,7 @@ func_mode_link ()
 
 	    if test "$prev" = dlfiles; then
 	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		dlfiles="$dlfiles $pic_object"
+		func_append dlfiles " $pic_object"
 		prev=
 		continue
 	      else
@@ -4825,7 +5900,7 @@ func_mode_link ()
 	    # CHECK ME:  I think I busted this.  -Ossama
 	    if test "$prev" = dlprefiles; then
 	      # Preload the old-style object.
-	      dlprefiles="$dlprefiles $pic_object"
+	      func_append dlprefiles " $pic_object"
 	      prev=
 	    fi
 
@@ -4870,24 +5945,25 @@ func_mode_link ()
 
       *.$libext)
 	# An archive.
-	deplibs="$deplibs $arg"
-	old_deplibs="$old_deplibs $arg"
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
 	continue
 	;;
 
       *.la)
 	# A libtool-controlled library.
 
+	func_resolve_sysroot "$arg"
 	if test "$prev" = dlfiles; then
 	  # This library was specified with -dlopen.
-	  dlfiles="$dlfiles $arg"
+	  func_append dlfiles " $func_resolve_sysroot_result"
 	  prev=
 	elif test "$prev" = dlprefiles; then
 	  # The library was specified with -dlpreopen.
-	  dlprefiles="$dlprefiles $arg"
+	  func_append dlprefiles " $func_resolve_sysroot_result"
 	  prev=
 	else
-	  deplibs="$deplibs $arg"
+	  func_append deplibs " $func_resolve_sysroot_result"
 	fi
 	continue
 	;;
@@ -4925,7 +6001,7 @@ func_mode_link ()
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
     else
       shlib_search_path=
     fi
@@ -4934,6 +6010,8 @@ func_mode_link ()
 
     func_dirname "$output" "/" ""
     output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
     func_mkdir_p "$output_objdir"
 
@@ -4954,12 +6032,12 @@ func_mode_link ()
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      if $opt_duplicate_deps ; then
+      if $opt_preserve_dup_deps ; then
 	case "$libs " in
-	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	esac
       fi
-      libs="$libs $deplib"
+      func_append libs " $deplib"
     done
 
     if test "$linkmode" = lib; then
@@ -4972,9 +6050,9 @@ func_mode_link ()
       if $opt_duplicate_compiler_generated_deps; then
 	for pre_post_dep in $predeps $postdeps; do
 	  case "$pre_post_deps " in
-	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
 	  esac
-	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	  func_append pre_post_deps " $pre_post_dep"
 	done
       fi
       pre_post_deps=
@@ -5033,10 +6111,7 @@ func_mode_link ()
 	case $pass in
 	dlopen) libs="$dlfiles" ;;
 	dlpreopen) libs="$dlprefiles" ;;
-	link)
-	  libs="$deplibs %DEPLIBS%"
-	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
-	  ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
 	esac
       fi
       if test "$linkmode,$pass" = "lib,dlpreopen"; then
@@ -5044,17 +6119,19 @@ func_mode_link ()
 	for lib in $dlprefiles; do
 	  # Ignore non-libtool-libs
 	  dependency_libs=
+	  func_resolve_sysroot "$lib"
 	  case $lib in
-	  *.la)	func_source "$lib" ;;
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
 	  esac
 
 	  # Collect preopened libtool deplibs, except any this library
 	  # has declared as weak libs
 	  for deplib in $dependency_libs; do
-            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
 	    case " $weak_libs " in
 	    *" $deplib_base "*) ;;
-	    *) deplibs="$deplibs $deplib" ;;
+	    *) func_append deplibs " $deplib" ;;
 	    esac
 	  done
 	done
@@ -5075,11 +6152,11 @@ func_mode_link ()
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
 	  else
-	    compiler_flags="$compiler_flags $deplib"
+	    func_append compiler_flags " $deplib"
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5164,7 +6241,7 @@ func_mode_link ()
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5177,7 +6254,8 @@ func_mode_link ()
 	    test "$pass" = conv && continue
 	    newdependency_libs="$deplib $newdependency_libs"
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  prog)
 	    if test "$pass" = conv; then
@@ -5191,7 +6269,8 @@ func_mode_link ()
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    fi
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  *)
 	    func_warning "\`-L' is ignored for archives/objects"
@@ -5202,17 +6281,21 @@ func_mode_link ()
 	-R*)
 	  if test "$pass" = link; then
 	    func_stripname '-R' '' "$deplib"
-	    dir=$func_stripname_result
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
 	    # Make sure the xrpath contains only unique directories.
 	    case "$xrpath " in
 	    *" $dir "*) ;;
-	    *) xrpath="$xrpath $dir" ;;
+	    *) func_append xrpath " $dir" ;;
 	    esac
 	  fi
 	  deplibs="$deplib $deplibs"
 	  continue
 	  ;;
-	*.la) lib="$deplib" ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
 	*.$libext)
 	  if test "$pass" = conv; then
 	    deplibs="$deplib $deplibs"
@@ -5230,7 +6313,7 @@ func_mode_link ()
 		match_pattern*)
 		  set dummy $deplibs_check_method; shift
 		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
 		    | $EGREP "$match_pattern_regex" > /dev/null; then
 		    valid_a_lib=yes
 		  fi
@@ -5240,15 +6323,15 @@ func_mode_link ()
 		;;
 	      esac
 	      if test "$valid_a_lib" != yes; then
-		$ECHO
+		echo
 		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
-		$ECHO "*** that it is just a static archive that I should not use here."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
 	      else
-		$ECHO
+		echo
 		$ECHO "*** Warning: Linking the shared library $output against the"
 		$ECHO "*** static library $deplib is not portable!"
 		deplibs="$deplib $deplibs"
@@ -5275,11 +6358,11 @@ func_mode_link ()
 	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
 	      # If there is no dlopen support or we're linking statically,
 	      # we need to preload.
-	      newdlprefiles="$newdlprefiles $deplib"
+	      func_append newdlprefiles " $deplib"
 	      compile_deplibs="$deplib $compile_deplibs"
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    else
-	      newdlfiles="$newdlfiles $deplib"
+	      func_append newdlfiles " $deplib"
 	    fi
 	  fi
 	  continue
@@ -5321,20 +6404,20 @@ func_mode_link ()
 
 	# Convert "-framework foo" to "foo.ltframework"
 	if test -n "$inherited_linker_flags"; then
-	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
 	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
 	    case " $new_inherited_linker_flags " in
 	      *" $tmp_inherited_linker_flag "*) ;;
-	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
 	    esac
 	  done
 	fi
-	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	if test "$linkmode,$pass" = "lib,link" ||
 	   test "$linkmode,$pass" = "prog,scan" ||
 	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
 	fi
 
 	if test "$pass" = conv; then
@@ -5345,30 +6428,36 @@ func_mode_link ()
 	      func_fatal_error "cannot find name of link library for \`$lib'"
 	    fi
 	    # It is a libtool convenience library, so add in its objects.
-	    convenience="$convenience $ladir/$objdir/$old_library"
-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
-	    tmp_libs=
-	    for deplib in $dependency_libs; do
-	      deplibs="$deplib $deplibs"
-	      if $opt_duplicate_deps ; then
-		case "$tmp_libs " in
-		*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-		esac
-	      fi
-	      tmp_libs="$tmp_libs $deplib"
-	    done
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
 	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
 	    func_fatal_error "\`$lib' is not a convenience library"
 	  fi
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    deplibs="$deplib $deplibs"
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done
 	  continue
 	fi # $pass = conv
 
 
 	# Get the name of the library we link against.
 	linklib=
-	for l in $old_library $library_names; do
-	  linklib="$l"
-	done
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
 	if test -z "$linklib"; then
 	  func_fatal_error "cannot find name of link library for \`$lib'"
 	fi
@@ -5385,9 +6474,9 @@ func_mode_link ()
 	    # statically, we need to preload.  We also need to preload any
 	    # dependent libraries so libltdl's deplib preloader doesn't
 	    # bomb out in the load deplibs phase.
-	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	    func_append dlprefiles " $lib $dependency_libs"
 	  else
-	    newdlfiles="$newdlfiles $lib"
+	    func_append newdlfiles " $lib"
 	  fi
 	  continue
 	fi # $pass = dlopen
@@ -5409,14 +6498,14 @@ func_mode_link ()
 
 	# Find the relevant object directory and library name.
 	if test "X$installed" = Xyes; then
-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
 	    func_warning "library \`$lib' was moved."
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    libdir="$abs_ladir"
 	  else
-	    dir="$libdir"
-	    absdir="$libdir"
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
 	  fi
 	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
 	else
@@ -5424,12 +6513,12 @@ func_mode_link ()
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  else
 	    dir="$ladir/$objdir"
 	    absdir="$abs_ladir/$objdir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  fi
 	fi # $installed = yes
 	func_stripname 'lib' '.la' "$laname"
@@ -5440,20 +6529,46 @@ func_mode_link ()
 	  if test -z "$libdir" && test "$linkmode" = prog; then
 	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
 	  fi
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    newdlprefiles="$newdlprefiles $dir/$old_library"
-	    # Keep a list of preopened convenience libraries to check
-	    # that they are being used correctly in the link pass.
-	    test -z "$libdir" && \
-		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
-	  elif test -n "$dlname"; then
-	    newdlprefiles="$newdlprefiles $dir/$dlname"
-	  else
-	    newdlprefiles="$newdlprefiles $dir/$linklib"
-	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
 	fi # $pass = dlpreopen
 
 	if test -z "$libdir"; then
@@ -5471,7 +6586,7 @@ func_mode_link ()
 
 
 	if test "$linkmode" = prog && test "$pass" != link; then
-	  newlib_search_path="$newlib_search_path $ladir"
+	  func_append newlib_search_path " $ladir"
 	  deplibs="$lib $deplibs"
 
 	  linkalldeplibs=no
@@ -5484,7 +6599,8 @@ func_mode_link ()
 	  for deplib in $dependency_libs; do
 	    case $deplib in
 	    -L*) func_stripname '-L' '' "$deplib"
-	         newlib_search_path="$newlib_search_path $func_stripname_result"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
 		 ;;
 	    esac
 	    # Need to link against all dependency_libs?
@@ -5495,12 +6611,12 @@ func_mode_link ()
 	      # or/and link against static libraries
 	      newdependency_libs="$deplib $newdependency_libs"
 	    fi
-	    if $opt_duplicate_deps ; then
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $deplib"
 	  done # for deplib
 	  continue
 	fi # $linkmode = prog...
@@ -5515,7 +6631,7 @@ func_mode_link ()
 	      # Make sure the rpath contains only unique directories.
 	      case "$temp_rpath:" in
 	      *"$absdir:"*) ;;
-	      *) temp_rpath="$temp_rpath$absdir:" ;;
+	      *) func_append temp_rpath "$absdir:" ;;
 	      esac
 	    fi
 
@@ -5527,7 +6643,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5536,7 +6652,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5561,12 +6677,12 @@ func_mode_link ()
 	  case $host in
 	  *cygwin* | *mingw* | *cegcc*)
 	      # No point in relinking DLLs because paths are not encoded
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=no
 	    ;;
 	  *)
 	    if test "$installed" = no; then
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=yes
 	    fi
 	    ;;
@@ -5583,7 +6699,7 @@ func_mode_link ()
 	    fi
 	  done
 	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
-	    $ECHO
+	    echo
 	    if test "$linkmode" = prog; then
 	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
 	    else
@@ -5601,7 +6717,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5610,7 +6726,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5664,7 +6780,7 @@ func_mode_link ()
 	    linklib=$newlib
 	  fi # test -n "$old_archive_from_expsyms_cmds"
 
-	  if test "$linkmode" = prog || test "$mode" != relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5686,9 +6802,9 @@ func_mode_link ()
 		      if test "X$dlopenmodule" != "X$lib"; then
 			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
 			if test -z "$old_library" ; then
-			  $ECHO
-			  $ECHO "*** And there doesn't seem to be a static archive available"
-			  $ECHO "*** The link will probably fail, sorry"
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
 			else
 			  add="$dir/$old_library"
 			fi
@@ -5720,7 +6836,7 @@ func_mode_link ()
 		if test -n "$inst_prefix_dir"; then
 		  case $libdir in
 		    [\\/]*)
-		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
 		      ;;
 		  esac
 		fi
@@ -5742,7 +6858,7 @@ func_mode_link ()
 	    if test -n "$add_shlibpath"; then
 	      case :$compile_shlibpath: in
 	      *":$add_shlibpath:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
 	      esac
 	    fi
 	    if test "$linkmode" = prog; then
@@ -5756,13 +6872,13 @@ func_mode_link ()
 		 test "$hardcode_shlibpath_var" = yes; then
 		case :$finalize_shlibpath: in
 		*":$libdir:"*) ;;
-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
 		esac
 	      fi
 	    fi
 	  fi
 
-	  if test "$linkmode" = prog || test "$mode" = relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5776,7 +6892,7 @@ func_mode_link ()
 	    elif test "$hardcode_shlibpath_var" = yes; then
 	      case :$finalize_shlibpath: in
 	      *":$libdir:"*) ;;
-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
 	      esac
 	      add="-l$name"
 	    elif test "$hardcode_automatic" = yes; then
@@ -5793,7 +6909,7 @@ func_mode_link ()
 	      if test -n "$inst_prefix_dir"; then
 		case $libdir in
 		  [\\/]*)
-		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
 		    ;;
 		esac
 	      fi
@@ -5828,21 +6944,21 @@ func_mode_link ()
 
 	    # Just print a warning and add the library to dependency_libs so
 	    # that the program can be linked against the static library.
-	    $ECHO
+	    echo
 	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
-	    $ECHO "*** I have the capability to make that library automatically link in when"
-	    $ECHO "*** you link to this library.  But I can only do this if you have a"
-	    $ECHO "*** shared version of the library, which you do not appear to have."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
 	    if test "$module" = yes; then
-	      $ECHO "*** But as you try to build a module library, libtool will still create "
-	      $ECHO "*** a static module, that should work as long as the dlopening application"
-	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
 	      if test -z "$global_symbol_pipe"; then
-		$ECHO
-		$ECHO "*** However, this would only work if libtool was able to extract symbol"
-		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-		$ECHO "*** not find such a program.  So, this module is probably useless."
-		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	      fi
 	      if test "$build_old_libs" = no; then
 		build_libtool_libs=module
@@ -5870,27 +6986,33 @@ func_mode_link ()
 	           temp_xrpath=$func_stripname_result
 		   case " $xrpath " in
 		   *" $temp_xrpath "*) ;;
-		   *) xrpath="$xrpath $temp_xrpath";;
+		   *) func_append xrpath " $temp_xrpath";;
 		   esac;;
-	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      *) func_append temp_deplibs " $libdir";;
 	      esac
 	    done
 	    dependency_libs="$temp_deplibs"
 	  fi
 
-	  newlib_search_path="$newlib_search_path $absdir"
+	  func_append newlib_search_path " $absdir"
 	  # Link against this library
 	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
 	  # ... and its dependency_libs
 	  tmp_libs=
 	  for deplib in $dependency_libs; do
 	    newdependency_libs="$deplib $newdependency_libs"
-	    if $opt_duplicate_deps ; then
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $func_resolve_sysroot_result"
 	  done
 
 	  if test "$link_all_deplibs" != no; then
@@ -5900,8 +7022,10 @@ func_mode_link ()
 	      case $deplib in
 	      -L*) path="$deplib" ;;
 	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
 	        func_dirname "$deplib" "" "."
-		dir="$func_dirname_result"
+		dir=$func_dirname_result
 		# We need an absolute path.
 		case $dir in
 		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
@@ -5928,8 +7052,8 @@ func_mode_link ()
                       if test -z "$darwin_install_name"; then
                           darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
 		      path=
 		    fi
 		  fi
@@ -5962,7 +7086,7 @@ func_mode_link ()
 	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
 	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
 	else
-	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	fi
       fi
       dependency_libs="$newdependency_libs"
@@ -5979,7 +7103,7 @@ func_mode_link ()
 	  for dir in $newlib_search_path; do
 	    case "$lib_search_path " in
 	    *" $dir "*) ;;
-	    *) lib_search_path="$lib_search_path $dir" ;;
+	    *) func_append lib_search_path " $dir" ;;
 	    esac
 	  done
 	  newlib_search_path=
@@ -6037,10 +7161,10 @@ func_mode_link ()
 	    -L*)
 	      case " $tmp_libs " in
 	      *" $deplib "*) ;;
-	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      *) func_append tmp_libs " $deplib" ;;
 	      esac
 	      ;;
-	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    *) func_append tmp_libs " $deplib" ;;
 	    esac
 	  done
 	  eval $var=\"$tmp_libs\"
@@ -6056,7 +7180,7 @@ func_mode_link ()
 	  ;;
 	esac
 	if test -n "$i" ; then
-	  tmp_libs="$tmp_libs $i"
+	  func_append tmp_libs " $i"
 	fi
       done
       dependency_libs=$tmp_libs
@@ -6097,7 +7221,7 @@ func_mode_link ()
       # Now set the variables for building old libraries.
       build_libtool_libs=no
       oldlibs="$output"
-      objs="$objs$old_deplibs"
+      func_append objs "$old_deplibs"
       ;;
 
     lib)
@@ -6130,10 +7254,10 @@ func_mode_link ()
 	if test "$deplibs_check_method" != pass_all; then
 	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
 	else
-	  $ECHO
+	  echo
 	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
 	  $ECHO "*** objects $objs is not portable!"
-	  libobjs="$libobjs $objs"
+	  func_append libobjs " $objs"
 	fi
       fi
 
@@ -6198,7 +7322,7 @@ func_mode_link ()
 	    age="$number_minor"
 	    revision="$number_revision"
 	    ;;
-	  freebsd-aout|freebsd-elf|sunos)
+	  freebsd-aout|freebsd-elf|qnx|sunos)
 	    current="$number_major"
 	    revision="$number_minor"
 	    age="0"
@@ -6210,9 +7334,6 @@ func_mode_link ()
 	    revision="$number_minor"
 	    lt_irix_increment=no
 	    ;;
-	  *)
-	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
-	    ;;
 	  esac
 	  ;;
 	no)
@@ -6334,7 +7455,7 @@ func_mode_link ()
 	  done
 
 	  # Make executables depend on our current version.
-	  verstring="$verstring:${current}.0"
+	  func_append verstring ":${current}.0"
 	  ;;
 
 	qnx)
@@ -6402,10 +7523,10 @@ func_mode_link ()
       fi
 
       func_generate_dlsyms "$libname" "$libname" "yes"
-      libobjs="$libobjs $symfileobj"
+      func_append libobjs " $symfileobj"
       test "X$libobjs" = "X " && libobjs=
 
-      if test "$mode" != relink; then
+      if test "$opt_mode" != relink; then
 	# Remove our outputs, but don't remove object files since they
 	# may have been created when compiling PIC objects.
 	removelist=
@@ -6421,7 +7542,7 @@ func_mode_link ()
 		   continue
 		 fi
 	       fi
-	       removelist="$removelist $p"
+	       func_append removelist " $p"
 	       ;;
 	    *) ;;
 	  esac
@@ -6432,27 +7553,28 @@ func_mode_link ()
 
       # Now set the variables for building old libraries.
       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+	func_append oldlibs " $output_objdir/$libname.$libext"
 
 	# Transform .lo files to .o files.
-	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
       #for path in $notinst_path; do
-      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
-      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
-      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
       #done
 
       if test -n "$xrpath"; then
 	# If the user specified any rpath flags, then add them.
 	temp_xrpath=
 	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
 	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -6466,7 +7588,7 @@ func_mode_link ()
       for lib in $old_dlfiles; do
 	case " $dlprefiles $dlfiles " in
 	*" $lib "*) ;;
-	*) dlfiles="$dlfiles $lib" ;;
+	*) func_append dlfiles " $lib" ;;
 	esac
       done
 
@@ -6476,19 +7598,19 @@ func_mode_link ()
       for lib in $old_dlprefiles; do
 	case "$dlprefiles " in
 	*" $lib "*) ;;
-	*) dlprefiles="$dlprefiles $lib" ;;
+	*) func_append dlprefiles " $lib" ;;
 	esac
       done
 
       if test "$build_libtool_libs" = yes; then
 	if test -n "$rpath"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # these systems don't actually have a c library (as such)!
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C library is in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    ;;
 	  *-*-netbsd*)
 	    # Don't link with libc until the a.out ld.so is fixed.
@@ -6505,7 +7627,7 @@ func_mode_link ()
 	  *)
 	    # Add libc to deplibs on all other systems if necessary.
 	    if test "$build_libtool_need_lc" = "yes"; then
-	      deplibs="$deplibs -lc"
+	      func_append deplibs " -lc"
 	    fi
 	    ;;
 	  esac
@@ -6554,7 +7676,7 @@ EOF
 		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		  case " $predeps $postdeps " in
 		  *" $i "*)
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		    i=""
 		    ;;
 		  esac
@@ -6565,21 +7687,21 @@ EOF
 		  set dummy $deplib_matches; shift
 		  deplib_match=$1
 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		  else
 		    droppeddeps=yes
-		    $ECHO
+		    echo
 		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		    $ECHO "*** I have the capability to make that library automatically link in when"
-		    $ECHO "*** you link to this library.  But I can only do this if you have a"
-		    $ECHO "*** shared version of the library, which I believe you do not have"
-		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
-		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
 		  fi
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6597,7 +7719,7 @@ EOF
 		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		    case " $predeps $postdeps " in
 		    *" $i "*)
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		      i=""
 		      ;;
 		    esac
@@ -6608,29 +7730,29 @@ EOF
 		    set dummy $deplib_matches; shift
 		    deplib_match=$1
 		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		    else
 		      droppeddeps=yes
-		      $ECHO
+		      echo
 		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		      $ECHO "*** I have the capability to make that library automatically link in when"
-		      $ECHO "*** you link to this library.  But I can only do this if you have a"
-		      $ECHO "*** shared version of the library, which you do not appear to have"
-		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
-		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
 		    fi
 		  fi
 		else
 		  droppeddeps=yes
-		  $ECHO
+		  echo
 		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
-		  $ECHO "*** make it link in!  You will probably need to install it or some"
-		  $ECHO "*** library that it depends on before this library will be fully"
-		  $ECHO "*** functional.  Installing it before continuing would be even better."
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6647,15 +7769,27 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
 	      fi
 	      if test -n "$a_deplib" ; then
 		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
 		  for potent_lib in $potential_libs; do
 		      # Follow soft links.
 		      if ls -lLd "$potent_lib" 2>/dev/null |
@@ -6672,13 +7806,13 @@ EOF
 			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
 			case $potliblink in
 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
 			esac
 		      done
 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
 			 $SED -e 10q |
 			 $EGREP "$file_magic_regex" > /dev/null; then
-			newdeplibs="$newdeplibs $a_deplib"
+			func_append newdeplibs " $a_deplib"
 			a_deplib=""
 			break 2
 		      fi
@@ -6687,12 +7821,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
 		else
@@ -6703,7 +7837,7 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
@@ -6719,7 +7853,7 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
@@ -6730,9 +7864,9 @@ EOF
 		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
 		  for potent_lib in $potential_libs; do
 		    potlib="$potent_lib" # see symlink-check above in file_magic test
-		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
 		       $EGREP "$match_pattern_regex" > /dev/null; then
-		      newdeplibs="$newdeplibs $a_deplib"
+		      func_append newdeplibs " $a_deplib"
 		      a_deplib=""
 		      break 2
 		    fi
@@ -6741,12 +7875,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
 		else
@@ -6757,32 +7891,32 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
 	  ;;
 	none | unknown | *)
 	  newdeplibs=""
-	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
-	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
 	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 	    for i in $predeps $postdeps ; do
 	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
 	    done
 	  fi
-	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
-	     $GREP . >/dev/null; then
-	    $ECHO
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
 	    if test "X$deplibs_check_method" = "Xnone"; then
-	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
 	    else
-	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
 	    fi
-	    $ECHO "*** All declared inter-library dependencies are being dropped."
+	    echo "*** All declared inter-library dependencies are being dropped."
 	    droppeddeps=yes
-	  fi
+	    ;;
+	  esac
 	  ;;
 	esac
 	versuffix=$versuffix_save
@@ -6794,23 +7928,23 @@ EOF
 	case $host in
 	*-*-rhapsody* | *-*-darwin1.[012])
 	  # On Rhapsody replace the C library with the System framework
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
 	  ;;
 	esac
 
 	if test "$droppeddeps" = yes; then
 	  if test "$module" = yes; then
-	    $ECHO
-	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
 	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
-	    $ECHO "*** a static module, that should work as long as the dlopening"
-	    $ECHO "*** application is linked with the -dlopen flag."
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
 	    if test -z "$global_symbol_pipe"; then
-	      $ECHO
-	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
-	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      $ECHO "*** not find such a program.  So, this module is probably useless."
-	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	    fi
 	    if test "$build_old_libs" = no; then
 	      oldlibs="$output_objdir/$libname.$libext"
@@ -6820,16 +7954,16 @@ EOF
 	      build_libtool_libs=no
 	    fi
 	  else
-	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
-	    $ECHO "*** automatically added whenever a program is linked with this library"
-	    $ECHO "*** or is declared to -dlopen it."
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
 
 	    if test "$allow_undefined" = no; then
-	      $ECHO
-	      $ECHO "*** Since this library must not contain undefined symbols,"
-	      $ECHO "*** because either the platform does not support them or"
-	      $ECHO "*** it was explicitly requested with -no-undefined,"
-	      $ECHO "*** libtool will only create a static version of it."
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
 	      if test "$build_old_libs" = no; then
 		oldlibs="$output_objdir/$libname.$libext"
 		build_libtool_libs=module
@@ -6846,9 +7980,9 @@ EOF
       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
       case $host in
 	*-*-darwin*)
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	  ;;
       esac
 
@@ -6861,7 +7995,7 @@ EOF
 	*)
 	  case " $deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -6871,10 +8005,10 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       deplibs="$new_libs"
@@ -6891,10 +8025,12 @@ EOF
 	  hardcode_libdirs=
 	  dep_rpath=
 	  rpath="$finalize_rpath"
-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
 	  for libdir in $rpath; do
 	    if test -n "$hardcode_libdir_flag_spec"; then
 	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
 		if test -z "$hardcode_libdirs"; then
 		  hardcode_libdirs="$libdir"
 		else
@@ -6903,18 +8039,18 @@ EOF
 		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		    ;;
 		  *)
-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		    ;;
 		  esac
 		fi
 	      else
 		eval flag=\"$hardcode_libdir_flag_spec\"
-		dep_rpath="$dep_rpath $flag"
+		func_append dep_rpath " $flag"
 	      fi
 	    elif test -n "$runpath_var"; then
 	      case "$perm_rpath " in
 	      *" $libdir "*) ;;
-	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      *) func_apped perm_rpath " $libdir" ;;
 	      esac
 	    fi
 	  done
@@ -6932,7 +8068,7 @@ EOF
 	    # We should set the runpath_var.
 	    rpath=
 	    for dir in $perm_rpath; do
-	      rpath="$rpath$dir:"
+	      func_append rpath "$dir:"
 	    done
 	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
 	  fi
@@ -6940,7 +8076,7 @@ EOF
 	fi
 
 	shlibpath="$finalize_shlibpath"
-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
 	if test -n "$shlibpath"; then
 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
 	fi
@@ -6966,18 +8102,18 @@ EOF
 	linknames=
 	for link
 	do
-	  linknames="$linknames $link"
+	  func_append linknames " $link"
 	done
 
 	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	test "X$libobjs" = "X " && libobjs=
 
 	delfiles=
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
 	  export_symbols="$output_objdir/$libname.uexp"
-	  delfiles="$delfiles $export_symbols"
+	  func_append delfiles " $export_symbols"
 	fi
 
 	orig_export_symbols=
@@ -7008,13 +8144,45 @@ EOF
 	    $opt_dry_run || $RM $export_symbols
 	    cmds=$export_symbols_cmds
 	    save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
+	    for cmd1 in $cmds; do
 	      IFS="$save_ifs"
-	      eval cmd=\"$cmd\"
-	      func_len " $cmd"
-	      len=$func_len_result
-	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
 		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
 		skipped_export=false
 	      else
 		# The command line is too long to execute in one step.
@@ -7036,7 +8204,7 @@ EOF
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  tmp_export_symbols="$export_symbols"
 	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	fi
 
 	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
@@ -7048,7 +8216,7 @@ EOF
 	  # global variables. join(1) would be nice here, but unfortunately
 	  # isn't a blessed tool.
 	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	  export_symbols=$output_objdir/$libname.def
 	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	fi
@@ -7058,7 +8226,7 @@ EOF
 	  case " $convenience " in
 	  *" $test_deplib "*) ;;
 	  *)
-	    tmp_deplibs="$tmp_deplibs $test_deplib"
+	    func_append tmp_deplibs " $test_deplib"
 	    ;;
 	  esac
 	done
@@ -7078,21 +8246,21 @@ EOF
 	    test "X$libobjs" = "X " && libobjs=
 	  else
 	    gentop="$output_objdir/${outputname}x"
-	    generated="$generated $gentop"
+	    func_append generated " $gentop"
 
 	    func_extract_archives $gentop $convenience
-	    libobjs="$libobjs $func_extract_archives_result"
+	    func_append libobjs " $func_extract_archives_result"
 	    test "X$libobjs" = "X " && libobjs=
 	  fi
 	fi
 
 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
 	  eval flag=\"$thread_safe_flag_spec\"
-	  linker_flags="$linker_flags $flag"
+	  func_append linker_flags " $flag"
 	fi
 
 	# Make a backup of the uninstalled library when relinking
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
 	fi
 
@@ -7137,7 +8305,8 @@ EOF
 	    save_libobjs=$libobjs
 	  fi
 	  save_output=$output
-	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+	  func_basename "$output"
+	  output_la=$func_basename_result
 
 	  # Clear the reloadable object creation command queue and
 	  # initialize k to one.
@@ -7150,13 +8319,16 @@ EOF
 	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
 	    output=${output_objdir}/${output_la}.lnkscript
 	    func_verbose "creating GNU ld script: $output"
-	    $ECHO 'INPUT (' > $output
+	    echo 'INPUT (' > $output
 	    for obj in $save_libobjs
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    $ECHO ')' >> $output
-	    delfiles="$delfiles $output"
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
 	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
 	    output=${output_objdir}/${output_la}.lnk
 	    func_verbose "creating linker input file list: $output"
@@ -7170,10 +8342,12 @@ EOF
 	    fi
 	    for obj
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    delfiles="$delfiles $output"
-	    output=$firstobj\"$file_list_spec$output\"
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
 	  else
 	    if test -n "$save_libobjs"; then
 	      func_verbose "creating reloadable object files..."
@@ -7197,17 +8371,19 @@ EOF
 		  # command to the queue.
 		  if test "$k" -eq 1 ; then
 		    # The first file doesn't have a previous command to add.
-		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
 		  else
 		    # All subsequent reloadable object files will link in
 		    # the last one created.
-		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
 		  fi
 		  last_robj=$output_objdir/$output_la-${k}.$objext
 		  func_arith $k + 1
 		  k=$func_arith_result
 		  output=$output_objdir/$output_la-${k}.$objext
-		  objlist=$obj
+		  objlist=" $obj"
 		  func_len " $last_robj"
 		  func_arith $len0 + $func_len_result
 		  len=$func_arith_result
@@ -7217,11 +8393,12 @@ EOF
 	      # reloadable object file.  All subsequent reloadable object
 	      # files will link in the last one created.
 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
 	      if test -n "$last_robj"; then
 	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
 	      fi
-	      delfiles="$delfiles $output"
+	      func_append delfiles " $output"
 
 	    else
 	      output=
@@ -7255,7 +8432,7 @@ EOF
 		lt_exit=$?
 
 		# Restore the uninstalled library and exit
-		if test "$mode" = relink; then
+		if test "$opt_mode" = relink; then
 		  ( cd "$output_objdir" && \
 		    $RM "${realname}T" && \
 		    $MV "${realname}U" "$realname" )
@@ -7276,7 +8453,7 @@ EOF
 	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	      tmp_export_symbols="$export_symbols"
 	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	    fi
 
 	    if test -n "$orig_export_symbols"; then
@@ -7288,7 +8465,7 @@ EOF
 	      # global variables. join(1) would be nice here, but unfortunately
 	      # isn't a blessed tool.
 	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	      export_symbols=$output_objdir/$libname.def
 	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	    fi
@@ -7329,10 +8506,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  libobjs="$libobjs $func_extract_archives_result"
+	  func_append libobjs " $func_extract_archives_result"
 	  test "X$libobjs" = "X " && libobjs=
 	fi
 
@@ -7348,7 +8525,7 @@ EOF
 	    lt_exit=$?
 
 	    # Restore the uninstalled library and exit
-	    if test "$mode" = relink; then
+	    if test "$opt_mode" = relink; then
 	      ( cd "$output_objdir" && \
 	        $RM "${realname}T" && \
 		$MV "${realname}U" "$realname" )
@@ -7360,7 +8537,7 @@ EOF
 	IFS="$save_ifs"
 
 	# Restore the uninstalled library and exit
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
 	  if test -n "$convenience"; then
@@ -7441,18 +8618,21 @@ EOF
       if test -n "$convenience"; then
 	if test -n "$whole_archive_flag_spec"; then
 	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
 	else
 	  gentop="$output_objdir/${obj}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $convenience
 	  reload_conv_objs="$reload_objs $func_extract_archives_result"
 	fi
       fi
 
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
 
       output="$obj"
       func_execute_cmds "$reload_cmds" 'exit $?'
@@ -7512,8 +8692,8 @@ EOF
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
 	# On Rhapsody replace the C library is the System framework
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
 	;;
       esac
 
@@ -7524,14 +8704,14 @@ EOF
 	if test "$tagname" = CXX ; then
 	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
 	    10.[0123])
-	      compile_command="$compile_command ${wl}-bind_at_load"
-	      finalize_command="$finalize_command ${wl}-bind_at_load"
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
 	    ;;
 	  esac
 	fi
 	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	;;
       esac
 
@@ -7545,7 +8725,7 @@ EOF
 	*)
 	  case " $compile_deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -7555,17 +8735,17 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       compile_deplibs="$new_libs"
 
 
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
 
       if test -n "$rpath$xrpath"; then
 	# If the user specified any rpath flags, then add them.
@@ -7573,7 +8753,7 @@ EOF
 	  # This is the magic to use -rpath.
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
       fi
@@ -7592,18 +8772,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  *) func_append perm_rpath " $libdir" ;;
 	  esac
 	fi
 	case $host in
@@ -7612,12 +8792,12 @@ EOF
 	  case :$dllsearchpath: in
 	  *":$libdir:"*) ;;
 	  ::) dllsearchpath=$libdir;;
-	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  *) func_append dllsearchpath ":$libdir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -7643,18 +8823,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$finalize_perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
 	  esac
 	fi
       done
@@ -7668,8 +8848,8 @@ EOF
 
       if test -n "$libobjs" && test "$build_old_libs" = yes; then
 	# Transform all the library objects into standard objects.
-	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
       func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
@@ -7681,15 +8861,15 @@ EOF
 
       wrappers_required=yes
       case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
       *cygwin* | *mingw* )
         if test "$build_libtool_libs" != yes; then
           wrappers_required=no
         fi
         ;;
-      *cegcc)
-        # Disable wrappers for cegcc, we are cross compiling anyway.
-        wrappers_required=no
-        ;;
       *)
         if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
           wrappers_required=no
@@ -7698,13 +8878,19 @@ EOF
       esac
       if test "$wrappers_required" = no; then
 	# Replace the output file specification.
-	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	link_command="$compile_command$compile_rpath"
 
 	# We have no uninstalled library dependencies, so finalize right now.
 	exit_status=0
 	func_show_eval "$link_command" 'exit_status=$?'
 
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	# Delete the generated files.
 	if test -f "$output_objdir/${outputname}S.${objext}"; then
 	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
@@ -7727,7 +8913,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7735,7 +8921,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $finalize_perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7745,11 +8931,18 @@ EOF
 	# We don't need to create a wrapper script.
 	link_command="$compile_var$compile_command$compile_rpath"
 	# Replace the output file specification.
-	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	# Delete the old output file.
 	$opt_dry_run || $RM $output
 	# Link the executable and exit
 	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	exit $EXIT_SUCCESS
       fi
 
@@ -7764,7 +8957,7 @@ EOF
 	if test "$fast_install" != no; then
 	  link_command="$finalize_var$compile_command$finalize_rpath"
 	  if test "$fast_install" = yes; then
-	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
 	  else
 	    # fast_install is set to needless
 	    relink_command=
@@ -7776,13 +8969,19 @@ EOF
       fi
 
       # Replace the output file specification.
-      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
 
       # Delete the old output files.
       $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
 
       func_show_eval "$link_command" 'exit $?'
 
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
       # Now create the wrapper script.
       func_verbose "creating $output"
 
@@ -7800,18 +8999,7 @@ EOF
 	  fi
 	done
 	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $ECHO for shipping.
-      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
-	case $progpath in
-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-	esac
-	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       fi
 
       # Only actually do things if not in dry run mode.
@@ -7891,7 +9079,7 @@ EOF
 	else
 	  oldobjs="$old_deplibs $non_pic_objects"
 	  if test "$preload" = yes && test -f "$symfileobj"; then
-	    oldobjs="$oldobjs $symfileobj"
+	    func_append oldobjs " $symfileobj"
 	  fi
 	fi
 	addlibs="$old_convenience"
@@ -7899,10 +9087,10 @@ EOF
 
       if test -n "$addlibs"; then
 	gentop="$output_objdir/${outputname}x"
-	generated="$generated $gentop"
+	func_append generated " $gentop"
 
 	func_extract_archives $gentop $addlibs
-	oldobjs="$oldobjs $func_extract_archives_result"
+	func_append oldobjs " $func_extract_archives_result"
       fi
 
       # Do each command in the archive commands.
@@ -7913,10 +9101,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  oldobjs="$oldobjs $func_extract_archives_result"
+	  func_append oldobjs " $func_extract_archives_result"
 	fi
 
 	# POSIX demands no paths to be encoded in archives.  We have
@@ -7932,9 +9120,9 @@ EOF
 	    done | sort | sort -uc >/dev/null 2>&1); then
 	  :
 	else
-	  $ECHO "copying selected object files to avoid basename conflicts..."
+	  echo "copying selected object files to avoid basename conflicts..."
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 	  func_mkdir_p "$gentop"
 	  save_oldobjs=$oldobjs
 	  oldobjs=
@@ -7958,9 +9146,9 @@ EOF
 		esac
 	      done
 	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-	      oldobjs="$oldobjs $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
 	      ;;
-	    *) oldobjs="$oldobjs $obj" ;;
+	    *) func_append oldobjs " $obj" ;;
 	    esac
 	  done
 	fi
@@ -7970,6 +9158,16 @@ EOF
 	len=$func_len_result
 	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
 	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
 	else
 	  # the command line is too long to link in one step, link in parts
 	  func_verbose "using piecewise archive linking..."
@@ -8043,7 +9241,7 @@ EOF
       done
       # Quote the link command for shipping.
       relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       if test "$hardcode_automatic" = yes ; then
 	relink_command=
       fi
@@ -8066,9 +9264,19 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$deplib' is not a valid libtool archive"
-		newdependency_libs="$newdependency_libs $libdir/$name"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
 		;;
-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
 	      esac
 	    done
 	    dependency_libs="$newdependency_libs"
@@ -8082,9 +9290,9 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlfiles="$newdlfiles $libdir/$name"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
-	      *) newdlfiles="$newdlfiles $lib" ;;
+	      *) func_append newdlfiles " $lib" ;;
 	      esac
 	    done
 	    dlfiles="$newdlfiles"
@@ -8101,7 +9309,7 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlprefiles="$newdlprefiles $libdir/$name"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
 	      esac
 	    done
@@ -8113,7 +9321,7 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlfiles="$newdlfiles $abs"
+	      func_append newdlfiles " $abs"
 	    done
 	    dlfiles="$newdlfiles"
 	    newdlprefiles=
@@ -8122,15 +9330,33 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlprefiles="$newdlprefiles $abs"
+	      func_append newdlprefiles " $abs"
 	    done
 	    dlprefiles="$newdlprefiles"
 	  fi
 	  $RM $output
 	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
 	  tdlname=$dlname
 	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
 	  esac
 	  $ECHO > $output "\
 # $outputname - a libtool library file
@@ -8189,7 +9415,7 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
-{ test "$mode" = link || test "$mode" = relink; } &&
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
     func_mode_link ${1+"$@"}
 
 
@@ -8209,9 +9435,9 @@ func_mode_uninstall ()
     for arg
     do
       case $arg in
-      -f) RM="$RM $arg"; rmforce=yes ;;
-      -*) RM="$RM $arg" ;;
-      *) files="$files $arg" ;;
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
       esac
     done
 
@@ -8220,24 +9446,23 @@ func_mode_uninstall ()
 
     rmdirs=
 
-    origobjdir="$objdir"
     for file in $files; do
       func_dirname "$file" "" "."
       dir="$func_dirname_result"
       if test "X$dir" = X.; then
-	objdir="$origobjdir"
+	odir="$objdir"
       else
-	objdir="$dir/$origobjdir"
+	odir="$dir/$objdir"
       fi
       func_basename "$file"
       name="$func_basename_result"
-      test "$mode" = uninstall && objdir="$dir"
+      test "$opt_mode" = uninstall && odir="$dir"
 
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
 	case " $rmdirs " in
-	  *" $objdir "*) ;;
-	  *) rmdirs="$rmdirs $objdir" ;;
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
 	esac
       fi
 
@@ -8263,18 +9488,17 @@ func_mode_uninstall ()
 
 	  # Delete the libtool libraries and symlinks.
 	  for n in $library_names; do
-	    rmfiles="$rmfiles $objdir/$n"
+	    func_append rmfiles " $odir/$n"
 	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-	  case "$mode" in
+	  case "$opt_mode" in
 	  clean)
-	    case "  $library_names " in
-	    # "  " in the beginning catches empty $dlname
+	    case " $library_names " in
 	    *" $dlname "*) ;;
-	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
 	    esac
-	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
 	    ;;
 	  uninstall)
 	    if test -n "$library_names"; then
@@ -8302,19 +9526,19 @@ func_mode_uninstall ()
 	  # Add PIC object to the list of files to remove.
 	  if test -n "$pic_object" &&
 	     test "$pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$pic_object"
+	    func_append rmfiles " $dir/$pic_object"
 	  fi
 
 	  # Add non-PIC object to the list of files to remove.
 	  if test -n "$non_pic_object" &&
 	     test "$non_pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$non_pic_object"
+	    func_append rmfiles " $dir/$non_pic_object"
 	  fi
 	fi
 	;;
 
       *)
-	if test "$mode" = clean ; then
+	if test "$opt_mode" = clean ; then
 	  noexename=$name
 	  case $file in
 	  *.exe)
@@ -8324,7 +9548,7 @@ func_mode_uninstall ()
 	    noexename=$func_stripname_result
 	    # $file with .exe has already been added to rmfiles,
 	    # add $file without .exe
-	    rmfiles="$rmfiles $file"
+	    func_append rmfiles " $file"
 	    ;;
 	  esac
 	  # Do a test to see if this is a libtool program.
@@ -8333,7 +9557,7 @@ func_mode_uninstall ()
 	      func_ltwrapper_scriptname "$file"
 	      relink_command=
 	      func_source $func_ltwrapper_scriptname_result
-	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
 	    else
 	      relink_command=
 	      func_source $dir/$noexename
@@ -8341,12 +9565,12 @@ func_mode_uninstall ()
 
 	    # note $name still contains .exe if it was in $file originally
 	    # as does the version of $file that was added into $rmfiles
-	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
 	    if test "$fast_install" = yes && test -n "$relink_command"; then
-	      rmfiles="$rmfiles $objdir/lt-$name"
+	      func_append rmfiles " $odir/lt-$name"
 	    fi
 	    if test "X$noexename" != "X$name" ; then
-	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	      func_append rmfiles " $odir/lt-${noexename}.c"
 	    fi
 	  fi
 	fi
@@ -8354,7 +9578,6 @@ func_mode_uninstall ()
       esac
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
-    objdir="$origobjdir"
 
     # Try to remove the ${objdir}s in the directories where we deleted files
     for dir in $rmdirs; do
@@ -8366,16 +9589,16 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
     func_mode_uninstall ${1+"$@"}
 
-test -z "$mode" && {
+test -z "$opt_mode" && {
   help="$generic_help"
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$mode'"
+  func_fatal_help "invalid operation mode \`$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
diff --git a/libspatialite/mainpage.doxy b/libspatialite/mainpage.doxy
new file mode 100644
index 0000000..7ee1114
--- /dev/null
+++ b/libspatialite/mainpage.doxy
@@ -0,0 +1,140 @@
+/** \mainpage Introduction
+
+\section Generalities
+
+SpatiaLite is an open source library intended to extend basic SQLite
+core in order to support full fledged Spatial SQL capabilities.
+
+\n\n SQLite is intrinsically simple and lighweight:
+- a single ligthweight library implementing the full SQL engine.
+- standard SQL implementation: almost complete SQL-92.
+- no complex client/server architecture.
+- a whole database simply corresponds to a single monolithic file 
+  [no size limits].
+- any DB-file can be safely exchanged across different platforms, because
+  the internal architecture is universally portable.
+- no installation, no configuration.
+
+SpatiaLite is smoothly integrated into SQLite so to deploy a
+complete and powerfull Spatial DBMS [mostly OGC-SFS compliant].
+\n All this fully preserving the lightness and simplicity typical
+of SQLite itself.
+\n That's not all: SpatiaLite supports direct SQL access to several
+commonly used \e external \e datasources, this including:
+- ESRI \b Shapefiles.
+- \b DBF Archive Files.
+- \b TXT/CSV structured text files.
+- \b Spreadsheets [.xls format].
+
+And SpatiaLite actively supports many alternative standard Geometry notations:
+- \b WKT [Well Known Text] and \b WKB [Well Known Binary].
+- PostGIS own \b EWKT and \b EWKB [Extended WKT / WKB].
+- \b GML [Geography Markup Language, both v2 and v3].
+- \b KML [Keyhole Markup Language, used by Google Maps and Google Earth].
+- \b GeoJSON [Geometry Java Script Object Notation].
+- \b SVG [Scalable Vector Graphics].
+
+Conclusion: using SQLite + SpatiaLite you can deploy an
+alternative Spatial DBMS roughly equivalent to PostgreSQL + PostGIS.
+\n The main difference between them isn't in powerness, but mainly
+relies on architecture:
+- PostgrSQL + PostGIS fully supports a client/server architecture.
+  \n This is well fit for complex and sophisticated Spatial Data 
+  infrastructures, but surely implies a certain degree of complexity.
+- SQLite + SpatiaLite supports a much more simplest personal architecture.
+  \n This is most appropriate for desktop, stand-alone, personal activities.
+
+Choosing the one or the other simply depends on your very specific
+requirements:
+- no one is better than the other one:
+  they are simply optimized for different envoronments.
+- both them can roughly support the same Spatial Data processing capabilities.
+- feel free to choose the best fit one accordingly to your effective goals.
+
+\section Building
+
+Building and installing the SpatiaLite library is straightforward:
+\verbatim
+./configure
+make
+make install
+\endverbatim
+
+Please note: SpatiaLite depends on the following open source libraries:
+- GNU \b ICONV
+  \n locale charset encodings support
+- \b GEOS
+  \n Geometry engine
+- \b PROJ.4
+  \n Spatial Reference System handling [coordinate re-projection]
+- \b FreeXL
+  \n Spreadsheet input support [.xls format]
+
+The library comes in two different flavors:
+- \b libspatialite
+  \n standard, canonical library: the best and safest way to deploy SpatiaLite.
+  \n this obviously depends on \e external \b libsqlite: thus ensuring full
+  coherence between libraries.
+  \n warmly reccomended, mostly on Unix-like systems.\n
+- \b libspatialite-amalgamation
+  \n The whole library is \e amalgamated into a single monolithic file
+  and includes an \e internal \e private \e copy of \b libsqlite.
+  \n Using the \e amalgamated library may strongly simplify any following
+  installation process, and nicely supports \b static \b linkage.
+  \n Anyway, you can safely apply the \e amalgamated approch only to 
+  self-standing apps.
+  \n Attempting to use the \e amalgated library on complex frameworks or on 
+  data connectors / language bindings 
+  \n may easily cause serious conflicts.
+
+\section Deployment
+
+You can deploy SpatiaLite in two alternative ways:
+- you can load the SpatiaLite library as a \b dynamic \b extension to SQLite.
+  \n This allows SQLite to support SQL Spatial Data [Geometry] and SQL 
+  Spatial Functions.
+  \n Theorically, any generic tool or language connector supporting SQLite
+  can support this \e extension mechanism;
+  \n sadly enough, sometimes this feature is intentionally disabled:
+  I'm sorry for you if this is your specific case.
+  \n\n How to load SpatiaLite as a dynamic extension to SQLite:
+\verbatim
+SELECT load_extension('spatialite_dynamic_library_name');
+\endverbatim
+  \n
+- you can directly link the SpatiaLite library to any application of your own.
+  \n This allows you to ship a complete, powerfull, self-contained Spatial 
+  SQL engine directly supporting your app.
+  \n And such Spatial SQL engine doesn't requires any installation or 
+  configuration at all.
+  \n That's not all: linking the SpatiaLite to your own C/C++ code you aren't
+  simply constrained to use SQL: 
+  \n adopting this approach you can directly access the complete C API.
+  \n\n Linking SpatiaLite to your own code is usually simple:
+\verbatim
+gcc my_program.c -o my_program -lspatialite
+\endverbatim
+  \n On some systems you may have to provide a slightly more complex arrangement:
+\verbatim
+gcc -I/usr/local/include my_program.c -o my_program \
+  -L/usr/local/lib -lpsatialite -lsqlite -lgeos_c -lgeos \
+  -lproj -lfreexl -liconv -lm -lstdc++
+\endverbatim
+  \n SpatiaLite also provides pkg-config support, so you can also do
+\verbatim
+gcc -I/usr/local/include my_program.c -o my_program \
+  `pkg-config --libs spatialite`
+\endverbatim
+
+
+\section License
+
+SpatiaLite is licensed under the MPL tri-license terms: you are free to choose 
+the best-fit license between:
+ - the MPL 1.1
+ - the GPL v2.0 or any subsequent version
+ - the LGPL v2.1  or any subsequent version
+
+Enjoy, and happy coding
+*/
+
diff --git a/libspatialite/makefile.vc b/libspatialite/makefile.vc
index 0792ad0..7114adc 100644
--- a/libspatialite/makefile.vc
+++ b/libspatialite/makefile.vc
@@ -11,6 +11,7 @@ LIBOBJ = src\gaiaaux\gg_sqlaux.obj src\gaiaaux\gg_utf8.obj \
 	src\gaiageo\gg_relations.obj src\gaiageo\gg_shape.obj \
 	src\gaiageo\gg_transform.obj src\gaiageo\gg_wkb.obj \
 	src\gaiageo\gg_wkt.obj src\spatialite\mbrcache.obj \
+	src\shapefiles\shapefiles.obj \
 	src\spatialite\spatialite.obj src\spatialite\virtualdbf.obj \
 	src\spatialite\virtualfdo.obj src\spatialite\virtualnetwork.obj \
 	src\spatialite\virtualshape.obj src\srsinit\srs_init.obj \
@@ -30,11 +31,12 @@ spatialite.lib:	$(LIBOBJ)
 
 $(SPATIALITE_DLL):	spatialite_i.lib
 
-spatialite_i.lib:	$(LIBOBJ)
-	link /debug /dll /def:libspatialite.def /out:$(SPATIALITE_DLL) \
+spatialite_i.lib:     $(LIBOBJ)
+	link /debug /dll /out:$(SPATIALITE_DLL) \
 		/implib:spatialite_i.lib $(LIBOBJ) \
 		C:\OSGeo4W\lib\proj_i.lib C:\OSGeo4W\lib\geos_c_i.lib \
-		C:\OSGeo4w\lib\iconv.lib C:\OSGeo4W\lib\sqlite_i.lib
+		C:\OSGeo4w\lib\freexl.lib C:\OSGeo4w\lib\iconv.lib \
+		C:\OSGeo4W\lib\sqlite_i.lib
 	if exist $(SPATIALITE_DLL).manifest mt -manifest \
 		$(SPATIALITE_DLL).manifest -outputresource:$(SPATIALITE_DLL);2
 		
diff --git a/libspatialite/nmake.opt b/libspatialite/nmake.opt
index 85ce8ac..36afd4a 100644
--- a/libspatialite/nmake.opt
+++ b/libspatialite/nmake.opt
@@ -4,8 +4,9 @@ INSTDIR=C:\OSGeo4W
 # Uncomment the first for an optimized build, or the second for debug.
 OPTFLAGS=	/nologo /Ox /fp:precise /W3 /MD /D_CRT_SECURE_NO_WARNINGS \
 		/D_LARGE_FILE=1 /D_FILE_OFFSET_BITS=64 /D_LARGEFILE_SOURCE=1 \
-		/DSQLITE_ENABLE_RTREE=1 /DYY_NO_UNISTD_H=1
-#OPTFLAGS=	/nologo /Zi /MD /Fdspatialite.pdb
+		/DSQLITE_ENABLE_RTREE=1 /DYY_NO_UNISTD_H=1 /DDLL_EXPORT \
+		/DVERSION=\"3.0.1\"
+#OPTFLAGS=	/nologo /Zi /MD /Fdspatialite.pdb /DDLL_EXPORT
 
 # Set the version number for the DLL.  Normally we leave this blank since
 # we want software that is dynamically loading the DLL to have no problem
diff --git a/libspatialite/spatialite.pc.in b/libspatialite/spatialite.pc.in
index ee01f39..f00fd8c 100644
--- a/libspatialite/spatialite.pc.in
+++ b/libspatialite/spatialite.pc.in
@@ -7,6 +7,6 @@ includedir=@includedir@
 
 Name: spatialite
 Description: Spatial SQL database engine based on SQLite
-Version: 3.0.0
+Version: @VERSION@
 Libs: -L${libdir} -lspatialite -lsqlite3 -lm
 Cflags: -I${includedir}
diff --git a/libspatialite/src/Makefile.am b/libspatialite/src/Makefile.am
index 9332aed..c41e022 100644
--- a/libspatialite/src/Makefile.am
+++ b/libspatialite/src/Makefile.am
@@ -4,6 +4,7 @@ SUBDIRS = headers \
 	gaiaexif \
 	gaiageo \
 	spatialite \
+	shapefiles \
 	srsinit \
 	virtualtext
 
@@ -18,14 +19,16 @@ libspatialite_la_LIBADD = ./gaiaaux/libgaiaaux.la \
 	./gaiaexif/libgaiaexif.la \
 	./gaiageo/libgaiageo.la \
 	./spatialite/libsplite.la \
+	./shapefiles/libshapefiles.la \
 	./srsinit/libsrsinit.la \
 	./virtualtext/libvirtualtext.la
 
 
 if MINGW
-libspatialite_la_LDFLAGS = -version-info 4:0:0 -no-undefined
+libspatialite_la_LDFLAGS = -version-info 4:0:2 -no-undefined
 else
-libspatialite_la_LDFLAGS = -version-info 4:0:0
+libspatialite_la_LDFLAGS = -version-info 4:0:2
 libspatialite_la_LIBADD += -lpthread -ldl
 endif
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/Makefile.in b/libspatialite/src/Makefile.in
index 786ea22..89308c2 100644
--- a/libspatialite/src/Makefile.in
+++ b/libspatialite/src/Makefile.in
@@ -70,8 +70,9 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libspatialite_la_DEPENDENCIES = ./gaiaaux/libgaiaaux.la \
 	./gaiaexif/libgaiaexif.la ./gaiageo/libgaiageo.la \
-	./spatialite/libsplite.la ./srsinit/libsrsinit.la \
-	./virtualtext/libvirtualtext.la $(am__DEPENDENCIES_1)
+	./spatialite/libsplite.la ./shapefiles/libshapefiles.la \
+	./srsinit/libsrsinit.la ./virtualtext/libvirtualtext.la \
+	$(am__DEPENDENCIES_1)
 am_libspatialite_la_OBJECTS = version.lo
 libspatialite_la_OBJECTS = $(am_libspatialite_la_OBJECTS)
 libspatialite_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -179,6 +180,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -211,6 +213,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -244,7 +247,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -265,6 +267,7 @@ SUBDIRS = headers \
 	gaiaexif \
 	gaiageo \
 	spatialite \
+	shapefiles \
 	srsinit \
 	virtualtext
 
@@ -273,10 +276,12 @@ lib_LTLIBRARIES = libspatialite.la
 libspatialite_la_SOURCES = versioninfo/version.c
 libspatialite_la_LIBADD = ./gaiaaux/libgaiaaux.la \
 	./gaiaexif/libgaiaexif.la ./gaiageo/libgaiageo.la \
-	./spatialite/libsplite.la ./srsinit/libsrsinit.la \
-	./virtualtext/libvirtualtext.la $(am__append_1)
- at MINGW_FALSE@libspatialite_la_LDFLAGS = -version-info 4:0:0
- at MINGW_TRUE@libspatialite_la_LDFLAGS = -version-info 4:0:0 -no-undefined
+	./spatialite/libsplite.la ./shapefiles/libshapefiles.la \
+	./srsinit/libsrsinit.la ./virtualtext/libvirtualtext.la \
+	$(am__append_1)
+ at MINGW_FALSE@libspatialite_la_LDFLAGS = -version-info 4:0:2
+ at MINGW_TRUE@libspatialite_la_LDFLAGS = -version-info 4:0:2 -no-undefined
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-recursive
 
 .SUFFIXES:
@@ -603,6 +608,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
diff --git a/libspatialite/src/gaiaaux/Makefile.am b/libspatialite/src/gaiaaux/Makefile.am
index cb3e261..2b4c3f0 100644
--- a/libspatialite/src/gaiaaux/Makefile.am
+++ b/libspatialite/src/gaiaaux/Makefile.am
@@ -13,3 +13,4 @@ noinst_LTLIBRARIES = libgaiaaux.la
 libgaiaaux_la_SOURCES = gg_sqlaux.c \
 	gg_utf8.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/gaiaaux/Makefile.in b/libspatialite/src/gaiaaux/Makefile.in
index cd02035..6fe4ba3 100644
--- a/libspatialite/src/gaiaaux/Makefile.in
+++ b/libspatialite/src/gaiaaux/Makefile.in
@@ -111,6 +111,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -143,6 +144,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -176,7 +178,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -203,6 +204,7 @@ noinst_LTLIBRARIES = libgaiaaux.la
 libgaiaaux_la_SOURCES = gg_sqlaux.c \
 	gg_utf8.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-am
 
 .SUFFIXES:
@@ -386,6 +388,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
diff --git a/libspatialite/src/gaiaaux/gg_sqlaux.c b/libspatialite/src/gaiaaux/gg_sqlaux.c
index 9e0f596..6d40226 100644
--- a/libspatialite/src/gaiaaux/gg_sqlaux.c
+++ b/libspatialite/src/gaiaaux/gg_sqlaux.c
@@ -2,7 +2,7 @@
 
  gg_sqlaux.c -- SQL ancillary functions
 
- version 3.0, 2011 Jult 20
+ version 3.0, 2011 July 20
 
  Author: Sandro Furieri a.furieri at lqt.it
 
@@ -48,19 +48,19 @@ the terms of any one of the MPL, the GPL or the LGPL.
 #include <stdio.h>
 #include <string.h>
 
-#ifdef SPL_AMALGAMATION	/* spatialite-amalgamation */
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
 #include <spatialite/sqlite3ext.h>
 #else
 #include <sqlite3ext.h>
 #endif
 
-#include <spatialite/gaiageo.h>
+#include <spatialite/gaiaaux.h>
 
 #ifdef _WIN32
 #define strcasecmp	_stricmp
 #endif /* not WIN32 */
 
-GAIAGEO_DECLARE int
+GAIAAUX_DECLARE int
 gaiaIllegalSqlName (const char *name)
 {
 /* checks if column-name is an SQL illegal name */
@@ -92,7 +92,7 @@ gaiaIllegalSqlName (const char *name)
     return 1;
 }
 
-GAIAGEO_DECLARE int
+GAIAAUX_DECLARE int
 gaiaIsReservedSqliteName (const char *name)
 {
 /* checks if column-name is an SQLite reserved keyword */
@@ -188,7 +188,7 @@ gaiaIsReservedSqliteName (const char *name)
     return 0;
 }
 
-GAIAGEO_DECLARE int
+GAIAAUX_DECLARE int
 gaiaIsReservedSqlName (const char *name)
 {
 /* checks if column-name is an SQL reserved keyword */
@@ -542,7 +542,95 @@ gaiaIsReservedSqlName (const char *name)
     return 0;
 }
 
-GAIAGEO_DECLARE void
+GAIAAUX_DECLARE char *
+gaiaQuotedSql (const char *value, int quote)
+{
+/*
+/ returns a well formatted TEXT value for SQL
+/ 1] strips trailing spaces
+/ 2] masks any QUOTE inside the string, appending another QUOTE
+/ 3] works for both SINGLE- and DOUBLE-QUOTE
+*/
+    const char *p_in;
+    const char *p_end;
+    char qt;
+    char *out;
+    char *p_out;
+    int len = 0;
+    int i;
+
+    if (!value)
+	return NULL;
+    if (quote == GAIA_SQL_SINGLE_QUOTE)
+	qt = '\'';
+    else if (quote == GAIA_SQL_DOUBLE_QUOTE)
+	qt = '"';
+    else
+	return NULL;
+
+    p_end = value;
+    for (i = (strlen (value) - 1); i >= 0; i--)
+      {
+	  /* stripping trailing spaces */
+	  p_end = value + i;
+	  if (value[i] != ' ')
+	      break;
+      }
+
+    p_in = value;
+    while (p_in <= p_end)
+      {
+	  /* computing the output length */
+	  len++;
+	  if (*p_in == qt)
+	      len++;
+	  p_in++;
+      }
+    if (len == 1 && *value == ' ')
+      {
+	  /* empty string */
+	  len = 0;
+      }
+
+    out = malloc (len + 1);
+    if (!out)
+	return NULL;
+
+    if (len == 0)
+      {
+	  /* empty string */
+	  *out = '\0';
+	  return out;
+      }
+
+    p_out = out;
+    p_in = value;
+    while (p_in <= p_end)
+      {
+	  /* creating the output string */
+	  if (*p_in == qt)
+	      *p_out++ = qt;
+	  *p_out++ = *p_in++;
+      }
+    *p_out = '\0';
+    return out;
+}
+
+GAIAAUX_DECLARE char *
+gaiaSingleQuotedSql (const char *value)
+{
+/* convenience method supporting SINGLE-QUOTES */
+    return gaiaQuotedSql (value, GAIA_SQL_SINGLE_QUOTE);
+}
+
+GAIAAUX_DECLARE char *
+gaiaDoubleQuotedSql (const char *value)
+{
+/* convenience method supporting DOUBLE-QUOTES */
+    return gaiaQuotedSql (value, GAIA_SQL_DOUBLE_QUOTE);
+}
+
+GAIAAUX_DECLARE void
 gaiaCleanSqlString (char *value)
 {
 /*
diff --git a/libspatialite/src/gaiaaux/gg_utf8.c b/libspatialite/src/gaiaaux/gg_utf8.c
index 1746998..8dd4926 100644
--- a/libspatialite/src/gaiaaux/gg_utf8.c
+++ b/libspatialite/src/gaiaaux/gg_utf8.c
@@ -77,7 +77,7 @@ extern const char * locale_charset (void);
 GAIAAUX_DECLARE const char *
 gaiaGetLocaleCharset ()
 {
-/* indentifies the locale charset */
+/* identifies the locale charset */
 #if defined(__MINGW32__) || defined(_WIN32)
     return locale_charset ();
 #else /* not MINGW32 - WIN32 */
@@ -92,11 +92,11 @@ gaiaGetLocaleCharset ()
 GAIAAUX_DECLARE int
 gaiaConvertCharset (char **buf, const char *fromCs, const char *toCs)
 {
-/* converting a string from a charset to another "by-the-fly" */
+/* converting a string from a charset to another "on-the-fly" */
     char utf8buf[65536];
-#if defined(__MINGW32__) || defined(_WIN32)
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 - WIN32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
@@ -124,7 +124,7 @@ gaiaConvertCharset (char **buf, const char *fromCs, const char *toCs)
 GAIAAUX_DECLARE void *
 gaiaCreateUTF8Converter (const char *fromCS)
 {
-/* creating an UTF8 converter and returning on opaque reference to it */
+/* creating a UTF8 converter and returning an opaque reference to it */
     iconv_t cvt = iconv_open ("UTF-8", fromCS);
     if (cvt == (iconv_t) (-1))
 	return NULL;
@@ -134,7 +134,7 @@ gaiaCreateUTF8Converter (const char *fromCS)
 GAIAAUX_DECLARE void
 gaiaFreeUTF8Converter (void *cvtCS)
 {
-/* destroyng an UTF8 converter */
+/* destroying a UTF8 converter */
     if (cvtCS)
 	iconv_close (cvtCS);
 }
@@ -144,7 +144,7 @@ gaiaConvertToUTF8 (void *cvtCS, const char *buf, int buflen, int *err)
 {
 /* converting a string to UTF8 */
     char *utf8buf = 0;
-#if defined(__MINGW32__) || defined(_WIN32)
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
 #else
     char *pBuf;
diff --git a/libspatialite/src/gaiaexif/Makefile.am b/libspatialite/src/gaiaexif/Makefile.am
index b857bc2..e61c633 100644
--- a/libspatialite/src/gaiaexif/Makefile.am
+++ b/libspatialite/src/gaiaexif/Makefile.am
@@ -12,3 +12,4 @@ noinst_LTLIBRARIES = libgaiaexif.la
 
 libgaiaexif_la_SOURCES = gaia_exif.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/gaiaexif/Makefile.in b/libspatialite/src/gaiaexif/Makefile.in
index b83d99e..76e36fa 100644
--- a/libspatialite/src/gaiaexif/Makefile.in
+++ b/libspatialite/src/gaiaexif/Makefile.in
@@ -111,6 +111,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -143,6 +144,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -176,7 +178,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -201,6 +202,7 @@ AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
 INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
 noinst_LTLIBRARIES = libgaiaexif.la
 libgaiaexif_la_SOURCES = gaia_exif.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-am
 
 .SUFFIXES:
@@ -383,6 +385,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
diff --git a/libspatialite/src/gaiageo/Makefile.am b/libspatialite/src/gaiageo/Makefile.am
index b349186..7cc31e3 100644
--- a/libspatialite/src/gaiageo/Makefile.am
+++ b/libspatialite/src/gaiageo/Makefile.am
@@ -26,3 +26,4 @@ libgaiageo_la_SOURCES = gg_advanced.c \
 	gg_kml.c \
 	gg_gml.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/gaiageo/Makefile.in b/libspatialite/src/gaiageo/Makefile.in
index 3b5ac5b..39d1fd7 100644
--- a/libspatialite/src/gaiageo/Makefile.in
+++ b/libspatialite/src/gaiageo/Makefile.in
@@ -114,6 +114,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -146,6 +147,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -179,7 +181,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -219,6 +220,7 @@ libgaiageo_la_SOURCES = gg_advanced.c \
 	gg_kml.c \
 	gg_gml.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-am
 
 .SUFFIXES:
@@ -415,6 +417,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
diff --git a/libspatialite/src/gaiageo/gg_advanced.c b/libspatialite/src/gaiageo/gg_advanced.c
index 17e1105..188041d 100644
--- a/libspatialite/src/gaiageo/gg_advanced.c
+++ b/libspatialite/src/gaiageo/gg_advanced.c
@@ -627,14 +627,9 @@ gaiaSanitize (gaiaGeomCollPtr geom)
     double y = 0.0;
     double z = 0.0;
     double m = 0.0;
-    double first_x;
-    double first_y;
-    double first_z;
-    double first_m;
     double last_x = 0.0;
     double last_y = 0.0;
     double last_z = 0.0;
-    double last_m = 0.0;
     int points;
     gaiaPointPtr point;
     gaiaLinestringPtr line;
@@ -702,7 +697,6 @@ gaiaSanitize (gaiaGeomCollPtr geom)
 		last_x = x;
 		last_y = y;
 		last_z = z;
-		last_m = m;
 	    }
 	  if (points < 2)
 	    {
@@ -793,7 +787,6 @@ gaiaSanitize (gaiaGeomCollPtr geom)
 		      last_x = x;
 		      last_y = y;
 		      last_z = z;
-		      last_m = m;
 		  }
 	    }
 	  line = line->Next;
@@ -834,17 +827,10 @@ gaiaSanitize (gaiaGeomCollPtr geom)
 			  points++;
 		  }
 		else
-		  {
-		      first_x = x;
-		      first_y = y;
-		      first_z = z;
-		      first_m = m;
 		      points++;
-		  }
 		last_x = x;
 		last_y = y;
 		last_z = z;
-		last_m = m;
 	    }
 	  if (last_x == x && last_y == y && last_z == z)
 	      ;
@@ -948,7 +934,6 @@ gaiaSanitize (gaiaGeomCollPtr geom)
 		      last_x = x;
 		      last_y = y;
 		      last_z = z;
-		      last_m = m;
 		  }
 	    }
 	  /* PASS III - forcing RING closure */
@@ -1023,17 +1008,10 @@ gaiaSanitize (gaiaGeomCollPtr geom)
 				points++;
 			}
 		      else
-			{
-			    first_x = x;
-			    first_y = y;
-			    first_z = z;
-			    first_m = m;
 			    points++;
-			}
 		      last_x = x;
 		      last_y = y;
 		      last_z = z;
-		      last_m = m;
 		  }
 		if (last_x == x && last_y == y && last_z == z)
 		    ;
@@ -1138,7 +1116,6 @@ gaiaSanitize (gaiaGeomCollPtr geom)
 			    last_x = x;
 			    last_y = y;
 			    last_z = z;
-			    last_m = m;
 			}
 		      /* PASS III - forcing RING closure */
 		      z = 0.0;
diff --git a/libspatialite/src/gaiageo/gg_ewkt.c b/libspatialite/src/gaiageo/gg_ewkt.c
index 82fda8b..8bd309c 100644
--- a/libspatialite/src/gaiageo/gg_ewkt.c
+++ b/libspatialite/src/gaiageo/gg_ewkt.c
@@ -62,6 +62,12 @@ the terms of any one of the MPL, the GPL or the LGPL.
 #define atoll	_atoi64
 #endif /* not WIN32 */
 
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty	_isatty
+#define fileno	_fileno
+#endif
+
 int ewkt_parse_error;
 
 static int
diff --git a/libspatialite/src/gaiageo/gg_geometries.c b/libspatialite/src/gaiageo/gg_geometries.c
index cc2f673..bc629d9 100644
--- a/libspatialite/src/gaiageo/gg_geometries.c
+++ b/libspatialite/src/gaiageo/gg_geometries.c
@@ -2372,7 +2372,7 @@ gaiaZRangeGeometry (gaiaGeomCollPtr geom, double *min, double *max)
 GAIAGEO_DECLARE int
 gaiaDimension (gaiaGeomCollPtr geom)
 {
-/* determinates the Dimension for this geometry */
+/* determines the Dimension for this geometry */
     gaiaPointPtr point;
     gaiaLinestringPtr line;
     gaiaPolygonPtr polyg;
@@ -2414,7 +2414,7 @@ gaiaDimension (gaiaGeomCollPtr geom)
 GAIAGEO_DECLARE int
 gaiaGeometryType (gaiaGeomCollPtr geom)
 {
-/* determinates the Class for this geometry */
+/* determines the Class for this geometry */
     gaiaPointPtr point;
     gaiaLinestringPtr line;
     gaiaPolygonPtr polyg;
@@ -2714,7 +2714,7 @@ gaiaGeometryType (gaiaGeomCollPtr geom)
 GAIAGEO_DECLARE int
 gaiaGeometryAliasType (gaiaGeomCollPtr geom)
 {
-/* determinates the AliasClass for this geometry */
+/* determines the AliasClass for this geometry */
     gaiaPointPtr point;
     gaiaLinestringPtr line;
     gaiaPolygonPtr polyg;
@@ -2876,7 +2876,7 @@ GAIAGEO_DECLARE int
 gaiaMbrsEqual (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
 {
 /* 
-/ checks if two MBRs are identicals
+/ checks if two MBRs are identical
 /
 / returns 1 if TRUE
 / 0 if FALSE
@@ -2896,7 +2896,7 @@ GAIAGEO_DECLARE int
 gaiaMbrsDisjoint (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
 {
 /* 
-/ checks if two MBRs are disjoined
+/ checks if two MBRs are disjoint
 /
 / returns 1 if TRUE
 / 0 if FALSE
@@ -2944,7 +2944,7 @@ GAIAGEO_DECLARE int
 gaiaMbrsIntersects (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
 {
 /* 
-/ checks if two MBRs intersects
+/ checks if two MBRs intersect
 /
 / returns 1 if TRUE
 / 0 if FALSE
@@ -2958,7 +2958,7 @@ GAIAGEO_DECLARE int
 gaiaMbrsOverlaps (gaiaGeomCollPtr mbr1, gaiaGeomCollPtr mbr2)
 {
 /* 
-/ checks if two MBRs overlaps
+/ checks if two MBRs overlap
 /
 / returns 1 if TRUE
 / 0 if FALSE
@@ -3040,13 +3040,13 @@ gaiaMakePoint (double x, double y, int srid, unsigned char **result, int *size)
     *result = malloc (*size);
     ptr = *result;
 /* setting the Blob value */
-    *ptr = GAIA_MARK_START;	/* START signatue */
+    *ptr = GAIA_MARK_START;	/* START signature */
     *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
     gaiaExport32 (ptr + 2, srid, 1, endian_arch);	/* the SRID */
-    gaiaExport64 (ptr + 6, x, 1, endian_arch);	/* MBR - minimun X */
-    gaiaExport64 (ptr + 14, y, 1, endian_arch);	/* MBR - minimun Y */
-    gaiaExport64 (ptr + 22, x, 1, endian_arch);	/* MBR - maximun X */
-    gaiaExport64 (ptr + 30, y, 1, endian_arch);	/* MBR - maximun Y */
+    gaiaExport64 (ptr + 6, x, 1, endian_arch);	/* MBR - minimum X */
+    gaiaExport64 (ptr + 14, y, 1, endian_arch);	/* MBR - minimum Y */
+    gaiaExport64 (ptr + 22, x, 1, endian_arch);	/* MBR - maximum X */
+    gaiaExport64 (ptr + 30, y, 1, endian_arch);	/* MBR - maximum Y */
     *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
     gaiaExport32 (ptr + 39, GAIA_POINT, 1, endian_arch);	/* class POINT */
     gaiaExport64 (ptr + 43, x, 1, endian_arch);	/* X */
@@ -3693,13 +3693,13 @@ gaiaBuildMbr (double x1, double y1, double x2, double y2, int srid,
     *result = malloc (*size);
     ptr = *result;
 /* setting the Blob value */
-    *ptr = GAIA_MARK_START;	/* START signatue */
+    *ptr = GAIA_MARK_START;	/* START signature */
     *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
     gaiaExport32 (ptr + 2, srid, 1, endian_arch);	/* the SRID */
-    gaiaExport64 (ptr + 6, minx, 1, endian_arch);	/* MBR - minimun X */
-    gaiaExport64 (ptr + 14, miny, 1, endian_arch);	/* MBR - minimun Y */
-    gaiaExport64 (ptr + 22, maxx, 1, endian_arch);	/* MBR - maximun X */
-    gaiaExport64 (ptr + 30, maxy, 1, endian_arch);	/* MBR - maximun Y */
+    gaiaExport64 (ptr + 6, minx, 1, endian_arch);	/* MBR - minimum X */
+    gaiaExport64 (ptr + 14, miny, 1, endian_arch);	/* MBR - minimum Y */
+    gaiaExport64 (ptr + 22, maxx, 1, endian_arch);	/* MBR - maximum X */
+    gaiaExport64 (ptr + 30, maxy, 1, endian_arch);	/* MBR - maximum Y */
     *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
     gaiaExport32 (ptr + 39, GAIA_POLYGON, 1, endian_arch);	/* class POLYGON */
     gaiaExport32 (ptr + 43, 1, 1, endian_arch);	/* # rings */
@@ -3792,23 +3792,23 @@ gaiaBuildFilterMbr (double x1, double y1, double x2, double y2, int mode,
     *result = malloc (*size);
     ptr = *result;
 /* setting the Blob value */
-    *ptr = filter;		/* signatue */
+    *ptr = filter;		/* signature */
     ptr++;
-    gaiaExport64 (ptr, minx, 1, endian_arch);	/* MBR - minimun X */
+    gaiaExport64 (ptr, minx, 1, endian_arch);	/* MBR - minimum X */
     ptr += 8;
-    *ptr = filter;		/* signatue */
+    *ptr = filter;		/* signature */
     ptr++;
-    gaiaExport64 (ptr, miny, 1, endian_arch);	/* MBR - minimun Y */
+    gaiaExport64 (ptr, miny, 1, endian_arch);	/* MBR - minimum Y */
     ptr += 8;
-    *ptr = filter;		/* signatue */
+    *ptr = filter;		/* signature */
     ptr++;
-    gaiaExport64 (ptr, maxx, 1, endian_arch);	/* MBR - maximun X */
+    gaiaExport64 (ptr, maxx, 1, endian_arch);	/* MBR - maximum X */
     ptr += 8;
-    *ptr = filter;		/* signatue */
+    *ptr = filter;		/* signature */
     ptr++;
-    gaiaExport64 (ptr, maxy, 1, endian_arch);	/* MBR - maximun Y */
+    gaiaExport64 (ptr, maxy, 1, endian_arch);	/* MBR - maximum Y */
     ptr += 8;
-    *ptr = filter;		/* signatue */
+    *ptr = filter;		/* signature */
 }
 
 
@@ -3869,7 +3869,7 @@ gaiaGetMbrMinX (const unsigned char *blob, unsigned int size, double *minx)
     else if (*(blob + 1) == GAIA_BIG_ENDIAN)
 	little_endian = 0;
     else
-	return 0;		/* unknown encoding; nor litte-endian neither big-endian */
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
     *minx = gaiaImport64 (blob + 6, little_endian, endian_arch);
     return 1;
 }
@@ -3893,7 +3893,7 @@ gaiaGetMbrMaxX (const unsigned char *blob, unsigned int size, double *maxx)
     else if (*(blob + 1) == GAIA_BIG_ENDIAN)
 	little_endian = 0;
     else
-	return 0;		/* unknown encoding; nor litte-endian neither big-endian */
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
     *maxx = gaiaImport64 (blob + 22, little_endian, endian_arch);
     return 1;
 }
@@ -3917,7 +3917,7 @@ gaiaGetMbrMinY (const unsigned char *blob, unsigned int size, double *miny)
     else if (*(blob + 1) == GAIA_BIG_ENDIAN)
 	little_endian = 0;
     else
-	return 0;		/* unknown encoding; nor litte-endian neither big-endian */
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
     *miny = gaiaImport64 (blob + 14, little_endian, endian_arch);
     return 1;
 }
@@ -3941,7 +3941,7 @@ gaiaGetMbrMaxY (const unsigned char *blob, unsigned int size, double *maxy)
     else if (*(blob + 1) == GAIA_BIG_ENDIAN)
 	little_endian = 0;
     else
-	return 0;		/* unknown encoding; nor litte-endian neither big-endian */
+	return 0;		/* unknown encoding; neither little-endian nor big-endian */
     *maxy = gaiaImport64 (blob + 30, little_endian, endian_arch);
     return 1;
 }
diff --git a/libspatialite/src/gaiageo/gg_gml.c b/libspatialite/src/gaiageo/gg_gml.c
index 8da861f..c079713 100644
--- a/libspatialite/src/gaiageo/gg_gml.c
+++ b/libspatialite/src/gaiageo/gg_gml.c
@@ -56,6 +56,12 @@ the terms of any one of the MPL, the GPL or the LGPL.
 
 #include <spatialite/gaiageo.h>
 
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty  _isatty
+#define fileno  _fileno
+#endif
+
 int gml_parse_error;
 
 #define GML_PARSER_OPEN_NODE		1
diff --git a/libspatialite/src/gaiageo/gg_kml.c b/libspatialite/src/gaiageo/gg_kml.c
index 33284c6..f96068e 100644
--- a/libspatialite/src/gaiageo/gg_kml.c
+++ b/libspatialite/src/gaiageo/gg_kml.c
@@ -56,6 +56,12 @@ the terms of any one of the MPL, the GPL or the LGPL.
 
 #include <spatialite/gaiageo.h>
 
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty  _isatty
+#define fileno  _fileno
+#endif
+
 int kml_parse_error;
 
 #define KML_PARSER_OPEN_NODE		1
diff --git a/libspatialite/src/gaiageo/gg_relations.c b/libspatialite/src/gaiageo/gg_relations.c
index e0ca14a..982bfef 100644
--- a/libspatialite/src/gaiageo/gg_relations.c
+++ b/libspatialite/src/gaiageo/gg_relations.c
@@ -47,6 +47,7 @@ the terms of any one of the MPL, the GPL or the LGPL.
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <float.h>
 
 #ifndef OMIT_GEOS		/* including GEOS */
 #include <geos_c.h>
@@ -644,6 +645,8 @@ gaiaIsSimple (gaiaGeomCollPtr geom)
     GEOSGeometry *g;
     if (!geom)
 	return -1;
+    if (gaiaIsToxic (geom))
+	return 0;
     g = gaiaToGeos (geom);
     ret = GEOSisSimple (g);
     GEOSGeom_destroy (g);
@@ -837,6 +840,8 @@ gaiaGeomCollBuffer (gaiaGeomCollPtr geom, double radius, int points)
     GEOSGeometry *g2;
     if (!geom)
 	return NULL;
+    if (gaiaIsToxic (geom))
+	return NULL;
     g1 = gaiaToGeos (geom);
     g2 = GEOSBuffer (g1, radius, points);
     GEOSGeom_destroy (g1);
@@ -1380,6 +1385,8 @@ gaiaPolygonize (gaiaGeomCollPtr geom, int force_multi)
     ok = 1;
     while (ok)
       {
+	  if (dummy == 0)
+	      ok = dummy;	/* simply suppressing stupid compiler warnings */
 	  ok = 0;
 	  for (i = 0; i < lns; i++)
 	    {
@@ -1708,6 +1715,117 @@ gaiaOffsetCurve (gaiaGeomCollPtr geom, double radius, int points,
     return geo;
 }
 
+GAIAGEO_DECLARE gaiaGeomCollPtr
+gaiaSingleSidedBuffer (gaiaGeomCollPtr geom, double radius, int points,
+		       int left_right)
+{
+/*
+// builds a geometry that is the SingleSided BUFFER of GEOM 
+// (which is expected to be of the LINESTRING type)
+//
+*/
+    gaiaGeomCollPtr geo;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    GEOSBufferParams *params = NULL;
+    gaiaPointPtr pt;
+    gaiaLinestringPtr ln;
+    gaiaPolygonPtr pg;
+    int pts = 0;
+    int lns = 0;
+    int pgs = 0;
+    int closed = 0;
+    if (!geom)
+	return NULL;
+
+/* checking the input geometry for validity */
+    pt = geom->FirstPoint;
+    while (pt)
+      {
+	  /* counting how many POINTs are there */
+	  pts++;
+	  pt = pt->Next;
+      }
+    ln = geom->FirstLinestring;
+    while (ln)
+      {
+	  /* counting how many LINESTRINGs are there */
+	  lns++;
+	  if (gaiaIsClosed (ln))
+	      closed++;
+	  ln = ln->Next;
+      }
+    pg = geom->FirstPolygon;
+    while (pg)
+      {
+	  /* counting how many POLYGON are there */
+	  pgs++;
+	  pg = pg->Next;
+      }
+    if (pts > 0 || pgs > 0 || lns > 1 || closed > 0)
+	return NULL;
+
+/* all right: this one simply is a LINESTRING */
+    geom->DeclaredType = GAIA_LINESTRING;
+
+    g1 = gaiaToGeos (geom);
+/* setting up Buffer params */
+    params = GEOSBufferParams_create ();
+    GEOSBufferParams_setJoinStyle (params, GEOSBUF_JOIN_ROUND);
+    GEOSBufferParams_setMitreLimit (params, 5.0);
+    GEOSBufferParams_setQuadrantSegments (params, points);
+    GEOSBufferParams_setSingleSided (params, 1);
+
+/* creating the SingleSided Buffer */
+    if (left_right == 0)
+      {
+	  /* right-sided requires NEGATIVE radius */
+	  radius *= -1.0;
+      }
+    g2 = GEOSBufferWithParams (g1, params, radius);
+    GEOSGeom_destroy (g1);
+    GEOSBufferParams_destroy (params);
+    if (!g2)
+	return NULL;
+    if (geom->DimensionModel == GAIA_XY_Z)
+	geo = gaiaFromGeos_XYZ (g2);
+    else if (geom->DimensionModel == GAIA_XY_M)
+	geo = gaiaFromGeos_XYM (g2);
+    else if (geom->DimensionModel == GAIA_XY_Z_M)
+	geo = gaiaFromGeos_XYZM (g2);
+    else
+	geo = gaiaFromGeos_XY (g2);
+    GEOSGeom_destroy (g2);
+    if (geo == NULL)
+	return NULL;
+    geo->Srid = geom->Srid;
+    return geo;
+}
+
+GAIAGEO_DECLARE int
+gaiaHausdorffDistance (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2,
+		       double *xdist)
+{
+/* 
+/ computes the (discrete) Hausdorff distance intercurring 
+/ between GEOM-1 and GEOM-2 
+*/
+    double dist;
+    int ret;
+    GEOSGeometry *g1;
+    GEOSGeometry *g2;
+    if (!geom1 || !geom2)
+	return 0;
+    g1 = gaiaToGeos (geom1);
+    g2 = gaiaToGeos (geom2);
+    ret = GEOSHausdorffDistance (g1, g2, &dist);
+    GEOSGeom_destroy (g1);
+    GEOSGeom_destroy (g2);
+    if (ret)
+	*xdist = dist;
+    return ret;
+}
+
 static gaiaGeomCollPtr
 geom_as_lines (gaiaGeomCollPtr geom)
 {
@@ -2495,7 +2613,7 @@ gaiaLineLocatePoint (gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
 	  pgs1++;
 	  pg = pg->Next;
       }
-    if (pts1 == 0 && lns1 == 1 && pgs1 == 0)
+    if (pts1 == 0 && lns1 >= 1 && pgs1 == 0)
 	;
     else
 	return -1.0;
@@ -2635,8 +2753,6 @@ gaiaLineSubstring (gaiaGeomCollPtr geom, double start_fraction,
 
 	  double x0;
 	  double y0;
-	  double z0;
-	  double m0;
 	  switch (ln->DimensionModel)
 	    {
 	    case GAIA_XY_Z:
@@ -2671,8 +2787,6 @@ gaiaLineSubstring (gaiaGeomCollPtr geom, double start_fraction,
 	    }
 	  x0 = x;
 	  y0 = y;
-	  z0 = z;
-	  m0 = m;
       }
     if (i_start < 0 || i_end < 0)
       {
@@ -3540,6 +3654,8 @@ gaiaLineMerge (gaiaGeomCollPtr geom)
     gaiaGeomCollPtr result;
     if (!geom)
 	return NULL;
+    if (gaiaIsToxic (geom))
+	return NULL;
 
     g1 = gaiaToGeos (geom);
     g2 = GEOSLineMerge (g1);
@@ -3570,7 +3686,8 @@ gaiaUnaryUnion (gaiaGeomCollPtr geom)
     gaiaGeomCollPtr result;
     if (!geom)
 	return NULL;
-
+    if (gaiaIsToxic (geom))
+	return NULL;
     g1 = gaiaToGeos (geom);
     g2 = GEOSUnaryUnion (g1);
     GEOSGeom_destroy (g1);
diff --git a/libspatialite/src/gaiageo/gg_shape.c b/libspatialite/src/gaiageo/gg_shape.c
index 72677b5..3f63cd9 100644
--- a/libspatialite/src/gaiageo/gg_shape.c
+++ b/libspatialite/src/gaiageo/gg_shape.c
@@ -404,15 +404,12 @@ gaiaOpenShpRead (gaiaShapefilePtr shp, const char *path, const char *charFrom,
     char xpath[1024];
     int rd;
     unsigned char buf_shx[256];
-    int size_shp;
-    int size_shx;
     unsigned char *buf_shp = NULL;
     int buf_size = 1024;
     int shape;
     unsigned char bf[1024];
     int dbf_size;
     int dbf_reclen = 0;
-    int dbf_recno;
     int off_dbf;
     int ind;
     char field_name[2048];
@@ -420,9 +417,9 @@ gaiaOpenShpRead (gaiaShapefilePtr shp, const char *path, const char *charFrom,
     char errMsg[1024];
     iconv_t iconv_ret;
     char utf8buf[2048];
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
@@ -485,7 +482,6 @@ gaiaOpenShpRead (gaiaShapefilePtr shp, const char *path, const char *charFrom,
 	goto error;
     if (gaiaImport32 (buf_shx + 0, GAIA_BIG_ENDIAN, endian_arch) != 9994)	/* checks the SHX magic number */
 	goto error;
-    size_shx = gaiaImport32 (buf_shx + 24, GAIA_BIG_ENDIAN, endian_arch);
 /* reading SHP file header */
     buf_shp = malloc (sizeof (unsigned char) * buf_size);
     rd = fread (buf_shp, sizeof (unsigned char), 100, fl_shp);
@@ -493,7 +489,6 @@ gaiaOpenShpRead (gaiaShapefilePtr shp, const char *path, const char *charFrom,
 	goto error;
     if (gaiaImport32 (buf_shp + 0, GAIA_BIG_ENDIAN, endian_arch) != 9994)	/* checks the SHP magic number */
 	goto error;
-    size_shp = gaiaImport32 (buf_shp + 24, GAIA_BIG_ENDIAN, endian_arch);
     shape = gaiaImport32 (buf_shp + 32, GAIA_LITTLE_ENDIAN, endian_arch);
     if (shape == GAIA_SHP_POINT || shape == GAIA_SHP_POINTZ
 	|| shape == GAIA_SHP_POINTM || shape == GAIA_SHP_POLYLINE
@@ -510,7 +505,6 @@ gaiaOpenShpRead (gaiaShapefilePtr shp, const char *path, const char *charFrom,
 	goto error;
     if (*bf != 0x03)		/* checks the DBF magic number */
 	goto error;
-    dbf_recno = gaiaImport32 (bf + 4, GAIA_LITTLE_ENDIAN, endian_arch);
     dbf_size = gaiaImport16 (bf + 8, GAIA_LITTLE_ENDIAN, endian_arch);
     dbf_reclen = gaiaImport16 (bf + 10, GAIA_LITTLE_ENDIAN, endian_arch);
     dbf_size--;
@@ -716,9 +710,9 @@ gaiaOpenShpWrite (gaiaShapefilePtr shp, const char *path, int shape,
     int endian_arch = gaiaEndianArch ();
     char buf[2048];
     char utf8buf[2048];
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
@@ -1069,9 +1063,9 @@ parseDbfField (unsigned char *buf_dbf, void *iconv_obj, gaiaDbfFieldPtr pFld)
 /* parsing a generic DBF field */
     unsigned char buf[512];
     char utf8buf[2048];
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
@@ -2146,7 +2140,14 @@ gaiaSaneClockwise (gaiaPolygonPtr polyg)
     if (!(ring->Clockwise))
       {
 	  /* exterior ring needs inversion */
-	  new_ring = gaiaAllocRing (ring->Points);
+	  if (ring->DimensionModel == GAIA_XY_Z)
+	      new_ring = gaiaAllocRingXYZ (ring->Points);
+	  else if (ring->DimensionModel == GAIA_XY_M)
+	      new_ring = gaiaAllocRingXYM (ring->Points);
+	  else if (ring->DimensionModel == GAIA_XY_Z_M)
+	      new_ring = gaiaAllocRingXYZM (ring->Points);
+	  else
+	      new_ring = gaiaAllocRing (ring->Points);
 	  iv2 = 0;
 	  for (iv = ring->Points - 1; iv >= 0; iv--)
 	    {
@@ -2182,7 +2183,14 @@ gaiaSaneClockwise (gaiaPolygonPtr polyg)
 	  if (ring->Clockwise)
 	    {
 		/* interior ring needs inversion */
-		new_ring = gaiaAllocRing (ring->Points);
+		if (ring->DimensionModel == GAIA_XY_Z)
+		    new_ring = gaiaAllocRingXYZ (ring->Points);
+		else if (ring->DimensionModel == GAIA_XY_M)
+		    new_ring = gaiaAllocRingXYM (ring->Points);
+		else if (ring->DimensionModel == GAIA_XY_Z_M)
+		    new_ring = gaiaAllocRingXYZM (ring->Points);
+		else
+		    new_ring = gaiaAllocRing (ring->Points);
 		iv2 = 0;
 		for (iv = ring->Points - 1; iv >= 0; iv--)
 		  {
@@ -2261,9 +2269,9 @@ gaiaWriteShpEntity (gaiaShapefilePtr shp, gaiaDbfListPtr entity)
     double maxZ;
     double minM;
     double maxM;
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
@@ -3995,7 +4003,6 @@ gaiaShpAnalyze (gaiaShapefilePtr shp)
     double y;
     int polygons;
     int ZM_size;
-    int Z_size;
     int multi = 0;
     int hasM = 0;
     int current_row = 0;
@@ -4049,7 +4056,6 @@ gaiaShpAnalyze (gaiaShapefilePtr shp)
 		if (shape == GAIA_SHP_POLYLINEZ)
 		  {
 		      ZM_size = 38 + (2 * n) + (n1 * 16);	/* size [in 16 bits words !!!] ZM */
-		      Z_size = 30 + (2 * n) + (n1 * 12);	/* size [in 16 bits words !!!] Z-only */
 		      if (sz == ZM_size)
 			  hasM = 1;
 		  }
@@ -4121,7 +4127,6 @@ gaiaShpAnalyze (gaiaShapefilePtr shp)
 		if (shape == GAIA_SHP_POLYGONZ)
 		  {
 		      ZM_size = 38 + (2 * n) + (n1 * 16);	/* size [in 16 bits words !!!] ZM */
-		      Z_size = 30 + (2 * n) + (n1 * 12);	/* size [in 16 bits words !!!] Z-only */
 		      if (sz == ZM_size)
 			  hasM = 1;
 		  }
@@ -4140,7 +4145,6 @@ gaiaShpAnalyze (gaiaShapefilePtr shp)
 		n = gaiaImport32 (shp->BufShp, GAIA_LITTLE_ENDIAN,
 				  shp->endian_arch);
 		ZM_size = 38 + (n * 16);	/* size [in 16 bits words !!!] ZM */
-		Z_size = 30 + (n * 12);	/* size [in 16 bits words !!!] Z-only */
 		if (sz == ZM_size)
 		    hasM = 1;
 	    }
@@ -4230,7 +4234,6 @@ gaiaOpenDbfRead (gaiaDbfPtr dbf, const char *path, const char *charFrom,
     unsigned char bf[1024];
     int dbf_size;
     int dbf_reclen = 0;
-    int dbf_recno;
     int off_dbf;
     int ind;
     char field_name[2048];
@@ -4238,9 +4241,9 @@ gaiaOpenDbfRead (gaiaDbfPtr dbf, const char *path, const char *charFrom,
     char errMsg[1024];
     iconv_t iconv_ret;
     char utf8buf[2048];
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
@@ -4284,7 +4287,6 @@ gaiaOpenDbfRead (gaiaDbfPtr dbf, const char *path, const char *charFrom,
 	goto error;
     if (*bf != 0x03)		/* checks the DBF magic number */
 	goto error;
-    dbf_recno = gaiaImport32 (bf + 4, GAIA_LITTLE_ENDIAN, endian_arch);
     dbf_size = gaiaImport16 (bf + 8, GAIA_LITTLE_ENDIAN, endian_arch);
     dbf_reclen = gaiaImport16 (bf + 10, GAIA_LITTLE_ENDIAN, endian_arch);
     dbf_size--;
@@ -4400,9 +4402,9 @@ gaiaOpenDbfWrite (gaiaDbfPtr dbf, const char *path, const char *charFrom,
     iconv_t iconv_ret;
     char buf[2048];
     char utf8buf[2048];
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
@@ -4521,9 +4523,9 @@ gaiaWriteDbfEntity (gaiaDbfPtr dbf, gaiaDbfListPtr entity)
     char dummy[128];
     char fmt[16];
     gaiaDbfFieldPtr fld;
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
-#else /* not MINGW32 */
+#else /* not WIN32 */
     char *pBuf;
 #endif
     size_t len;
diff --git a/libspatialite/src/gaiageo/gg_transform.c b/libspatialite/src/gaiageo/gg_transform.c
index 1716d96..c2837b5 100644
--- a/libspatialite/src/gaiageo/gg_transform.c
+++ b/libspatialite/src/gaiageo/gg_transform.c
@@ -51,7 +51,7 @@ the terms of any one of the MPL, the GPL or the LGPL.
 #include <proj_api.h>
 #endif
 
-#ifdef SPL_AMALGAMATION	/* spatialite-amalgamation */
+#ifdef SPL_AMALGAMATION		/* spatialite-amalgamation */
 #include <spatialite/sqlite3ext.h>
 #else
 #include <sqlite3ext.h>
@@ -1042,7 +1042,7 @@ gaiaTransform (gaiaGeomCollPtr org, char *proj_from, char *proj_to)
 		  }
 		else if (ln->DimensionModel == GAIA_XY_M)
 		  {
-		      gaiaGetPointXYZ (ln->Coords, i, &x, &y, &m);
+		      gaiaGetPointXYM (ln->Coords, i, &x, &y, &m);
 		  }
 		else if (ln->DimensionModel == GAIA_XY_Z_M)
 		  {
@@ -1151,7 +1151,7 @@ gaiaTransform (gaiaGeomCollPtr org, char *proj_from, char *proj_to)
 		  }
 		else if (rng->DimensionModel == GAIA_XY_M)
 		  {
-		      gaiaGetPointXYZ (rng->Coords, i, &x, &y, &m);
+		      gaiaGetPointXYM (rng->Coords, i, &x, &y, &m);
 		  }
 		else if (rng->DimensionModel == GAIA_XY_Z_M)
 		  {
@@ -1256,7 +1256,7 @@ gaiaTransform (gaiaGeomCollPtr org, char *proj_from, char *proj_to)
 			}
 		      else if (rng->DimensionModel == GAIA_XY_M)
 			{
-			    gaiaGetPointXYZ (rng->Coords, i, &x, &y, &m);
+			    gaiaGetPointXYM (rng->Coords, i, &x, &y, &m);
 			}
 		      else if (rng->DimensionModel == GAIA_XY_Z_M)
 			{
@@ -1289,10 +1289,7 @@ gaiaTransform (gaiaGeomCollPtr org, char *proj_from, char *proj_to)
 		if (pj_transform (from_cs, to_cs, cnt, 0, xx, yy, zz) == 0)
 		  {
 		      /* inserting the reprojected POLYGON in the new GEOMETRY */
-		      dst_rng = dst_pg->Interiors + ib;
-		      dst_rng->Points = cnt;
-		      dst_rng->Coords =
-			  malloc (sizeof (double) * (dst_rng->Points * 2));
+		      dst_rng = gaiaAddInteriorRing (dst_pg, ib, cnt);
 		      for (i = 0; i < cnt; i++)
 			{
 			    /* setting INTERIOR RING points */
diff --git a/libspatialite/src/gaiageo/gg_vanuatu.c b/libspatialite/src/gaiageo/gg_vanuatu.c
index 2d63728..209d1f8 100644
--- a/libspatialite/src/gaiageo/gg_vanuatu.c
+++ b/libspatialite/src/gaiageo/gg_vanuatu.c
@@ -59,6 +59,12 @@ the terms of any one of the MPL, the GPL or the LGPL.
 
 #include <spatialite/gaiageo.h>
 
+#if defined(_WIN32) || defined(WIN32)
+# include <io.h>
+#define isatty  _isatty
+#define fileno  _fileno
+#endif
+
 int vanuatu_parse_error;
 
 static int
diff --git a/libspatialite/src/gaiageo/gg_wkb.c b/libspatialite/src/gaiageo/gg_wkb.c
index 15887b1..8c00ffa 100644
--- a/libspatialite/src/gaiageo/gg_wkb.c
+++ b/libspatialite/src/gaiageo/gg_wkb.c
@@ -1282,7 +1282,6 @@ GAIAGEO_DECLARE gaiaGeomCollPtr
 gaiaFromSpatiaLiteBlobMbr (const unsigned char *blob, unsigned int size)
 {
 /* decoding from SpatiaLite BLOB to GEOMETRY [MBR only] */
-    int type;
     int little_endian;
     int endian_arch = gaiaEndianArch ();
     double minx;
@@ -1306,7 +1305,6 @@ gaiaFromSpatiaLiteBlobMbr (const unsigned char *blob, unsigned int size)
 	little_endian = 0;
     else
 	return NULL;		/* unknown encoding; nor litte-endian neither big-endian */
-    type = gaiaImport32 (blob + 39, little_endian, endian_arch);
     geo = gaiaAllocGeomColl ();
     polyg = gaiaAddPolygonToGeomColl (geo, 5, 0);
     ring = polyg->Exterior;
@@ -1700,10 +1698,10 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINT, 1, endian_arch);	/* class POINT */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -1714,10 +1712,10 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINTZ, 1, endian_arch);	/* class POINT XYZ */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -1729,10 +1727,10 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINTM, 1, endian_arch);	/* class POINT XYM */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -1744,10 +1742,10 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINTZM, 1, endian_arch);	/* class POINT XYZM */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -1757,13 +1755,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *(ptr + 75) = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRING:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_LINESTRING, 1, endian_arch);	/* class LINESTRING */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -1778,13 +1776,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRINGZ:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_LINESTRINGZ, 1, endian_arch);	/* class LINESTRING XYZ */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -1800,13 +1798,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRINGM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_LINESTRINGM, 1, endian_arch);	/* class LINESTRING XYM */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -1822,13 +1820,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRINGZM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_LINESTRINGZM, 1, endian_arch);	/* class LINESTRING XYZM */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -1845,13 +1843,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGON:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POLYGON, 1, endian_arch);	/* class POLYGON */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -1881,13 +1879,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGONZ:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POLYGONZ, 1, endian_arch);	/* class POLYGON XYZ */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -1919,13 +1917,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGONM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POLYGONM, 1, endian_arch);	/* class POLYGON XYM */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -1957,13 +1955,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGONZM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POLYGONZM, 1, endian_arch);	/* class POLYGON */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -1998,13 +1996,13 @@ gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  break;
       default:
 	  /* this one is a MULTIxxxx or a GEOMETRYCOLLECTION - building the main header */
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, type, 1, endian_arch);	/* geometric class */
 	  gaiaExport32 (ptr + 43, entities, 1, endian_arch);	/* # entities */
@@ -2596,10 +2594,10 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINT, 1, endian_arch);	/* class POINT */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -2610,10 +2608,10 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINTZ, 1, endian_arch);	/* class POINT XYZ */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -2625,10 +2623,10 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINTM, 1, endian_arch);	/* class POINT XYM */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -2640,10 +2638,10 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_POINTZM, 1, endian_arch);	/* class POINT XYZM */
 	  gaiaExport64 (ptr + 43, point->X, 1, endian_arch);	/* X */
@@ -2653,13 +2651,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *(ptr + 75) = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRING:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRING, 1, endian_arch);	/* class LINESTRING */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -2689,13 +2687,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRINGZ:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRINGZ, 1, endian_arch);	/* class LINESTRING XYZ */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -2729,13 +2727,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRINGM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRINGM, 1, endian_arch);	/* class LINESTRING XYM */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -2767,13 +2765,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_LINESTRINGZM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_LINESTRINGZM, 1, endian_arch);	/* class LINESTRING XYZM */
 	  gaiaExport32 (ptr + 43, line->Points, 1, endian_arch);	/* # points */
@@ -2809,13 +2807,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGON:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGON, 1, endian_arch);	/* class POLYGON */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -2875,13 +2873,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGONZ:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGONZ, 1, endian_arch);	/* class POLYGON XYZ */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -2949,13 +2947,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGONM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGONM, 1, endian_arch);	/* class POLYGON XYM */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -3019,13 +3017,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  *ptr = GAIA_MARK_END;	/* END signature */
 	  break;
       case GAIA_POLYGONZM:
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, GAIA_COMPRESSED_POLYGONZM, 1, endian_arch);	/* class POLYGON */
 	  gaiaExport32 (ptr + 43, polyg->NumInteriors + 1, 1, endian_arch);	/* # rings */
@@ -3098,13 +3096,13 @@ gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom, unsigned char **result,
 	  break;
       default:
 	  /* this one is a MULTIxxxx or a GEOMETRYCOLLECTION - building the main header */
-	  *ptr = GAIA_MARK_START;	/* START signatue */
+	  *ptr = GAIA_MARK_START;	/* START signature */
 	  *(ptr + 1) = GAIA_LITTLE_ENDIAN;	/* byte ordering */
 	  gaiaExport32 (ptr + 2, geom->Srid, 1, endian_arch);	/* the SRID */
-	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimun X */
-	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimun Y */
-	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximun X */
-	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximun Y */
+	  gaiaExport64 (ptr + 6, geom->MinX, 1, endian_arch);	/* MBR - minimum X */
+	  gaiaExport64 (ptr + 14, geom->MinY, 1, endian_arch);	/* MBR - minimum Y */
+	  gaiaExport64 (ptr + 22, geom->MaxX, 1, endian_arch);	/* MBR - maximum X */
+	  gaiaExport64 (ptr + 30, geom->MaxY, 1, endian_arch);	/* MBR - maximum Y */
 	  *(ptr + 38) = GAIA_MARK_MBR;	/* MBR signature */
 	  gaiaExport32 (ptr + 39, type, 1, endian_arch);	/* geometric class */
 	  gaiaExport32 (ptr + 43, entities, 1, endian_arch);	/* # entities */
@@ -4739,7 +4737,7 @@ gaiaToEWKB (gaiaOutBufferPtr out_buf, gaiaGeomCollPtr geom)
 /* prints the GEOS/PostGIS EWKB text representation of current geometry */
     char buf[2048];
     unsigned char endian_buf[16];
-    char byte[2];
+    char byte[3];
     char *ptr;
     int size;
     int type;
@@ -5431,8 +5429,6 @@ linestringFromFgf (gaiaGeomCollPtr geom, int endian_arch,
     int iv;
     double x;
     double y;
-    double z;
-    double m;
     unsigned int ln_sz;
     unsigned int sz = size;
     const unsigned char *ptr = blob;
@@ -5490,8 +5486,6 @@ linestringFromFgf (gaiaGeomCollPtr geom, int endian_arch,
 		x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
 		y = gaiaImport64 (ptr + sizeof (double), GAIA_LITTLE_ENDIAN,
 				  endian_arch);
-		z = gaiaImport64 (ptr + (sizeof (double) * 2),
-				  GAIA_LITTLE_ENDIAN, endian_arch);
 		ptr += (coord_dims * sizeof (double));
 		gaiaSetPoint (ln->Coords, iv, x, y);
 	    }
@@ -5507,8 +5501,6 @@ linestringFromFgf (gaiaGeomCollPtr geom, int endian_arch,
 		x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
 		y = gaiaImport64 (ptr + sizeof (double), GAIA_LITTLE_ENDIAN,
 				  endian_arch);
-		m = gaiaImport64 (ptr + (sizeof (double) * 2),
-				  GAIA_LITTLE_ENDIAN, endian_arch);
 		ptr += (coord_dims * sizeof (double));
 		gaiaSetPoint (ln->Coords, iv, x, y);
 	    }
@@ -5524,10 +5516,6 @@ linestringFromFgf (gaiaGeomCollPtr geom, int endian_arch,
 		x = gaiaImport64 (ptr, GAIA_LITTLE_ENDIAN, endian_arch);
 		y = gaiaImport64 (ptr + sizeof (double), GAIA_LITTLE_ENDIAN,
 				  endian_arch);
-		z = gaiaImport64 (ptr + (sizeof (double) * 2),
-				  GAIA_LITTLE_ENDIAN, endian_arch);
-		m = gaiaImport64 (ptr + (sizeof (double) * 3),
-				  GAIA_LITTLE_ENDIAN, endian_arch);
 		ptr += (coord_dims * sizeof (double));
 		gaiaSetPoint (ln->Coords, iv, x, y);
 	    }
diff --git a/libspatialite/src/headers/Makefile.am b/libspatialite/src/headers/Makefile.am
index 3a2711e..5355ae0 100644
--- a/libspatialite/src/headers/Makefile.am
+++ b/libspatialite/src/headers/Makefile.am
@@ -3,4 +3,11 @@ nobase_include_HEADERS = spatialite.h \
 	spatialite/gaiaexif.h \
 	spatialite/gaiaaux.h \
 	spatialite/gaiageo.h \
+	spatialite/gg_const.h \
+	spatialite/gg_structs.h \
+	spatialite/gg_core.h \
+	spatialite/gg_mbr.h \
+	spatialite/gg_formats.h \
+	spatialite/gg_dynamic.h \
+	spatialite/gg_advanced.h \
 	spatialite/spatialite.h
diff --git a/libspatialite/src/headers/Makefile.in b/libspatialite/src/headers/Makefile.in
index 36f38a8..e4445bc 100644
--- a/libspatialite/src/headers/Makefile.in
+++ b/libspatialite/src/headers/Makefile.in
@@ -118,6 +118,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -150,6 +151,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -183,7 +185,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -203,6 +204,13 @@ nobase_include_HEADERS = spatialite.h \
 	spatialite/gaiaexif.h \
 	spatialite/gaiaaux.h \
 	spatialite/gaiageo.h \
+	spatialite/gg_const.h \
+	spatialite/gg_structs.h \
+	spatialite/gg_core.h \
+	spatialite/gg_mbr.h \
+	spatialite/gg_formats.h \
+	spatialite/gg_dynamic.h \
+	spatialite/gg_advanced.h \
 	spatialite/spatialite.h
 
 all: all-am
diff --git a/libspatialite/src/headers/spatialite.h b/libspatialite/src/headers/spatialite.h
index 0c35430..95aabea 100644
--- a/libspatialite/src/headers/spatialite.h
+++ b/libspatialite/src/headers/spatialite.h
@@ -42,52 +42,317 @@ the terms of any one of the MPL, the GPL or the LGPL.
  
 */
 
+/**
+ \file spatialite.h
+
+ Main SpatiaLite header file
+ */
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 #ifdef DLL_EXPORT
 #define SPATIALITE_DECLARE __declspec(dllexport)
 #else
 #define SPATIALITE_DECLARE extern
 #endif
+#endif
 
 #ifndef _SPATIALITE_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 #define _SPATIALITE_H
+#endif
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
+/**
+ Return the current library version.
+ */
     SPATIALITE_DECLARE const char *spatialite_version (void);
+
+/**
+ Initializes the library. 
+
+ \param verbose if TRUE a short start-up message is shown on stderr
+
+ \note You absolutely must invoke this function before attempting to perform
+ any other SpatiaLite's call.
+
+ */
     SPATIALITE_DECLARE void spatialite_init (int verbose);
+
+    /**
+     Cleanup spatialite 
+     
+     This function performs general cleanup, essentially undoing the effect
+     of spatialite_init().
+     
+     \sa spatialite_init
+    */
+    SPATIALITE_DECLARE void spatialite_cleanup ();
+
+/**
+ Dumps a full geometry-table into an external Shapefile
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param column the name of the geometry column
+ \param shp_path pathname of the Shapefile to be exported (no suffix) 
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param geom_type "POINT", "LINESTRING", "POLYGON", "MULTIPOLYGON" or NULL
+ \param verbose if TRUE a short report is shown on stderr
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
     SPATIALITE_DECLARE int dump_shapefile (sqlite3 * sqlite, char *table,
-					   char *column, char *charset,
-					   char *shp_path, char *geom_type,
-					   int verbose, int *rows);
+					   char *column, char *shp_path,
+					   char *charset, char *geom_type,
+					   int verbose, int *rows,
+					   char *err_msg);
+
+/**
+ Loads an external Shapefile into a newly created table
+
+ \param sqlite handle to current DB connection
+ \param shp_path pathname of the Shapefile to be imported (no suffix) 
+ \param table the name of the table to be created
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param srid the SRID to be set for Geometries
+ \param column the name of the geometry column
+ \param coerce2d if TRUE any Geometry will be casted to 2D [XY]
+ \param compressed if TRUE compressed Geometries will be created
+ \param verbose if TRUE a short report is shown on stderr
+ \param spatial_index if TRUE an R*Tree Spatial Index will be created
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
     SPATIALITE_DECLARE int load_shapefile (sqlite3 * sqlite, char *shp_path,
 					   char *table, char *charset, int srid,
 					   char *column, int coerce2d,
 					   int compressed, int verbose,
-					   int *rows);
-    SPATIALITE_DECLARE int load_dbf (sqlite3 * sqlite, char *shp_path,
+					   int spatial_index, int *rows,
+					   char *err_msg);
+
+/**
+ Loads an external DBF file into a newly created table
+
+ \param sqlite handle to current DB connection
+ \param dbf_path pathname of the DBF file to be imported
+ \param table the name of the table to be created
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param verbose if TRUE a short report is shown on stderr
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int load_dbf (sqlite3 * sqlite, char *dbf_path,
 				     char *table, char *charset, int verbose,
-				     int *rows);
+				     int *rows, char *err_msg);
+
+/**
+ Dumps a full table into an external DBF file
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param dbf_path pathname of the DBF to be exported 
+ \param charset a valid GNU ICONV charset to be used for DBF text strings
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
     SPATIALITE_DECLARE int dump_dbf (sqlite3 * sqlite, char *table,
-				     char *charset, char *dbf_path);
-    SPATIALITE_DECLARE void load_XL (sqlite3 * sqlite, const char *path,
-				     const char *table,
-				     unsigned int worksheetIndex,
-				     int first_titles);
+				     char *dbf_path, char *charset,
+				     char *err_msg);
+
+/**
+ Loads an external spreadsheet (.xls) file into a newly created table
+
+ \param sqlite handle to current DB connection
+ \param path pathname of the spreadsheet file to be imported
+ \param table the name of the table to be created
+ \param worksheetIndex the index identifying the worksheet to be imported
+ \param first_titles if TRUE the first line is assumed to contain column names
+ \param rows on completion will contain the total number of actually exported rows
+ \param err_msg on completion will contain an error message (if any)
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int load_XL (sqlite3 * sqlite, const char *path,
+				    const char *table,
+				    unsigned int worksheetIndex,
+				    int first_titles, unsigned int *rows,
+				    char *err_msg);
+
+/**
+ A portable replacement for C99 round()
+
+ \param value a double value
+
+ \return the nearest integeral value
+ */
     SPATIALITE_DECLARE double math_round (double value);
+
+/**
+ A portable replacement for C99 llabs()
+
+ \param value a 64 bit integer value
+
+ \return the corresponding absolute value
+ */
     SPATIALITE_DECLARE sqlite3_int64 math_llabs (sqlite3_int64 value);
+
+/**
+ Inserts the inlined EPSG dataset into the "spatial_ref_sys" table
+
+ \param sqlite handle to current DB connection
+ \param verbose if TRUE a short report is shown on stderr
+
+ \return 0 on failure, any other value on success
+
+ \note this function is internally invoked by the SQL function 
+  InitSpatialMetadata(), and is not usually intended for direct use.
+ */
     SPATIALITE_DECLARE int spatial_ref_sys_init (sqlite3 * sqlite, int verbose);
+
+/**
+ Checks if a column is actually defined into the given table
+
+ \param sqlite handle to current DB connection
+ \param table the table to be checked
+ \param column the column to be checked
+
+ \return 0 on success, any other value on success
+
+ \note internally used to detect if some KML attribute defaults to a constant value
+ */
+    SPATIALITE_DECLARE int
+	is_kml_constant (sqlite3 * sqlite, char *table, char *column);
+
+/**
+ Dumps a full geometry-table into an external KML file
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param geom_col the name of the geometry column
+ \param kml_path pathname of the KML file to be exported 
+ \param name_col column to be used for KML "name" (may be null)
+ \param desc_col column to be used for KML "description" (may be null)
+ \param precision number of decimal digits for coordinates
+
+ \return 0 on failure, any other value on success
+ */
     SPATIALITE_DECLARE int dump_kml (sqlite3 * sqlite, char *table,
 				     char *geom_col, char *kml_path,
 				     char *name_col, char *desc_col,
 				     int precision);
+
+/**
+ Checks for duplicated rows into the same table
+
+ \param sqlite handle to current DB connection
+ \param table name of the table to be checked
+ \param dupl_count on completion will contain the number of duplicated rows found
+
+ \sa remove_duplicated_rows
+ \note two (or more) rows are assumed to be duplicated if any column
+
+ value (excluding any Primary Key column) is exacly the same
+ */
     SPATIALITE_DECLARE void check_duplicated_rows (sqlite3 * sqlite,
-						   char *table);
+						   char *table,
+						   int *dupl_count);
+
+/**
+ Remove duplicated rows from a table
+
+ \param sqlite handle to current DB connection
+ \param table name of the table to be cleaned
+
+ \sa check_duplicated_rows
+
+ \note when two (or more) duplicated rows exist, only the first occurence
+ will be preserved, then deleting any further occurrence.
+ */
     SPATIALITE_DECLARE void remove_duplicated_rows (sqlite3 * sqlite,
 						    char *table);
 
+/**
+ Creates a derived table surely containing elementary Geometries
+
+ \param sqlite handle to current DB connection
+ \param inTable name of the input table 
+ \param geometry name of the Geometry column
+ \param outTable name of the output table to be created
+ \param pKey name of the Primary Key column in the output table
+ \param multiId name of the column identifying origins in the output table
+
+ \note if the input table contains some kind of complex Geometry
+ (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON or GEOMETRYCOLLECTION),
+ then many rows are inserted into the output table: each single 
+ row will contain the same attributes and an elementaty Geometry.
+ All the rows created by expanding the same input row will expose
+ the same value in the "multiId" column.
+ */
+    SPATIALITE_DECLARE void elementary_geometries (sqlite3 * sqlite,
+						   char *inTable,
+						   char *geometry,
+						   char *outTable, char *pKey,
+						   char *multiId);
+
+/**
+ Dumps a full geometry-table into an external GeoJSON file
+
+ \param sqlite handle to current DB connection
+ \param table the name of the table to be exported
+ \param geom_col the name of the geometry column
+ \param outfile_path pathname for the GeoJSON file to be written to
+ \param precision number of decimal digits for coordinates
+ \param option the format to use for output
+
+ \note valid values for option are:
+   - 0 no option
+   - 1 GeoJSON MBR
+   - 2 GeoJSON Short CRS (e.g EPSG:4326)
+   - 3 MBR + Short CRS
+   - 4 GeoJSON Long CRS (e.g urn:ogc:def:crs:EPSG::4326)
+   - 5 MBR + Long CRS
+
+ \return 0 on failure, any other value on success
+ */
+    SPATIALITE_DECLARE int dump_geojson (sqlite3 * sqlite, char *table,
+					 char *geom_col, char *outfile_path,
+					 int precision, int option);
+
+/**
+ Updates the LAYER_STATICS metadata table
+
+ \param sqlite handle to current DB connection
+ \param table name of the table to be processed
+ \param column name of the geometry to be processed
+
+ \note this function will explore the given table/geometry determining
+ the number of rows and the full layer extent; a corresponding table/geometry
+ entry is expected to be already declared in the GEOMETRY_COLUMNS table.
+ These informations will be permanently stored into the LAYER_STATISTICS
+ table; if such table does not yet exists will be implicitly created.
+   - if table is NULL, any entry found within GEOMETRY_COLUMNS
+     will be processed.
+   - if table is not NULL and column is NULL, any geometry
+     belonging to the given table will be processed.
+   - if both table and column are not NULL, then only the
+     given entry will be processed.
+
+ \return 0 on failure, the total count of processed entries on success
+ */
+    SPATIALITE_DECLARE int update_layer_statistics (sqlite3 * sqlite,
+						    const char *table,
+						    const char *column);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/libspatialite/src/headers/spatialite/gaiaaux.h b/libspatialite/src/headers/spatialite/gaiaaux.h
index 3ab2fff..aff9458 100644
--- a/libspatialite/src/headers/spatialite/gaiaaux.h
+++ b/libspatialite/src/headers/spatialite/gaiaaux.h
@@ -42,32 +42,205 @@ the terms of any one of the MPL, the GPL or the LGPL.
  
 */
 
+/**
+ \file gaiaaux.h
+
+ Auxiliary/helper functions
+ */
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 #ifdef DLL_EXPORT
 #define GAIAAUX_DECLARE __declspec(dllexport)
 #else
 #define GAIAAUX_DECLARE extern
 #endif
+#endif
 
 #ifndef _GAIAAUX_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 #define _GAIAAUX_H
+#endif
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
+/* constants */
+/** SQL single quoted string (text constant) */
+#define GAIA_SQL_SINGLE_QUOTE	1001
+/** SQL double quoted string (SQL name) */
+#define GAIA_SQL_DOUBLE_QUOTE	1002
+
 /* function prototipes */
 
+/**
+ Retrieves the Locale Charset
+
+ \return the GNU ICONV name identifying the locale charset
+ */
     GAIAAUX_DECLARE const char *gaiaGetLocaleCharset (void);
+
+/**
+ Converts a text string from one charset to another
+
+ \param buf the text string to be converted
+ \param fromCs the GNU ICONV name identifying the input charset
+ \param toCs the GNU ICONV name identifying the output charset
+
+ \return 0 on failure, any other value on success.
+
+ \note this function uses an internal buffer limited to 64KB;
+ so it's not safe passing extremely huge-sized text string.
+ */
     GAIAAUX_DECLARE int gaiaConvertCharset (char **buf, const char *fromCs,
 					    const char *toCs);
+
+/**
+ Creates a persistent UTF8 converter object
+
+ \param fromCS the GNU ICONV name identifying the input charset
+
+ \return the handle of the converter object, or NULL on failure
+
+ \sa gaiaFreeUTF8Converter
+
+ \note you must properly destroy the converter object 
+ when it isn't any longer used.
+ */
     GAIAAUX_DECLARE void *gaiaCreateUTF8Converter (const char *fromCS);
+
+/**
+ Destroys an UTF8 converter object
+
+ \param cvtCS the handle identifying the UTF8 convert object  
+ (returned by a previous call to gaiaCreateUTF8Converter).
+
+ \sa gaiaCreateUTF8Converter
+ */
     GAIAAUX_DECLARE void gaiaFreeUTF8Converter (void *cvtCS);
+
+/**
+ Converts a text string to UTF8
+
+ \param cvtCS the handle identifying the UTF8 convert object  
+ (returned by a previous call to gaiaCreateUTF8Converter).
+ \param buf the input text string
+ \param len length (in bytes) of input string
+ \param err on completion will contain 0 on success, any other value on failure
+
+ \return the null-terminated UTF8 encoded string: NULL on failure
+
+ \sa gaiaCreateUTF8Converter, gaiaFreeUTF8Converter
+ 
+ \note this function can safely handle strings of arbitrary length,
+ and will return the converted string into a dynamically allocated buffer 
+ created by malloc(). 
+ You are required to explicitly free() any string returned by this function.
+ */
     GAIAAUX_DECLARE char *gaiaConvertToUTF8 (void *cvtCS, const char *buf,
 					     int len, int *err);
+
+/**
+ Checks if a name is a reserved SQLite name
+
+ \param name the name to be checked
+
+ \return 0 if no: any other value if yes
+
+ \sa gaiaIsReservedSqlName, gaiaIllegalSqlName
+ */
     GAIAAUX_DECLARE int gaiaIsReservedSqliteName (const char *name);
+
+/**
+ Checks if a name is a reserved SQL name
+
+ \param name the name to be checked
+
+ \return 0 if no: any other value if yes
+
+ \sa gaiaIsReservedSqliteName, gaiaIllegalSqlName
+ */
     GAIAAUX_DECLARE int gaiaIsReservedSqlName (const char *name);
+
+/**
+ Checks if a name is an illegal SQL name
+
+ \param name the name to be checked
+
+ \return 0 if no: any other value if yes
+
+ \sa gaiaIsReservedSqliteName, gaiaIsReservedSqlName
+ */
     GAIAAUX_DECLARE int gaiaIllegalSqlName (const char *name);
+
+/**
+ Properly formats an SQL text constant
+
+ \param value the text string to be formatted
+
+ \return the formatted string: NULL on failure
+
+ \sa gaiaQuotedSql
+ 
+ \note this function simply is a convenience method corresponding to: 
+ gaiaQuotedSQL(value, GAIA_SQL_SINGLE_QUOTE);
+ 
+ \remark passing a string like "Sant'Andrea" will return 'Sant''Andrea'
+ */
+    GAIAAUX_DECLARE char *gaiaSingleQuotedSql (const char *value);
+
+/**
+ Properly formats an SQL name
+
+ \param value the SQL name to be formatted
+
+ \return the formatted string: NULL on failure
+
+ \sa gaiaQuotedSql
+ 
+ \note this function simply is a convenience method corresponding to: 
+ gaiaQuotedSQL(value, GAIA_SQL_DOUBLE_QUOTE);
+
+ \remark passing a string like "Sant\"Andrea" will return "Sant""Andrea"
+ */
+    GAIAAUX_DECLARE char *gaiaDoubleQuotedSql (const char *value);
+
+/**
+ Properly formats an SQL generic string
+
+ \param value the string to be formatted
+ \param quote GAIA_SQL_SINGLE_QUOTE or GAIA_SQL_DOUBLE_QUOTE
+
+ \return the formatted string: NULL on failure
+
+ \sa gaiaSingleQuotedSql, gaiaDoubleQuotedSql
+
+ \note this function can safely handle strings of arbitrary length,
+ and will return the formatted string into a dynamically allocated buffer 
+ created by malloc(). 
+ You are required to explicitly free() any string returned by this function.
+ */
+    GAIAAUX_DECLARE char *gaiaQuotedSql (const char *value, int quote);
+
+/*
+/ DEPRECATED FUNCTION: gaiaCleanSqlString()
+/ this function must not be used for any new project
+/ it's still maintained for backward compatibility,
+/ but will be probably removed in future versions
+*/
+
+/**
+ deprecated function
+
+ \param value the string to be formatted
+
+ \sa gaiaQuotedSql
+
+ \note this function is still supported simply for backward compatibility.
+ it's intrinsically unsafe (passing huge strings potentially leads to 
+ buffer overflows) and you are strongly encouraged to use gaiaQuotedSql()
+ as a safest replacement.
+ */
     GAIAAUX_DECLARE void gaiaCleanSqlString (char *value);
 
 #ifdef __cplusplus
diff --git a/libspatialite/src/headers/spatialite/gaiaexif.h b/libspatialite/src/headers/spatialite/gaiaexif.h
index 5ce2a9a..d5db951 100644
--- a/libspatialite/src/headers/spatialite/gaiaexif.h
+++ b/libspatialite/src/headers/spatialite/gaiaexif.h
@@ -42,14 +42,24 @@ the terms of any one of the MPL, the GPL or the LGPL.
  
 */
 
+/**
+ \file gaiaexif.h
+
+ EXIF/image: supporting functions and constants
+ */
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 #ifdef DLL_EXPORT
 #define GAIAEXIF_DECLARE __declspec(dllexport)
 #else
 #define GAIAEXIF_DECLARE extern
 #endif
+#endif
 
 #ifndef _GAIAEXIF_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 #define _GAIAEXIF_H
+#endif
 
 #ifdef __cplusplus
 extern "C"
@@ -57,150 +67,575 @@ extern "C"
 #endif
 
 /* constants used for BLOB value types */
+/** generic hexadecimal BLOB */
 #define GAIA_HEX_BLOB		0
+/** this BLOB does actually contain a GIF image */
 #define GAIA_GIF_BLOB		1
+/** this BLOB does actually containt a PNG image */
 #define GAIA_PNG_BLOB		2
+/** this BLOB does actually contain a generic JPEG image */
 #define GAIA_JPEG_BLOB		3
+/** this BLOB does actually contain a JPEG-EXIF image */
 #define GAIA_EXIF_BLOB		4
+/** this BLOB does actually contain a JPEG-EXIF image including GPS data */
 #define GAIA_EXIF_GPS_BLOB	5
+/** this BLOB does actually contain a ZIP compressed file */
 #define GAIA_ZIP_BLOB		6
+/** this BLOB does actually contain a PDF document */
 #define GAIA_PDF_BLOB		7
+/** this BLOB does actually contain a SpatiaLite Geometry */
 #define GAIA_GEOMETRY_BLOB	8
+/** this BLOB does actually contain a TIFF image */
 #define GAIA_TIFF_BLOB		9
 
 /* constants used for EXIF value types */
+/** unrecognized EXIF value */
 #define GAIA_EXIF_NONE		0
+/** EXIF value of the BYTE type */
 #define GAIA_EXIF_BYTE		1
+/** EXIF value of the SHORT type */
 #define GAIA_EXIF_SHORT		2
+/** EXIF value of the STRING type */
 #define GAIA_EXIF_STRING	3
+/** EXIF value of the LONG type */
 #define GAIA_EXIF_LONG		4
+/** EXIF value of the RATIONAL type */
 #define GAIA_EXIF_RATIONAL	5
+/** EXIF value of the SLONG type */
 #define GAIA_EXIF_SLONG		9
+/** EXIF value of the SRATIONAL type */
 #define GAIA_EXIF_SRATIONAL	10
 
+/**
+ Container for an EXIF tag
+ */
     typedef struct gaiaExifTagStruct
     {
 /* an EXIF TAG */
+	/** GPS data included (0/1) */
 	char Gps;
+	/** EXIF tag ID */
 	unsigned short TagId;
+	/** EXIF value type */
 	unsigned short Type;
+	/** number of values */
 	unsigned short Count;
+	/** tag offset [big- little-endian encoded] */
 	unsigned char TagOffset[4];
+	/** array of BYTE values */
 	unsigned char *ByteValue;
+	/** array of STRING values */
 	char *StringValue;
+	/** array of SHORT values */
 	unsigned short *ShortValues;
+	/** array of LONG values ] */
 	unsigned int *LongValues;
+	/** array of RATIONAL values [numerators] */
 	unsigned int *LongRationals1;
+	/** array of RATIONAL values [denominators] */
 	unsigned int *LongRationals2;
+	/** array of Signed SHORT values */
 	short *SignedShortValues;
+	/** array of Signed LONG values */
 	int *SignedLongValues;
+	/** array of Signed RATIONAL values [numerators] */
 	int *SignedLongRationals1;
+	/** array of Signed RATIONAL values [denominators] */
 	int *SignedLongRationals2;
+	/** array of FLOAT values */
 	float *FloatValues;
+	/** array of DOUBLE values */
 	double *DoubleValues;
+	/** pointer to next item into the linked list */
 	struct gaiaExifTagStruct *Next;
     } gaiaExifTag;
+/**
+ Typedef for EXIF tag structure.
+
+ \sa gaiaExifTagStruct
+ */
     typedef gaiaExifTag *gaiaExifTagPtr;
 
+/**
+ Container for a list of EXIF tags
+ */
     typedef struct gaiaExifTagListStruct
     {
 /* an EXIF TAG LIST */
+	/** pointer to first item into the linked list */
 	gaiaExifTagPtr First;
+	/** pointer to the last item into the linked list */
 	gaiaExifTagPtr Last;
+	/** number of items */
 	int NumTags;
+	/** an array of pointers to items */
 	gaiaExifTagPtr *TagsArray;
     } gaiaExifTagList;
+/**
+ Typedef for EXIF tag structure
+
+ \sa gaiaExifTagListStruct
+ */
     typedef gaiaExifTagList *gaiaExifTagListPtr;
 
 /* function prototipes */
 
+/**
+ Creates a list of EXIF tags by parsing a BLOB of the JPEG-EXIF type
+
+ \param blob the BLOB to be parsed
+ \param size the BLOB size (in bytes)
+
+ \return a list of EXIF tags: or NULL if any error is encountered
+
+ \sa gaiaExifTagsFree
+
+ \note you must explicitly destroy the list when it's any longer used.
+ */
     GAIAEXIF_DECLARE gaiaExifTagListPtr gaiaGetExifTags (const unsigned char
 							 *blob, int size);
+
+/**
+ Destroy a list of EXIF tags
+
+ \param tag_list the list to be destroied
+
+ \sa gaiaGetExifTags
+
+ \note the pointer passed to this function must be one returned by a
+ previous call to gaiaGetExifTags
+ */
     GAIAEXIF_DECLARE void gaiaExifTagsFree (gaiaExifTagListPtr tag_list);
+
+/**
+ Return the total number of EXIF tags into the list
+
+ \param tag_list pointer to an EXIF tag list.
+
+ \return the EXIF tag count.
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
     GAIAEXIF_DECLARE int gaiaGetExifTagsCount (gaiaExifTagListPtr tag_list);
+
+/**
+ Retrieves an EXIF tag by its relative position into the list
+
+ \param tag_list pointer to an EXIF tag list.
+ \param pos relative item position [first item is 0]
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree, gaiaExifTagsCount
+ */
     GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByPos (gaiaExifTagListPtr
 							 tag_list,
 							 const int pos);
+
+/**
+ Return the total number of EXIF tags into the list
+
+ \param tag_list pointer to an EXIF tag list.
+
+ \return the EXIF tag count.
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
+    GAIAEXIF_DECLARE int gaiaGetExifTagsCount (gaiaExifTagListPtr tag_list);
+
+/**
+ Retrieves an EXIF tag by its Tag ID
+
+ \param tag_list pointer to an EXIF tag list.
+ \param tag_id the Tag ID to be found
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
     GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagById (const gaiaExifTagListPtr
 							tag_list,
 							const unsigned short
 							tag_id);
+
+/**
+ Retrieves an EXIF-GPS tag by its Tag ID
+
+ \param tag_list pointer to an EXIF tag list.
+ \param tag_id the GPS Tag ID to be found
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
     GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifGpsTagById (const
 							   gaiaExifTagListPtr
 							   tag_list,
 							   const unsigned short
 							   tag_id);
+
+/**
+ Retrieves an EXIF tag by its name
+
+ \param tag_list pointer to an EXIF tag list.
+ \param tag_name the Tag Name to be found
+
+ \return a pointer to the corresponding EXIF tag: NULL if not found
+
+ \sa gaiaGetExifTags, gaiaExifTagsFree
+ */
     GAIAEXIF_DECLARE gaiaExifTagPtr gaiaGetExifTagByName (const
 							  gaiaExifTagListPtr
 							  tag_list,
 							  const char *tag_name);
+
+/**
+ Return the Tag ID from an EXIF tag
+
+ \param tag pointer to an EXIF tag
+ 
+ \return the Tag ID
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
     GAIAEXIF_DECLARE unsigned short gaiaExifTagGetId (const gaiaExifTagPtr tag);
+
+/**
+ Return the Tag Name from an EXIF tag
+
+ \param tag pointer to an EXIF tag
+ \param tag_name receiving buffer: the Tag Name will be copied here
+ \param len length of the receiving buffer
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
     GAIAEXIF_DECLARE void gaiaExifTagGetName (const gaiaExifTagPtr tag,
 					      char *tag_name, int len);
+
+/**
+ Checks if an EXIF tag actually is an EXIF-GPS tag
+
+ \param tag pointer to an EXIF tag
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
     GAIAEXIF_DECLARE int gaiaIsExifGpsTag (const gaiaExifTagPtr tag);
+
+/**
+ Return the value type for an EXIF tag
+
+ \param tag pointer to an EXIF tag
+
+ \return the value type: one of GAIA_EXIF_NONE, GAIA_EXIF_BYTE,
+ GAIA_EXIF_SHORT, GAIA_EXIF_STRING, GAIA_EXIF_LONG, GAIA_EXIF_RATIONAL,
+ GAIA_EXIF_SLONG, GAIA_EXIF_SRATIONAL
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
     GAIAEXIF_DECLARE unsigned short gaiaExifTagGetValueType (const
 							     gaiaExifTagPtr
 							     tag);
+
+/**
+ Return the total count of values from an EXIF tag
+ 
+ \param tag pointer to an EXIF tag
+
+ \return the number of available values
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
     GAIAEXIF_DECLARE unsigned short gaiaExifTagGetNumValues (const
 							     gaiaExifTagPtr
 							     tag);
+
+/**
+ Return a BYTE value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the BYTE value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE unsigned char gaiaExifTagGetByteValue (const gaiaExifTagPtr
 							    tag, const int ind,
 							    int *ok);
+
+/**
+ Return a STRING value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param str receiving buffer: the STRING value will be copied here.
+ \param len length of the receiving buffer
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE void gaiaExifTagGetStringValue (const gaiaExifTagPtr tag,
 						     char *str, int len,
 						     int *ok);
+
+/**
+ Return a SHORT value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the SHORT value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE unsigned short gaiaExifTagGetShortValue (const
 							      gaiaExifTagPtr
 							      tag,
 							      const int ind,
 							      int *ok);
+
+/**
+ Return a LONG value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the LONG value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE unsigned int gaiaExifTagGetLongValue (const gaiaExifTagPtr
 							   tag, const int ind,
 							   int *ok);
+
+/**
+ Return a RATIONAL [numerator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the RATIONAL [numerator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational1Value (const
 								gaiaExifTagPtr
 								tag,
 								const int ind,
 								int *ok);
+
+/**
+ Return a RATIONAL [denominator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the RATIONAL [denominator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE unsigned int gaiaExifTagGetRational2Value (const
 								gaiaExifTagPtr
 								tag,
 								const int ind,
 								int *ok);
+
+/**
+ Return a RATIONAL value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the RATIONAL value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE double gaiaExifTagGetRationalValue (const gaiaExifTagPtr
 							 tag, const int ind,
 							 int *ok);
+
+/**
+ Return a Signed SHORT value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the Signed SHORT value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE short gaiaExifTagGetSignedShortValue (const gaiaExifTagPtr
 							   tag, const int ind,
 							   int *ok);
+
+/**
+ Return a Signed LONG value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the Signed LONG value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE int gaiaExifTagGetSignedLongValue (const gaiaExifTagPtr
 							tag, const int ind,
 							int *ok);
+
+/**
+ Return a SRATIONAL [numerator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the SRATIONAL [numerator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational1Value (const
 							     gaiaExifTagPtr tag,
 							     const int ind,
 							     int *ok);
+
+/**
+ Return a SRATIONAL [denominator] value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the SRATIONAL [denominator] value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE int gaiaExifTagGetSignedRational2Value (const
 							     gaiaExifTagPtr tag,
 							     const int ind,
 							     int *ok);
+
+/**
+ Return a Signed RATIONAL value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the Signed RATIONAL value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE double gaiaExifTagGetSignedRationalValue (const
 							       gaiaExifTagPtr
 							       tag,
 							       const int ind,
 							       int *ok);
+
+/**
+ Return a FLOAT value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the FLOAT value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE float gaiaExifTagGetFloatValue (const gaiaExifTagPtr tag,
 						     const int ind, int *ok);
+
+/**
+ Return a DOUBLE value from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param ind value index [first value has index 0].
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \return the DOUBLE value
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaExifTagGetValueType, gaiaExifTagGetNumValues
+ */
     GAIAEXIF_DECLARE double gaiaExifTagGetDoubleValue (const gaiaExifTagPtr tag,
 						       const int ind, int *ok);
+
+/**
+ Return a human readable description from an EXIF tag
+
+ \param tag pointer to an EXIF tag.
+ \param str receiving buffer: the STRING value will be copied here.
+ \param len length of the receiving buffer
+ \param ok on completion will contain 0 on failure: any other value on success.
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName
+ */
     GAIAEXIF_DECLARE void gaiaExifTagGetHumanReadable (const gaiaExifTagPtr tag,
 						       char *str, int len,
 						       int *ok);
+
+/**
+ Attempts to guess the actual content-type of some BLOB
+
+ \param blob the BLOB to be parsed 
+ \param size length of the BLOB (in bytes)
+
+ \return the BLOB type: one of GAIA_HEX_BLOB, GAIA_GIF_BLOB, GAIA_PNG_BLOB,
+ GAIA_JPEG_BLOB, GAIA_EXIF_BLOB, GAIA_EXIF_GPS_BLOB, GAIA_ZIP_BLOB,
+ GAIA_PDF_BLOB, GAIA_GEOMETRY_BLOB, GAIA_TIFF_BLOB
+ */
     GAIAEXIF_DECLARE int gaiaGuessBlobType (const unsigned char *blob,
 					    int size);
+/**
+ Return longitude and latitude from an EXIF-GPS tag
+
+ \param blob the BLOB to be parsed 
+ \param size length of the BLOB (in bytes)
+ \param longitude on success will contain the longitude coordinate
+ \param latitude on success will contain the latitude coordinate
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaIsExifGpsTag
+ */
     GAIAEXIF_DECLARE int gaiaGetGpsCoords (const unsigned char *blob, int size,
 					   double *longitude, double *latitude);
+/**
+ Return a text string representing DMS coordinates from an EXIF-GPS tag
+
+ \param blob the BLOB to be parsed 
+ \param size length of the BLOB (in bytes)
+ \param latlong receiving buffer: the text string will be copied here.
+ \param ll_size length of the receiving buffer
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGetExifTagById, gaiaGetExifGpsTagById, gaiaGetExifTagByName, 
+ gaiaIsExifGpsTag
+ */
     GAIAEXIF_DECLARE int gaiaGetGpsLatLong (const unsigned char *blob, int size,
 					    char *latlong, int ll_size);
 
diff --git a/libspatialite/src/headers/spatialite/gaiageo.h b/libspatialite/src/headers/spatialite/gaiageo.h
index 821eaae..8bb752d 100644
--- a/libspatialite/src/headers/spatialite/gaiageo.h
+++ b/libspatialite/src/headers/spatialite/gaiageo.h
@@ -1,4 +1,4 @@
-/* 
+/*
  gaiageo.h -- Gaia common support for geometries
   
  version 3.0, 2011 July 20
@@ -43,1070 +43,34 @@ the terms of any one of the MPL, the GPL or the LGPL.
  
 */
 
+
+/**
+ \file gaiageo.h
+
+ Geometry handling functions and constants 
+ */
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 /* stdio.h included for FILE objects. */
 #include <stdio.h>
-
 #ifdef DLL_EXPORT
 #define GAIAGEO_DECLARE __declspec(dllexport)
 #else
 #define GAIAGEO_DECLARE extern
 #endif
+#endif
 
 #ifndef _GAIAGEO_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
 #define _GAIAGEO_H
-
-#ifdef __cplusplus
-extern "C"
-{
 #endif
 
-/* constant values for generic geometry classes */
-#define GAIA_TYPE_NONE		0
-#define GAIA_TYPE_POINT		1
-#define GAIA_TYPE_LINESTRING	2
-#define GAIA_TYPE_POLYGON	3
-
-/* constants that defines byte storage order  */
-#define GAIA_BIG_ENDIAN		0
-#define GAIA_LITTLE_ENDIAN	1
-
-/* constants that defines special markers used for encoding of SpatiaLite internal BLOB geometries  */
-#define GAIA_MARK_START		0x00
-#define GAIA_MARK_END		0xFE
-#define GAIA_MARK_MBR		0x7C
-#define GAIA_MARK_ENTITY	0x69
-
-/* constants that defines GEOMETRY CLASSes */
-#define GAIA_UNKNOWN			0
-#define GAIA_POINT			1
-#define GAIA_LINESTRING			2
-#define GAIA_POLYGON			3
-#define GAIA_MULTIPOINT			4
-#define GAIA_MULTILINESTRING		5
-#define GAIA_MULTIPOLYGON		6
-#define GAIA_GEOMETRYCOLLECTION		7
-#define GAIA_POINTZ			1001
-#define GAIA_LINESTRINGZ		1002
-#define GAIA_POLYGONZ			1003
-#define GAIA_MULTIPOINTZ		1004
-#define GAIA_MULTILINESTRINGZ		1005
-#define GAIA_MULTIPOLYGONZ		1006
-#define GAIA_GEOMETRYCOLLECTIONZ	1007
-#define GAIA_POINTM			2001
-#define GAIA_LINESTRINGM		2002
-#define GAIA_POLYGONM			2003
-#define GAIA_MULTIPOINTM		2004
-#define GAIA_MULTILINESTRINGM		2005
-#define GAIA_MULTIPOLYGONM		2006
-#define GAIA_GEOMETRYCOLLECTIONM	2007
-#define GAIA_POINTZM			3001
-#define GAIA_LINESTRINGZM		3002
-#define GAIA_POLYGONZM			3003
-#define GAIA_MULTIPOINTZM		3004
-#define GAIA_MULTILINESTRINGZM		3005
-#define GAIA_MULTIPOLYGONZM		3006
-#define GAIA_GEOMETRYCOLLECTIONZM	3007
-
-/* constants that defines Compressed GEOMETRY CLASSes */
-#define GAIA_COMPRESSED_LINESTRING		1000002
-#define GAIA_COMPRESSED_POLYGON			1000003
-#define GAIA_COMPRESSED_LINESTRINGZ		1001002
-#define GAIA_COMPRESSED_POLYGONZ		1001003
-#define GAIA_COMPRESSED_LINESTRINGM		1002002
-#define GAIA_COMPRESSED_POLYGONM		1002003
-#define GAIA_COMPRESSED_LINESTRINGZM		1003002
-#define GAIA_COMPRESSED_POLYGONZM		1003003
-
-/* constants that defines token codes for WKT parsing */
-#define GAIA_COORDINATE		8
-#define GAIA_OPENED		9
-#define GAIA_CLOSED		10
-#define GAIA_COMMA		11
-#define GAIA_SPACE		12
-
-
-/* constants that defines GEOS-WKB 3D CLASSes */
-#define GAIA_GEOSWKB_POINTZ			-2147483647
-#define GAIA_GEOSWKB_LINESTRINGZ		-2147483646
-#define GAIA_GEOSWKB_POLYGONZ			-2147483645
-#define GAIA_GEOSWKB_MULTIPOINTZ		-2147483644
-#define GAIA_GEOSWKB_MULTILINESTRINGZ		-2147483643
-#define GAIA_GEOSWKB_MULTIPOLYGONZ		-2147483642
-#define GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ	-2147483641
-
-/* constants that defines multitype values */
-#define GAIA_NULL_VALUE		0
-#define GAIA_TEXT_VALUE		1
-#define GAIA_INT_VALUE		2
-#define GAIA_DOUBLE_VALUE	3
-
-/* constants that defines POINT index for LINESTRING */
-#define GAIA_START_POINT	1
-#define GAIA_END_POINT		2
-#define GAIA_POINTN		3
-
-/* constants that defines MBRs spatial relationships */
-#define GAIA_MBR_CONTAINS	1
-#define GAIA_MBR_DISJOINT	2
-#define GAIA_MBR_EQUAL		3
-#define GAIA_MBR_INTERSECTS	4
-#define GAIA_MBR_OVERLAPS	5
-#define GAIA_MBR_TOUCHES	6
-#define GAIA_MBR_WITHIN		7
-
-/* constants used for FilterMBR */
-#define GAIA_FILTER_MBR_WITHIN		74
-#define GAIA_FILTER_MBR_CONTAINS	77
-#define GAIA_FILTER_MBR_INTERSECTS	79
-#define GAIA_FILTER_MBR_DECLARE		89
-
-/* constants defining SVG default values */
-#define GAIA_SVG_DEFAULT_RELATIVE 	0
-#define GAIA_SVG_DEFAULT_PRECISION	6
-#define GAIA_SVG_DEFAULT_MAX_PRECISION 15
-
-/* constants used for VirtualNetwork */
-#define GAIA_NET_START		0x67
-#define GAIA_NET64_START	0x68
-#define GAIA_NET64_A_STAR_START	0x69
-#define GAIA_NET_END		0x87
-#define GAIA_NET_HEADER		0xc0
-#define GAIA_NET_CODE		0xa6
-#define GAIA_NET_ID		0xb5
-#define GAIA_NET_NODE		0xde
-#define GAIA_NET_ARC		0x54
-#define GAIA_NET_TABLE		0xa0
-#define GAIA_NET_FROM		0xa1
-#define GAIA_NET_TO		0xa2
-#define GAIA_NET_GEOM		0xa3
-#define GAIA_NET_NAME		0xa4
-#define GAIA_NET_A_STAR_COEFF	0xa5
-#define GAIA_NET_BLOCK		0xed
-
-/* constants used for Coordinate Dimensions */
-#define GAIA_XY		0x00
-#define GAIA_XY_Z	0x01
-#define GAIA_XY_M	0x02
-#define GAIA_XY_Z_M	0x03
-
-/* constants used for length unit conversion */
-#define GAIA_KM		0
-#define GAIA_M		1
-#define GAIA_DM		2
-#define GAIA_CM		3
-#define GAIA_MM		4
-#define GAIA_KMI	5
-#define GAIA_IN		6
-#define GAIA_FT		7
-#define GAIA_YD		8
-#define GAIA_MI		9
-#define GAIA_FATH	10
-#define GAIA_CH		11
-#define GAIA_LINK	12
-#define GAIA_US_IN	13
-#define GAIA_US_FT	14
-#define GAIA_US_YD	15
-#define GAIA_US_CH	16
-#define GAIA_US_MI	17
-#define GAIA_IND_YD	18
-#define GAIA_IND_FT	19
-#define GAIA_IND_CH	20
-#define GAIA_MIN_UNIT	GAIA_KM
-#define GAIA_MAX_UNIT	GAIA_IND_CH
-
-/* constants used for SHAPES */
-#define GAIA_SHP_NULL		0
-#define GAIA_SHP_POINT		1
-#define GAIA_SHP_POLYLINE	3
-#define GAIA_SHP_POLYGON	5
-#define GAIA_SHP_MULTIPOINT	8
-#define GAIA_SHP_POINTZ		11
-#define GAIA_SHP_POLYLINEZ	13
-#define GAIA_SHP_POLYGONZ	15
-#define GAIA_SHP_MULTIPOINTZ	18
-#define GAIA_SHP_POINTM		21
-#define GAIA_SHP_POLYLINEM	23
-#define GAIA_SHP_POLYGONM	25
-#define GAIA_SHP_MULTIPOINTM	28
-
-/* macros */
-#define gaiaGetPoint(xy,v,x,y)	\
-				{*x = xy[(v) * 2]; \
-				 *y = xy[(v) * 2 + 1];}
-
-#define gaiaSetPoint(xy,v,x,y)	\
-				{xy[(v) * 2] = x; \
-				 xy[(v) * 2 + 1] = y;}
-
-#define gaiaGetPointXYZ(xyz,v,x,y,z)	\
-				{*x = xyz[(v) * 3]; \
-				 *y = xyz[(v) * 3 + 1]; \
-				 *z = xyz[(v) * 3 + 2];}
-
-#define gaiaSetPointXYZ(xyz,v,x,y,z)	\
-				{xyz[(v) * 3] = x; \
-				 xyz[(v) * 3 + 1] = y; \
-				 xyz[(v) * 3 + 2] = z;}
-
-#define gaiaGetPointXYM(xym,v,x,y,m)	\
-				{*x = xym[(v) * 3]; \
-				 *y = xym[(v) * 3 + 1]; \
-				 *m = xym[(v) * 3 + 2];}
-
-#define gaiaSetPointXYM(xym,v,x,y,m)	\
-				{xym[(v) * 3] = x; \
-				 xym[(v) * 3 + 1] = y; \
-				 xym[(v) * 3 + 2] = m;}
-
-#define gaiaGetPointXYZM(xyzm,v,x,y,z,m)	\
-				{*x = xyzm[(v) * 4]; \
-				 *y = xyzm[(v) * 4 + 1]; \
-				 *z = xyzm[(v) * 4 + 2]; \
-				 *m = xyzm[(v) * 4 + 3];}
-
-#define gaiaSetPointXYZM(xyzm,v,x,y,z,m)	\
-				{xyzm[(v) * 4] = x; \
-				 xyzm[(v) * 4 + 1] = y; \
-				 xyzm[(v) * 4 + 2] = z; \
-				 xyzm[(v) * 4 + 3] = m;}
-
-    typedef struct gaiaPointStruct
-    {
-/* an OpenGis POINT */
-	double X;		/* X,Y coordinates */
-	double Y;
-	double Z;		/* Z coordinate */
-	double M;		/* M measure */
-	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
-	struct gaiaPointStruct *Next;	/* for double-linked list */
-	struct gaiaPointStruct *Prev;	/* for double-linked list */
-    } gaiaPoint;
-    typedef gaiaPoint *gaiaPointPtr;
-
-    typedef struct gaiaDynamicLineStruct
-    {
-/* a generic DYNAMIC LINE object */
-	int Error;
-	int Srid;
-	gaiaPointPtr First;	/* Points linked list - first */
-	gaiaPointPtr Last;	/* Points linked list - last */
-    } gaiaDynamicLine;
-    typedef gaiaDynamicLine *gaiaDynamicLinePtr;
-
-    typedef struct gaiaLinestringStruct
-    {
-/* an OpenGis LINESTRING */
-	int Points;		/* number of vertices */
-	double *Coords;		/* X,Y [vertices] array */
-	double MinX;		/* MBR - BBOX */
-	double MinY;		/* MBR - BBOX */
-	double MaxX;		/* MBR - BBOX */
-	double MaxY;		/* MBR - BBOX */
-	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
-	struct gaiaLinestringStruct *Next;	/* for linked list */
-    } gaiaLinestring;
-    typedef gaiaLinestring *gaiaLinestringPtr;
-
-    typedef struct gaiaRingStruct
-    {
-/* a GIS ring - OpenGis LINESTRING, closed */
-	int Points;		/* number of vertices */
-	double *Coords;		/* X,Y [vertices] array */
-	int Clockwise;		/* clockwise / counterclockwise */
-	double MinX;		/* MBR - BBOX */
-	double MinY;		/* MBR - BBOX */
-	double MaxX;		/* MBR - BBOX */
-	double MaxY;		/* MBR - BBOX */
-	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
-	struct gaiaRingStruct *Next;	/* for linked list */
-	struct gaiaPolygonStruct *Link;	/* polygon reference */
-    } gaiaRing;
-    typedef gaiaRing *gaiaRingPtr;
-
-    typedef struct gaiaPolygonStruct
-    {
-/* an OpenGis POLYGON */
-	gaiaRingPtr Exterior;	/* exterior ring */
-	int NumInteriors;	/* number of interior rings */
-	gaiaRingPtr Interiors;	/* interior rings array */
-	int NextInterior;	/* first free interior ring */
-	double MinX;		/* MBR - BBOX */
-	double MinY;		/* MBR - BBOX */
-	double MaxX;		/* MBR - BBOX */
-	double MaxY;		/* MBR - BBOX */
-	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
-	struct gaiaPolygonStruct *Next;	/* for linked list */
-    } gaiaPolygon;
-    typedef gaiaPolygon *gaiaPolygonPtr;
-
-    typedef struct gaiaGeomCollStruct
-    {
-/* OpenGis GEOMETRYCOLLECTION */
-	int Srid;		/* the SRID value for this GEOMETRY */
-	char endian_arch;	/* littleEndian - bigEndian arch for targer CPU */
-	char endian;		/* littleEndian - bigEndian */
-	const unsigned char *blob;	/* WKB encoded buffer */
-	unsigned long size;	/* buffer size */
-	unsigned long offset;	/* current offset [for parsing] */
-	gaiaPointPtr FirstPoint;	/* Points linked list - first */
-	gaiaPointPtr LastPoint;	/* Points linked list - last */
-	gaiaLinestringPtr FirstLinestring;	/* Linestrings linked list - first */
-	gaiaLinestringPtr LastLinestring;	/* Linestrings linked list - last */
-	gaiaPolygonPtr FirstPolygon;	/* Polygons linked list - first */
-	gaiaPolygonPtr LastPolygon;	/* Polygons linked list - last */
-	double MinX;		/* MBR - BBOX */
-	double MinY;		/* MBR - BBOX */
-	double MaxX;		/* MBR - BBOX */
-	double MaxY;		/* MBR - BBOX */
-	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
-	int DeclaredType;	/* the declared TYPE for this Geometry */
-	struct gaiaGeomCollStruct *Next;	/* Vanuatu - used for linked list */
-    } gaiaGeomColl;
-    typedef gaiaGeomColl *gaiaGeomCollPtr;
-
-    typedef struct gaiaPreRingStruct
-    {
-/* a LINESTRING used to build rings */
-	gaiaLinestringPtr Line;	/* a LINESTRING pointer */
-	int AlreadyUsed;	/* a switch to mark an already used line element */
-	struct gaiaPreRingStruct *Next;	/* for linked list */
-    } gaiaPreRing;
-    typedef gaiaPreRing *gaiaPreRingPtr;
-
-    typedef struct gaiaValueStruct
-    {
-/* a DBF field multitype value */
-	short Type;		/* the type */
-	char *TxtValue;		/* the text value */
-	sqlite3_int64 IntValue;	/* the integer value */
-	double DblValue;	/* the double value */
-    } gaiaValue;
-    typedef gaiaValue *gaiaValuePtr;
-
-    typedef struct gaiaDbfFieldStruct
-    {
-/* a DBF field definition - shapefile attribute */
-	char *Name;		/* field name */
-	unsigned char Type;	/* field type */
-	int Offset;		/* buffer offset [this field begins at *buffer+offset* and extends for *length* bytes */
-	unsigned char Length;	/* field total lenght [in bytes] */
-	unsigned char Decimals;	/* decimal positions */
-	gaiaValuePtr Value;	/* the current multitype value for this attribute */
-	struct gaiaDbfFieldStruct *Next;	/* pointer to next element in linked list */
-    } gaiaDbfField;
-    typedef gaiaDbfField *gaiaDbfFieldPtr;
-
-    typedef struct gaiaDbfListStruct
-    {
-/* a linked list to containt the DBF fields definitions - shapefile attributes */
-	int RowId;		/* the current RowId */
-	gaiaGeomCollPtr Geometry;	/* geometry for current entity */
-	gaiaDbfFieldPtr First;	/* pointer to first element in linked list */
-	gaiaDbfFieldPtr Last;	/* pointer to last element in linker list */
-    } gaiaDbfList;
-    typedef gaiaDbfList *gaiaDbfListPtr;
-
-    typedef struct gaiaDbfStruct
-    {
-/* DBF TYPE */
-	int endian_arch;
-	int Valid;		/* 1 = ready to process */
-	char *Path;		/* the DBF path */
-	FILE *flDbf;		/* the DBF file handle */
-	gaiaDbfListPtr Dbf;	/* the DBF attributes list */
-	unsigned char *BufDbf;	/* the DBF I/O buffer */
-	int DbfHdsz;		/* the DBF header length */
-	int DbfReclen;		/* the DBF record length */
-	int DbfSize;		/* current DBF size */
-	int DbfRecno;		/* current DBF record number */
-	void *IconvObj;		/* opaque reference to ICONV converter */
-	char *LastError;	/* last error message */
-    } gaiaDbf;
-    typedef gaiaDbf *gaiaDbfPtr;
-
-    typedef struct gaiaShapefileStruct
-    {
-/* SHAPEFILE TYPE */
-	int endian_arch;
-	int Valid;		/* 1 = ready to process */
-	int ReadOnly;		/* read or write mode */
-	char *Path;		/* the shapefile abstract path [no suffixes] */
-	FILE *flShx;		/* the SHX file handle */
-	FILE *flShp;		/* the SHP file handle */
-	FILE *flDbf;		/* the DBF file handle */
-	int Shape;		/* the SHAPE code for the whole shapefile */
-	gaiaDbfListPtr Dbf;	/* the DBF attributes list */
-	unsigned char *BufDbf;	/* the DBF I/O buffer */
-	int DbfHdsz;		/* the DBF header length */
-	int DbfReclen;		/* the DBF record length */
-	int DbfSize;		/* current DBF size */
-	int DbfRecno;		/* current DBF record number */
-	unsigned char *BufShp;	/* the SHP I/O buffer */
-	int ShpBfsz;		/* the SHP buffer current size */
-	int ShpSize;		/* current SHP size */
-	int ShxSize;		/* current SHX size */
-	double MinX;		/* the MBR/BBOX for the whole shapefile */
-	double MinY;
-	double MaxX;
-	double MaxY;
-	void *IconvObj;		/* opaque reference to ICONV converter */
-	char *LastError;	/* last error message */
-	int EffectiveType;	/* the effective Geometry-type, as determined by gaiaShpAnalyze() */
-	int EffectiveDims;	/* the effective Dimensions [XY, XYZ, XYM, XYZM], as determined by gaiaShpAnalyze() */
-    } gaiaShapefile;
-    typedef gaiaShapefile *gaiaShapefilePtr;
-
-    typedef struct gaiaOutBufferStruct
-    {
-/* a struct handling a dynamically growing output buffer */
-	char *Buffer;
-	int WriteOffset;
-	int BufferSize;
-	int Error;
-    } gaiaOutBuffer;
-    typedef gaiaOutBuffer *gaiaOutBufferPtr;
-
-#ifndef OMIT_ICONV		/* ICONV enabled: supporting text reader */
-
-#define VRTTXT_FIELDS_MAX	65535
-#define VRTTXT_BLOCK_MAX 65535
-
-#define VRTTXT_TEXT		1
-#define VRTTXT_INTEGER	2
-#define VRTTXT_DOUBLE	3
-#define VRTTXT_NULL	4
-
-    struct vrttxt_line
-    {
-/* a struct representing a full LINE (aka Record) */
-	off_t offset;
-	int len;
-	int field_offsets[VRTTXT_FIELDS_MAX];
-	int num_fields;
-	int error;
-    };
-
-    struct vrttxt_row
-    {
-/* a struct storing Row offsets */
-	int line_no;
-	off_t offset;
-	int len;
-	int num_fields;
-    };
-
-    struct vrttxt_row_block
-    {
-/*
-/ for efficiency sake, individuale Row offsets 
-/ are grouped in reasonably sized blocks
-*/
-	struct vrttxt_row rows[VRTTXT_BLOCK_MAX];
-	int num_rows;
-	int min_line_no;
-	int max_line_no;
-	struct vrttxt_row_block *next;
-    };
-
-    struct vrttxt_column_header
-    {
-/* a struct representing a Column (aka Field) header */
-	char *name;
-	int type;
-    };
-
-    typedef struct vrttxt_reader
-    {
-/* the main TXT-Reader struct */
-	struct vrttxt_column_header columns[VRTTXT_FIELDS_MAX];
-	FILE *text_file;
-	void *toUtf8;		/* the UTF-8 ICONV converter */
-	char field_separator;
-	char text_separator;
-	char decimal_separator;
-	int first_line_titles;
-	int error;
-	struct vrttxt_row_block *first;
-	struct vrttxt_row_block *last;
-	struct vrttxt_row **rows;
-	int num_rows;
-	int line_no;
-	int max_fields;
-	int current_buf_sz;
-	int current_buf_off;
-	char *line_buffer;
-	char *field_buffer;
-	int field_offsets[VRTTXT_FIELDS_MAX];
-	int field_lens[VRTTXT_FIELDS_MAX];
-	int max_current_field;
-	int current_line_ready;
-    } gaiaTextReader;
-    typedef gaiaTextReader *gaiaTextReaderPtr;
-
-#endif				/* end ICONV (text reader) */
-
-/* function prototipes */
-
-    GAIAGEO_DECLARE int gaiaEndianArch (void);
-    GAIAGEO_DECLARE short gaiaImport16 (const unsigned char *p,
-					int little_endian,
-					int little_endian_arch);
-    GAIAGEO_DECLARE int gaiaImport32 (const unsigned char *p, int little_endian,
-				      int little_endian_arch);
-    GAIAGEO_DECLARE float gaiaImportF32 (const unsigned char *p,
-					 int little_endian,
-					 int little_endian_arch);
-    GAIAGEO_DECLARE double gaiaImport64 (const unsigned char *p,
-					 int little_endian,
-					 int little_endian_arch);
-    GAIAGEO_DECLARE sqlite3_int64 gaiaImportI64 (const unsigned char *p,
-						 int little_endian,
-						 int little_endian_arch);
-    GAIAGEO_DECLARE void gaiaExport16 (unsigned char *p, short value,
-				       int little_endian,
-				       int little_endian_arch);
-    GAIAGEO_DECLARE void gaiaExport32 (unsigned char *p, int value,
-				       int little_endian,
-				       int little_endian_arch);
-    GAIAGEO_DECLARE void gaiaExportF32 (unsigned char *p, float value,
-					int little_endian,
-					int little_endian_arch);
-    GAIAGEO_DECLARE void gaiaExport64 (unsigned char *p, double value,
-				       int little_endian,
-				       int little_endian_arch);
-    GAIAGEO_DECLARE void gaiaExportI64 (unsigned char *p, sqlite3_int64 value,
-					int little_endian,
-					int little_endian_arch);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPoint (double x, double y);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZ (double x, double y,
-						    double z);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYM (double x, double y,
-						    double m);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZM (double x, double y,
-						     double z, double m);
-    GAIAGEO_DECLARE void gaiaFreePoint (gaiaPointPtr ptr);
-    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestring (int vert);
-    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZ (int vert);
-    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYM (int vert);
-    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZM (int vert);
-    GAIAGEO_DECLARE void gaiaFreeLinestring (gaiaLinestringPtr ptr);
-    GAIAGEO_DECLARE void gaiaCopyLinestringCoords (gaiaLinestringPtr dst,
-						   gaiaLinestringPtr src);
-    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRing (int vert);
-    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZ (int vert);
-    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYM (int vert);
-    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZM (int vert);
-    GAIAGEO_DECLARE void gaiaFreeRing (gaiaRingPtr ptr);
-    GAIAGEO_DECLARE void gaiaCopyRingCoords (gaiaRingPtr dst, gaiaRingPtr src);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygon (int vert, int excl);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZ (int vert, int excl);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYM (int vert, int excl);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZM (int vert, int excl);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaCreatePolygon (gaiaRingPtr ring);
-    GAIAGEO_DECLARE void gaiaFreePolygon (gaiaPolygonPtr p);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomColl (void);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZ (void);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYM (void);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZM (void);
-    GAIAGEO_DECLARE void gaiaFreeGeomColl (gaiaGeomCollPtr p);
-    GAIAGEO_DECLARE void gaiaAddPointToGeomColl (gaiaGeomCollPtr p, double x,
-						 double y);
-    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZ (gaiaGeomCollPtr p, double x,
-						    double y, double z);
-    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYM (gaiaGeomCollPtr p, double x,
-						    double y, double m);
-    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZM (gaiaGeomCollPtr p,
-						     double x, double y,
-						     double z, double m);
-    GAIAGEO_DECLARE void gaiaMbrLinestring (gaiaLinestringPtr line);
-    GAIAGEO_DECLARE void gaiaMbrRing (gaiaRingPtr rng);
-    GAIAGEO_DECLARE void gaiaMbrPolygon (gaiaPolygonPtr polyg);
-    GAIAGEO_DECLARE void gaiaMbrGeometry (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE void gaiaZRangeLinestring (gaiaLinestringPtr line,
-					       double *min, double *max);
-    GAIAGEO_DECLARE void gaiaZRangeRing (gaiaRingPtr rng, double *min,
-					 double *max);
-    GAIAGEO_DECLARE void gaiaZRangePolygon (gaiaPolygonPtr polyg, double *min,
-					    double *max);
-    GAIAGEO_DECLARE void gaiaZRangeGeometry (gaiaGeomCollPtr geom, double *min,
-					     double *max);
-    GAIAGEO_DECLARE void gaiaMRangeLinestring (gaiaLinestringPtr line,
-					       double *min, double *max);
-    GAIAGEO_DECLARE void gaiaMRangeRing (gaiaRingPtr rng, double *min,
-					 double *max);
-    GAIAGEO_DECLARE void gaiaMRangePolygon (gaiaPolygonPtr polyg, double *min,
-					    double *max);
-    GAIAGEO_DECLARE void gaiaMRangeGeometry (gaiaGeomCollPtr geom, double *min,
-					     double *max);
-    GAIAGEO_DECLARE gaiaLinestringPtr
-	gaiaAddLinestringToGeomColl (gaiaGeomCollPtr p, int vert);
-    GAIAGEO_DECLARE void gaiaInsertLinestringInGeomColl (gaiaGeomCollPtr p,
-							 gaiaLinestringPtr
-							 line);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAddPolygonToGeomColl (gaiaGeomCollPtr p,
-							     int vert,
-							     int interiors);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaInsertPolygonInGeomColl (gaiaGeomCollPtr
-								p,
-								gaiaRingPtr
-								ring);
-    GAIAGEO_DECLARE gaiaRingPtr gaiaAddInteriorRing (gaiaPolygonPtr p, int pos,
-						     int vert);
-    GAIAGEO_DECLARE void gaiaInsertInteriorRing (gaiaPolygonPtr p,
-						 gaiaRingPtr ring);
-    GAIAGEO_DECLARE void gaiaAddRingToPolyg (gaiaPolygonPtr polyg,
-					     gaiaRingPtr ring);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaAllocDynamicLine (void);
-    GAIAGEO_DECLARE void gaiaFreeDynamicLine (gaiaDynamicLinePtr p);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaAppendPointToDynamicLine (gaiaDynamicLinePtr p, double x, double y);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaAppendPointZToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
-				       double z);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaAppendPointMToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
-				       double m);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaAppendPointZMToDynamicLine (gaiaDynamicLinePtr p, double x,
-					double y, double z, double m);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaPrependPointToDynamicLine (gaiaDynamicLinePtr p, double x,
-				       double y);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaPrependPointZToDynamicLine (gaiaDynamicLinePtr p, double x,
-					double y, double z);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaPrependPointMToDynamicLine (gaiaDynamicLinePtr p, double x,
-					double y, double m);
-    GAIAGEO_DECLARE gaiaPointPtr
-	gaiaPrependPointZMToDynamicLine (gaiaDynamicLinePtr p, double x,
-					 double y, double z, double m);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertAfter (gaiaDynamicLinePtr
-							     p, gaiaPointPtr pt,
-							     double x,
-							     double y);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertBefore (gaiaDynamicLinePtr
-							      p,
-							      gaiaPointPtr pt,
-							      double x,
-							      double y);
-    GAIAGEO_DECLARE void gaiaDynamicLineDeletePoint (gaiaDynamicLinePtr p,
-						     gaiaPointPtr pt);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCloneDynamicLine (gaiaDynamicLinePtr
-							     org);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr
-	gaiaReverseDynamicLine (gaiaDynamicLinePtr org);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr
-	gaiaDynamicLineSplitBefore (gaiaDynamicLinePtr org, gaiaPointPtr point);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr
-	gaiaDynamicLineSplitAfter (gaiaDynamicLinePtr org, gaiaPointPtr point);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr
-	gaiaDynamicLineJoinAfter (gaiaDynamicLinePtr org, gaiaPointPtr point,
-				  gaiaDynamicLinePtr toJoin);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr
-	gaiaDynamicLineJoinBefore (gaiaDynamicLinePtr org, gaiaPointPtr point,
-				   gaiaDynamicLinePtr toJoin);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByCoords (gaiaDynamicLinePtr
-							      p, double x,
-							      double y);
-    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByPos (gaiaDynamicLinePtr p,
-							   int pos);
-    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCreateDynamicLine (double *coords,
-							      int points);
-    GAIAGEO_DECLARE double gaiaMeasureLength (int dims, double *coords,
-					      int vert);
-    GAIAGEO_DECLARE double gaiaMeasureArea (gaiaRingPtr ring);
-    GAIAGEO_DECLARE void gaiaRingCentroid (gaiaRingPtr ring, double *rx,
-					   double *ry);
-    GAIAGEO_DECLARE void gaiaClockwise (gaiaRingPtr p);
-    GAIAGEO_DECLARE int gaiaIsPointOnRingSurface (gaiaRingPtr ring, double pt_x,
-						  double pt_y);
-    GAIAGEO_DECLARE double gaiaMinDistance (double x0, double y0,
-					    int dims, double *coords,
-					    int n_vert);
-    GAIAGEO_DECLARE int gaiaIsPointOnPolygonSurface (gaiaPolygonPtr polyg,
-						     double x, double y);
-    GAIAGEO_DECLARE int gaiaIntersect (double *x0, double *y0, double x1,
-				       double y1, double x2, double y2,
-				       double x3, double y3, double x4,
-				       double y4);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobWkb (const unsigned
-							       char *blob,
-							       unsigned int
-							       size);
-    GAIAGEO_DECLARE void gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom,
-						  unsigned char **result,
-						  int *size);
-    GAIAGEO_DECLARE void gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom,
-						  unsigned char **result,
-						  int *size);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobMbr (const unsigned
-							       char *blob,
-							       unsigned int
-							       size);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromWkb (const unsigned char *blob,
-						 unsigned int size);
-    GAIAGEO_DECLARE void gaiaToWkb (gaiaGeomCollPtr geom,
-				    unsigned char **result, int *size);
-    GAIAGEO_DECLARE char *gaiaToHexWkb (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE void gaiaFreeValue (gaiaValuePtr p);
-    GAIAGEO_DECLARE void gaiaSetNullValue (gaiaDbfFieldPtr field);
-    GAIAGEO_DECLARE void gaiaSetIntValue (gaiaDbfFieldPtr field,
-					  sqlite3_int64 value);
-    GAIAGEO_DECLARE void gaiaSetDoubleValue (gaiaDbfFieldPtr field,
-					     double value);
-    GAIAGEO_DECLARE void gaiaSetStrValue (gaiaDbfFieldPtr field, char *str);
-    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAllocDbfField (char *name,
-						       unsigned char type,
-						       int offset,
-						       unsigned char length,
-						       unsigned char decimals);
-    GAIAGEO_DECLARE void gaiaFreeDbfField (gaiaDbfFieldPtr p);
-    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaCloneDbfField (gaiaDbfFieldPtr org);
-    GAIAGEO_DECLARE gaiaDbfListPtr gaiaAllocDbfList (void);
-    GAIAGEO_DECLARE void gaiaFreeDbfList (gaiaDbfListPtr list);
-    GAIAGEO_DECLARE int gaiaIsValidDbfList (gaiaDbfListPtr list);
-    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAddDbfField (gaiaDbfListPtr list,
-						     char *name,
-						     unsigned char type,
-						     int offset,
-						     unsigned char length,
-						     unsigned char decimals);
-    GAIAGEO_DECLARE void gaiaResetDbfEntity (gaiaDbfListPtr list);
-    GAIAGEO_DECLARE gaiaValuePtr gaiaCloneValue (gaiaValuePtr org);
-    GAIAGEO_DECLARE gaiaDbfListPtr gaiaCloneDbfEntity (gaiaDbfListPtr org);
-    GAIAGEO_DECLARE gaiaShapefilePtr gaiaAllocShapefile (void);
-    GAIAGEO_DECLARE void gaiaFreeShapefile (gaiaShapefilePtr shp);
-    GAIAGEO_DECLARE void gaiaOpenShpRead (gaiaShapefilePtr shp,
-					  const char *path,
-					  const char *charFrom,
-					  const char *charTo);
-    GAIAGEO_DECLARE void gaiaOpenShpWrite (gaiaShapefilePtr shp,
-					   const char *path, int shape,
-					   gaiaDbfListPtr list,
-					   const char *charFrom,
-					   const char *charTo);
-    GAIAGEO_DECLARE int gaiaReadShpEntity (gaiaShapefilePtr shp,
-					   int current_row, int srid);
-    GAIAGEO_DECLARE void gaiaShpAnalyze (gaiaShapefilePtr shp);
-    GAIAGEO_DECLARE int gaiaWriteShpEntity (gaiaShapefilePtr shp,
-					    gaiaDbfListPtr entity);
-    GAIAGEO_DECLARE void gaiaFlushShpHeaders (gaiaShapefilePtr shp);
-    GAIAGEO_DECLARE gaiaDbfPtr gaiaAllocDbf (void);
-    GAIAGEO_DECLARE void gaiaFreeDbf (gaiaDbfPtr dbf);
-    GAIAGEO_DECLARE void gaiaOpenDbfRead (gaiaDbfPtr dbf,
-					  const char *path,
-					  const char *charFrom,
-					  const char *charTo);
-    GAIAGEO_DECLARE void gaiaOpenDbfWrite (gaiaDbfPtr dbf,
-					   const char *path,
-					   const char *charFrom,
-					   const char *charTo);
-    GAIAGEO_DECLARE int gaiaReadDbfEntity (gaiaDbfPtr dbf, int current_row,
-					   int *deleted);
-    GAIAGEO_DECLARE int gaiaWriteDbfEntity (gaiaDbfPtr dbf,
-					    gaiaDbfListPtr entity);
-    GAIAGEO_DECLARE void gaiaFlushDbfHeader (gaiaDbfPtr dbf);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseWkt (const unsigned char
-						  *dirty_buffer, short type);
-
-    GAIAGEO_DECLARE void gaiaToEWKB (gaiaOutBufferPtr out_buf,
-				     gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromEWKB (const unsigned char
-						  *in_buffer);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseEWKT (const unsigned char
-						   *in_buffer);
-    GAIAGEO_DECLARE void gaiaToEWKT (gaiaOutBufferPtr out_buf,
-				     gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseGeoJSON (const unsigned char
-						      *in_buffer);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseKml (const unsigned char
-						  *in_buffer);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseGml (const unsigned char
-						  *in_buffer,
-						  sqlite3 * sqlite_handle);
-
-    GAIAGEO_DECLARE void gaiaOutPointZ (gaiaOutBufferPtr out_buf,
-					gaiaPointPtr point);
-    GAIAGEO_DECLARE void gaiaOutLinestringZ (gaiaOutBufferPtr out_buf,
-					     gaiaLinestringPtr linestring);
-    GAIAGEO_DECLARE void gaiaOutPolygonZ (gaiaOutBufferPtr out_buf,
-					  gaiaPolygonPtr polygon);
-    GAIAGEO_DECLARE void gaiaOutWkt (gaiaOutBufferPtr out_buf,
-				     gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE void gaiaOutWktStrict (gaiaOutBufferPtr out_buf,
-					   gaiaGeomCollPtr geom, int precision);
-    GAIAGEO_DECLARE void gaiaOutSvg (gaiaOutBufferPtr out_buf,
-				     gaiaGeomCollPtr geom, int relative,
-				     int precision);
-    GAIAGEO_DECLARE void gaiaOutBareKml (gaiaOutBufferPtr out_buf,
-					 gaiaGeomCollPtr geom, int precision);
-    GAIAGEO_DECLARE void gaiaOutFullKml (gaiaOutBufferPtr out_buf,
-					 const char *name, const char *desc,
-					 gaiaGeomCollPtr geom, int precision);
-    GAIAGEO_DECLARE void gaiaOutGml (gaiaOutBufferPtr out_buf, int version,
-				     int precision, gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE void gaiaOutGeoJSON (gaiaOutBufferPtr out_buf,
-					 gaiaGeomCollPtr geom, int precision,
-					 int options);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromFgf (const unsigned char *blob,
-						 unsigned int size);
-    GAIAGEO_DECLARE void gaiaToFgf (gaiaGeomCollPtr geom,
-				    unsigned char **result, int *size,
-				    int coord_dims);
-    GAIAGEO_DECLARE int gaiaDimension (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE int gaiaGeometryType (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE int gaiaGeometryAliasType (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE int gaiaIsEmpty (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE int gaiaMbrsContains (gaiaGeomCollPtr mbr1,
-					  gaiaGeomCollPtr mbr2);
-    GAIAGEO_DECLARE int gaiaMbrsDisjoint (gaiaGeomCollPtr mbr1,
-					  gaiaGeomCollPtr mbr2);
-    GAIAGEO_DECLARE int gaiaMbrsEqual (gaiaGeomCollPtr mbr1,
-				       gaiaGeomCollPtr mbr2);
-    GAIAGEO_DECLARE int gaiaMbrsIntersects (gaiaGeomCollPtr mbr1,
-					    gaiaGeomCollPtr mbr2);
-    GAIAGEO_DECLARE int gaiaMbrsOverlaps (gaiaGeomCollPtr mbr1,
-					  gaiaGeomCollPtr mbr2);
-    GAIAGEO_DECLARE int gaiaMbrsTouches (gaiaGeomCollPtr mbr1,
-					 gaiaGeomCollPtr mbr2);
-    GAIAGEO_DECLARE int gaiaMbrsWithin (gaiaGeomCollPtr mbr1,
-					gaiaGeomCollPtr mbr2);
-    GAIAGEO_DECLARE void gaiaShiftCoords (gaiaGeomCollPtr geom, double shift_x,
-					  double shift_y);
-    GAIAGEO_DECLARE void gaiaScaleCoords (gaiaGeomCollPtr geom, double scale_x,
-					  double scale_y);
-    GAIAGEO_DECLARE void gaiaRotateCoords (gaiaGeomCollPtr geom, double angle);
-    GAIAGEO_DECLARE void gaiaReflectCoords (gaiaGeomCollPtr geom, int x_axis,
-					    int y_axis);
-    GAIAGEO_DECLARE void gaiaSwapCoords (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXY (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZ (gaiaGeomCollPtr
-							   geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYM (gaiaGeomCollPtr
-							   geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZM (gaiaGeomCollPtr
-							    geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomColl (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPoints (gaiaGeomCollPtr
-							     geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr
-	gaiaCloneGeomCollLinestrings (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPolygons (gaiaGeomCollPtr
-							       geom);
-    GAIAGEO_DECLARE gaiaLinestringPtr gaiaCloneLinestring (gaiaLinestringPtr
-							   line);
-    GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRing (gaiaRingPtr ring);
-    GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygon (gaiaPolygonPtr polyg);
-    GAIAGEO_DECLARE int gaiaLinestringEquals (gaiaLinestringPtr line1,
-					      gaiaLinestringPtr line2);
-    GAIAGEO_DECLARE int gaiaPolygonEquals (gaiaPolygonPtr geom1,
-					   gaiaPolygonPtr geom2);
-    GAIAGEO_DECLARE void gaiaMakePoint (double x, double y, int srid,
-					unsigned char **result, int *size);
-    GAIAGEO_DECLARE void gaiaMakeLine (gaiaGeomCollPtr geom1,
-				       gaiaGeomCollPtr geom2,
-				       unsigned char **result, int *size);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries (gaiaGeomCollPtr geom1,
-							 gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE void gaiaBuildMbr (double x1, double y1, double x2,
-				       double y2, int srid,
-				       unsigned char **result, int *size);
-    GAIAGEO_DECLARE void gaiaBuildFilterMbr (double x1, double y1, double x2,
-					     double y2, int mode,
-					     unsigned char **result, int *size);
-    GAIAGEO_DECLARE int gaiaParseFilterMbr (unsigned char *result, int size,
-					    double *minx, double *miny,
-					    double *maxx, double *maxy,
-					    int *mode);
-    GAIAGEO_DECLARE void gaiaBuildCircleMbr (double x, double y, double radius,
-					     int srid, unsigned char **result,
-					     int *size);
-    GAIAGEO_DECLARE int gaiaGetMbrMinX (const unsigned char *blob,
-					unsigned int size, double *minx);
-    GAIAGEO_DECLARE int gaiaGetMbrMaxX (const unsigned char *blob,
-					unsigned int size, double *maxx);
-    GAIAGEO_DECLARE int gaiaGetMbrMinY (const unsigned char *blob,
-					unsigned int size, double *miny);
-    GAIAGEO_DECLARE int gaiaGetMbrMaxY (const unsigned char *blob,
-					unsigned int size, double *maxy);
-    GAIAGEO_DECLARE void gaiaFree (void *ptr);
-    GAIAGEO_DECLARE int gaiaEllipseParams (const char *name, double *a,
-					   double *b, double *rf);
-    GAIAGEO_DECLARE double gaiaGreatCircleDistance (double a, double b,
-						    double lat1, double lon1,
-						    double lat2, double lon2);
-    GAIAGEO_DECLARE double gaiaGeodesicDistance (double a, double b, double rf,
-						 double lat1, double lon1,
-						 double lat2, double lon2);
-    GAIAGEO_DECLARE double gaiaGreatCircleTotalLength (double a, double b,
-						       int dims, double *coords,
-						       int vert);
-    GAIAGEO_DECLARE double gaiaGeodesicTotalLength (double a, double b,
-						    double rf, int dims,
-						    double *coords, int vert);
-    GAIAGEO_DECLARE int gaiaConvertLength (double value, int unit_from,
-					   int unit_to, double *cvt);
-    GAIAGEO_DECLARE int gaiaLineGetPoint (gaiaLinestringPtr ln, int v,
-					  double *x, double *y, double *z,
-					  double *m);
-    GAIAGEO_DECLARE int gaiaLineSetPoint (gaiaLinestringPtr ln, int v, double x,
-					  double y, double z, double m);
-    GAIAGEO_DECLARE int gaiaRingGetPoint (gaiaRingPtr rng, int v, double *x,
-					  double *y, double *z, double *m);
-    GAIAGEO_DECLARE int gaiaRingSetPoint (gaiaRingPtr rng, int v, double x,
-					  double y, double z, double m);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSanitize (gaiaGeomCollPtr org);
-    GAIAGEO_DECLARE int gaiaIsToxic (gaiaGeomCollPtr org);
-    GAIAGEO_DECLARE void gaiaOutBufferInitialize (gaiaOutBufferPtr buf);
-    GAIAGEO_DECLARE void gaiaOutBufferReset (gaiaOutBufferPtr buf);
-    GAIAGEO_DECLARE void gaiaAppendToOutBuffer (gaiaOutBufferPtr buf,
-						const char *text);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLinearize (gaiaGeomCollPtr geom,
-						   int force_multi);
-
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolveSegments (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolvePoints (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr
-	gaiaExtractPointsFromGeomColl (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr
-	gaiaExtractLinestringsFromGeomColl (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr
-	gaiaExtractPolygonsFromGeomColl (gaiaGeomCollPtr geom);
-
-#ifndef OMIT_PROJ		/* including PROJ.4 */
-
-    GAIAGEO_DECLARE double gaiaRadsToDegs (double rads);
-    GAIAGEO_DECLARE double gaiaDegsToRads (double degs);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaTransform (gaiaGeomCollPtr org,
-						   char *proj_from,
-						   char *proj_to);
-
-#endif				/* end including PROJ.4 */
-
-#ifndef OMIT_GEOS		/* including GEOS */
-
-    GAIAGEO_DECLARE void gaiaResetGeosMsg (void);
-    GAIAGEO_DECLARE const char *gaiaGetGeosErrorMsg (void);
-    GAIAGEO_DECLARE const char *gaiaGetGeosWarningMsg (void);
-    GAIAGEO_DECLARE void gaiaSetGeosErrorMsg (const char *msg);
-    GAIAGEO_DECLARE void gaiaSetGeosWarningMsg (const char *msg);
-
-    GAIAGEO_DECLARE int gaiaGeomCollEquals (gaiaGeomCollPtr geom1,
-					    gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollDisjoint (gaiaGeomCollPtr geom1,
-					      gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollIntersects (gaiaGeomCollPtr geom1,
-						gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollOverlaps (gaiaGeomCollPtr geom1,
-					      gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollCrosses (gaiaGeomCollPtr geom1,
-					     gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollContains (gaiaGeomCollPtr geom1,
-					      gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollWithin (gaiaGeomCollPtr geom1,
-					    gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollTouches (gaiaGeomCollPtr geom1,
-					     gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollRelate (gaiaGeomCollPtr geom1,
-					    gaiaGeomCollPtr geom2,
-					    const char *pattern);
-    GAIAGEO_DECLARE int gaiaGeomCollDistance (gaiaGeomCollPtr geom1,
-					      gaiaGeomCollPtr geom2,
-					      double *dist);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryIntersection (gaiaGeomCollPtr
-							      geom1,
-							      gaiaGeomCollPtr
-							      geom2);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryUnion (gaiaGeomCollPtr geom1,
-						       gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryDifference (gaiaGeomCollPtr
-							    geom1,
-							    gaiaGeomCollPtr
-							    geom2);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometrySymDifference (gaiaGeomCollPtr
-							       geom1,
-							       gaiaGeomCollPtr
-							       geom2);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaBoundary (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE int gaiaGeomCollCentroid (gaiaGeomCollPtr geom, double *x,
-					      double *y);
-    GAIAGEO_DECLARE int gaiaGetPointOnSurface (gaiaGeomCollPtr geom, double *x,
-					       double *y);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollSimplify (gaiaGeomCollPtr geom,
-							  double tolerance);
-    GAIAGEO_DECLARE gaiaGeomCollPtr
-	gaiaGeomCollSimplifyPreserveTopology (gaiaGeomCollPtr geom,
-					      double tolerance);
-    GAIAGEO_DECLARE int gaiaGeomCollLength (gaiaGeomCollPtr geom,
-					    double *length);
-    GAIAGEO_DECLARE int gaiaGeomCollArea (gaiaGeomCollPtr geom, double *area);
-    GAIAGEO_DECLARE int gaiaIsSimple (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE int gaiaIsClosed (gaiaLinestringPtr line);
-    GAIAGEO_DECLARE int gaiaIsRing (gaiaLinestringPtr line);
-    GAIAGEO_DECLARE int gaiaIsValid (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaConvexHull (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollBuffer (gaiaGeomCollPtr geom,
-							double radius,
-							int points);
-    GAIAGEO_DECLARE void *gaiaToGeos (const gaiaGeomCollPtr gaia);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XY (const void *geos);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZ (const void *geos);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYM (const void *geos);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZM (const void *geos);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaPolygonize (gaiaGeomCollPtr geom,
-						    int force_multi);
-
-#ifdef GEOS_ADVANCED
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaOffsetCurve (gaiaGeomCollPtr geom,
-						     double radius, int points,
-						     int left_right);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSharedPaths (gaiaGeomCollPtr geom1,
-						     gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollCovers (gaiaGeomCollPtr geom1,
-					    gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE int gaiaGeomCollCoveredBy (gaiaGeomCollPtr geom1,
-					       gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineInterpolatePoint (gaiaGeomCollPtr
-							      ln_geom,
-							      double fraction);
-    GAIAGEO_DECLARE double gaiaLineLocatePoint (gaiaGeomCollPtr ln_geom,
-						gaiaGeomCollPtr pt_geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineSubstring (gaiaGeomCollPtr ln_geom,
-						       double start_fraction,
-						       double end_fraction);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaShortestLine (gaiaGeomCollPtr geom1,
-						      gaiaGeomCollPtr geom2);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSnap (gaiaGeomCollPtr geom1,
-					      gaiaGeomCollPtr geom2,
-					      double tolerance);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineMerge (gaiaGeomCollPtr geom);
-    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaUnaryUnion (gaiaGeomCollPtr geom);
-#endif				/* end GEOS advanced and experimental features */
-
-#endif				/* end including GEOS */
-
-#ifndef OMIT_ICONV		/* ICONV enabled: supporting text reader */
-    GAIAGEO_DECLARE gaiaTextReaderPtr gaiaTextReaderAlloc (const char *path,
-							   char field_separator,
-							   char text_separator,
-							   char
-							   decimal_separator,
-							   int
-							   first_line_titles,
-							   const char
-							   *encoding);
-    GAIAGEO_DECLARE void gaiaTextReaderDestroy (gaiaTextReaderPtr reader);
-    GAIAGEO_DECLARE int gaiaTextReaderParse (gaiaTextReaderPtr reader);
-    GAIAGEO_DECLARE int gaiaTextReaderGetRow (gaiaTextReaderPtr reader,
-					      int row_num);
-    GAIAGEO_DECLARE int gaiaTextReaderFetchField (gaiaTextReaderPtr reader,
-						  int field_num, int *type,
-						  const char **value);
-#endif				/* end ICONV (text reader) */
-
-#ifdef __cplusplus
-}
-#endif
+#include "gg_const.h"
+#include "gg_structs.h"
+#include "gg_core.h"
+#include "gg_mbr.h"
+#include "gg_formats.h"
+#include "gg_dynamic.h"
+#include "gg_advanced.h"
 
-#endif				/* _GAIAGEO_H */
+#endif /* _GAIAGEO_H */
diff --git a/libspatialite/src/headers/spatialite/gg_advanced.h b/libspatialite/src/headers/spatialite/gg_advanced.h
new file mode 100644
index 0000000..34b60c5
--- /dev/null
+++ b/libspatialite/src/headers/spatialite/gg_advanced.h
@@ -0,0 +1,996 @@
+/*
+ gg_advanced.h -- Gaia common support for geometries: advanced
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_advanced.h
+
+ Geometry handling functions: advanced
+ */
+
+#ifndef _GG_ADVANCED_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_ADVANCED_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef OMIT_PROJ		/* including PROJ.4 */
+
+/**
+ Converts and angle from Radians into Degrees
+ \param rads the angle measured in Radians.
+ 
+ \return the angle measured in Degrees.
+
+ \sa gaiaDegsToRads
+
+ \remark \b PROJ.4 support required
+ */
+    GAIAGEO_DECLARE double gaiaRadsToDegs (double rads);
+
+/**
+ Converts and angle from Degrees into Radians
+ \param degs the angle measured in Degrees.
+
+ \return the angle measured in Radians.
+
+ \sa gaiaRadsToDegs
+
+ \remark \b PROJ.4 support required
+ */
+    GAIAGEO_DECLARE double gaiaDegsToRads (double degs);
+
+/**
+ Tansforms a Geometry object into a different Reference System
+ [aka Reprojection]
+ \param org pointer to input Geometry object.
+ \param proj_from geodetic parameters string [EPSG format] qualifying the
+ input Reference System
+ \param proj_to geodetic parameters string [EPSG format] qualifying the
+ output Reference System
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,  this including any Geometry returned by gaiaGeometryTransform()
+
+ \remark \b PROJ.4 support required
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaTransform (gaiaGeomCollPtr org,
+						   char *proj_from,
+						   char *proj_to);
+
+#endif				/* end including PROJ.4 */
+
+#ifndef OMIT_GEOS		/* including GEOS */
+
+/**
+ Resets the GEOS error and warning messages to an empty state
+
+ \sa gaiaGetGeosErrorMsg, gaiaGetGeosWarningMsg, gaiaSetGeosErrorMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void gaiaResetGeosMsg (void);
+
+/**
+ Return the latest GEOS error message (if any)
+
+ \return the latest GEOS error message: an empty string if no error was
+ previoysly found.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosWarningMsg, gaiaSetGeosErrorMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE const char *gaiaGetGeosErrorMsg (void);
+
+/**
+ Return the latest GEOS warning message (if any)
+
+ \return the latest GEOS warning message: an empty string if no warning was 
+ previoysly found.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosErrorMsg, gaiaSetGeosErrorMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE const char *gaiaGetGeosWarningMsg (void);
+
+/**
+ Set the current GEOS error message
+
+ \param msg the error message to be set.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosErrorMsg, gaiaGetGeosWarningMsg,
+ gaiaSetGeosWarningMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void gaiaSetGeosErrorMsg (const char *msg);
+
+/**
+ Set the current GEOS warning message
+
+ \param msg the warning message to be set.
+
+ \sa gaiaResetGeosMsg, gaiaGetGeosErrorMsg, gaiaGetGeosWarningMsg,
+ gaiaSetGeosErrorMsg
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void gaiaSetGeosWarningMsg (const char *msg);
+
+/**
+ Converts a Geometry object into a GEOS Geometry
+
+ \param gaia pointer to Geometry object
+
+ \return handle to GEOS Geometry
+ 
+ \sa gaiaFromGeos_XY, gaiaFromGeos_XYZ, gaiaFromGeos_XYM, gaiaFromGeos_XYZM
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE void *gaiaToGeos (const gaiaGeomCollPtr gaia);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XY dims]
+
+ \param geos handle to GEOS Geometry
+
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XYZ, gaiaFromGeos_XYM, gaiaFromGeos_XYZM
+
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XY()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XY (const void *geos);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XYZ dims]
+
+ \param geos handle to GEOS Geometry
+    
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XY, gaiaFromGeos_XYM, gaiaFromGeos_XYZM
+ 
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XYZ()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZ (const void *geos);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XYM dims]
+
+ \param geos handle to GEOS Geometry
+    
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XY, gaiaFromGeos_XYZ, gaiaFromGeos_XYZM
+ 
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XYM()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYM (const void *geos);
+
+/**
+ Converts a GEOS Geometry into a Geometry object [XYZM dims]
+
+ \param geos handle to GEOS Geometry
+    
+ \return the pointer to the newly created Geometry object
+
+ \sa gaiaToGeos, gaiaFromGeos_XY, gaiaFromGeos_XYZ, gaiaFromGeos_XYM
+ 
+ \note you are responsible to destroy (before or after) any allocated 
+ Geometry, this including any Geometry returned by gaiaFromGeos_XYZM()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromGeos_XYZM (const void *geos);
+
+/**
+ Checks if a Geometry object represents an OGC Simple Geometry
+
+ \param geom pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsClosed, gaiaIsRing, gaiaIsValid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsSimple (gaiaGeomCollPtr geom);
+
+/**
+ Checks if a Linestring object represents an OGC Closed Geometry
+
+ \param line pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsSimple, gaiaIsRing, gaiaIsValid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsClosed (gaiaLinestringPtr line);
+
+/**
+ Checks if a Linestring object represents an OGC Ring Geometry
+
+ \param line pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsSimple, gaiaIsClosed, gaiaIsValid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsRing (gaiaLinestringPtr line);
+
+/**
+ Checks if a Geometry object represents an OGC Valid Geometry
+
+ \param geom pointer to Geometry object.
+
+ \return 0 if false; any other value if true
+
+ \sa gaiaIsSimple, gaiaIsClosed, gaiaIsRing
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaIsValid (gaiaGeomCollPtr geom);
+
+/**
+ Measures the total Length for a Geometry object
+
+ \param geom pointer to Geometry object
+ \param length on completion this variable will contain the measured length
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGeomCollArea, gaiaMeasureLength
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollLength (gaiaGeomCollPtr geom,
+					    double *length);
+/**
+ Measures the total Area for a Geometry object
+
+ \param geom pointer to Geometry object
+ \param area on completion this variable will contain the measured area
+
+ \return 0 on failure: any other value on success
+
+ \sa gaiaGeomCollLength, gaiaMeasureArea
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollArea (gaiaGeomCollPtr geom, double *area);
+
+
+/**
+ Attempts to rearrange a generic Geometry object into a Polygon or MultiPolygon
+
+ \param geom the input Geometry object
+ \param force_multi if not set to 0, then an eventual Polygon will be 
+ returned casted to MultiPolygon
+
+ \return the pointer to newly created Geometry object representing a
+ Polygon or MultiPolygon Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaPolygonize()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaPolygonize (gaiaGeomCollPtr geom,
+						    int force_multi);
+/**
+ Spatial relationship evalution: Equals
+ 
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollDisjoint, gaiaGeomCollIntersects, gaiaGeomCollOverlaps,
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollEquals (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Disjoint
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollIntersects, gaiaGeomCollOverlaps,
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollDisjoint (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Intesects
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollOverlaps,
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollIntersects (gaiaGeomCollPtr geom1,
+						gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Overlaps
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollCrosses, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollOverlaps (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Crosses
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollContains, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCrosses (gaiaGeomCollPtr geom1,
+					     gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Contains
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollWithin,
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollContains (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Within
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollContains, 
+ gaiaGeomCollTouches, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollWithin (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Touches
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollContains, 
+ gaiaGeomCollWithin, gaiaGeomCollRelate
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollTouches (gaiaGeomCollPtr geom1,
+					     gaiaGeomCollPtr geom2);
+
+/**
+ Spatial relationship evalution: Relate
+
+ \param geom1 the first Geometry object to be evaluated
+ \param geom2 the second Geometry object to be evaluated
+ \param pattern intersection matrix pattern [DE-9IM]
+
+ \return 0 if false: any other value if true
+
+ \sa gaiaGeomCollEquals, gaiaGeomCollDisjoint, gaiaGeomCollIntersects, 
+ gaiaGeomCollOverlaps, gaiaGeomCollCrosses, gaiaGeomCollContains, 
+ gaiaGeomCollWithin, gaiaGeomCollTouches
+ 
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollRelate (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2,
+					    const char *pattern);
+
+/**
+ Calculates the minimum distance intercurring between two Geometry objects
+
+ \param geom1 the first Geometry object 
+ \param geom2 the second Geometry object 
+ \param dist on completion this variable will contain the calculated distance
+
+ \return 0 on failuer: any other value on success.
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollDistance (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2,
+					      double *dist);
+
+/**
+ Spatial operator: Intersection
+                                              
+ \param geom1 the first Geometry object 
+ \param geom2 the second Geometry object 
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Intersection of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeometryUnion, gaiaGeometryDifference,
+ gaiaGeometrySymDifference, gaiaBoundary
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometryIntersection()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryIntersection (gaiaGeomCollPtr
+							      geom1,
+							      gaiaGeomCollPtr
+							      geom2);
+
+/**
+ Spatial operator: Union
+
+ \param geom1 the first Geometry object
+ \param geom2 the second Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Union of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaUnaryUnion
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometryUnion()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryUnion (gaiaGeomCollPtr geom1,
+						       gaiaGeomCollPtr geom2);
+
+/**
+ Spatial operator: Difference
+
+ \param geom1 the first Geometry object
+ \param geom2 the second Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Difference of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometryDifference()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometryDifference (gaiaGeomCollPtr
+							    geom1,
+							    gaiaGeomCollPtr
+							    geom2);
+
+/**
+ Spatial operator: SymDifference
+
+ \param geom1 the first Geometry object
+ \param geom2 the second Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ geometry SymDifference of both input Geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeometrySymDifference()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeometrySymDifference (gaiaGeomCollPtr
+							       geom1,
+							       gaiaGeomCollPtr
+							       geom2);
+
+/**
+ Spatial operator: Boundary
+
+ \param geom the Geometry object to be evaluated
+
+ \return the pointer to newly created Geometry object representing the
+ geometry Boundary of the input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaBoundary()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaBoundary (gaiaGeomCollPtr geom);
+
+/**
+ Spatial operator: Centroid
+
+ \param geom pointer to Geometry object.
+ \param x on completion this variable will contain the centroid X coordinate 
+ \param y on completion this variable will contain the centroid Y coordinate 
+ 
+ \return 0 on failure: any other value on success
+
+ \sa gaiaRingCentroid
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCentroid (gaiaGeomCollPtr geom, double *x,
+					      double *y);
+
+/**
+ Spatial operator: PointOnSurface
+
+ \param geom pointer to Geometry object.
+ \param x on completion this variable will contain the Point X coordinate  
+ \param y on completion this variable will contain the Point Y coordinate
+ 
+ \return 0 on failure: any other value on success
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE int gaiaGetPointOnSurface (gaiaGeomCollPtr geom, double *x,
+					       double *y);
+
+/**
+ Spatial operator: Simplify
+
+ \param geom the input Geometry object
+ \param tolerance approximation threshold
+
+ \return the pointer to newly created Geometry object representing the
+ simplified Geometry [applying the Douglas-Peucker algorithm]: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeomCollSimplifyPreserveTopology
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeomCollSimplify()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollSimplify (gaiaGeomCollPtr geom,
+							  double tolerance);
+
+/**
+ Spatial operator: Simplify [preserving topology]
+
+ \param geom the input Geometry object
+ \param tolerance approximation threshold
+
+ \return the pointer to newly created Geometry object representing the
+ simplified Geometry [applying the Douglas-Peucker algorithm]: NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeomCollSimplify
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeomCollSimplify()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaGeomCollSimplifyPreserveTopology (gaiaGeomCollPtr geom,
+					      double tolerance);
+
+/**
+ Spatial operator: ConvexHull
+
+ \param geom the input Geometry object
+
+ \return the pointer to newly created Geometry object representing the
+ ConvexHull of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaConvexHull()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaConvexHull (gaiaGeomCollPtr geom);
+
+/** 
+ Spatial operator: Buffer
+
+ \param geom the input Geometry object
+ \param radius the buffer's radius
+ \param points number of points (aka vertices) to be used in order to 
+ approximate a circular arc.
+
+ \return the pointer to newly created Geometry object representing the
+ Buffer of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaGeomCollBuffer()
+
+ \remark \b GEOS support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaGeomCollBuffer (gaiaGeomCollPtr geom,
+							double radius,
+							int points);
+
+#ifndef DOXYGEN_SHOULD_IGNORE_THIS
+#ifdef GEOS_ADVANCED
+#endif
+
+/**
+ Calculates the Hausdorff distance intercurring between two Geometry objects
+
+ \param geom1 pointer to first Geometry object
+ \param geom2 pointer to second Geometry object
+ \param dist on completion this variable will contain the calculated Hausdorff
+ distance 
+
+ \return 0 on failure: any other value on success.
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE int gaiaHausdorffDistance (gaiaGeomCollPtr geom1,
+					       gaiaGeomCollPtr geom2,
+					       double *dist);
+
+/**
+ Spatial operator: Offset Curve
+
+ \param geom the input Geometry object
+ \param radius the buffer's radius
+ \param points number of points (aka vertices) to be used in order to 
+ approximate a circular arc.
+ \param left_right if set to 1 the left-sided OffsetCurve will be returned;
+ otherwise the right-sided one.
+
+ \return the pointer to newly created Geometry object representing the
+ OffsetCurve of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaOffsetCurve()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaOffsetCurve (gaiaGeomCollPtr geom,
+						     double radius, int points,
+						     int left_right);
+
+/**
+ Spatial operator: Single Sided Buffer
+
+ \param geom the input Geometry object
+ \param radius the buffer's radius
+ \param points number of points (aka vertices) to be used in order to
+ approximate a circular arc.
+ \param left_right if set to 1 the left-sided Buffer will be returned;
+ otherwise the right-sided one.
+
+ \return the pointer to newly created Geometry object representing the
+ single-sided Buffer of input Geometry: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaSingleSidedBuffer()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSingleSidedBuffer (gaiaGeomCollPtr geom,
+							   double radius,
+							   int points,
+							   int left_right);
+
+/**
+ Spatial operator: Shared Paths
+
+ \param geom1 pointer to first Geometry object
+ \param geom2 pointer to second Geometry object
+
+ \return the pointer to newly created Geometry object representing any
+ Share Path common to both input geometries: NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaSharedPaths()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSharedPaths (gaiaGeomCollPtr geom1,
+						     gaiaGeomCollPtr geom2);
+
+/**
+ Spatial operator: Line Interpolate Point
+
+ \param ln_geom the input Geometry object [expected to be of lineal type]
+ \param fraction total length fraction [in the range 0.0 / 1.0]
+
+ \return the pointer to newly created Geometry object representing a Point
+ laying on the input Geometry and positioned at the given length fraction:
+ NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaLineInterpolatePoint()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineInterpolatePoint (gaiaGeomCollPtr
+							      ln_geom,
+							      double fraction);
+
+/**
+ Spatial operator: Line Substring
+
+ \param ln_geom the input Geometry object [expected to be of lineal type]
+ \param start_fraction substring start, expressed as total length fraction
+ [in the range 0.0 / 1.0]
+ \param end_fraction substring end, expressed as total length fraction
+
+ \return the pointer to newly created Geometry object representing a Linestring
+ laying on the input Geometry.
+ \n this Linestring will begin (and stop) at given total length fractions. 
+ NULL on failure.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaLineSubstring()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineSubstring (gaiaGeomCollPtr ln_geom,
+						       double start_fraction,
+						       double end_fraction);
+
+/**
+ Spatial operator: Shortest Line
+
+ \param geom1 pointer to the first Geometry object.
+ \param geom2 pointer to the second Geometry object.
+
+ \return the pointer to newly created Geometry object representing a Linestring;
+ NULL on failure.
+ \n the returned Linestring graphically represents the minimum distance 
+ intercurrinng between both input geometries.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaShortestLine()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaShortestLine (gaiaGeomCollPtr geom1,
+						      gaiaGeomCollPtr geom2);
+
+/**
+ Spatial operator: Shortest Line
+
+ \param geom1 pointer to the first Geometry object.
+ \param geom2 pointer to the second Geometry object.
+ \param tolerance approximation factor
+
+ \return the pointer to newly created Geometry object; NULL on failure.
+ \n the returned Geometry represents the first input Geometry (nicely
+ \e snapped to the second input Geometry, whenever is possible).
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaShortestLine()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSnap (gaiaGeomCollPtr geom1,
+					      gaiaGeomCollPtr geom2,
+					      double tolerance);
+
+/**
+ Spatial operator: Line Merge
+
+ \param geom pointer to input Geometry object.
+
+ \return the pointer to newly created Geometry object; NULL on failure.
+ \n if possible, this representing a reassembled Linestring or MultiLinestring.
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaLineMerge()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLineMerge (gaiaGeomCollPtr geom);
+
+/**
+ Spatial operator: Unary Union
+
+ \param geom the input Geometry object.
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+ \n this function is the same as gaiaGeometryUnion, except in that this
+ works internally to the input Geometry itself.
+ NULL on failure.
+
+ \sa gaiaFreeGeomColl, gaiaGeometryUnion
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry returned by gaiaUnaryUnion()
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaUnaryUnion (gaiaGeomCollPtr geom);
+
+/**
+ Determines the location of the closest Point on Linestring to the given Point
+
+ \param ln_geom pointer to first input Geometry object [expected to be of
+ the lineal type].
+ \param pt_geom pointer to second input Geometry object [expected to be a
+ Point].
+
+ \return the fraction [in the range 0.0 / 1.0] of ln_geom total length
+ where the closest Point to pt_geom lays.
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE double gaiaLineLocatePoint (gaiaGeomCollPtr ln_geom,
+						gaiaGeomCollPtr pt_geom);
+
+/** 
+ Topology check: test if a Geometry covers another one
+
+ \param geom1 pointer to first input Geometry object.
+ \param geom2 pointer to second input Geometry object.
+
+ \return 0 if false; any other value if geom1 \e spatially \e covers geom2.
+
+ \sa gaiaGeomCollCoveredBy
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCovers (gaiaGeomCollPtr geom1,
+					    gaiaGeomCollPtr geom2);
+
+/**
+ Topology check: test if a Geometry is covered by another one
+                                            
+ \param geom1 pointer to first input Geometry object.
+ \param geom2 pointer to second input Geometry object.
+                                               
+ \return 0 if false; any other value if geom2 is \e spatially \e covered \e by
+ geom1.
+
+ \sa gaiaGeomCollCovers
+
+ \remark \b GEOS-ADVANCED support required.
+ */
+    GAIAGEO_DECLARE int gaiaGeomCollCoveredBy (gaiaGeomCollPtr geom1,
+					       gaiaGeomCollPtr geom2);
+
+#endif				/* end GEOS advanced and experimental features */
+
+#endif				/* end including GEOS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_ADVANCED_H */
diff --git a/libspatialite/src/headers/spatialite/gg_const.h b/libspatialite/src/headers/spatialite/gg_const.h
new file mode 100644
index 0000000..bc88fb1
--- /dev/null
+++ b/libspatialite/src/headers/spatialite/gg_const.h
@@ -0,0 +1,515 @@
+/*
+ gg_const.h -- Gaia common support for geometries: constants
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Klaus Foerster klaus.foerster at svg.cc
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_const.h
+
+ Geometry constants and macros
+ */
+
+#ifndef _GG_CONST_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_CONST_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* constant values for generic geometry classes */
+
+/** WKT parser: unknown Geometry type */
+#define GAIA_TYPE_NONE		0
+/** WKT parser: Point Geometry type */
+#define GAIA_TYPE_POINT		1
+/** WKT parser: Linestring Geometry type */
+#define GAIA_TYPE_LINESTRING	2
+/** WKT parser: Polygon Geometry type */
+#define GAIA_TYPE_POLYGON	3
+
+/* constants that defines byte storage order  */
+/** Big-Endian marker */
+#define GAIA_BIG_ENDIAN		0
+/** Little-Endian marker */
+#define GAIA_LITTLE_ENDIAN	1
+
+/* constants that defines special markers used for encoding of SpatiaLite internal BLOB geometries  */
+/** BLOB-Geometry internal marker: START */
+#define GAIA_MARK_START		0x00
+/** BLOB-Geometry internal marker: END */
+#define GAIA_MARK_END		0xFE
+/** BLOB-Geometry internal marker: MBR */
+#define GAIA_MARK_MBR		0x7C
+/** BLOB-Geometry internal marker: ENTITY */
+#define GAIA_MARK_ENTITY	0x69
+
+/* constants that defines GEOMETRY CLASSes */
+/** BLOB-Geometry CLASS: unknown */
+#define GAIA_UNKNOWN			0
+/** BLOB-Geometry CLASS: POINT */
+#define GAIA_POINT			1
+/** BLOB-Geometry CLASS: LINESTRING */
+#define GAIA_LINESTRING			2
+/** BLOB-Geometry CLASS: POLYGON */
+#define GAIA_POLYGON			3
+/** BLOB-Geometry CLASS: MULTIPOINT */
+#define GAIA_MULTIPOINT			4
+/** BLOB-Geometry CLASS: MULTILINESTRING */
+#define GAIA_MULTILINESTRING		5
+/** BLOB-Geometry CLASS: MULTIPOLYGON */
+#define GAIA_MULTIPOLYGON		6
+#define GAIA_MULTIPOLYGON		6
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION */
+#define GAIA_GEOMETRYCOLLECTION		7
+/** BLOB-Geometry CLASS: POINT Z */
+#define GAIA_POINTZ			1001
+/** BLOB-Geometry CLASS: LINESTRING Z */
+#define GAIA_LINESTRINGZ		1002
+/** BLOB-Geometry CLASS: POLYGON Z */
+#define GAIA_POLYGONZ			1003
+/** BLOB-Geometry CLASS: MULTIPOINT Z */
+#define GAIA_MULTIPOINTZ		1004
+/** BLOB-Geometry CLASS: MULTILINESTRING Z */
+#define GAIA_MULTILINESTRINGZ		1005
+/** BLOB-Geometry CLASS: MULTIPOLYGON Z */
+#define GAIA_MULTIPOLYGONZ		1006
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION Z */
+#define GAIA_GEOMETRYCOLLECTIONZ	1007
+/** BLOB-Geometry CLASS: POINT M */
+#define GAIA_POINTM			2001
+/** BLOB-Geometry CLASS: LINESTRING M */
+#define GAIA_LINESTRINGM		2002
+/** BLOB-Geometry CLASS: POLYGON M */
+#define GAIA_POLYGONM			2003
+/** BLOB-Geometry CLASS: MULTIPOINT M */
+#define GAIA_MULTIPOINTM		2004
+/** BLOB-Geometry CLASS: MULTILINESTRING M */
+#define GAIA_MULTILINESTRINGM		2005
+/** BLOB-Geometry CLASS: MULTIPOLYGON M */
+#define GAIA_MULTIPOLYGONM		2006
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION M */
+#define GAIA_GEOMETRYCOLLECTIONM	2007
+/** BLOB-Geometry CLASS: POINT ZM */
+#define GAIA_POINTZM			3001
+/** BLOB-Geometry CLASS: LINESTRING ZM */
+#define GAIA_LINESTRINGZM		3002
+/** BLOB-Geometry CLASS: POLYGON ZM */
+#define GAIA_POLYGONZM			3003
+/** BLOB-Geometry CLASS: MULTIPOINT ZM */
+#define GAIA_MULTIPOINTZM		3004
+/** BLOB-Geometry CLASS: MULTILINESTRING ZM */
+#define GAIA_MULTILINESTRINGZM		3005
+/** BLOB-Geometry CLASS: MULTIPOLYGON ZM */
+#define GAIA_MULTIPOLYGONZM		3006
+/** BLOB-Geometry CLASS: GEOMETRYCOLLECTION ZM */
+#define GAIA_GEOMETRYCOLLECTIONZM	3007
+
+/* constants that defines Compressed GEOMETRY CLASSes */
+/** BLOB-Geometry CLASS: compressed LINESTRING */
+#define GAIA_COMPRESSED_LINESTRING		1000002
+/** BLOB-Geometry CLASS: compressed POLYGON */
+#define GAIA_COMPRESSED_POLYGON			1000003
+/** BLOB-Geometry CLASS: compressed LINESTRING Z */
+#define GAIA_COMPRESSED_LINESTRINGZ		1001002
+/** BLOB-Geometry CLASS: compressed POLYGON Z */
+#define GAIA_COMPRESSED_POLYGONZ		1001003
+/** BLOB-Geometry CLASS: compressed LINESTRING M */
+#define GAIA_COMPRESSED_LINESTRINGM		1002002
+/** BLOB-Geometry CLASS: compressed POLYGON M */
+#define GAIA_COMPRESSED_POLYGONM		1002003
+/** BLOB-Geometry CLASS: compressed LINESTRING ZM */
+#define GAIA_COMPRESSED_LINESTRINGZM		1003002
+/** BLOB-Geometry CLASS: compressed POLYGON ZM */
+#define GAIA_COMPRESSED_POLYGONZM		1003003
+
+/* constants that defines GEOS-WKB 3D CLASSes */
+/** GEOS-WKB 3D CLASS: POINT Z */
+#define GAIA_GEOSWKB_POINTZ			-2147483647
+/** GEOS-WKB 3D CLASS: LINESTRING Z */
+#define GAIA_GEOSWKB_LINESTRINGZ		-2147483646
+/** GEOS-WKB 3D CLASS: POLYGON Z */
+#define GAIA_GEOSWKB_POLYGONZ			-2147483645
+/** GEOS-WKB 3D CLASS: MULTIPOINT Z */
+#define GAIA_GEOSWKB_MULTIPOINTZ		-2147483644
+/** GEOS-WKB 3D CLASS: MULTILINESTRING Z */
+#define GAIA_GEOSWKB_MULTILINESTRINGZ		-2147483643
+/** GEOS-WKB 3D CLASS: MULTIPOLYGON Z */
+#define GAIA_GEOSWKB_MULTIPOLYGONZ		-2147483642
+/** GEOS-WKB 3D CLASS: POINT Z */
+#define GAIA_GEOSWKB_GEOMETRYCOLLECTIONZ	-2147483641
+
+/* constants that defines multitype values */
+/** DBF data type: NULL */
+#define GAIA_NULL_VALUE		0
+/** DBF data type: TEXT */
+#define GAIA_TEXT_VALUE		1
+/** DBF data type: INT */
+#define GAIA_INT_VALUE		2
+/** DBF data type: DOUBLE */
+#define GAIA_DOUBLE_VALUE	3
+
+/* constants that defines POINT index for LINESTRING */
+/** Linestring/Ring functions: START POINT */
+#define GAIA_START_POINT	1
+/** Linestring/Ring functions: END POINT */
+#define GAIA_END_POINT		2
+/** Linestring/Ring functions: POINTN */
+#define GAIA_POINTN		3
+
+/* constants that defines MBRs spatial relationships */
+/** MBR relationships: CONTAINS */
+#define GAIA_MBR_CONTAINS	1
+/** MBR relationships: DISJOINT */
+#define GAIA_MBR_DISJOINT	2
+/** MBR relationships: EQUAL */
+#define GAIA_MBR_EQUAL		3
+/** MBR relationships: INTERSECTS */
+#define GAIA_MBR_INTERSECTS	4
+/** MBR relationships: OVERLAP */
+#define GAIA_MBR_OVERLAPS	5
+/** MBR relationships: TOUCHES */
+#define GAIA_MBR_TOUCHES	6
+/** MBR relationships: WITHIN */
+#define GAIA_MBR_WITHIN		7
+
+/* constants used for FilterMBR */
+/** FilerMBR relationships: WITHIN */
+#define GAIA_FILTER_MBR_WITHIN		74
+/** FilerMBR relationships: CONTAINS */
+#define GAIA_FILTER_MBR_CONTAINS	77
+/** FilerMBR relationships: INTERSECTS */
+#define GAIA_FILTER_MBR_INTERSECTS	79
+/** FilerMBR relationships: DECLARE */
+#define GAIA_FILTER_MBR_DECLARE		89
+
+/* constants defining SVG default values */
+/** SVG precision: RELATIVE */
+#define GAIA_SVG_DEFAULT_RELATIVE 	0
+/** SVG precision: DEFAULT */
+#define GAIA_SVG_DEFAULT_PRECISION	6
+/** SVG precision: MAX */
+#define GAIA_SVG_DEFAULT_MAX_PRECISION 15
+
+/* constants used for VirtualNetwork */
+/** VirtualNetwork internal markers: START */
+#define GAIA_NET_START		0x67
+/** VirtualNetwork internal markers: 64 bit START */
+#define GAIA_NET64_START	0x68
+/** VirtualNetwork internal markers: A-Stat START */
+#define GAIA_NET64_A_STAR_START	0x69
+/** VirtualNetwork internal markers: END */
+#define GAIA_NET_END		0x87
+/** VirtualNetwork internal markers: HEADER */
+#define GAIA_NET_HEADER		0xc0
+/** VirtualNetwork internal markers: CODE */
+#define GAIA_NET_CODE		0xa6
+/** VirtualNetwork internal markers: ID */
+#define GAIA_NET_ID		0xb5
+/** VirtualNetwork internal markers: NODE */
+#define GAIA_NET_NODE		0xde
+/** VirtualNetwork internal markers: ARC */
+#define GAIA_NET_ARC		0x54
+/** VirtualNetwork internal markers: TABLE */
+#define GAIA_NET_TABLE		0xa0
+/** VirtualNetwork internal markers: FROM */
+#define GAIA_NET_FROM		0xa1
+/** VirtualNetwork internal markers: TO */
+#define GAIA_NET_TO		0xa2
+/** VirtualNetwork internal markers: GEOM */
+#define GAIA_NET_GEOM		0xa3
+/** VirtualNetwork internal markers: NAME */
+#define GAIA_NET_NAME		0xa4
+/** VirtualNetwork internal markers: COEFF */
+#define GAIA_NET_A_STAR_COEFF	0xa5
+/** VirtualNetwork internal markers: BLOCK */
+#define GAIA_NET_BLOCK		0xed
+
+/* constants used for Coordinate Dimensions */
+/** Coordinate Dimensions: XY */
+#define GAIA_XY		0x00
+/** Coordinate Dimensions: XYZ */
+#define GAIA_XY_Z	0x01
+/** Coordinate Dimensions: XYM */
+#define GAIA_XY_M	0x02
+/** Coordinate Dimensions: XYZM */
+#define GAIA_XY_Z_M	0x03
+
+/* constants used for length unit conversion */
+/** Length unit conversion: Kilometer */
+#define GAIA_KM		0
+/** Length unit conversion: Meter */
+#define GAIA_M		1
+/** Length unit conversion: Decimeter */
+#define GAIA_DM		2
+/** Length unit conversion: Centimeter */
+#define GAIA_CM		3
+/** Length unit conversion: Millimeter */
+#define GAIA_MM		4
+/** Length unit conversion: International Nautical Mile */
+#define GAIA_KMI	5
+/** Length unit conversion: Inch */
+#define GAIA_IN		6
+/** Length unit conversion: Feet */
+#define GAIA_FT		7
+/** Length unit conversion: Yard */
+#define GAIA_YD		8
+/** Length unit conversion: Mile */
+#define GAIA_MI		9
+/** Length unit conversion: Fathom */
+#define GAIA_FATH	10
+/** Length unit conversion: Chain */
+#define GAIA_CH		11
+/** Length unit conversion: Link */
+#define GAIA_LINK	12
+/** Length unit conversion: US Inch */
+#define GAIA_US_IN	13
+/** Length unit conversion: US Feet */
+#define GAIA_US_FT	14
+/** Length unit conversion: US Yard */
+#define GAIA_US_YD	15
+/** Length unit conversion: US Chain */
+#define GAIA_US_CH	16
+/** Length unit conversion: US Mile */
+#define GAIA_US_MI	17
+/** Length unit conversion: Indian Yard */
+#define GAIA_IND_YD	18
+/** Length unit conversion: Indian Feet */
+#define GAIA_IND_FT	19
+/** Length unit conversion: Indian Chain */
+#define GAIA_IND_CH	20
+/** Length unit conversion: MIN */
+#define GAIA_MIN_UNIT	GAIA_KM
+/** Length unit conversion: MAX */
+#define GAIA_MAX_UNIT	GAIA_IND_CH
+
+/* constants used for SHAPES */
+/** SHP shape: unknown */
+#define GAIA_SHP_NULL		0
+/** SHP shape: POINT */
+#define GAIA_SHP_POINT		1
+/** SHP shape: POLYLINE */
+#define GAIA_SHP_POLYLINE	3
+/** SHP shape: POLYGON */
+#define GAIA_SHP_POLYGON	5
+/** SHP shape: MULTIPOINT */
+#define GAIA_SHP_MULTIPOINT	8
+/** SHP shape: POINT Z */
+#define GAIA_SHP_POINTZ		11
+/** SHP shape: POLYLINE Z */
+#define GAIA_SHP_POLYLINEZ	13
+/** SHP shape: POLYGON Z */
+#define GAIA_SHP_POLYGONZ	15
+/** SHP shape: MULTIPOINT Z */
+#define GAIA_SHP_MULTIPOINTZ	18
+/** SHP shape: POINT M */
+#define GAIA_SHP_POINTM		21
+/** SHP shape: POLYLINE M */
+#define GAIA_SHP_POLYLINEM	23
+/** SHP shape: POLYGON M */
+#define GAIA_SHP_POLYGONM	25
+/** SHP shape: MULTIPOINT M */
+#define GAIA_SHP_MULTIPOINTM	28
+
+/* macros */
+/**
+ macro extracting XY coordinates
+
+ \param xy pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XY] dims may cause serious 
+ problems
+ */
+#define gaiaGetPoint(xy,v,x,y)	\
+				{*x = xy[(v) * 2]; \
+				 *y = xy[(v) * 2 + 1];}
+
+/**
+ macro setting XY coordinates
+
+ \param xy pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XY] dims may cause
+ serious problems
+ */
+#define gaiaSetPoint(xy,v,x,y)	\
+				{xy[(v) * 2] = x; \
+				 xy[(v) * 2 + 1] = y;}
+
+/**
+ macro extracting XYZ coordinates
+
+ \param xyz pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+ \param z [double *] Z coordinate 
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XYZ] dims may cause serious 
+ problems
+ */
+#define gaiaGetPointXYZ(xyz,v,x,y,z)	\
+				{*x = xyz[(v) * 3]; \
+				 *y = xyz[(v) * 3 + 1]; \
+				 *z = xyz[(v) * 3 + 2];}
+
+/**
+ macro setting XYZ coordinates
+
+ \param xyz pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+ \param z [double] Z coordinate
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XYZ] dims may cause
+ serious problems
+ */
+#define gaiaSetPointXYZ(xyz,v,x,y,z)	\
+				{xyz[(v) * 3] = x; \
+				 xyz[(v) * 3 + 1] = y; \
+				 xyz[(v) * 3 + 2] = z;}
+
+/**
+ macro extracting XYM coordinates
+
+ \param xym pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+ \param m [double *] M measure
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XYM] dims may cause serious 
+ problems
+ */
+#define gaiaGetPointXYM(xym,v,x,y,m)	\
+				{*x = xym[(v) * 3]; \
+				 *y = xym[(v) * 3 + 1]; \
+				 *m = xym[(v) * 3 + 2];}
+
+/**
+ macro setting XYM coordinates
+
+ \param xym pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+ \param m [double] M measure
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XYM] dims may cause
+ serious problems
+ */
+#define gaiaSetPointXYM(xym,v,x,y,m)	\
+				{xym[(v) * 3] = x; \
+				 xym[(v) * 3 + 1] = y; \
+				 xym[(v) * 3 + 2] = m;}
+
+/**
+ macro extracting XYZM coordinates
+
+ \param xyzm pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double *] X coordinate
+ \param y [double *] Y coordinate 
+ \param z [double *] Z coordinate 
+ \param m [double *] M measure
+
+ \sa gaiaLineGetPoint, gaiaRingGetPoint
+
+ \note using this macro on behalf of COORDs not of [XYZM] dims may cause serious 
+ problems
+ */
+#define gaiaGetPointXYZM(xyzm,v,x,y,z,m)	\
+				{*x = xyzm[(v) * 4]; \
+				 *y = xyzm[(v) * 4 + 1]; \
+				 *z = xyzm[(v) * 4 + 2]; \
+				 *m = xyzm[(v) * 4 + 3];}
+
+/**
+ macro setting XYZM coordinates
+
+ \param xyzm pointer [const void *] to COORD mem-array
+ \param v [int] point index [first point has index 0]
+ \param x [double] X coordinate
+ \param y [double] Y coordinate
+ \param z [double] Z coordinate
+ \param m [double] M measure
+
+ \sa gaiaLineSetPoint, gaiaRingSetPoint
+
+ \note using this macro on behalf on COORDs not of [XYZM] dims may cause
+ serious problems
+ */
+#define gaiaSetPointXYZM(xyzm,v,x,y,z,m)	\
+				{xyzm[(v) * 4] = x; \
+				 xyzm[(v) * 4 + 1] = y; \
+				 xyzm[(v) * 4 + 2] = z; \
+				 xyzm[(v) * 4 + 3] = m;}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_CONST_H */
diff --git a/libspatialite/src/headers/spatialite/gg_core.h b/libspatialite/src/headers/spatialite/gg_core.h
new file mode 100644
index 0000000..8f9c1ce
--- /dev/null
+++ b/libspatialite/src/headers/spatialite/gg_core.h
@@ -0,0 +1,1572 @@
+/*
+ gg_core.h -- Gaia common support for geometries: core functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_core.h
+
+ Geometry handling functions: core
+ */
+
+#ifndef _GG_CORE_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_CORE_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Safely frees any dynamic memory block allocated by the library itself
+
+ \param ptr pointer to dynamicly allocated memory
+
+ \note on some platforms (most notably, Microsoft Windows) many different
+ runtime libraries may actually support the same process.
+ \n attempting to free() a memory block allocated by a different runtime 
+ module may easily cause fatal memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFree (void *ptr);
+
+/**
+ Allocates a 2D POINT [XY]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPoint (double x, double y);
+
+/**
+ Allocates a 3D POINT [XYZ]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ \param z the Z coordinate.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZ (double x, double y,
+						    double z);
+
+/**
+ Allocates a 2D POINT [XYM]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ \param m the M measure.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYM (double x, double y,
+						    double m);
+
+/**
+ Allocates a 3D POINT [XYZM]
+
+ \param x the X coordinate.
+ \param y the Y coordinate.
+ \param z the Z coordinate.
+ \param m the M measure.
+ 
+ \return the pointer to the newly created POINT object: NULL on failure
+
+ \sa gaiaFreePoint
+
+ \note you are responsible to destroy (before or after) any allocated
+ POINT, unless you've passed ownership of the POINT object to some 
+ further object: in this case destroying the higher order object will
+ implicitly destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZM (double x, double y,
+						     double z, double m);
+
+/**
+ Destroys a POINT object
+
+ \param ptr pointer to the POINT object to be destroyed
+
+ \sa gaiaAllocPoint, gaiaAllocPointXYZ, gaiaAllocPointXYM, gaiaAllocPointXYZM
+
+ \note attempting to destroy any POINT object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFreePoint (gaiaPointPtr ptr);
+
+/**
+ Allocates a 2D LINESTRING [XY]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPoint,
+ gaiaGetPoint
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING,
+ unless you've passed ownership of the LINESTRING object to some further 
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestring (int vert);
+
+/**
+ Allocates a 3D LINESTRING [XYZ]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPointXYZ,
+ gaiaGetPointXYZ
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING, 
+ unless you've passed ownership of the LINESTRING object to some further  
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZ (int vert);
+
+/**
+ Allocates a 2D LINESTRING [XYM]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPointXYM,
+ gaiaGetPointXYM
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING, 
+ unless you've passed ownership of the LINESTRING object to some further  
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYM (int vert);
+
+/**
+ Allocates a 3D LINESTRING [XYZM]
+
+ \param vert number of points [aka vertices] into the Linestring
+
+ \return the pointer to newly created LINESTRING object: NULL on failure
+
+ \sa gaiaFreeLinestring, gaiaLineSetPoint, gaiaLineGetPoint, gaiaSetPointXYZM,
+ gaiaGetPointXYZM
+
+ \note you are responsible to destroy (before or after) any allocated LINESTRING, 
+ unless you've passed ownership of the LINESTRING object to some further  
+ object: in this case destroying the higher order object will implicitly 
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZM (int vert);
+
+/**
+ Destroys a LINESTRING object
+
+ \param ptr pointer to the LINESTRING object to be destroyed
+
+ \sa gaiaAllocLinestring, gaiaAllocLinestringXYZ, gaiaAllocLinestringXYM,
+  gaiaAllocLinestringXYZM
+
+ \note attempting to destroy any LINESTRING object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFreeLinestring (gaiaLinestringPtr ptr);
+
+/**
+ Copies coordinates between two LINESTRING objects
+
+ \param dst destination LINESTRING [output]
+ \param src origin LINESTRING [input]
+
+ \note both LINESTRING objects must have exactly the same number of points:
+ if dimensions aren't the same for both objects, then the appropriate 
+ conversion will be silently applied.
+ */
+    GAIAGEO_DECLARE void gaiaCopyLinestringCoords (gaiaLinestringPtr dst,
+						   gaiaLinestringPtr src);
+
+/**
+ Allocates a 2D RING [XY]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPoint,
+ gaiaGetPoint
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRing (int vert);
+
+/**
+ Allocates a 3D RING [XYZ]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPointXYZ,
+ gaiaGetPointXYZ
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZ (int vert);
+
+/**
+ Allocates 2D RING [XYM]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPointXYM,
+ gaiaGetPointXYM
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYM (int vert);
+
+/**
+ Allocates a 3D RING [XYZM]
+
+ \param vert number of points [aka vertices] into the Ring
+
+ \return the pointer to newly created RING object: NULL on failure
+
+ \sa gaiaFreeRing, gaiaRingSetPoint, gaiaRingGetPoint, gaiaSetPointXYZM,
+ gaiaSetPointXYZM
+
+ \note you are responsible to destroy (before or after) any allocated RING,
+ unless you've passed ownership of the RING object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZM (int vert);
+
+/**
+ Destroys a RING object
+
+ \param ptr pointer to the RING object to be destroyed
+
+ \sa gaiaAllocRing, gaiaAllocRingXYZ, gaiaAllocRingXYM,
+  gaiaAllocRingXYZM
+
+ \note attempting to destroy any RING object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFreeRing (gaiaRingPtr ptr);
+
+/**
+ Copies coordinates betwee two RING objects
+
+ \param dst destination RING [output]
+ \param src origin RING [input]
+
+ \note both RING objects must have exactly the same number of points:
+ if dimensions aren't the same for both objects, then the appropriate
+ conversion will be silently applied.
+ */
+    GAIAGEO_DECLARE void gaiaCopyRingCoords (gaiaRingPtr dst, gaiaRingPtr src);
+
+/**
+ Allocates a 2D POLYGON [XY]
+
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [0, if no Interior Ring is required].
+
+ \return the pointer to newly created POLYGON object: NULL on failure
+
+ \sa gaiaFreePolygon
+
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygon (int vert, int holes);
+
+/**
+ Allocates a 3D POLYGON [XYZ]
+    
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [0, if no Interior Ring is required].
+    
+ \return the pointer to newly created POLYGON object: NULL on failure
+    
+ \sa gaiaFreePolygon
+    
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZ (int vert, int holes);
+
+/**
+ Allocates a 2D POLYGON [XYM]
+    
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [0, if no Interior Ring is required].
+    
+ \return the pointer to newly created POLYGON object: NULL on failure
+    
+ \sa gaiaFreePolygon
+    
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYM (int vert, int holes);
+
+/**
+ Allocates a 3D POLYGON [XYZM]
+    
+ \param vert number of points [aka vertices] into the Exterior Ring.
+ \param holes number of Interior Rings [may by 0, if no Interior Ring is required].
+    
+ \return the pointer to newly created POLYGON object: NULL on failure
+    
+ \sa gaiaFreePolygon
+    
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZM (int vert, int holes);
+
+/**
+ Allocates a POLYGON
+
+ \param ring pointer to a valid RING object: assumed to be the Polygon's
+  Exterior Ring.
+
+ \return the pointer to newly created POLYGON object: NULL on failure
+
+ \sa gaiaAllocRing, gaiaAllocRingXYZ, gaiaAllocRingXYM, gaiaAllocRingXYZM,
+ gaiaFreePolygon
+
+ \note you are responsible to destroy (before or after) any allocated POLYGON,
+ unless you've passed ownership of the POLYGON object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object. 
+ \n Ownership of passed Ring object will be transferred to the 
+ Polygon object being created. 
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaCreatePolygon (gaiaRingPtr ring);
+
+/**
+ Destroys a POLYGON object
+
+ \param polyg pointer to the POLYGON object to be destroyed
+
+ \sa gaiaAllocPolygon, gaiaAllocPolygonXYZ, gaiaAllocPolygonXYM,
+  gaiaAllocPolygonXYZM, gaiaCreatePolygon
+
+ \note attempting to destroy any POLYGON object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ \n Ownerhip of each RING object referenced by a POLYGON object alway belongs
+ to the POLYGON itself, so destroying the POLYGON will surely destroy
+ any related RING as well.
+ */
+    GAIAGEO_DECLARE void gaiaFreePolygon (gaiaPolygonPtr polyg);
+
+/**
+ Allocates a 2D Geometry [XY]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomColl (void);
+
+/**
+ Allocates a 3D Geometry [XYZ]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZ (void);
+
+/**
+ Allocates a 2D Geometry [XYM]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYM (void);
+
+/**
+ Allocates a 3D Geometry [XYZM]
+
+ \return the pointer to newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further
+ object: in this case destroying the higher order object will implicitly
+ destroy any contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZM (void);
+
+/**
+ Destroys a Geometry object
+
+ \param geom pointer to the Geometry object to be destroyed
+
+ \sa gaiaAllocGeomColl, gaiaAllocGeomCollXYZ, gaiaAllocGeomCollXYM,
+  gaiaAllocGeomCollXYZM
+
+ \note attempting to destroy any Geometry object whose ownnership has already
+ been transferred to some other (higher order) object is a serious
+ error, and will easily cause severe memory corruption.
+ \n Ownerhip of each POINT, LINESTRING or POLYGON object referenced by a
+ Geometry object alway belongs to the Geometry itself, so destroying the 
+ Geometry will surely destroy any related elementary geometry item as well.
+ */
+    GAIAGEO_DECLARE void gaiaFreeGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Creates a new 2D Point [XY] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomColl (gaiaGeomCollPtr p, double x,
+						 double y);
+
+/**
+ Creates a new 3D Point [XYZ] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+ \param z Z coordinate of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZ (gaiaGeomCollPtr p, double x,
+						    double y, double z);
+
+/**
+ Creates a new 2D Point [XYM] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+ \param m M measure of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYM (gaiaGeomCollPtr p, double x,
+						    double y, double m);
+
+/**
+ Creates a new 3D Point [XYZM] object into a Geometry object
+
+ \param p pointer to the Geometry object
+ \param x X coordinate of the Point to be created
+ \param y X coordinate of the Point to be created
+ \param z Z coordinate of the Point to be created
+ \param m M measure of the Point to be created
+
+ \note ownership of the newly created POINT object belongs to the Geometry
+ object.
+ */
+    GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZM (gaiaGeomCollPtr p,
+						     double x, double y,
+						     double z, double m);
+
+/**
+ Creates a new Linestring object into a Geometry object
+
+ \param p pointer to the Geometry object.
+ \param vert number of points [aka vertices] into the Linestring.
+
+ \return the pointer to newly created Linestring: NULL on failure.
+
+ \note ownership of the newly created Linestring object belongs to the Geometry object. 
+ \n the newly created Linestring will have the same dimensions as the Geometry has.
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr
+	gaiaAddLinestringToGeomColl (gaiaGeomCollPtr p, int vert);
+
+/**
+ Inserts an already existing Linestring object into a Geometry object
+
+ \param p pointer to the Geometry object.
+ \param line pointer to the Linestring object.
+
+ \note ownership of the Linestring object will be transferred to the
+ Geometry object.
+ */
+    GAIAGEO_DECLARE void gaiaInsertLinestringInGeomColl (gaiaGeomCollPtr p,
+							 gaiaLinestringPtr
+							 line);
+
+/**
+ Creates a new Polygon object into a Geometry object
+
+ \param p pointer to the Geometry object.
+ \param vert number of points [aka vertices] into the Polygon's Exterior Ring.
+ \param interiors number of Interiors Rings [0, if no Interior Ring is required]
+
+ \return the pointer to newly created Polygon: NULL on failure.
+
+ \note ownership of the newly created Polygon object belongs to the Geometry object.
+ \n the newly created Polygon will have the same dimensions as the Geometry has.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaAddPolygonToGeomColl (gaiaGeomCollPtr p,
+							     int vert,
+							     int interiors);
+
+/**
+ Creates a new Polygon object into a Geometry object starting from an
+ already existing Ring object
+
+ \param p pointer to the Geometry object.
+ \param ring pointer to the Ring object [assumed to represent to Polygon's
+ Exterior Ring].
+
+ \return the pointer to the newly created Polygon object: NULL on failure.
+
+ \note ownership of the Ring object will be transferred to the
+ Polygon object, and the Polygon object ownerships belongs to the Geometry object.
+ \n the Polygon object will have the same dimensions as the Ring object has.
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaInsertPolygonInGeomColl (gaiaGeomCollPtr
+								p,
+								gaiaRingPtr
+								ring);
+
+/**
+ Creates a new Interior Ring object into a Polygon object
+
+ \param p pointer to the Polygon object.
+ \param pos relative position index [first Interior Ring has index 0].
+ \param vert number of points (aka vertices) into the Ring.
+
+ \return the pointer to the newly created Ring object: NULL on failure.
+
+ \sa gaiaAllocPolygon, gaiaAllocPolygonXYZ, gaiaAllocPolygonXYM,
+ gaiaAllocPolygonXYZM
+
+ \note ownership of the Ring object belongs to the Polygon object.
+ \n the newly created Ring will have the same dimensions the Polygon has.
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaAddInteriorRing (gaiaPolygonPtr p, int pos,
+						     int vert);
+
+/**
+ Inserts an already existing Ring object into a Polygon object
+
+ \param p pointer to the Polygon object
+ \param ring pointer to the Ring object
+
+ \sa gaiaAddRingToPolygon
+
+ \note ownership of the Ring object still remains to the calling procedure
+ (a duplicated copy of the original Ring will be inserted into the Polygon).
+ \n the newly created Polygon will have the same dimensions as the Ring has.
+ \n if required the Polygon's Interior Rings count could be increased.
+ */
+    GAIAGEO_DECLARE void gaiaInsertInteriorRing (gaiaPolygonPtr p,
+						 gaiaRingPtr ring);
+
+/**
+ Inserts an already existing Ring object into a Polygon object
+
+ \param polyg pointer to the Polygon object
+ \param ring pointer to the Ring object
+
+ \sa gaiaInsertInteriorRing
+
+ \note ownership of the Ring object will be tranferred to the Polygon object.
+ \n the newly created Polygon will have the same dimensions as the Ring has.
+ \n if required the Polygon's Interior Rings count could be increased.
+ */
+    GAIAGEO_DECLARE void gaiaAddRingToPolyg (gaiaPolygonPtr polyg,
+					     gaiaRingPtr ring);
+
+/**
+ Duplicates a Linestring object
+
+ \param line pointer to Linestring object [origin].
+
+ \return the pointer to newly created Linestring object: NULL on failure.
+
+ \sa gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaLinestringPtr gaiaCloneLinestring (gaiaLinestringPtr
+							   line);
+
+/**
+ Duplicates a Ring object
+
+ \param ring pointer to Ring object [origin].
+
+ \return the pointer to newly created Ring object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRing (gaiaRingPtr ring);
+
+/**
+ Duplicates a Polygon object
+
+ \param polyg pointer to Polygon object [origin].
+
+ \return the pointer to newly created Polygon object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygon (gaiaPolygonPtr polyg);
+
+/**
+ Duplicates a Geometry object
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, 
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings,
+ gaiaCloneGeomCollPolygons, gaiaCastGeomCollToXY, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYM, gaiaCastGeomCollToXYZM, gaiaExtractPointsFromGeomColl,
+ gaiaExtractLinestringsFromGeomColl, gaiaExtractPolygonsFromGeomColl,
+ gaiaMergeGeometries
+
+ \note the newly created object is an exact copy of the original one. 
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Duplicates a Geometry object [Points only]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollLinestrings, 
+ gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one; except
+ in that only Point objects will be copied.
+ \n Caveat: an empty Geometry could be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPoints (gaiaGeomCollPtr
+							     geom);
+
+/**
+ Duplicates a Geometry object [Linestrings only]
+                                                             
+ \param geom pointer to Geometry object [origin].
+        
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollPolygons
+
+ \note the newly created object is an exact copy of the original one; except
+ in that only Linestrings objects will be copied.
+ \n Caveat: an empty Geometry could be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaCloneGeomCollLinestrings (gaiaGeomCollPtr geom);
+
+/**
+ Duplicates a Geometry object [Polygons only]
+ 
+ \param geom pointer to Geometry object [origin].
+ 
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneLinestring, gaiaCloneRing, gaiaClonePolygon, gaiaCloneGeomColl,
+ gaiaCloneGeomCollPoints, gaiaCloneGeomCollLinestrings
+
+ \note the newly created object is an exact copy of the original one; except
+ in that only Polygons objects will be copied.
+ \n Caveat: an empty Geometry could be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPolygons (gaiaGeomCollPtr
+							       geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 2D XY]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYM, gaiaCastGeomCollToXYZM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 2D [XY] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXY (gaiaGeomCollPtr geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 3D XYZ]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXY, 
+ gaiaCastGeomCollToXYM, gaiaCastGeomCollToXYZM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 3D [XYZ] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZ (gaiaGeomCollPtr
+							   geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 2D XYM]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXY, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYZM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 2D [XYM] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYM (gaiaGeomCollPtr
+							   geom);
+
+/**
+ Duplicates a Geometry object [casting dimensions to 3D XYZM]
+
+ \param geom pointer to Geometry object [origin].
+
+ \return the pointer to newly created Geometry object: NULL on failure.
+
+ \sa gaiaCloneGeomColl, gaiaCastGeomCollToXY, gaiaCastGeomCollToXYZ,
+ gaiaCastGeomCollToXYM
+
+ \note the newly created object is an exact copy of the original one; except
+ in that any elementary item  will be casted to 3D [XYZM] dimensions.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZM (gaiaGeomCollPtr
+							    geom);
+
+/**
+ Gets coodinates from a Linestring's Point
+
+ \param ln pointer to Linestring object.
+ \param v relative position of Point: first Point has index 0
+ \param x on completion this variable will contain the Point X coordinate.
+ \param y on completion this variable will contain the Point Y coordinate.
+ \param z on completion this variable will contain the Point Z coordinate.
+ \param m on completion this variable will contain the Point M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaLineSetPoint, gaiaGetPoint, gaiaGetPointXYZ, gaiaGetPointXYM,
+ gaiaGetPointXYZM
+
+ \note this function perform the same identical task performed by
+ gaiaGetPoint(), gaiaGetPointXYZ(), gaiaGetPointXYM() and gaiaGetPointXYZM()
+ macros.
+ \n using the gaiaLineGetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaLineGetPoint() instead will always ensure that the appropriate
+ dimensions (as declared by the Linestring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaLineGetPoint (gaiaLinestringPtr ln, int v,
+					  double *x, double *y, double *z,
+					  double *m);
+
+/**
+ Sets coodinates for a Linestring's Point
+
+ \param ln pointer to Linestring object.
+ \param v relative position of Point: first Point has index 0
+ \param x the Point's X coordinate.
+ \param y the Point's Y coordinate.
+ \param z the Point's Z coordinate.
+ \param m the Point's M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaLineGetPoint, gaiaSetPoint, gaiaSetPointXYZ, gaiaSetPointXYM,
+ gaiaSetPointXYZM
+
+ \note this function perform the same identical task performed by 
+ gaiaSetPoint(), gaiaSetPointXYZ(), gaiaSetPointXYM() and gaiaSetPointXYZM()
+ macros.
+ \n using the gaiaLineSetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaLineSetPoint() instead will always ensure that the appropriate 
+ dimensions (as declared by the Linestring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaLineSetPoint (gaiaLinestringPtr ln, int v, double x,
+					  double y, double z, double m);
+
+/**
+ Gets coodinates from a Ring's Point
+
+ \param rng pointer to Ring object.
+ \param v relative position of Point: first Point has index 0
+ \param x on completion this variable will contain the Point X coordinate.
+ \param y on completion this variable will contain the Point Y coordinate.
+ \param z on completion this variable will contain the Point Z coordinate.
+ \param m on completion this variable will contain the Point M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaRingSetPoint, gaiaGetPoint, gaiaGetPointXYZ, gaiaGetPointXYM,
+ gaiaGetPointXYZM
+
+ \note this function perform the same identical task performed by
+ gaiaGetPoint(), gaiaGetPointXYZ(), gaiaGetPointXYM() and gaiaGetPointXYZM()
+ macros.
+ \n using the gaiaRingGetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaRingGetPoint() instead will always ensure that the appropriate
+ dimensions (as declared by the Ring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaRingGetPoint (gaiaRingPtr rng, int v, double *x,
+					  double *y, double *z, double *m);
+
+/**
+ Sets coodinates for a Ring's Point
+
+ \param rng pointer to Ring object.
+ \param v relative position of Point: first Point has index 0
+ \param x the Point's X coordinate.
+ \param y the Point's Y coordinate.
+ \param z the Point's Z coordinate.
+ \param m the Point's M measure.
+
+ \return 0 on failure: any other different value on success.
+
+ \sa gaiaRingGetPoint, gaiaGetPoint, gaiaGetPointXYZ, gaiaSetPointXYM,
+ gaiaSetPointXYZM
+
+ \note this function perform the same identical task performed by
+ gaiaSetPoint(), gaiaSetPointXYZ(), gaiaSetPointXYM() and gaiaSetPointXYZM()
+ macros.
+ \n using the gaiaRingSetPoint() function is a little bit slower but is
+ intrinsically safest, because misused macros can easily cause severe
+ memory corruption.
+ \n gaiaRingSetPoint() instead will always ensure that the appropriate
+ dimensions (as declared by the Ring object) will be correctly used.
+ */
+    GAIAGEO_DECLARE int gaiaRingSetPoint (gaiaRingPtr rng, int v, double x,
+					  double y, double z, double m);
+
+/**
+ Determines OGC dimensions for a Geometry object
+
+ \param geom pointer to Geometry object
+ 
+ \return OGC dimensions
+
+ \note OGC dimensions are defined as follows:
+ \li if the Geometry doesn't contain any elementary item: \b -1
+ \li if the Geometry only contains Point items: \b 0
+ \li if the Geometry only contains Point / Linestring items: \b 1
+ \li if the Geometry contains some Polygon item: \b 2
+ */
+    GAIAGEO_DECLARE int gaiaDimension (gaiaGeomCollPtr geom);
+
+/**
+ Determines the corresponding Type for a Geometry object
+ 
+ \param geom pointer to Geometry object
+
+ \return the corresponding Geometry Type
+
+ \note Type is one of: GAIA_POINT, GAIA_LINESTRING, GAIA_POLYGON,
+ GAIA_MULTIPOINT, GAIA_MULTILINESTRING, GAIA_MULTIPOLYGON,
+ GAIA_GEOMETRYCOLLECTION, GAIA_POINTZ, GAIA_LINESTRINGZ, GAIA_POLYGONZ,
+ GAIA_MULTIPOINTZ, GAIA_MULTILINESTRINGZ, GAIA_MULTIPOLYGONZ,
+ GAIA_GEOMETRYCOLLECTIONZ, GAIA_POINTM, GAIA_LINESTRINGM, GAIA_POLYGONM,
+ GAIA_MULTIPOINTM, GAIA_MULTILINESTRINGM, GAIA_MULTIPOLYGONM,
+ GAIA_GEOMETRYCOLLECTIONM, GAIA_POINTZM, GAIA_LINESTRINGZM, GAIA_POLYGONZM,
+ GAIA_MULTIPOINTZM, GAIA_MULTILINESTRINGZM, GAIA_MULTIPOLYGONZM,
+ GAIA_GEOMETRYCOLLECTIONZM
+ \n on failure GAIA_NONE will be returned.
+ */
+    GAIAGEO_DECLARE int gaiaGeometryType (gaiaGeomCollPtr geom);
+
+/**
+ Determines the corresponding Type for a Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return the corresponding Geometry Type
+
+ \sa gaiaGeometryType
+
+ \note Type is one of: GAIA_POINT, GAIA_LINESTRING, GAIA_POLYGON,
+ GAIA_MULTIPOINT, GAIA_MULTILINESTRING, GAIA_MULTIPOLYGON,
+ GAIA_GEOMETRYCOLLECTION
+ \n on failure GAIA_NONE will be returned.
+
+ \remark deprecated function (used in earlier SpatiaLite versions).
+ */
+    GAIAGEO_DECLARE int gaiaGeometryAliasType (gaiaGeomCollPtr geom);
+
+/**
+ Checks for empty Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return 0 if the Geometry is empty: otherwise any other different value.
+
+ \note an empty Geometry is a Geometry not containing any elementary
+ item: i.e. no Points, no Linestrings and no Polygons at all.
+ */
+    GAIAGEO_DECLARE int gaiaIsEmpty (gaiaGeomCollPtr geom);
+
+/**
+ Checks for toxic Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return 0 if the Geometry is not toxic: otherwise any other different value.
+
+ \sa gaiaSanitize
+
+ \note a \b toxic Geometry is a Geometry containing severely malformed
+ Polygons: i.e. containing less than 4 Points, unclosed Rings and so on.
+ \n Attempting to pass any toxic Geometry to GEOS supported functions
+ will easily cause a crash.
+ */
+    GAIAGEO_DECLARE int gaiaIsToxic (gaiaGeomCollPtr geom);
+
+/**
+ Attempts to sanitize a possibly malformed Geometry object
+
+ \param org pointer to Geometry object.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaIsToxic
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaSanitize()
+ \n the output Geometry will surely have:
+ \li no repeated Points on Linestrings or Rings (i.e. consecutive Points 
+ sharing exactly the same coordinates): any repeated Point will be suppressed,
+ simply leaving only the first occurrence.
+ \li proper Ring closure: for sure any Ring will have exactly coinciding
+ first and last Points.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSanitize (gaiaGeomCollPtr org);
+
+
+/**
+ Attempts to resolve a (Multi)Linestring from a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param force_multi: 0 if the returned Geometry could represent a Linestring:
+ any other value if casting to MultiLinestring is required unconditionally.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaDissolveSegments, gaiaDissolvePoints
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaLinearize()
+ \n the input Geometry is expected to contain Polygons only: then any Ring 
+ will be transformed into the corresponding Linestring.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLinearize (gaiaGeomCollPtr geom,
+						   int force_multi);
+
+/**
+ Attempts to resolve a collection of Segments from a Geometry object
+
+ \param geom pointer to Geometry object.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaLinearize, gaiaDissolvePoints
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaDissolveSegments()
+ \n the input Geometry can be of any arbitrary type:
+ \li any Point will be copied untouched.
+ \li any Linestring will be dissolved into Segments.
+ \li any Ring will be dissolved into Segments.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolveSegments (gaiaGeomCollPtr geom);
+
+/** 
+ Attempts to resolve a collection of Points from a Geometry object
+
+ \param geom pointer to Geometry object.
+ 
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaLinearize, gaiaDissolveSegments
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaDissolvePoints()
+ \n the input Geometry can be of any arbitrary type:
+ \li any Point will be copied untouched.
+ \li any Linestring will be dissolved into sparse Points.
+ \li any Ring will be dissolved into sparse Points.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolvePoints (gaiaGeomCollPtr geom);
+
+/**
+ Extracts any Point from a Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaExtractLinestringsFromGeomColl,
+ gaiaExtractPolygonsFromGeomColl, gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaExtractPointsFromGeomColl()
+ \n the newly created Geometry will contain any Point contained into the
+ input Geometry.
+ \n if the input Geometry doesn't contains any Point, then NULL will be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaExtractPointsFromGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Extracts any Linestring from a Geometry object
+
+ \param geom pointer to Geometry object
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaExtractPointsFromGeomColl, gaiaExtractPolygonsFromGeomColl, 
+ gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaExtractLinestringsFromGeomColl()
+ \n the newly created Geometry will contain any Linestring contained into the
+ input Geometry.
+ \n if the input Geometry doesn't contains any Linestring, then NULL will be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaExtractLinestringsFromGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Extracts any Polygon from a Geometry object
+        
+ \param geom pointer to Geometry object
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaExtractPointsFromGeomColl, gaiaExtractLinestringsFromGeomColl,
+ gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaExtractPolygonsFromGeomColl()
+ \n the newly created Geometry will contain any Polygon contained into the
+ input Geometry.
+ \n if the input Geometry doesn't contains any Polygon, then NULL will be returned.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr
+	gaiaExtractPolygonsFromGeomColl (gaiaGeomCollPtr geom);
+
+/**
+ Merges two Geometry objects into a single one
+
+ \param geom1 pointer to first Geometry object.
+ \param geom2 pointer to second Geometry object.
+
+ \return the pointer to newly created Geometry: NULL on failure.
+
+ \sa gaiaCloneGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ this including any Geometry created by gaiaMergeGeometries()
+ \n the newly created Geometry will contain any Point, Linestring and/or
+ Polygon contained in both input Geometries.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries (gaiaGeomCollPtr geom1,
+							 gaiaGeomCollPtr geom2);
+
+/**
+ Measures the geometric length for a Linestring or Ring
+
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated geometric length
+
+ \sa gaiaGeomCollLength
+
+ \note \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+
+ \remark internal method: doesn't require any GEOS support.
+ */
+    GAIAGEO_DECLARE double gaiaMeasureLength (int dims, double *coords,
+					      int vert);
+
+/**
+ Measures the geometric area for a Ring object
+
+ \param ring pointer to Ring object
+
+ \return the calculated geometric area
+
+ \sa gaiaGeomCollArea
+
+ \remark internal method: doesn't require any GEOS support.
+ */
+    GAIAGEO_DECLARE double gaiaMeasureArea (gaiaRingPtr ring);
+
+/**
+ Determines the Centroid for a Ring object
+
+ \param ring pointer to Ring object.
+ \param rx on completion this variable will contain the centroid X coordinate.
+ \param ry on completion this variable will contain the centroid Y coordinate.
+
+ \sa gaiaGeomCollCentroid
+
+ \remark internal method: doesn't require any GEOS support.
+ */
+    GAIAGEO_DECLARE void gaiaRingCentroid (gaiaRingPtr ring, double *rx,
+					   double *ry);
+
+/**
+ Determines the direction for a Ring object
+
+ \param p pointer to Ring object
+
+ \return 0 if the ring has counter-clockwise direction; any other different
+ value for clockwise direction.
+ */
+    GAIAGEO_DECLARE void gaiaClockwise (gaiaRingPtr p);
+
+/**
+ Check if a Point lays on a Ring surface
+
+ \param ring pointer to Ring object
+ \param pt_x Point X coordinate
+ \param pt_y Point Y coordinate
+
+ \return 0 if false: any other value if true
+ */
+    GAIAGEO_DECLARE int gaiaIsPointOnRingSurface (gaiaRingPtr ring, double pt_x,
+						  double pt_y);
+
+/**
+ Checks if a Point lays on a Polygon surface
+
+ \param polyg pointer to Polygon object
+ \param x Point X coordinate
+ \param y Point Y coordinate
+
+ \return 0 if false: any other value if true
+ */
+    GAIAGEO_DECLARE int gaiaIsPointOnPolygonSurface (gaiaPolygonPtr polyg,
+						     double x, double y);
+
+/**
+ Computes the minimum distance intercurring from a Point and a Linestring or Ring
+
+ \param x0 Point X coordinate
+ \param y0 Point Y coordinate
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated minumum distance.
+
+ \note \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+ */
+    GAIAGEO_DECLARE double gaiaMinDistance (double x0, double y0,
+					    int dims, double *coords, int vert);
+
+/**
+ Determines the intesection Point between two Segments
+
+ \param x0 on completion this variable will contain the Intersection X coord
+ \param y0 on completion this variable will contain the Intersection Y coord
+ \param x1 start Point X of first Segment
+ \param y1 start Point Y of first Segment
+ \param x2 end Point X of first Segment
+ \param y2 end Point Y of first Segment
+ \param x3 start Point X of second Segment
+ \param y3 start Point Y of second Segment
+ \param x4 end Point X of second Segment
+ \param y4 end Point Y of second Segment
+
+ \return 0 if the Segments doesn't intersect at all: any other value on
+ success.
+ */
+    GAIAGEO_DECLARE int gaiaIntersect (double *x0, double *y0, double x1,
+				       double y1, double x2, double y2,
+				       double x3, double y3, double x4,
+				       double y4);
+
+/**
+ Shifts any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param shift_x X axis shift factor.
+ \param shift_y Y axis shift factor.
+
+ \sa gaiaScaleCoords, gaiaRotateCoords, gaiaReflectCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaShiftCoords (gaiaGeomCollPtr geom, double shift_x,
+					  double shift_y);
+
+/**
+ Scales any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param scale_x X axis scale factor.
+ \param scale_y Y axis scale factor.
+
+ \sa gaiaShiftCoords, gaiaRotateCoords, gaiaReflectCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaScaleCoords (gaiaGeomCollPtr geom, double scale_x,
+					  double scale_y);
+
+/**
+ Rotates any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param angle rotation angle [expressed in Degrees].
+
+ \sa gaiaShiftCoords, gaiaScaleCoords, gaiaReflectCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaRotateCoords (gaiaGeomCollPtr geom, double angle);
+
+/**
+ Reflects any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+ \param x_axis if set to 0, no X axis reflection will be applied:
+ otherwise the X axis will be reflected.
+ \param y_axis if set to 0, no Y axis reflection will be applied:
+ otherwise the Y axis will be reflected.
+
+ \sa gaiaShiftCoords, gaiaScaleCoords, gaiaRotateCoords, gaiaSwapCoords
+ */
+    GAIAGEO_DECLARE void gaiaReflectCoords (gaiaGeomCollPtr geom, int x_axis,
+					    int y_axis);
+
+/**
+ Swaps any coordinate within a Geometry object
+
+ \param geom pointer to Geometry object.
+
+ \sa gaiaShiftCoords, gaiaScaleCoords, gaiaRotateCoords, gaiaReflectCoords
+
+ \note the X and Y axes will be swapped.
+ */
+    GAIAGEO_DECLARE void gaiaSwapCoords (gaiaGeomCollPtr geom);
+
+/**
+ Checks if two Linestring objects are equivalent
+
+ \param line1 pointer to first Linestring object.
+ \param line2 pointer to second Linestring object.
+
+ \return 0 if false: any other different value if true
+
+ \sa gaiaPolygonEquals
+
+ \note two Linestrings objects are assumed to be equivalent if exactly
+ \remark deprecated function (used in earlier SpatiaLite versions).
+ the same Points are found in both them.
+ */
+    GAIAGEO_DECLARE int gaiaLinestringEquals (gaiaLinestringPtr line1,
+					      gaiaLinestringPtr line2);
+
+/**
+ Checks if two Polygons objects are equivalent
+
+ \param polyg1 pointer to first Polygon object.
+ \param polyg2 pointer to second Polygon object.
+
+ \return 0 if false: any other different value if true
+
+ \sa gaiaLinestringEquals
+
+ \note two Polygon objects are assumed to be equivalent if exactly 
+ the same Points are found in both them.
+
+ \remark deprecated function (used in earlier SpatiaLite versions).
+ */
+    GAIAGEO_DECLARE int gaiaPolygonEquals (gaiaPolygonPtr polyg1,
+					   gaiaPolygonPtr polyg2);
+
+/**
+ Retrieves Geodesic params for an Ellipsoid definition
+
+ \param name text string identifying an Ellipsoid definition.
+ \param a on completion this variable will contain the first geodesic param.
+ \param b on completion this variable will contain the second geodesic param.
+ \param rf on completion this variable will contain the third geodesic param.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGreatCircleDistance, gaiaGeodesicDistance,
+ gaiaGreatCircleTotalLength, gaiaGeodesicTotalLength
+
+ \note supported Ellipsoid definitions are: \b MERIT, \b SGS85, \b GRS80,
+ \b IAU76, \b airy, \b APL4.9, \b NWL9D, \b mod_airy, \b andrae, \b aust_SA,
+ \b GRS67, \b bessel, \b bess_nam, \b clrk66, \b clrk80, \b CPM, \b delmbr, 
+ \b engelis, \b evrst30, \b evrst48, \b evrst56, \b evrst69, \b evrstSS, 
+ \b fschr60
+ */
+    GAIAGEO_DECLARE int gaiaEllipseParams (const char *name, double *a,
+					   double *b, double *rf);
+
+/**
+ Calculates the Great Circle Distance intercurring between two Points
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param lat1 Latitude of first Point.
+ \param lon1 Longitude of first Point.
+ \param lat2 Latitude of second Point.
+ \param lon2 Longitude of second Point.
+
+ \return the calculated Great Circle Distance.
+ 
+ \sa gaiaEllipseParams, gaiaGeodesicDistance,
+ gaiaGreatCircleTotalLength, gaiaGeodesicTotalLength
+
+ \note the returned distance is expressed in Kilometers.
+ \n the Great Circle method is less accurate but fastest to be calculated.
+ */
+    GAIAGEO_DECLARE double gaiaGreatCircleDistance (double a, double b,
+						    double lat1, double lon1,
+						    double lat2, double lon2);
+
+/**
+ Calculates the Geodesic Distance intercurring between two Points
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param rf third geodesic parameter.
+ \param lat1 Latitude of first Point.
+ \param lon1 Longitude of first Point.
+ \param lat2 Latitude of second Point.
+ \param lon2 Longitude of second Point.
+
+ \return the calculated Geodesic Distance.
+
+ \sa gaiaEllipseParams, gaiaGreatCircleDistance, gaiaGreatCircleTotalLength,
+ gaiaGeodesicTotalLength
+
+ \note the returned distance is expressed in Kilometers.
+ \n the Geodesic method is much more accurate but slowest to be calculated.
+ */
+    GAIAGEO_DECLARE double gaiaGeodesicDistance (double a, double b, double rf,
+						 double lat1, double lon1,
+						 double lat2, double lon2);
+
+/**
+ Calculates the Great Circle Total Length for a Linestring / Ring
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated Great Circle Total Length.
+
+ \sa gaiaEllipseParams, gaiaGreatCircleDistance, gaiaGeodesicDistance,
+ gaiaGeodesicTotalLength
+
+ \note the returned length is expressed in Kilometers.
+ \n the Great Circle method is less accurate but fastest to be calculated.
+ \n \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+ */
+    GAIAGEO_DECLARE double gaiaGreatCircleTotalLength (double a, double b,
+						       int dims, double *coords,
+						       int vert);
+
+/**
+ Calculates the Geodesic Total Length for a Linestring / Ring
+
+ \param a first geodesic parameter.
+ \param b second geodesic parameter.
+ \param rf third geodesic parameter.
+ \param dims dimensions: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M or GAIA_XY_ZM
+ \param coords pointed to COORD mem-array
+ \param vert number of Points (aka Vertices) within the COORD mem-array
+
+ \return the calculated Geodesic Total Length.
+
+ \sa gaiaEllipseParams, gaiaGreatCircleDistance, gaiaGeodesicDistance,
+ gaiaGreatCircleTotalLength
+
+ \note the returned length is expressed in Kilometers.
+ \n the Geodesic method is much more accurate but slowest to be calculated.
+ \n \b dims, \b coords and \b vert are usually expected to correspond to
+ \b DimensionModel, \b Coords and \b Points members from a gaiaLinestringStruct
+ or gaiaRingStruct
+ */
+    GAIAGEO_DECLARE double gaiaGeodesicTotalLength (double a, double b,
+						    double rf, int dims,
+						    double *coords, int vert);
+
+/**
+ Convert a Length from a Measure Unit to another
+
+ \param value the length measure to be converted.
+ \param unit_from original Measure Unit.
+ \param unit_to converted Measure Unit.
+ \param cvt on completion this variable will contain the converted length 
+ measure. 
+
+ \note supported Measu Units are: GAIA_KM, GAIA_M, GAIA_DM, GAIA_CM, GAIA_MM,
+ GAIA_KMI, GAIA_IN, GAIA_FT, GAIA_YD, GAIA_MI, GAIA_FATH, GAIC_CH, GAIA_LINK,
+ GAIA_US_IN, GAIA_US_FT, GAIA_US_YD, GAIA_US_CH, GAIA_US_MI, GAIA_IND_YD,
+ GAIA_IND_FT, GAIA_IND_CH
+ */
+    GAIAGEO_DECLARE int gaiaConvertLength (double value, int unit_from,
+					   int unit_to, double *cvt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_CORE_H */
diff --git a/libspatialite/src/headers/spatialite/gg_dynamic.h b/libspatialite/src/headers/spatialite/gg_dynamic.h
new file mode 100644
index 0000000..618e8a0
--- /dev/null
+++ b/libspatialite/src/headers/spatialite/gg_dynamic.h
@@ -0,0 +1,420 @@
+/*
+ gg_dynamic.h -- Gaia common support for geometries: DynamicLine functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_dynamic.h
+
+ Geometry handling functions: DynamicLine handling
+ */
+
+#ifndef _GG_DYNAMIC
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_DYNAMIC
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Creates a new dynamicly growing line/ring object
+
+ \return the pointer to newly created object
+
+ \sa gaiaCreateDynamicLine, gaiaFreeDynamicLine
+
+ \note you are responsible to destroy (before or after) any allocated 
+ dynamically growing line/ring object.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaAllocDynamicLine (void);
+
+/**
+ Destroys a dynamically growing line/ring object
+
+ \param p pointer to object to be destroyed
+
+ \sa gaiaAllocDynamicLine
+ */
+    GAIAGEO_DECLARE void gaiaFreeDynamicLine (gaiaDynamicLinePtr p);
+
+/**
+ Appends a new 2D Point [XY] at the end of a dynamically growing line/ring
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointToDynamicLine (gaiaDynamicLinePtr p, double x, double y);
+
+/**
+ Appends a new 3D Point [XYZ] at the end of a dynamically growing line/ring 
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointZToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				       double z);
+
+/**
+ Appends a new 2D Point [XYM] at the end of a dynamically growing line/ring 
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param m M measure of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointMToDynamicLine (gaiaDynamicLinePtr p, double x, double y,
+				       double m);
+
+/**
+ Appends a new 3D Point [XYZM] at the end of a dynamically growing line/ring 
+ object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+ \param m M measure of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaAppendPointZMToDynamicLine (gaiaDynamicLinePtr p, double x,
+					double y, double z, double m);
+
+/**
+ Appends a new 2D Point [XY] before the first one of a dynamically growing 
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+  
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointToDynamicLine (gaiaDynamicLinePtr p, double x,
+				       double y);
+
+/**
+ Appends a new 3D Point [XYZ] before the first one of a dynamically growing
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointZToDynamicLine (gaiaDynamicLinePtr p, double x,
+					double y, double z);
+
+/**
+ Appends a new 2D Point [XYM] before the first one of a dynamically growing
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param m M measure of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointMToDynamicLine (gaiaDynamicLinePtr p, double x,
+					double y, double m);
+
+/**
+ Appends a new 3D Point [XYZM] before the first one of a dynamically growing
+ line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param x X coordinate of the Point
+ \param y Y coordinate of the Point
+ \param z Z coordinate of the Point
+ \param m M measure of the Point
+ 
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr
+	gaiaPrependPointZMToDynamicLine (gaiaDynamicLinePtr p, double x,
+					 double y, double z, double m);
+
+/**
+ Appends a new 2D Point [XY] immediately after the given Point into a
+ dynamically growing line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param pt pointer to the given Point.
+ \param x X coordinate of the Point to be appended
+ \param y Y coordinate of the Point to be appended
+
+ \sa gaiaDynamicLiceInsertBefore
+
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertAfter (gaiaDynamicLinePtr
+							     p, gaiaPointPtr pt,
+							     double x,
+							     double y);
+
+/**
+ Appends a new 2D Point [XY] immediately before the given Point into a
+ dynamically growing line/ring object
+
+ \param p pointer to the dynamically growing line/ring object.
+ \param pt pointer to the given Point.
+ \param x X coordinate of the Point to be appended
+ \param y Y coordinate of the Point to be appended
+
+ \sa gaiaDynamicLiceInsertBeforeAfter
+
+ \return the pointer to newly created Point
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineInsertBefore (gaiaDynamicLinePtr
+							      p,
+							      gaiaPointPtr pt,
+							      double x,
+							      double y);
+
+/**
+ Removes a given Point from a dynamically growing line/ring object
+
+ \param p pointer to dynamically growing line/ring object.
+ \param pt pointer to given Point.
+
+ \note the given Point (referenced by its address) will be removed from
+ the dynamically growin line/ring object.
+ \n the given Point will be then implicitly destroyed.
+ */
+    GAIAGEO_DECLARE void gaiaDynamicLineDeletePoint (gaiaDynamicLinePtr p,
+						     gaiaPointPtr pt);
+
+/**
+ Duplicates a dynamically growing line/ring object
+
+ \param org pointer to dynamically growing line/ring object [origin].
+
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \note the newly created object is an exact copy of the original one.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCloneDynamicLine (gaiaDynamicLinePtr
+							     org);
+
+/**
+ Duplicates and reverts a dynamically growing line/ring object
+
+ \param org pointer to dynamically growing line/ring object [origin].
+
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \note the newly created object is an exact copy of the origina one, except
+ in that direction is reverted.
+ \n i.e. first inpunt point becomes last output point, and last input point
+ becomes first output point.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaReverseDynamicLine (gaiaDynamicLinePtr org);
+
+/**
+ Cuts a dynamically growing line/ring in two halves, using a given
+ cut point
+
+ \param org pointer to the input object [the line to be split].
+ \param point pointer to given cut point.
+ 
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \sa gaiaDynamicLineSplitAfter
+
+ \note the newly created object will contain a line going from the orginal
+ first point to the cut point [excluded].
+ \n on completion the orginal line will be reduced, going from the cut
+ point [included] to the original last point.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineSplitBefore (gaiaDynamicLinePtr org, gaiaPointPtr point);
+
+/**
+ Cuts a dynamically growing line/ring in two halves, using a given
+ cut point 
+
+ \param org pointer to the input object [the line to be split]. 
+ \param point pointer to given cut point.
+
+ \return the pointer to newly created dynamic growing line/ring object:
+ NULL on failure.
+
+ \sa gaiaDynamicLineSplitBefore
+
+ \note the newly created object will contain a line going from the orginal
+ first point to the cut point [included].
+ \n on completion the orginal line will be reduced, going from the cut
+ point [excluded] to the original last point.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineSplitAfter (gaiaDynamicLinePtr org, gaiaPointPtr point);
+
+/**
+ Merges two dynamically growing line/ring object into a single one
+
+ \param org pointer to the first input object [first line].
+ \param point pointer to the reference Point object.
+ \param toJoin pointer to the second input object [second line].
+
+ \return the pointer to newly created dynamically growing line/ring object 
+ [merged line]: NULL on failure.
+
+ \sa gaiaDynamicLineJoinBefore
+
+ \note the reference Point must exists into the first line: the second line
+ will then be inserted immediately after the reference Point.
+ \n The newly created object will represent the resulting merged line:
+ \n both input objects remain untouched.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineJoinAfter (gaiaDynamicLinePtr org, gaiaPointPtr point,
+				  gaiaDynamicLinePtr toJoin);
+
+/**
+ Merges two dynamically growing line/ring object into a single one
+
+ \param org pointer to the first input object [first line].
+ \param point pointer to the reference Point object.
+ \param toJoin pointer to the second input object [second line].
+
+ \return the pointer to newly created dynamically growing line/ring object 
+ [merged line]: NULL on failure.
+
+ \sa gaiaDynamicLineJoinAfter
+
+ \note the reference Point must exists into the first line: the second line 
+ will then be inserted immediately before the reference Point.
+ \n The newly created object will represent the resulting merged line: 
+ \n both input objects remain untouched.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr
+	gaiaDynamicLineJoinBefore (gaiaDynamicLinePtr org, gaiaPointPtr point,
+				   gaiaDynamicLinePtr toJoin);
+
+/**
+ Finds a Point within a dymically growing line/ring object [by coords]
+
+ \param p pointer to dymamically line/ring object.
+ \param x Point X coordinate.
+ \param y Point Y coordinate.
+
+ \return the pointer to the corresponding Point object: NULL on failure.
+
+ \sa gaiaDynamicLineFindByPos
+
+ \note if the line object contains more Points sharing the same coordinates,
+ a reference to the first one found will be returned.
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByCoords (gaiaDynamicLinePtr
+							      p, double x,
+							      double y);
+
+/**
+ Finds a Point within a dymically growing line/ring object [by position]
+
+ \param p pointer to dymamically line/ring object.
+ \param pos relative position [first Point has index 0].
+
+ \return the pointer to the corresponding Point object: NULL on failure.
+
+ \sa gaiaDynamicLineFindByCoords
+ */
+    GAIAGEO_DECLARE gaiaPointPtr gaiaDynamicLineFindByPos (gaiaDynamicLinePtr p,
+							   int pos);
+
+/**
+ Creates a new dynamicly growing line/ring object
+
+ \param coords an array of COORDs, any dimension [XY, XYZ, XYM, XYZM]
+ \param points number of points [aka vertices] into the array
+
+ \return the pointer to newly created object 
+
+ \sa gaiaAllocDynamicLine, gaiaFreeDynamicLine, gaiaLinestringStruct,
+ gaiaRingStruct
+
+ \note you are responsible to destroy (before or after) any allocated 
+ dynamically growing line/ring object. 
+ \n The COORDs array is usually expected to be one found within a
+ gaiaLinestring or gaiaRing object.
+ */
+    GAIAGEO_DECLARE gaiaDynamicLinePtr gaiaCreateDynamicLine (double *coords,
+							      int points);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_DYNAMIC */
diff --git a/libspatialite/src/headers/spatialite/gg_formats.h b/libspatialite/src/headers/spatialite/gg_formats.h
new file mode 100644
index 0000000..0908111
--- /dev/null
+++ b/libspatialite/src/headers/spatialite/gg_formats.h
@@ -0,0 +1,1364 @@
+/*
+ gg_formats.h -- Gaia common support for geometries: formats
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Klaus Foerster klaus.foerster at svg.cc
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_formats.h
+
+ Geometry handling functions: formats
+ */
+
+#ifndef _GG_FORMATS_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_FORMATS_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Test CPU endianness
+
+ \return 0 if big-endian: any other value if little-endian
+ */
+    GAIAGEO_DECLARE int gaiaEndianArch (void);
+
+/**
+ Import an INT-16 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal SHORT value 
+
+ \sa gaiaEndianArch, gaiaExport16
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 2 bytes.
+ */
+    GAIAGEO_DECLARE short gaiaImport16 (const unsigned char *p,
+					int little_endian,
+					int little_endian_arch);
+
+/**
+ Import an INT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal INT value 
+
+ \sa gaiaEndianArch, gaiaExport32
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE int gaiaImport32 (const unsigned char *p, int little_endian,
+				      int little_endian_arch);
+
+/**
+ Import a FLOAT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal FLOAT value 
+
+ \sa gaiaEndianArch, gaiaExportF32
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE float gaiaImportF32 (const unsigned char *p,
+					 int little_endian,
+					 int little_endian_arch);
+
+/**
+ Import an DOUBLE-64 in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal DOUBLE value 
+
+ \sa gaiaEndianArch, gaiaExport64
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE double gaiaImport64 (const unsigned char *p,
+					 int little_endian,
+					 int little_endian_arch);
+
+/**
+ Import an INT-64 in endian-aware fashion
+ 
+ \param p endian-dependent representation (input buffer).
+ \param little_endian 0 if the input buffer is big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \return the internal INT-64 value 
+
+ \sa gaiaEndianArch, gaiaExportI64
+
+ \note you are expected to pass an input buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE sqlite3_int64 gaiaImportI64 (const unsigned char *p,
+						 int little_endian,
+						 int little_endian_arch);
+
+/**
+ Export an INT-16 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImport16
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 2 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExport16 (unsigned char *p, short value,
+				       int little_endian,
+				       int little_endian_arch);
+
+/**
+ Export an INT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImport32
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExport32 (unsigned char *p, int value,
+				       int little_endian,
+				       int little_endian_arch);
+
+/**
+ Export a FLOAT-32 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImportF32
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 4 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExportF32 (unsigned char *p, float value,
+					int little_endian,
+					int little_endian_arch);
+
+/**
+ Export a DOUBLE value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImport64
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExport64 (unsigned char *p, double value,
+				       int little_endian,
+				       int little_endian_arch);
+
+/**
+ Export an INT-64 value in endian-aware fashion
+ 
+ \param p endian-dependent representation (output buffer).
+ \param value the internal value to be exported.
+ \param little_endian 0 if the output buffer has to be big-endian: any other value
+ for little-endian.
+ \param little_endian_arch the value returned by gaiaEndianArch()
+
+ \sa gaiaEndianArch, gaiaImportI64
+
+ \note you are expected to pass an output buffer corresponding to an
+ allocation size of (at least) 8 bytes.
+ */
+    GAIAGEO_DECLARE void gaiaExportI64 (unsigned char *p, sqlite3_int64 value,
+					int little_endian,
+					int little_endian_arch);
+
+/**
+ Initializes a dynamically growing Text output buffer
+
+ \param buf pointer to gaiaOutBufferStruct structure
+ 
+ \sa gaiaOutBufferReset, gaiaAppendToOutBuffer
+
+ \note Text notations representing Geometry objects may easily require
+ a huge storage amount: the gaiaOutBufferStruct automatically supports
+ a dynamically growing output buffer.
+ \n You are required to initialize this structure before attempting
+ any further operation;
+ and you are responsible to cleanup any related memory allocation
+ when it's any longer required.
+ */
+    GAIAGEO_DECLARE void gaiaOutBufferInitialize (gaiaOutBufferPtr buf);
+
+/**
+ Resets a dynamically growing Text output buffer to its initial (empty) state
+
+ \param buf pointer to gaiaOutBufferStruct structure
+ 
+ \sa gaiaOutBufferInitialize, gaiaAppendToOutBuffer
+
+ \note You are required to initialize this structure before attempting
+ any further operation:
+ this function will release any related memory allocation.
+ */
+    GAIAGEO_DECLARE void gaiaOutBufferReset (gaiaOutBufferPtr buf);
+
+/**
+ Appends a text string at the end of Text output buffer
+
+ \param buf pointer to gaiaOutBufferStruct structure.
+ \param text the text string to be appended.
+
+ \sa gaiaOutBufferInitialize, gaiaOutBufferReset
+
+ \note You are required to initialize this structure before attempting
+ any further operation:
+ the dynamically growing Text buffer will be automatically allocated
+ and/or extended as required.
+ */
+    GAIAGEO_DECLARE void gaiaAppendToOutBuffer (gaiaOutBufferPtr buf,
+						const char *text);
+
+/**
+ Creates a BLOB-Geometry representing a Point
+
+ \param x Point X coordinate.
+ \param y Point Y coordinate.
+ \param srid the SRID to be set for the Point.
+ \param result on completion will containt a pointer to BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb
+
+ \note the BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaMakePoint (double x, double y, int srid,
+					unsigned char **result, int *size);
+
+/**
+ Creates a BLOB-Geometry representing a Segment (2-Points Linestring)
+
+ \param geom1 pointer to first Geometry object (expected to represent a Point).
+ \param geom2 pointer to second Geometry object (expected to represent a Point).
+ \param result on completion will containt a pointer to BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb
+
+ \note the BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaMakeLine (gaiaGeomCollPtr geom1,
+				       gaiaGeomCollPtr geom2,
+				       unsigned char **result, int *size);
+
+/**
+ Creates a Geometry object from the corresponding BLOB-Geometry 
+
+ \param blob pointer to BLOB-Geometry
+ \param size the BLOB's size
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl, gaiaToSpatiaLiteBlobWkb, gaiaToCompressedBlobWkb
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any 
+ contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobWkb (const unsigned
+							       char *blob,
+							       unsigned int
+							       size);
+
+/**
+ Creates a BLOB-Geometry corresponding to a Geometry object
+
+ \param geom pointer to the Geometry object.
+ \param result on completion will containt a pointer to BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb, gaiaToCompressedBlobWkb
+
+ \note the BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToSpatiaLiteBlobWkb (gaiaGeomCollPtr geom,
+						  unsigned char **result,
+						  int *size);
+
+/**
+ Creates a Compressed BLOB-Geometry corresponding to a Geometry object
+
+ \param geom pointer to the Geometry object.
+ \param result on completion will containt a pointer to Compressed BLOB-Geometry:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromSpatiaLiteBlobWkb, gaiaToSpatiaLiteBlobWkb
+
+ \note this function will apply compression to any Linestring / Ring found
+ within the Geometry to be encoded.
+ \n the returned BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToCompressedBlobWkb (gaiaGeomCollPtr geom,
+						  unsigned char **result,
+						  int *size);
+
+/**
+ Creates a Geometry object from WKB notation
+
+ \param blob pointer to WKB buffer
+ \param size the BLOB's size (in bytes)
+
+ \return the pointer to the newly created Geometry object: NULL on failure.
+
+ \sa gaiaToWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromWkb (const unsigned char *blob,
+						 unsigned int size);
+
+/**
+ Encodes a Geometry object into WKB notation
+
+ \param geom pointer to Geometry object
+ \param result on completion will containt a pointer to the WKB buffer [BLOB]:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+
+ \sa gaiaFromWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note this function will apply 3D WKB encoding as internally intended by
+ SpatiaLite: not necessarily intended by other OGC-like implementations.
+ \n Anyway, 2D WKB is surely standard and safely interoperable.
+ \n the returned BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToWkb (gaiaGeomCollPtr geom,
+				    unsigned char **result, int *size);
+
+/**
+ Encodes a Geometry object into (hex) WKB notation
+
+ \param geom pointer to Geometry object
+
+ \return the pointer to a text buffer containing WKB translated into plain
+ hexadecimal: NULL on failure.
+
+ \sa gaiaFromWkb, gaiaToWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note the returned buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE char *gaiaToHexWkb (gaiaGeomCollPtr geom);
+
+/**
+ Encodes a Geometry object into EWKB notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+
+ \sa gaiaFromWkb, gaiaToWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note this function will produce strictly conformat EWKB; you can
+ safely use this for PostGIS data exchange.
+ */
+    GAIAGEO_DECLARE void gaiaToEWKB (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom);
+
+/**
+ Creates a Geometry object from EWKB notation
+
+ \param in_buffer pointer to EWKB buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure.
+
+ \sa gaiaToWkb, gaiaToHexWkb, gaiaFromEWKB, gaiaToEWKB
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromEWKB (const unsigned char
+						  *in_buffer);
+
+/**
+ Creates a Geometry object from FGF notation
+
+ \param blob pointer to FGF buffer
+ \param size the BLOB's size (in bytes)
+
+ \return the pointer to the newly created Geometry object: NULL on failure.
+
+ \sa gaiaToFgf
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromFgf (const unsigned char *blob,
+						 unsigned int size);
+
+/**
+ Encodes a Geometry object into FGF notation
+
+ \param geom pointer to Geometry object
+ \param result on completion will containt a pointer to the FGF buffer [BLOB]:
+ NULL on failure.
+ \param size on completion this variable will contain the BLOB's size (in bytes)
+ \param coord_dims one of: GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM
+
+ \sa gaiaFromFgf
+
+ \note the returned BLOB buffer corresponds to dynamically allocated memory:
+ so you are responsible to free() it [unless SQLite will take care
+ of memory cleanup via buffer binding].
+ */
+    GAIAGEO_DECLARE void gaiaToFgf (gaiaGeomCollPtr geom,
+				    unsigned char **result, int *size,
+				    int coord_dims);
+
+/**
+ Creates a Geometry object from WKT notation
+
+ \param in_buffer pointer to WKT buffer
+ \param type the expected Geometry Class Type
+ \n if actual type defined in WKT doesn't corresponds to this, an error will
+ be raised.
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutWkt, gaiaOutWktStrict, gaiaParseEWKT, gaiaToEWKT
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseWkt (const unsigned char
+						  *in_buffer, short type);
+
+/**
+ Encodes a Geometry object into WKT notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+
+ \sa gaiaParseWkt, gaiaOutWktStrict, gaiaParseEWKT, gaiaToEWKT
+
+ \note this function will apply 3D WKT encoding as internally intended by
+ SpatiaLite: not necessarily intended by other OGC-like implementations.
+ \n Anyway, 2D WKT is surely standard and safely interoperable.
+ */
+    GAIAGEO_DECLARE void gaiaOutWkt (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom);
+
+/**
+ Encodes a Geometry object into strict 2D WKT notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+ \param precision decimal digits to be used for coordinates
+
+ \sa gaiaParseWkt, gaiaOutWkt, gaiaParseEWKT, gaiaToEWKT
+
+ \note this function will apply strict 2D WKT encoding, so to be surely
+ standard and safely interoperable.
+ \n Dimensions will be automatically casted to 2D [XY] when required.
+ */
+    GAIAGEO_DECLARE void gaiaOutWktStrict (gaiaOutBufferPtr out_buf,
+					   gaiaGeomCollPtr geom, int precision);
+
+/**
+ Creates a Geometry object from EWKT notation
+
+ \param in_buffer pointer to EWKT buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaParseWkt, gaiaOutWkt, gaiaOutWktStrict, gaiaToEWKT
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseEWKT (const unsigned char
+						   *in_buffer);
+
+/**
+ Encodes a Geometry object into EWKT notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+
+ \sa gaiaParseWkt, gaiaOutWkt, gaiaOutWktStrict, gaiaParseEWKT
+
+ \note this function will apply PostGIS own EWKT encoding.
+ */
+    GAIAGEO_DECLARE void gaiaToEWKT (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom);
+
+/**
+ Encodes a WKT 3D Point [XYZ]
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param point pointer to Point object
+
+ \sa gaiaOutLinestringZ, gaiaOutPolygonZ
+ 
+ \remark mainly intended for internal usage.
+ */
+    GAIAGEO_DECLARE void gaiaOutPointZ (gaiaOutBufferPtr out_buf,
+					gaiaPointPtr point);
+
+/**
+ Encodes a WKT 3D Linestring [XYZ]
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param linestring pointer to Linestring object
+
+ \sa gaiaOutPointZ, gaiaOutPolygonZ
+ 
+ \remark mainly intended for internal usage.
+ */
+    GAIAGEO_DECLARE void gaiaOutLinestringZ (gaiaOutBufferPtr out_buf,
+					     gaiaLinestringPtr linestring);
+
+/**
+ Encodes a WKT 3D Polygon [XYZ]
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param polygon pointer to Point object
+
+ \sa gaiaOutPointZ, gaiaOutLinestringZ
+ 
+ \remark mainly intended for internal usage.
+ */
+    GAIAGEO_DECLARE void gaiaOutPolygonZ (gaiaOutBufferPtr out_buf,
+					  gaiaPolygonPtr polygon);
+/**
+ Creates a Geometry object from KML notation
+
+ \param in_buffer pointer to KML buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutBareKml, gaiaOutFullKml
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseKml (const unsigned char
+						  *in_buffer);
+
+/**
+ Encodes a Geometry object into KML notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object 
+ \param precision decimal digits to be used for coordinates
+
+ \sa gaiaParseKml, gaiaOutFullKml
+
+ \note this function will export the simplest KML notation (no descriptions).
+ */
+    GAIAGEO_DECLARE void gaiaOutBareKml (gaiaOutBufferPtr out_buf,
+					 gaiaGeomCollPtr geom, int precision);
+
+/**
+ Encodes a Geometry object into KML notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param name text string to be set as KML \e name 
+ \param desc text string to se set as KML \e description 
+ \param geom pointer to Geometry object
+ \param precision decimal digits to be used for coordinates
+
+ \sa gaiaParseKml, gaiaOutBareKml
+
+ \note this function will export the simplest KML notation (no descriptions).
+ */
+    GAIAGEO_DECLARE void gaiaOutFullKml (gaiaOutBufferPtr out_buf,
+					 const char *name, const char *desc,
+					 gaiaGeomCollPtr geom, int precision);
+
+/**
+ Creates a Geometry object from GML notation
+
+ \param in_buffer pointer to GML buffer
+ \param sqlite_handle handle to current DB connection
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutGml
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseGml (const unsigned char
+						  *in_buffer,
+						  sqlite3 * sqlite_handle);
+
+/**
+ Encodes a Geometry object into GML notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param version GML version
+ \param precision decimal digits to be used for coordinates
+ \param geom pointer to Geometry object
+
+ \sa gaiaParseGml
+
+ \note if \e version is set to \b 3, then GMLv3 will be used;
+ in any other case GMLv2 will be assumed by default.
+ */
+    GAIAGEO_DECLARE void gaiaOutGml (gaiaOutBufferPtr out_buf, int version,
+				     int precision, gaiaGeomCollPtr geom);
+
+/**
+ Creates a Geometry object from GeoJSON notation
+
+ \param in_buffer pointer to GeoJSON buffer
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaOutGeoJSON
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any
+ contained child object.
+ */
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaParseGeoJSON (const unsigned char
+						      *in_buffer);
+
+/**
+ Encodes a Geometry object into GeoJSON notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+ \param precision decimal digits to be used for coordinates
+ \param options GeoJSON specific options
+
+ \sa gaiaParseGeoJSON
+
+ \note \e options can assume the following values:
+ \li 1 = BBOX, no CRS
+ \li 2 = no BBOX, short form CRS
+ \li 3 = BBOX, short form CRS
+ \li 4 = no BBOX, long form CRS
+ \li 5 = BBOX, long form CRS
+ \li any other value: no BBOX and no CRS
+ */
+    GAIAGEO_DECLARE void gaiaOutGeoJSON (gaiaOutBufferPtr out_buf,
+					 gaiaGeomCollPtr geom, int precision,
+					 int options);
+/**
+ Encodes a Geometry object into SVG notation
+
+ \param out_buf pointer to dynamically growing Text buffer
+ \param geom pointer to Geometry object
+ \param relative flag: relative or absolute coordinates
+ \param precision decimal digits to be used for coordinates
+
+ \note if \e relative is set to \b 1, then SVG relative coords will be used:
+ in any other case SVG absolute coords will be assumed by default.
+ */
+    GAIAGEO_DECLARE void gaiaOutSvg (gaiaOutBufferPtr out_buf,
+				     gaiaGeomCollPtr geom, int relative,
+				     int precision);
+
+/**
+ Allocates a new DBF Field Value object [duplicating an existing one]
+ 
+ \param org pointer to input DBF Field Value object.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField, gaiaCloneValue,
+ gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+
+ \note the newly created object is an exact copy of the original one.
+ */
+    GAIAGEO_DECLARE gaiaValuePtr gaiaCloneValue (gaiaValuePtr org);
+
+/**
+ Resets a DBF Field Value object to its initial empty state
+
+ \param p pointer to DBF Field Value object
+
+ \sa gaiaAllocDbfField, gaiaCloneDbfField, gaiaCloneValue,
+ gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue, gaiaResetDbfEntity
+ */
+    GAIAGEO_DECLARE void gaiaFreeValue (gaiaValuePtr p);
+
+/**
+ Allocates a new DBF Field object
+
+ \param name text string: DBF Field name.
+ \param type identifier of the corresponding DBF data type.
+ \param offset corresponding offset into the DBF I/O buffer.
+ \param length max field length (in bytes).
+ \param decimals precision: number of decimal digits.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaFreeDbfField, gaiaCloneDbfField, gaiaFreeValue,
+ gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+
+ \note you are responsible to destroy (before or after) any allocated DBF Field,
+ unless you've passed ownership to some further object: in this case destroying  the higher order object will implicitly destroy any contained child object.  
+ \n supported DBF data types are:
+ \li 'C' text string [default]
+ \li 'N' numeric
+ \li 'D' date
+ \li 'L' boolean
+ */
+    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAllocDbfField (char *name,
+						       unsigned char type,
+						       int offset,
+						       unsigned char length,
+						       unsigned char decimals);
+
+/**
+ Destroys a DBF Field object
+
+ \param p pointer to DBF Field object
+
+ \sa gaiaAllocDbfField, gaiaCloneDbfField, gaiaCloneValue,
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaFreeDbfField (gaiaDbfFieldPtr p);
+
+/**
+ Allocates a new DBF Field object [duplicating an existing one]
+
+ \param org pointer to input DBF Field object.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField, 
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+
+ \note the newly created object is an exact copy of the original one
+ [this including an evantual Field Value].
+ */
+    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaCloneDbfField (gaiaDbfFieldPtr org);
+
+/**
+ Sets a NULL current value for a DBF Field object
+
+ \param field pointer to DBF Field object
+ 
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField,
+ gaiaFreeValue, gaiaSetIntValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaSetNullValue (gaiaDbfFieldPtr field);
+
+/**
+ Sets an INTEGER current value for a DBF Field object
+
+ \param field pointer to DBF Field object.
+ \param value integer value to be set.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField,
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetDoubleValue,
+ gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaSetIntValue (gaiaDbfFieldPtr field,
+					  sqlite3_int64 value);
+
+/**
+ Sets a DOUBLE current value for a DBF Field object
+ 
+ \param field pointer to DBF Field object.
+ \param value double value to be set.
+                                          
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField, 
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetStrValue
+ */
+    GAIAGEO_DECLARE void gaiaSetDoubleValue (gaiaDbfFieldPtr field,
+					     double value);
+
+/**
+ Sets a TEXT current value for a DBF Field object
+
+ \param field pointer to DBF Field object.
+ \param str text string value to be set.
+
+ \sa gaiaAllocDbfField, gaiaFreeDbfField, gaiaCloneDbfField,
+ gaiaFreeValue, gaiaSetNullValue, gaiaSetIntValue, gaiaSetDoubleValue
+ */
+    GAIAGEO_DECLARE void gaiaSetStrValue (gaiaDbfFieldPtr field, char *str);
+
+/**
+ Creates an initially empty DBF List object
+
+ \return the pointer to newly allocated DBF List object: NULL on failure.
+
+ \sa gaiaFreeDbfList, gaiaIsValidDbfList, 
+ gaiaResetDbfEntity, gaiaCloneDbfEntity, gaiaAddDbfField
+ 
+ \note you are responsible to destroy (before or after) any allocated DBF List,
+ unless you've passed ownership to some further object: in this case destroying
+ the higher order object will implicitly destroy any contained child object. 
+ */
+    GAIAGEO_DECLARE gaiaDbfListPtr gaiaAllocDbfList (void);
+
+/**
+ Destroys a DBF List object
+ 
+ \param list pointer to the DBF List object
+
+ \sa gaiaAllocDbfList, gaiaIsValidDbfList,
+ gaiaResetDbfEntity, gaiaCloneDbfEntity, gaiaAddDbfField
+
+ \note attempting to destroy any DBF List object whose ownnership has already 
+ been transferred to some other (higher order) object is a serious error,
+ and will easily cause severe memory corruption. 
+ */
+    GAIAGEO_DECLARE void gaiaFreeDbfList (gaiaDbfListPtr list);
+
+/**
+ Checks a DBF List object for validity
+
+ \param list pointer to the DBF List object.
+ 
+ \return 0 if not valid: any other value if valid.
+
+ \sa gaiaAllocDbfList, gaiaFreeDbfList, gaiaIsValidDbfList,
+ gaiaResetDbfEntity, gaiaCloneDbfEntity, gaiaAddDbfField
+ */
+    GAIAGEO_DECLARE int gaiaIsValidDbfList (gaiaDbfListPtr list);
+
+/**
+ Inserts a further DBF Field object into a DBF List object
+
+ \param list pointer to the DBF List object.
+ \param name text string: DBF Field name.
+ \param type identifier of the corresponding DBF data type.
+ \param offset corresponding offset into the DBF I/O buffer.
+ \param length max field length (in bytes).
+ \param decimals precision: number of decimal digits.
+
+ \return the pointer to newly created DBF Field object.
+
+ \sa gaiaAllocDbfField
+
+ \note supported DBF data types are:
+ \li 'C' text string [default]
+ \li 'N' numeric
+ \li 'D' date
+ \li 'L' boolean
+ */
+    GAIAGEO_DECLARE gaiaDbfFieldPtr gaiaAddDbfField (gaiaDbfListPtr list,
+						     char *name,
+						     unsigned char type,
+						     int offset,
+						     unsigned char length,
+						     unsigned char decimals);
+
+/** 
+ Resets a DBF List object to its initial empty state
+
+ \param list pointer to the DBF List object.
+
+ \sa gaiaFreeValue
+
+ \note any DBF Field associated to the List object will be reset to its
+ initial empty state (i.e. \e no \e value at all).
+ */
+    GAIAGEO_DECLARE void gaiaResetDbfEntity (gaiaDbfListPtr list);
+
+/**
+ Allocates a new DBF List object [duplicating an existing one]
+
+ \param org pointer to input DBF List object.
+
+ \return the pointer to newly created DBF List object.
+
+ \sa gaiaCloneDbfField, gaiaCloneValue,
+
+ \note the newly created object is an exact copy of the original one.
+ \n this including any currently set Field Value.
+ */
+    GAIAGEO_DECLARE gaiaDbfListPtr gaiaCloneDbfEntity (gaiaDbfListPtr org);
+
+/**
+ Allocates a new Shapefile object.
+
+ \return the pointer to newly created Shapefile object.
+
+ \sa gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+
+ \note you are responsible to destroy (before or after) any allocated Shapefile.
+ \n you should phisically open the Shapefile in \e read or \e write mode
+ before performing any actual I/O operation.
+ */
+    GAIAGEO_DECLARE gaiaShapefilePtr gaiaAllocShapefile (void);
+
+/**
+ Destroys a Shapefile object 
+
+ \param shp pointer to the Shapefile object.
+
+ \sa gaiaAllocShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+ 
+ \note destroying the Shapefile object will close any related file:
+ anyway you a responsible to explicitly call gaiaFlushShpHeader
+ before destroyng a Shapefile opened in \e write mode.
+ */
+    GAIAGEO_DECLARE void gaiaFreeShapefile (gaiaShapefilePtr shp);
+
+/** 
+ Open a Shapefile in read mode
+
+ \param shp pointer to the Shapefile object.
+ \param path \e abstract pathname to the corresponding file-system files.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+ 
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ \n the \e abstract pathname should not contain any suffix at all.
+ */
+    GAIAGEO_DECLARE void gaiaOpenShpRead (gaiaShapefilePtr shp,
+					  const char *path,
+					  const char *charFrom,
+					  const char *charTo);
+
+/**
+ Open a Shapefile in read mode
+
+ \param shp pointer to the Shapefile object.
+ \param path \e abstract pathname to the corresponding file-system files.
+ \param shape the SHAPE code; expected to be one of GAIA_SHP_POINT,
+ GAIA_SHP_POLYLINE, GAIA_SHP_POLYGON, GAIA_SHP_MULTIPOINT, GAIA_SHP_POINTZ,
+ GAIA_SHP_POLYLINEZ, GAIA_SHP_POLYGONZ, GAIA_SHP_MULTIPOINTZ, 
+ GAIA_SHP_POINTM, GAIA_SHP_POLYLINEM, GAIA_SHP_POLYGONM, GAIA_SHP_MULTIPOINTM
+ \param list pointer to DBF List object representing the corresponding
+ data attributes.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, 
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+ 
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ \n the \e abstract pathname should not contain any suffix at all.
+ */
+    GAIAGEO_DECLARE void gaiaOpenShpWrite (gaiaShapefilePtr shp,
+					   const char *path, int shape,
+					   gaiaDbfListPtr list,
+					   const char *charFrom,
+					   const char *charTo);
+
+/**
+ Reads a feature from a Shapefile object
+
+ \param shp pointer to the Shapefile object.
+ \param current_row the row number identifying the feature to be read.
+ \param srid feature's SRID 
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaShpAnalyze, gaiaWriteShpEntity, gaiaFlushShpHeaders
+
+ \note on completion the Shapefile's \e Dbf member will contain the feature
+ read:
+ \li the \e Dbf->Geometry member will contain the corresponding Geometry
+ \li and the \e Dbf->First member will point to the linked list containing
+ the corresponding data attributes [both data formats and values].
+
+ \remark the Shapefile object should be opened in \e read mode.
+ */
+    GAIAGEO_DECLARE int gaiaReadShpEntity (gaiaShapefilePtr shp,
+					   int current_row, int srid);
+
+/**
+ Prescans a Shapefile object gathering informations
+
+ \param shp pointer to the Shapefile object.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaWriteShpEntity, gaiaFlushShpHeaders
+
+ \note on completion the Shapefile's \e EffectiveType will containt the
+ Geometry type corresponding to features actually found.
+
+ \remark the Shapefile object should be opened in \e read mode.
+ */
+    GAIAGEO_DECLARE void gaiaShpAnalyze (gaiaShapefilePtr shp);
+
+/**
+ Writes a feature into a Shapefile object
+                                            
+ \param shp pointer to the Shapefile object.
+ \param entity pointer to DBF List object containing both Geometry and Field 
+ values.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaFlushShpHeaders
+
+ \remark the Shapefile object should be opened in \e write mode.
+ */
+    GAIAGEO_DECLARE int gaiaWriteShpEntity (gaiaShapefilePtr shp,
+					    gaiaDbfListPtr entity);
+
+/**
+ Writes into an output Shapefile any required header / footer
+
+ \param shp pointer to the Shapefile object.
+
+ \sa gaiaAllocShapefile, gaiaFreeShapefile, gaiaOpenShpRead, gaiaOpenShpWrite,
+ gaiaReadShpEntity, gaiaShpAnalyze, gaiaWriteShpEntity
+
+ \note forgetting to call gaiaFlushShpHeader for any Shapefile opened in
+ \e write mode immediately before destroying the object, will surely 
+ cause severe file corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFlushShpHeaders (gaiaShapefilePtr shp);
+
+/**
+ Allocates a new DBF File object.
+
+ \return the pointer to newly created DBF File object.
+
+ \sa gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+
+ \note you are responsible to destroy (before or after) any allocated DBF File.
+ \n you should phisically open the DBF File in \e read or \e write mode
+ before performing any actual I/O operation.
+ */
+    GAIAGEO_DECLARE gaiaDbfPtr gaiaAllocDbf (void);
+
+/**
+ Destroys a DBF File object 
+    
+ \param dbf pointer to the DBF File object.
+                                          
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+ 
+ \note destroying the Shapefile object will close any related file:
+ anyway you a responsible to explicitly call gaiaFlushShpHeader
+ before destroyng a Shapefile opened in \e write mode.
+ */
+    GAIAGEO_DECLARE void gaiaFreeDbf (gaiaDbfPtr dbf);
+
+/**
+ Open a DBF File in read mode
+
+ \param dbf pointer to the DBF File object.
+ \param path pathname to the corresponding file-system file.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ */
+    GAIAGEO_DECLARE void gaiaOpenDbfRead (gaiaDbfPtr dbf,
+					  const char *path,
+					  const char *charFrom,
+					  const char *charTo);
+
+/** 
+ Open a DBF File in write mode
+
+ \param dbf pointer to the DBF File object.
+ \param path pathname to the corresponding file-system file.
+ \param charFrom GNU ICONV name identifying the input charset encoding.
+ \param charTo GNU ICONV name identifying the output charset encoding.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, 
+ gaiaReadDbfEntity, gaiaWriteDbfEntity, gaiaFlushDbfHeader
+ 
+ \note on failure the object member \e Valid will be set to 0; and the
+ object member \e LastError will contain the appropriate error message.
+ */
+    GAIAGEO_DECLARE void gaiaOpenDbfWrite (gaiaDbfPtr dbf,
+					   const char *path,
+					   const char *charFrom,
+					   const char *charTo);
+
+/**
+ Reads a record from a DBF File object
+
+ \param dbf pointer to the DBF File object.
+ \param current_row the row number identifying the record to be read.
+ \param deleted on completion this variable will contain 0 if the record
+ just read is valid: any other value if the record just read is marked as
+ \e logically \e deleted.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaFlushDbfHeader
+
+ \note on completion the DBF File \e First member will point to the 
+ linked list containing the corresponding data attributes [both data 
+ formats and values].
+
+ \remark the DBF File object should be opened in \e read mode.
+ */
+    GAIAGEO_DECLARE int gaiaReadDbfEntity (gaiaDbfPtr dbf, int current_row,
+					   int *deleted);
+
+/**
+ Writes a record into a DBF File object
+
+ \param dbf pointer to the DBF File object.
+ \param entity pointer to DBF List object containing Fields and corresponding
+ values.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaFlushDbfHeader
+
+ \remark the DBF File object should be opened in \e write mode.
+ */
+    GAIAGEO_DECLARE int gaiaWriteDbfEntity (gaiaDbfPtr dbf,
+					    gaiaDbfListPtr entity);
+
+/**
+ Writes into an output DBF File any required header / footer
+
+ \param dbf pointer to the DBF File object.
+
+ \sa gaiaAllocDbf, gaiaFreeDbf, gaiaOpenDbfRead, gaiaOpenDbfWrite,
+ gaiaReadDbfEntity, gaiaWriteDbfEntity
+
+ \note forgetting to call gaiaFlushDbfHeader for any DBF File opened in
+ \e write mode immediately before destroying the object, will surely 
+ cause severe file corruption.
+ */
+    GAIAGEO_DECLARE void gaiaFlushDbfHeader (gaiaDbfPtr dbf);
+
+
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting text reader */
+
+/** 
+ Creates a Text Reader object
+
+ \param path to the corresponding file-system file.
+ \param field_separator the character acting as a separator between adjacent 
+ fields.
+ \param text_separator the character used to quote text strings.
+ \param decimal_separator the character used as a separator between integer
+ and decimal digits for real numeric values.
+ \param first_line_titles 0 if the first line contains regular values:
+ any other value if the first line contains column names.
+ \param encoding GNU ICONV name identifying the input charset encoding.
+
+ \return the pointer to the newly created Text Reader object: NULL on failure
+
+ \sa gaiaTextReaderDestroy, gaiaTextReaderParse,
+ gaiaTextReaderGetRow, gaiaTextReaderFetchField
+
+ \note you are responsible to destroy (before or after) any allocated Text
+ Reader object.
+ */
+    GAIAGEO_DECLARE gaiaTextReaderPtr gaiaTextReaderAlloc (const char *path,
+							   char field_separator,
+							   char text_separator,
+							   char
+							   decimal_separator,
+							   int
+							   first_line_titles,
+							   const char
+							   *encoding);
+
+/**
+ Destroys a Text Reader object
+
+ \param reader pointer to Text Reader object.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderParse,
+ gaiaTextReaderGetRow, gaiaTextReaderFetchField
+ */
+    GAIAGEO_DECLARE void gaiaTextReaderDestroy (gaiaTextReaderPtr reader);
+
+/**
+ Prescans the external file associated to a Text Reade object
+
+ \param reader pointer to Text Reader object.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderDestroy, 
+ gaiaTextReaderGetRow, gaiaTextReaderFetchField
+
+ \note this preliminary step is required so to ensure:
+ \li file consistency: checking expected formatting rules.
+ \li identifying the number / type / name of fields [aka columns].
+ \li identifying the actual number of lines within the file.
+ */
+    GAIAGEO_DECLARE int gaiaTextReaderParse (gaiaTextReaderPtr reader);
+
+/**
+ Reads a line from a Text Reader object
+ 
+ \param reader pointer to Text Reader object.
+ \param row_num the Line Number identifying the Line to be read.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderDestroy, gaiaTextReaderParse,
+ gaiaTextReaderFetchField
+
+ \note this function will load the requested Line into the current buffer:
+ you can then use gaiaTextReaderFetchField in order to retrieve
+ any individual field [aka column] value.
+ */
+    GAIAGEO_DECLARE int gaiaTextReaderGetRow (gaiaTextReaderPtr reader,
+					      int row_num);
+
+/**
+ Retrieves an individual field value from the current Line
+
+ \param reader pointer to Text Reader object.
+ \param field_num relative field [aka column] index: first field has index 0.
+ \param type on completion this variable will contain the value type.
+ \param value on completion this variable will contain the current field value.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaTextReaderAlloc, gaiaTextReaderDestroy, gaiaTextReaderParse,
+ gaiaTextReaderGetRow
+ */
+    GAIAGEO_DECLARE int gaiaTextReaderFetchField (gaiaTextReaderPtr reader,
+						  int field_num, int *type,
+						  const char **value);
+
+#endif				/* end ICONV (text reader) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_FORMATS_H */
diff --git a/libspatialite/src/headers/spatialite/gg_mbr.h b/libspatialite/src/headers/spatialite/gg_mbr.h
new file mode 100644
index 0000000..bcfc601
--- /dev/null
+++ b/libspatialite/src/headers/spatialite/gg_mbr.h
@@ -0,0 +1,464 @@
+/*
+ gg_mbr.h -- Gaia common support for geometries: MBR functions
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_mbr.h
+
+ Geometry handling functions: MBR
+ */
+
+#ifndef _GG_MBR_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_MBR_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* function prototypes */
+
+/**
+ Updates the actual MBR for a Linestring object
+
+ \param line pointer to the Linestring object 
+ */
+    GAIAGEO_DECLARE void gaiaMbrLinestring (gaiaLinestringPtr line);
+
+/**
+ Updates the actual MBR for a Ring object
+
+ \param rng pointer to the Ring object
+ */
+    GAIAGEO_DECLARE void gaiaMbrRing (gaiaRingPtr rng);
+
+/**
+ Updates the actual MBR for a Polygon object
+
+ \param polyg pointer to the Polygon object
+ */
+    GAIAGEO_DECLARE void gaiaMbrPolygon (gaiaPolygonPtr polyg);
+
+/**
+ Updates the actual MBR for a Geometry object
+
+ \param geom pointer to the Geometry object
+ */
+    GAIAGEO_DECLARE void gaiaMbrGeometry (gaiaGeomCollPtr geom);
+
+/**
+ Retrieves the MBR (MinX) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param minx on completion this variable will contain the MBR MinX coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMaxX, gaiaGetMbrMinY, gaiaGetMbrMaxY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMinX (const unsigned char *blob,
+					unsigned int size, double *minx);
+
+/**
+ Retrieves the MBR (MaxX) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param maxx on completion this variable will contain the MBR MaxX coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMinX, gaiaGetMbrMinY, gaiaGetMbrMaxY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMaxX (const unsigned char *blob,
+					unsigned int size, double *maxx);
+
+/**
+ Retrieves the MBR (MinY) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param miny on completion this variable will contain the MBR MinY coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMinX, gaiaGetMbrMaxX, gaiaGetMbrMaxY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMinY (const unsigned char *blob,
+					unsigned int size, double *miny);
+
+/**
+ Retrieves the MBR (MaxY) from a BLOB-Geometry object
+
+ \param blob pointer to BLOB-Geometry.
+ \param size the BLOB's size (in bytes).
+ \param maxy on completion this variable will contain the MBR MaxY coordinate.
+
+ \return 0 on failure: any other value on success.
+
+ \sa gaiaGetMbrMinX, gaiaGetMbrMaxX, gaiaGetMbrMinY
+ */
+    GAIAGEO_DECLARE int gaiaGetMbrMaxY (const unsigned char *blob,
+					unsigned int size, double *maxy);
+
+/**
+ Creates a Geometry object corresponding to the Envelope [MBR] for a
+ BLOB-Geometry
+
+ \param blob pointer to BLOB-Geometry
+ \param size the BLOB's size (in bytes)
+
+ \return the pointer to the newly created Geometry object: NULL on failure
+
+ \sa gaiaFreeGeomColl
+
+ \note you are responsible to destroy (before or after) any allocated Geometry,
+ unless you've passed ownership of the Geometry object to some further object:
+ in this case destroying the higher order object will implicitly destroy any 
+ contained child object. 
+ */
+
+    GAIAGEO_DECLARE gaiaGeomCollPtr gaiaFromSpatiaLiteBlobMbr (const unsigned
+							       char *blob,
+							       unsigned int
+							       size);
+
+/**
+ MBRs comparison: Contains
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 spatially \e contains mbr2
+
+ \sa gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsContains (gaiaGeomCollPtr mbr1,
+					  gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Disjoint
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 are spatially \e disjoint
+
+ \sa gaiaMbrsContains, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsDisjoint (gaiaGeomCollPtr mbr1,
+					  gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Equal
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 are spatially \e equal
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsEqual (gaiaGeomCollPtr mbr1,
+				       gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Intersects
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 spatially \e intersect
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, 
+ gaiaMbrsOverlaps, gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsIntersects (gaiaGeomCollPtr mbr1,
+					    gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Overlaps
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 spatially \e overlap
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsTouches, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsOverlaps (gaiaGeomCollPtr mbr1,
+					  gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Touches
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 and mbr2 spatially \e touche
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsWithin
+ */
+    GAIAGEO_DECLARE int gaiaMbrsTouches (gaiaGeomCollPtr mbr1,
+					 gaiaGeomCollPtr mbr2);
+
+/**
+ MBRs comparison: Within
+
+ \param mbr1 pointer to first Geometry object.
+ \param mbr2 pointer to second Geometry object.
+
+ \return 0 if false; any other value if mbr1 is spatially \e within mbr2
+
+ \sa gaiaMbrsContains, gaiaMbrsDisjoint, gaiaMbrsEqual, gaiaMbrsIntersects,
+ gaiaMbrsOverlaps, gaiaMbrsTouches
+ */
+    GAIAGEO_DECLARE int gaiaMbrsWithin (gaiaGeomCollPtr mbr1,
+					gaiaGeomCollPtr mbr2);
+
+/**
+ Creates a BLOB-Geometry representing an Envelope [MBR]
+
+ \param x1 first X coordinate.
+ \param y1 first Y coordinate.
+ \param x2 second X coordinate.
+ \param y2 second Y coordinate.
+ \param srid the SRID associated to the Envelope
+ \param result on completion will contain a pointer to newly created
+ BLOB-Geometry
+ \param size on completion this variabile will contain the BLOB's size (in 
+ bytes)
+
+ \sa gaiaBuildCircleMbr
+
+ \note [XY] coords must define two extreme Points identifying a diagonal
+ of the MBR [Envelope]
+ \n no special order is required for coords: MAX / MIN values will be 
+ internally arranged as appropriate.
+ */
+    GAIAGEO_DECLARE void gaiaBuildMbr (double x1, double y1, double x2,
+				       double y2, int srid,
+				       unsigned char **result, int *size);
+
+/**
+ Creates a BLOB-Geometry representing an Envelope [MBR]
+
+ \param x centre X coordinate.
+ \param y centre Y coordinate.
+ \param radius the radius of the circle
+ \param srid the SRID associated to the Envelope
+ \param result on completion will contain a pointer to newly created
+ BLOB-Geometry
+ \param size on completion this variabile will contain the BLOB's size (in
+ bytes)
+
+ \sa gaiaBuildMbr
+
+ \note the \e circle of givern \e radius and \e centre will be used so to
+ determine the corresponding \e square Envelope
+ */
+    GAIAGEO_DECLARE void gaiaBuildCircleMbr (double x, double y, double radius,
+					     int srid, unsigned char **result,
+					     int *size);
+
+/**
+ Creates a BLOB-FilterMBR
+
+ \param x1 first X coordinate.
+ \param y1 first Y coordinate.
+ \param x2 second X coordinate.
+ \param y2 second Y coordinate.
+ \param mode one of: GAIA_FILTER_MBR_WITHIN, GAIA_FILTER_MBR_CONTAINS,
+ GAIA_FILTER_MBR_INTERSECTS, GAIA_FILTER_MBR_DECLARE
+ \param result on completion will contain a pointer to newly created
+ BLOB-FilterMBR
+ \param size on completion this variabile will contain the BLOB's size (in
+ bytes)
+
+ \sa gaiaParseFilterMbr
+
+ \note [XY] coords must define two extreme Points identifying a diagonal
+ of the MBR [Envelope]
+ \n no special order is required for coords: MAX / MIN values will be
+ internally arranged as appropriate.
+
+ \remark internally used to implement Geometry Callback R*Tree filtering.
+ */
+    GAIAGEO_DECLARE void gaiaBuildFilterMbr (double x1, double y1, double x2,
+					     double y2, int mode,
+					     unsigned char **result, int *size);
+
+/**
+ Creates a BLOB-FilterMBR
+
+ \param result pointer to BLOB-FilterMBR [previously created by 
+ gaiaBuildFilterMbr]
+ BLOB-Geometry
+ \param size BLOB's size (in bytes)
+ \param minx on completion this variable will contain the MBR MinX coord.
+ \param miny on completion this variable will contain the MBR MinY coord.
+ \param maxx on completion this variable will contain the MBR MinY coord.
+ \param maxy on completion this variable will contain the MBR MaxY coord.
+ \param mode on completion this variable will contain the FilterMBR mode.
+
+ \sa gaiaBuildFilterMbr
+
+ \remark internally used to implement Geometry Callback R*Tree filtering.
+ */
+    GAIAGEO_DECLARE int gaiaParseFilterMbr (unsigned char *result, int size,
+					    double *minx, double *miny,
+					    double *maxx, double *maxy,
+					    int *mode);
+
+/**
+ Computes the Z-Range for a Linestring object
+
+ \param line pointer to the Linestring object
+ \param min on completion this variable will contain the min Z value found 
+ \param max on completion this variable will contain the max Z value found 
+
+ \note if the Linestring has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangeLinestring (gaiaLinestringPtr line,
+					       double *min, double *max);
+
+/**
+ Computes the Z-Range for a Ring object
+
+ \param rng pointer to the Ring object
+ \param min on completion this variable will contain the min Z value found
+ \param max on completion this variable will contain the max Z value found
+
+ \note if the Ring has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangeRing (gaiaRingPtr rng, double *min,
+					 double *max);
+
+/**
+ Computes the Z-Range for a Polygon object
+
+ \param polyg pointer to the Polygon object
+ \param min on completion this variable will contain the min Z value found
+ \param max on completion this variable will contain the max Z value found
+
+ \note if the Polygon has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangePolygon (gaiaPolygonPtr polyg, double *min,
+					    double *max);
+
+/**
+ Computes the Z-Range for a Geometry object
+
+ \param geom pointer to the Geometry object
+ \param min on completion this variable will contain the min Z value found
+ \param max on completion this variable will contain the max Z value found
+
+ \note if the Geometry has XY or XYM dims, the Z-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaZRangeGeometry (gaiaGeomCollPtr geom, double *min,
+					     double *max);
+
+/**
+ Computes the M-Range for a Linestring object
+
+ \param line pointer to the Linestring object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Linestring has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangeLinestring (gaiaLinestringPtr line,
+					       double *min, double *max);
+
+/**
+ Computes the M-Range for a Ring object
+
+ \param rng pointer to the Ring object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Ring has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangeRing (gaiaRingPtr rng, double *min,
+					 double *max);
+
+/**
+ Computes the M-Range for a Polygon object
+
+ \param polyg pointer to the Polygon object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Polygon has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangePolygon (gaiaPolygonPtr polyg, double *min,
+					    double *max);
+
+/**
+ Computes the Z-Range for a Geometry object
+
+ \param geom pointer to the Geometry object
+ \param min on completion this variable will contain the min M value found
+ \param max on completion this variable will contain the max M value found
+
+ \note if the Geometry has XY or XYZ dims, the M-Range is meaningless
+ */
+    GAIAGEO_DECLARE void gaiaMRangeGeometry (gaiaGeomCollPtr geom, double *min,
+					     double *max);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_MBR_H */
diff --git a/libspatialite/src/headers/spatialite/gg_structs.h b/libspatialite/src/headers/spatialite/gg_structs.h
new file mode 100644
index 0000000..15bfbc0
--- /dev/null
+++ b/libspatialite/src/headers/spatialite/gg_structs.h
@@ -0,0 +1,624 @@
+/*
+ gg_structs.h -- Gaia common support for geometries: structures
+  
+ version 3.0, 2011 July 20
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+
+/**
+ \file gg_structs.h
+
+ Geometry structures
+ */
+
+#ifndef _GG_STRUCTS_H
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define _GG_STRUCTS_H
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ Container for OGC POINT Geometry
+ */
+    typedef struct gaiaPointStruct
+    {
+/* an OpenGis POINT */
+/** X coordinate */
+	double X;		/* X,Y coordinates */
+/** Y coordinate */
+	double Y;
+/** Z coordinate: only for XYZ and XYZM dims */
+	double Z;		/* Z coordinate */
+/** M measure: only for XYM and XYZM dims */
+	double M;		/* M measure */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [double linked list] */
+	struct gaiaPointStruct *Next;	/* for double-linked list */
+/** pointer to previous item [double linked list] */
+	struct gaiaPointStruct *Prev;	/* for double-linked list */
+    } gaiaPoint;
+/**
+ Typedef for OGC POINT structure
+
+ \sa gaiaPoint
+ */
+    typedef gaiaPoint *gaiaPointPtr;
+
+/**
+ Container for dynamically growing line/ring
+ */
+    typedef struct gaiaDynamicLineStruct
+    {
+/* a generic DYNAMIC LINE object */
+/** invalid object */
+	int Error;
+/** the SRID */
+	int Srid;
+/** pointer to first POINT [double linked list] */
+	gaiaPointPtr First;	/* Points linked list - first */
+/** pointer to last POINT [double linked list] */
+	gaiaPointPtr Last;	/* Points linked list - last */
+    } gaiaDynamicLine;
+/**
+ Typedef for dynamically growing line/ring structure
+
+ \sa gaiaDynamicLine
+ */
+    typedef gaiaDynamicLine *gaiaDynamicLinePtr;
+
+/**
+ Container for OGC LINESTRING Geometry
+ */
+    typedef struct gaiaLinestringStruct
+    {
+/* an OpenGis LINESTRING */
+/** number of points [aka vertices] */
+	int Points;		/* number of vertices */
+/** COORDs mem-array */
+	double *Coords;		/* X,Y [vertices] array */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [linked list] */
+	struct gaiaLinestringStruct *Next;	/* for linked list */
+    } gaiaLinestring;
+/**
+ Typedef for OGC LINESTRING structure
+
+ \sa gaiaLinestring
+ */
+    typedef gaiaLinestring *gaiaLinestringPtr;
+
+/**
+ Container for OGC RING Geometry
+ */
+    typedef struct gaiaRingStruct
+    {
+/* a GIS ring - OpenGis LINESTRING, closed */
+/** number of points [aka vertices] */
+	int Points;		/* number of vertices */
+/** COORDs mem-array */
+	double *Coords;		/* X,Y [vertices] array */
+/** clockwise / counterclockwise */
+	int Clockwise;		/* clockwise / counterclockwise */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max Y */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [linked list] */
+	struct gaiaRingStruct *Next;	/* for linked list */
+/** pointer to belonging Polygon */
+	struct gaiaPolygonStruct *Link;	/* polygon reference */
+    } gaiaRing;
+/**
+ Typedef for OGC RING structure
+
+ \sa gaiaRing
+ */
+    typedef gaiaRing *gaiaRingPtr;
+
+/**
+ Container for OGC POLYGON Geometry
+ */
+    typedef struct gaiaPolygonStruct
+    {
+/* an OpenGis POLYGON */
+/** the exterior ring (mandatory) */
+	gaiaRingPtr Exterior;	/* exterior ring */
+/** number of interior rings (may be, none) */
+	int NumInteriors;	/* number of interior rings */
+/** array of interior rings */
+	gaiaRingPtr Interiors;	/* interior rings array */
+/** index of first unused interior ring */
+	int NextInterior;	/* first free interior ring */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max Y */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** pointer to next item [linked list] */
+	struct gaiaPolygonStruct *Next;	/* for linked list */
+    } gaiaPolygon;
+/**
+ Typedef for OGC POLYGON structure
+ 
+ \sa gaiaPolygon
+ */
+    typedef gaiaPolygon *gaiaPolygonPtr;
+
+/**
+ Container for OGC GEOMETRYCOLLECTION Geometry
+ */
+    typedef struct gaiaGeomCollStruct
+    {
+/* OpenGis GEOMETRYCOLLECTION */
+/** the SRID */
+	int Srid;		/* the SRID value for this GEOMETRY */
+/** CPU endian arch */
+	char endian_arch;	/* littleEndian - bigEndian arch for target CPU */
+/** BLOB Geometry endian arch */
+	char endian;		/* littleEndian - bigEndian */
+/** BLOB-Geometry buffer */
+	const unsigned char *blob;	/* WKB encoded buffer */
+/** BLOB-Geometry buffer size (in bytes) */
+	unsigned long size;	/* buffer size */
+/** current offset [BLOB parsing] */
+	unsigned long offset;	/* current offset [for parsing] */
+/** pointer to first POINT [linked list]; may be NULL */
+	gaiaPointPtr FirstPoint;	/* Points linked list - first */
+/** pointer to last POINT [linked list]; may be NULL */
+	gaiaPointPtr LastPoint;	/* Points linked list - last */
+/** pointer to first LINESTRING [linked list]; may be NULL */
+	gaiaLinestringPtr FirstLinestring;	/* Linestrings linked list - first */
+/** pointer to last LINESTRING [linked list]; may be NULL */
+	gaiaLinestringPtr LastLinestring;	/* Linestrings linked list - last */
+/** pointer to first POLYGON [linked list]; may be NULL */
+	gaiaPolygonPtr FirstPolygon;	/* Polygons linked list - first */
+/** pointer to last POLYGON [linked list]; may be NULL */
+	gaiaPolygonPtr LastPolygon;	/* Polygons linked list - last */
+/** MBR: min X */
+	double MinX;		/* MBR - BBOX */
+/** MBR: min Y */
+	double MinY;		/* MBR - BBOX */
+/** MBR: max X */
+	double MaxX;		/* MBR - BBOX */
+/** MBR: max Y */
+	double MaxY;		/* MBR - BBOX */
+/** one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int DimensionModel;	/* (x,y), (x,y,z), (x,y,m) or (x,y,z,m) */
+/** any valid Geometry Class type */
+	int DeclaredType;	/* the declared TYPE for this Geometry */
+/** pointer to next item [linked list] */
+	struct gaiaGeomCollStruct *Next;	/* Vanuatu - used for linked list */
+    } gaiaGeomColl;
+/**
+ Typedef for OGC GEOMETRYCOLLECTION structure
+
+ \sa gaiaGeomCool
+ */
+    typedef gaiaGeomColl *gaiaGeomCollPtr;
+
+/**
+ Container similar to LINESTRING [internally used]
+ */
+    typedef struct gaiaPreRingStruct
+    {
+/* a LINESTRING used to build rings */
+/** pointer to LINESTRING */
+	gaiaLinestringPtr Line;	/* a LINESTRING pointer */
+/** already used/visited item */
+	int AlreadyUsed;	/* a switch to mark an already used line element */
+/** pointer to next item [linked list] */
+	struct gaiaPreRingStruct *Next;	/* for linked list */
+    } gaiaPreRing;
+/**
+ Typedef for gaiaPreRing structure
+
+ \sa gaiaPreRing
+ */
+    typedef gaiaPreRing *gaiaPreRingPtr;
+
+/**
+ Container for variant (multi-type) value
+ */
+    typedef struct gaiaValueStruct
+    {
+/* a DBF field multitype value */
+/** data type: one of GAIA_NULL_VALUE, GAIA_INT_VALUE, GAIA_DOUBLE_VALUE, GAIA_TEXT_VALUE */
+	short Type;		/* the type */
+/** TEXT type value */
+	char *TxtValue;		/* the text value */
+/** INT type value */
+	sqlite3_int64 IntValue;	/* the integer value */
+/** DOUBLE type value */
+	double DblValue;	/* the double value */
+    } gaiaValue;
+/**
+ Typedef for variant (multi-type) value structure 
+ */
+    typedef gaiaValue *gaiaValuePtr;
+
+/**
+ Container for DBF field
+ */
+    typedef struct gaiaDbfFieldStruct
+    {
+/* a DBF field definition - shapefile attribute */
+/** field name [max. 10 char] */
+	char *Name;		/* field name */
+/** DBF data type */
+	unsigned char Type;	/* field type */
+/** DBF buffer offset [where the field value starts] */
+	int Offset;		/* buffer offset [this field begins at *buffer+offset* and extends for *length* bytes */
+/** total DBF buffer field length (in bytes) */
+	unsigned char Length;	/* field total length [in bytes] */
+/** precision (decimal digits) */
+	unsigned char Decimals;	/* decimal positions */
+/** current variant [multi-type] value */
+	gaiaValuePtr Value;	/* the current multitype value for this attribute */
+/** pointer to next item [linked list] */
+	struct gaiaDbfFieldStruct *Next;	/* pointer to next element in linked list */
+    } gaiaDbfField;
+/**
+ Typedef for DBF field structure 
+ */
+    typedef gaiaDbfField *gaiaDbfFieldPtr;
+
+/**
+ Container for a list of DBF fields
+ */
+    typedef struct gaiaDbfListStruct
+    {
+/* a linked list to contain the DBF fields definitions - shapefile attributes */
+/** current RowID */
+	int RowId;		/* the current RowId */
+/** current Geometry */
+	gaiaGeomCollPtr Geometry;	/* geometry for current entity */
+/** pointer to first DBF field [linked list] */
+	gaiaDbfFieldPtr First;	/* pointer to first element in linked list */
+/** pointer to last DBF field [linked list] */
+	gaiaDbfFieldPtr Last;	/* pointer to last element in linker list */
+    } gaiaDbfList;
+/**
+ Typedef for a list of DBF fields
+ 
+ \sa gaiaDbfList
+ */
+    typedef gaiaDbfList *gaiaDbfListPtr;
+
+/**
+ Container for DBF file handling
+ */
+    typedef struct gaiaDbfStruct
+    {
+/* DBF TYPE */
+/** DBF endian arch */
+	int endian_arch;
+/** validity flag: 1 = ready to be processed */
+	int Valid;		/* 1 = ready to process */
+/** DBF file pathname */
+	char *Path;		/* the DBF path */
+/** FILE handle */
+	FILE *flDbf;		/* the DBF file handle */
+/** list of DBF fields */
+	gaiaDbfListPtr Dbf;	/* the DBF attributes list */
+/** I/O buffer */
+	unsigned char *BufDbf;	/* the DBF I/O buffer */
+/** header size (in bytes) */
+	int DbfHdsz;		/* the DBF header length */
+/** record length (in bytes) */
+	int DbfReclen;		/* the DBF record length */
+/** current file size */
+	int DbfSize;		/* current DBF size */
+/** current Record Number */
+	int DbfRecno;		/* current DBF record number */
+/** handle to ICONV converter object */
+	void *IconvObj;		/* opaque reference to ICONV converter */
+/** last error message (may be NULL) */
+	char *LastError;	/* last error message */
+    } gaiaDbf;
+/** 
+ Typedef for DBF file handler structure
+
+ \sa gaiaDbf
+ */
+    typedef gaiaDbf *gaiaDbfPtr;
+
+/**
+ Container for SHP file handling
+ */
+    typedef struct gaiaShapefileStruct
+    {
+/* SHAPEFILE TYPE */
+/** SHP endian arch */
+	int endian_arch;
+/** validity flag: 1 = ready to be processed */
+	int Valid;		/* 1 = ready to process */
+/** read or write mode */
+	int ReadOnly;		/* read or write mode */
+/** SHP 'abstract' path (no suffixes) */
+	char *Path;		/* the shapefile abstract path [no suffixes] */
+/** FILE handle to SHX file */
+	FILE *flShx;		/* the SHX file handle */
+/** FILE handle to SHP file */
+	FILE *flShp;		/* the SHP file handle */
+/** FILE handle to DBF file */
+	FILE *flDbf;		/* the DBF file handle */
+/** the SHP shape code */
+	int Shape;		/* the SHAPE code for the whole shapefile */
+/** list of DBF fields */
+	gaiaDbfListPtr Dbf;	/* the DBF attributes list */
+/** DBF I/O buffer */
+	unsigned char *BufDbf;	/* the DBF I/O buffer */
+/** DBF header size (in bytes) */
+	int DbfHdsz;		/* the DBF header length */
+/** DBF record length (in bytes) */
+	int DbfReclen;		/* the DBF record length */
+/** DBF current file size (in bytes) */
+	int DbfSize;		/* current DBF size */
+/** DBF current Record Number */
+	int DbfRecno;		/* current DBF record number */
+/** SHP I/O buffer */
+	unsigned char *BufShp;	/* the SHP I/O buffer */
+/** SHP current buffer size (in bytes) */
+	int ShpBfsz;		/* the SHP buffer current size */
+/** SHP current file size */
+	int ShpSize;		/* current SHP size */
+/** SHX current file size */
+	int ShxSize;		/* current SHX size */
+/** Total Extent: min X */
+	double MinX;		/* the MBR/BBOX for the whole shapefile */
+/** Total Extent: min Y */
+	double MinY;
+/** Total Extent: max X */
+	double MaxX;
+/** Total Extent: max Y */
+	double MaxY;
+/** handle to ICONV converter object */
+	void *IconvObj;		/* opaque reference to ICONV converter */
+/** last error message (may be NULL) */
+	char *LastError;	/* last error message */
+/** SHP actual OGC Geometry type */
+	int EffectiveType;	/* the effective Geometry-type, as determined by gaiaShpAnalyze() */
+/** SHP actual dims: one of GAIA_XY, GAIA_XY_Z, GAIA_XY_M, GAIA_XY_ZM */
+	int EffectiveDims;	/* the effective Dimensions [XY, XYZ, XYM, XYZM], as determined by gaiaShpAnalyze() */
+    } gaiaShapefile;
+/**
+ Typedef for SHP file handler structure
+
+ \sa gaiaShapefile
+ */
+    typedef gaiaShapefile *gaiaShapefilePtr;
+
+/**
+ Container for dynamically growing output buffer
+ */
+    typedef struct gaiaOutBufferStruct
+    {
+/* a struct handling a dynamically growing output buffer */
+/** current buffer */
+	char *Buffer;
+/** current write offset */
+	int WriteOffset;
+/** current buffer size (in bytes) */
+	int BufferSize;
+/** validity flag */
+	int Error;
+    } gaiaOutBuffer;
+/**
+ Typedef for dynamically growing output buffer structure
+
+ \sa gaiaOutBuffer
+ */
+    typedef gaiaOutBuffer *gaiaOutBufferPtr;
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting text reader */
+
+/** Virtual Text driver: MAX number of fields */
+#define VRTTXT_FIELDS_MAX	65535
+/** Virtual Text driver: MAX block size (in bytes) */
+#define VRTTXT_BLOCK_MAX 65535
+
+/** Virtual Text driver: TEXT value */
+#define VRTTXT_TEXT		1
+/** Virtual Text driver: INTEGER value */
+#define VRTTXT_INTEGER	2
+/** Virtual Text driver: DOUBLE value */
+#define VRTTXT_DOUBLE	3
+/** Virtual Text driver: NULL value */
+#define VRTTXT_NULL	4
+
+/**
+ Container for Virtual Text record (line)
+ */
+    struct vrttxt_line
+    {
+/* a struct representing a full LINE (aka Record) */
+/** current offset (parsing) */
+	off_t offset;
+/** line length (in bytes) */
+	int len;
+/** array of field offsets (where each field starts) */
+	int field_offsets[VRTTXT_FIELDS_MAX];
+/** number of field into the record */
+	int num_fields;
+/** validity flag */
+	int error;
+    };
+
+/**
+ Container for Virtual Text record (line) offsets 
+ */
+    struct vrttxt_row
+    {
+/* a struct storing Row offsets */
+/** Line Number */
+	int line_no;
+/** start offset */
+	off_t offset;
+/** record (line) length (in bytes) */
+	int len;
+/** number of fields into this record */
+	int num_fields;
+    };
+
+/**
+ Container for Virtual Text block of records
+ */
+    struct vrttxt_row_block
+    {
+/*
+/ for efficiency sake, individual Row offsets 
+/ are grouped in reasonably sized blocks
+*/
+/** array of records [lines] */
+	struct vrttxt_row rows[VRTTXT_BLOCK_MAX];
+/** number of records into the array */
+	int num_rows;
+/** min Line Number */
+	int min_line_no;
+/** max Line Number */
+	int max_line_no;
+/** pointer to next item [linked list] */
+	struct vrttxt_row_block *next;
+    };
+
+/** 
+ Container for Virtual Text column (field) header
+ */
+    struct vrttxt_column_header
+    {
+/* a struct representing a Column (aka Field) header */
+/** column name */
+	char *name;
+/** data type: one of GAIA_NULL_VALUE, GAIA_INT_VALUE, GAIA_DOUBLE_VALUE, GAIA_TEXT_VALUE */
+	int type;
+    };
+
+/**
+ Container for Virtual Text file handling
+ */
+    typedef struct vrttxt_reader
+    {
+/* the main TXT-Reader struct */
+/** array of columns (fields) */
+	struct vrttxt_column_header columns[VRTTXT_FIELDS_MAX];
+/** FILE handle */
+	FILE *text_file;
+/** handle to ICONV converter object */
+	void *toUtf8;		/* the UTF-8 ICONV converter */
+/** field separator character */
+	char field_separator;
+/** text separator character (quote) */
+	char text_separator;
+/** decimal separator */
+	char decimal_separator;
+/** TRUE if the first line contains column names */
+	int first_line_titles;
+/** validity flag */
+	int error;
+/** pointer to first block of records [linked list] */
+	struct vrttxt_row_block *first;
+/** pointer to last block of records [linked list] */
+	struct vrttxt_row_block *last;
+/** array of pointers to individual records [lines] */
+	struct vrttxt_row **rows;
+/** number of records */
+	int num_rows;
+/** current Line Number */
+	int line_no;
+/** max number of columns (fields) */
+	int max_fields;
+/** current buffer size */
+	int current_buf_sz;
+/** current buffer offset [parsing] */
+	int current_buf_off;
+/** I/O buffer */
+	char *line_buffer;
+/** current field buffer */
+	char *field_buffer;
+/** array of field offsets [current record] */
+	int field_offsets[VRTTXT_FIELDS_MAX];
+/** array of field lengths [current record] */
+	int field_lens[VRTTXT_FIELDS_MAX];
+/** max field [current record] */
+	int max_current_field;
+/** current record [line] ready for parsing */
+	int current_line_ready;
+    } gaiaTextReader;
+/**
+ Typedef for Virtual Text file handling structure
+
+ \sa gaiaTextReader
+ */
+    typedef gaiaTextReader *gaiaTextReaderPtr;
+
+#endif				/* end ICONV (text reader) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif				/* _GG_STRUCTS_H */
diff --git a/libspatialite/src/shapefiles/Makefile.am b/libspatialite/src/shapefiles/Makefile.am
new file mode 100644
index 0000000..b77ffb0
--- /dev/null
+++ b/libspatialite/src/shapefiles/Makefile.am
@@ -0,0 +1,15 @@
+
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@
+INCLUDES += -I$(top_srcdir)/src/headers
+
+noinst_LTLIBRARIES = libshapefiles.la
+
+libshapefiles_la_SOURCES = shapefiles.c
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/shapefiles/Makefile.in b/libspatialite/src/shapefiles/Makefile.in
new file mode 100644
index 0000000..a4b7330
--- /dev/null
+++ b/libspatialite/src/shapefiles/Makefile.in
@@ -0,0 +1,488 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/shapefiles
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libshapefiles_la_LIBADD =
+am_libshapefiles_la_OBJECTS = shapefiles.lo
+libshapefiles_la_OBJECTS = $(am_libshapefiles_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libshapefiles_la_SOURCES)
+DIST_SOURCES = $(libshapefiles_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
+        -DNDEBUG=1 \
+	@OMIT_GEOS_FLAGS@ @GEOSADVANCED_FLAGS@ @OMIT_PROJ_FLAGS@ \
+	@OMIT_ICONV_FLAGS@ @OMIT_MATHSQL_FLAGS@ \
+	@OMIT_EPSG_FLAGS@ @OMIT_GEOCALLBACKS_FLAGS@ @OMIT_FREEXL_FLAGS@
+
+INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
+noinst_LTLIBRARIES = libshapefiles.la
+libshapefiles_la_SOURCES = shapefiles.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/shapefiles/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/shapefiles/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libshapefiles.la: $(libshapefiles_la_OBJECTS) $(libshapefiles_la_DEPENDENCIES) 
+	$(LINK)  $(libshapefiles_la_OBJECTS) $(libshapefiles_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shapefiles.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/src/shapefiles/shapefiles.c b/libspatialite/src/shapefiles/shapefiles.c
new file mode 100644
index 0000000..385ca70
--- /dev/null
+++ b/libspatialite/src/shapefiles/shapefiles.c
@@ -0,0 +1,4096 @@
+/*
+
+ shapefiles.c -- implements shapefile support [import - export]
+
+ version 2.3, 2008 October 13
+
+ Author: Sandro Furieri a.furieri at lqt.it
+
+ -----------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2008
+the Initial Developer. All Rights Reserved.
+
+Contributor(s): Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+/* MSVC strictly requires this include [off_t] */
+#include <sys/types.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPATIALITE_AMALGAMATION
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/gaiaaux.h>
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+#include <freexl.h>
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+#define strcasecmp	_stricmp
+#endif
+
+struct dupl_column
+{
+/* a column value in a duplicated row */
+    int pos;
+    char *name;
+    int type;
+    sqlite3_int64 int_value;
+    double dbl_value;
+    const char *txt_value;
+    const void *blob;
+    int size;
+    int query_pos;
+    struct dupl_column *next;
+};
+
+struct dupl_row
+{
+/* a duplicated row with column values */
+    int count;
+    struct dupl_column *first;
+    struct dupl_column *last;
+    const char *table;
+};
+
+static void
+clean_dupl_row (struct dupl_row *str)
+{
+/* destroying a duplicated row struct */
+    struct dupl_column *p;
+    struct dupl_column *pn;
+    p = str->first;
+    while (p)
+      {
+	  pn = p->next;
+	  free (p->name);
+	  free (p);
+	  p = pn;
+      }
+}
+
+static void
+add_to_dupl_row (struct dupl_row *str, const char *name)
+{
+/* adding a column to the duplicated row struct */
+    int len;
+    struct dupl_column *p = malloc (sizeof (struct dupl_column));
+    p->pos = str->count;
+    len = strlen (name);
+    p->name = malloc (len + 1);
+    strcpy (p->name, name);
+    str->count++;
+    p->type = SQLITE_NULL;
+    p->next = NULL;
+    if (str->first == NULL)
+	str->first = p;
+    if (str->last)
+	str->last->next = p;
+    str->last = p;
+}
+
+static void
+set_int_value (struct dupl_row *str, int pos, sqlite3_int64 value)
+{
+/* setting up an integer value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_INTEGER;
+		p->int_value = value;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_double_value (struct dupl_row *str, int pos, double value)
+{
+/* setting up a double value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_FLOAT;
+		p->dbl_value = value;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_text_value (struct dupl_row *str, int pos, const char *value)
+{
+/* setting up a text value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_TEXT;
+		p->txt_value = value;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_blob_value (struct dupl_row *str, int pos, const void *blob, int size)
+{
+/* setting up a blob value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_BLOB;
+		p->blob = blob;
+		p->size = size;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+set_null_value (struct dupl_row *str, int pos)
+{
+/* setting up a NULL value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->pos == pos)
+	    {
+		p->type = SQLITE_NULL;
+		return;
+	    }
+	  p = p->next;
+      }
+}
+
+static void
+reset_query_pos (struct dupl_row *str)
+{
+/* resetting QueryPos for BLOBs */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  p->query_pos = -1;
+	  p = p->next;
+      }
+}
+
+static int
+check_dupl_blob2 (struct dupl_column *ptr, const void *blob, int size)
+{
+/* checking a BLOB value */
+    if (ptr->type != SQLITE_BLOB)
+	return 0;
+    if (ptr->size != size)
+	return 0;
+    if (memcmp (ptr->blob, blob, size) != 0)
+	return 0;
+    return 1;
+}
+
+static int
+check_dupl_blob (struct dupl_row *str, int pos, const void *blob, int size)
+{
+/* checking a BLOB value */
+    struct dupl_column *p = str->first;
+    while (p)
+      {
+	  if (p->query_pos == pos)
+	    {
+		return check_dupl_blob2 (p, blob, size);
+	    }
+	  p = p->next;
+      }
+    return 0;
+}
+
+static gaiaDbfFieldPtr
+getDbfField (gaiaDbfListPtr list, char *name)
+{
+/* find a DBF attribute by name */
+    gaiaDbfFieldPtr fld = list->First;
+    while (fld)
+      {
+	  if (strcasecmp (fld->Name, name) == 0)
+	      return fld;
+	  fld = fld->Next;
+      }
+    return NULL;
+}
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting SHP */
+
+SPATIALITE_DECLARE int
+load_shapefile (sqlite3 * sqlite, char *shp_path, char *table, char *charset,
+		int srid, char *column, int coerce2d, int compressed,
+		int verbose, int spatial_index, int *rows, char *err_msg)
+{
+    sqlite3_stmt *stmt = NULL;
+    int ret;
+    char *errMsg = NULL;
+    char sql[65536];
+    char dummyName[4096];
+    int already_exists = 0;
+    int metadata = 0;
+    int sqlError = 0;
+    gaiaShapefilePtr shp = NULL;
+    gaiaDbfFieldPtr dbf_field;
+    int cnt;
+    int col_cnt;
+    int seed;
+    int len;
+    int dup;
+    int idup;
+    int current_row;
+    char **col_name = NULL;
+    unsigned char *blob;
+    int blob_size;
+    char *geom_type;
+    char *txt_dims;
+    char *geo_column = column;
+    if (!geo_column)
+	geo_column = "Geometry";
+/* checking if TABLE already exists */
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     table);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      already_exists = 1;
+	  else
+	    {
+		fprintf (stderr, "load shapefile error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (already_exists)
+      {
+	  if (!err_msg)
+	      fprintf (stderr,
+		       "load shapefile error: table '%s' already exists\n",
+		       table);
+	  else
+	      sprintf (err_msg,
+		       "load shapefile error: table '%s' already exists\n",
+		       table);
+	  return 0;
+      }
+/* checking if MetaData GEOMETRY_COLUMNS exists */
+    strcpy (sql,
+	    "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'geometry_columns'");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      metadata = 1;
+	  else
+	    {
+		fprintf (stderr, "load shapefile error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    shp = gaiaAllocShapefile ();
+    gaiaOpenShpRead (shp, shp_path, charset, "UTF-8");
+    if (!(shp->Valid))
+      {
+	  if (!err_msg)
+	    {
+		fprintf (stderr,
+			 "load shapefile error: cannot open shapefile '%s'\n",
+			 shp_path);
+		if (shp->LastError)
+		    fprintf (stderr, "\tcause: %s\n", shp->LastError);
+	    }
+	  else
+	    {
+		char extra[512];
+		*extra = '\0';
+		if (shp->LastError)
+		    sprintf (extra, "\n\tcause: %s\n", shp->LastError);
+		sprintf (err_msg,
+			 "load shapefile error: cannot open shapefile '%s'%s",
+			 shp_path, extra);
+	    }
+	  gaiaFreeShapefile (shp);
+	  return 0;
+      }
+/* checking for duplicate / illegal column names and antialising them */
+    col_cnt = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* counting DBF fields */
+	  col_cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    col_name = malloc (sizeof (char *) * col_cnt);
+    cnt = 0;
+    seed = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* preparing column names */
+	  strcpy (dummyName, dbf_field->Name);
+	  dup = 0;
+	  for (idup = 0; idup < cnt; idup++)
+	    {
+		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
+		    dup = 1;
+	    }
+	  if (strcasecmp (dummyName, "PK_UID") == 0)
+	      dup = 1;
+	  if (strcasecmp (dummyName, geo_column) == 0)
+	      dup = 1;
+	  if (dup)
+	      sprintf (dummyName, "COL_%d", seed++);
+	  len = strlen (dummyName);
+	  *(col_name + cnt) = malloc (len + 1);
+	  strcpy (*(col_name + cnt), dummyName);
+	  cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    if (verbose)
+	fprintf (stderr,
+		 "========\nLoading shapefile at '%s' into SQLite table '%s'\n",
+		 shp_path, table);
+/* starting a transaction */
+    if (verbose)
+	fprintf (stderr, "\nBEGIN;\n");
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* creating the Table */
+    sprintf (sql, "CREATE TABLE %s", table);
+    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
+    cnt = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  strcat (sql, ",\n\"");
+	  strcat (sql, *(col_name + cnt));
+	  cnt++;
+	  switch (dbf_field->Type)
+	    {
+	    case 'C':
+		strcat (sql, "\" TEXT");
+		break;
+	    case 'N':
+		fflush (stderr);
+		if (dbf_field->Decimals)
+		    strcat (sql, "\" DOUBLE");
+		else
+		  {
+		      if (dbf_field->Length <= 18)
+			  strcat (sql, "\" INTEGER");
+		      else
+			  strcat (sql, "\" DOUBLE");
+		  }
+		break;
+	    case 'D':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'F':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'L':
+		strcat (sql, "\" INTEGER");
+		break;
+	    };
+	  dbf_field = dbf_field->Next;
+      }
+    if (metadata)
+	strcat (sql, ")");
+    else
+      {
+	  strcat (sql, ",\n");
+	  strcat (sql, geo_column);
+	  strcat (sql, " BLOB)");
+      }
+    if (verbose)
+	fprintf (stderr, "%s;\n", sql);
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    if (metadata)
+      {
+	  /* creating Geometry column */
+	  switch (shp->Shape)
+	    {
+	    case GAIA_SHP_POINT:
+	    case GAIA_SHP_POINTM:
+	    case GAIA_SHP_POINTZ:
+		geom_type = "POINT";
+		break;
+	    case GAIA_SHP_MULTIPOINT:
+	    case GAIA_SHP_MULTIPOINTM:
+	    case GAIA_SHP_MULTIPOINTZ:
+		geom_type = "MULTIPOINT";
+		break;
+	    case GAIA_SHP_POLYLINE:
+	    case GAIA_SHP_POLYLINEM:
+	    case GAIA_SHP_POLYLINEZ:
+		gaiaShpAnalyze (shp);
+		if (shp->EffectiveType == GAIA_LINESTRING)
+		    geom_type = "LINESTRING";
+		else
+		    geom_type = "MULTILINESTRING";
+		break;
+	    case GAIA_SHP_POLYGON:
+	    case GAIA_SHP_POLYGONM:
+	    case GAIA_SHP_POLYGONZ:
+		gaiaShpAnalyze (shp);
+		if (shp->EffectiveType == GAIA_POLYGON)
+		    geom_type = "POLYGON";
+		else
+		    geom_type = "MULTIPOLYGON";
+		break;
+	    };
+	  if (coerce2d)
+	      shp->EffectiveDims = GAIA_XY;
+	  switch (shp->EffectiveDims)
+	    {
+	    case GAIA_XY_Z:
+		txt_dims = "XYZ";
+		break;
+	    case GAIA_XY_M:
+		txt_dims = "XYM";
+		break;
+	    case GAIA_XY_Z_M:
+		txt_dims = "XYZM";
+		break;
+	    default:
+		txt_dims = "XY";
+		break;
+	    };
+	  sprintf (sql, "SELECT AddGeometryColumn('%s', '%s', %d, '%s', '%s')",
+		   table, geo_column, srid, geom_type, txt_dims);
+	  if (verbose)
+	      fprintf (stderr, "%s;\n", sql);
+	  ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+		else
+		    sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+		sqlError = 1;
+		goto clean_up;
+	    }
+	  if (spatial_index)
+	    {
+		/* creating the Spatial Index */
+		sprintf (sql, "SELECT CreateSpatialIndex('%s', '%s')",
+			 table, geo_column);
+		ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+		if (ret != SQLITE_OK)
+		  {
+		      if (!err_msg)
+			  fprintf (stderr, "load shapefile error: <%s>\n",
+				   errMsg);
+		      else
+			  sprintf (err_msg, "load shapefile error: <%s>\n",
+				   errMsg);
+		      sqlite3_free (errMsg);
+		      sqlError = 1;
+		      goto clean_up;
+		  }
+	    }
+      }
+    else
+      {
+	  /* no Metadata */
+	  if (shp->Shape == GAIA_SHP_POLYLINE
+	      || shp->Shape == GAIA_SHP_POLYLINEM
+	      || shp->Shape == GAIA_SHP_POLYLINEZ
+	      || shp->Shape == GAIA_SHP_POLYGON
+	      || shp->Shape == GAIA_SHP_POLYGONM
+	      || shp->Shape == GAIA_SHP_POLYGONZ)
+	    {
+		/* 
+		   / fixing anyway the Geometry type for 
+		   / LINESTRING/MULTILINESTRING or 
+		   / POLYGON/MULTIPOLYGON
+		 */
+		gaiaShpAnalyze (shp);
+	    }
+      }
+    /* preparing the INSERT INTO parametrerized statement */
+    sprintf (sql, "INSERT INTO %s (PK_UID,", table);
+    cnt = 0;
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* columns corresponding to some DBF attribute */
+	  strcat (sql, "\"");
+	  strcat (sql, *(col_name + cnt++));
+	  strcat (sql, "\" ,");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, geo_column);	/* the GEOMETRY column */
+    strcat (sql, ")\nVALUES (?");
+    dbf_field = shp->Dbf->First;
+    while (dbf_field)
+      {
+	  /* column values */
+	  strcat (sql, ", ?");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ", ?)");	/* the GEOMETRY column */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load shapefile error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    current_row = 0;
+    while (1)
+      {
+	  /* inserting rows from shapefile */
+	  ret = gaiaReadShpEntity (shp, current_row, srid);
+	  if (!ret)
+	    {
+		if (!(shp->LastError))	/* normal SHP EOF */
+		    break;
+		if (!err_msg)
+		    fprintf (stderr, "%s\n", shp->LastError);
+		else
+		    sprintf (err_msg, "%s\n", shp->LastError);
+		sqlError = 1;
+		sqlite3_finalize (stmt);
+		goto clean_up;
+	    }
+	  current_row++;
+	  /* binding query params */
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  sqlite3_bind_int (stmt, 1, current_row);
+	  cnt = 0;
+	  dbf_field = shp->Dbf->First;
+	  while (dbf_field)
+	    {
+		/* column values */
+		if (!(dbf_field->Value))
+		    sqlite3_bind_null (stmt, cnt + 2);
+		else
+		  {
+		      switch (dbf_field->Value->Type)
+			{
+			case GAIA_INT_VALUE:
+			    sqlite3_bind_int64 (stmt, cnt + 2,
+						dbf_field->Value->IntValue);
+			    break;
+			case GAIA_DOUBLE_VALUE:
+			    sqlite3_bind_double (stmt, cnt + 2,
+						 dbf_field->Value->DblValue);
+			    break;
+			case GAIA_TEXT_VALUE:
+			    sqlite3_bind_text (stmt, cnt + 2,
+					       dbf_field->Value->TxtValue,
+					       strlen (dbf_field->
+						       Value->TxtValue),
+					       SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_bind_null (stmt, cnt + 2);
+			    break;
+			}
+		  }
+		cnt++;
+		dbf_field = dbf_field->Next;
+	    }
+	  if (shp->Dbf->Geometry)
+	    {
+		if (compressed)
+		    gaiaToCompressedBlobWkb (shp->Dbf->Geometry, &blob,
+					     &blob_size);
+		else
+		    gaiaToSpatiaLiteBlobWkb (shp->Dbf->Geometry, &blob,
+					     &blob_size);
+		sqlite3_bind_blob (stmt, cnt + 2, blob, blob_size, free);
+	    }
+	  else
+	    {
+		/* handling a NULL-Geometry */
+		sqlite3_bind_null (stmt, cnt + 2);
+	    }
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	      ;
+	  else
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load shapefile error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		else
+		    sprintf (err_msg, "load shapefile error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		sqlError = 1;
+		goto clean_up;
+	    }
+      }
+    sqlite3_finalize (stmt);
+  clean_up:
+    gaiaFreeShapefile (shp);
+    if (col_name)
+      {
+	  /* releasing memory allocation for column names */
+	  for (cnt = 0; cnt < col_cnt; cnt++)
+	      free (*(col_name + cnt));
+	  free (col_name);
+      }
+    if (sqlError)
+      {
+	  /* some error occurred - ROLLBACK */
+	  if (verbose)
+	      fprintf (stderr, "ROLLBACK;\n");
+	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+	    }
+	  if (rows)
+	      *rows = current_row;
+	  return 0;
+      }
+    else
+      {
+	  /* ok - confirming pending transaction - COMMIT */
+	  if (verbose)
+	      fprintf (stderr, "COMMIT;\n");
+	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
+		else
+		    sprintf (err_msg, "load shapefile error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  if (rows)
+	      *rows = current_row;
+	  if (verbose)
+	      fprintf (stderr,
+		       "\nInserted %d rows into '%s' from SHAPEFILE\n========\n",
+		       current_row, table);
+	  if (err_msg)
+	      sprintf (err_msg, "Inserted %d rows into '%s' from SHAPEFILE",
+		       current_row, table);
+	  return 1;
+      }
+}
+
+#endif /* end ICONV (SHP) */
+
+static void
+output_prj_file (sqlite3 * sqlite, char *path, char *table, char *column)
+{
+/* exporting [if possible] a .PRJ file */
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+    int srid = -1;
+    char sql[1024];
+    char sql2[1024];
+    int ret;
+    int rs_srid = 0;
+    int rs_srs_wkt = 0;
+    const char *name;
+    char srsWkt[8192];
+    char dummy[8192];
+    FILE *out;
+
+/* step I: retrieving the SRID */
+    sprintf (sql,
+	     "SELECT srid FROM geometry_columns WHERE f_table_name = '%s' AND f_geometry_column = '%s'",
+	     table, column);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    for (i = 1; i <= rows; i++)
+      {
+	  srid = atoi (results[(i * columns) + 0]);
+      }
+    sqlite3_free_table (results);
+    if (srid < 0)
+      {
+	  /* srid still undefined, so we'll read VIEWS_GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT srid FROM views_geometry_columns ");
+	  strcat (sql,
+		  "JOIN geometry_columns USING (f_table_name, f_geometry_column) ");
+	  sprintf (sql2, "WHERE view_name = '%s' AND view_geometry = '%s'",
+		   table, column);
+	  strcat (sql, sql2);
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
+				 &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
+			 errMsg);
+		sqlite3_free (errMsg);
+		return;
+	    }
+	  for (i = 1; i <= rows; i++)
+	    {
+		srid = atoi (results[(i * columns) + 0]);
+	    }
+	  sqlite3_free_table (results);
+      }
+    if (srid < 0)
+	return;
+
+/* step II: checking if the SRS_WKT column actually exists */
+    ret =
+	sqlite3_get_table (sqlite, "PRAGMA table_info(spatial_ref_sys)",
+			   &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "srid") == 0)
+		    rs_srid = 1;
+		if (strcasecmp (name, "auth_name") == 0)
+		    rs_srs_wkt = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rs_srid == 0 || rs_srs_wkt == 0)
+	return;
+
+/* step III: fetching WKT SRS */
+    *srsWkt = '\0';
+    sprintf (sql,
+	     "SELECT srs_wkt FROM spatial_ref_sys WHERE srid = %d AND srs_wkt IS NOT NULL",
+	     srid);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (srsWkt, results[(i * columns) + 0]);
+	    }
+      }
+    sqlite3_free_table (results);
+    if (strlen (srsWkt) == 0)
+	return;
+
+/* step IV: generating the .PRJ file */
+    sprintf (dummy, "%s.prj", path);
+    out = fopen (dummy, "wb");
+    if (!out)
+	goto no_file;
+    fprintf (out, "%s\r\n", srsWkt);
+    fclose (out);
+  no_file:
+    return;
+}
+
+static void
+shp_double_quoted_sql (char *buf)
+{
+/* well-formatting a string to be used as an SQL name */
+    char tmp[1024];
+    char *in = tmp;
+    char *out = buf;
+    strcpy (tmp, buf);
+    *out++ = '"';
+    while (*in != '\0')
+      {
+	  if (*in == '"')
+	      *out++ = '"';
+	  *out++ = *in++;
+      }
+    *out++ = '"';
+    *out = '\0';
+}
+
+#ifndef OMIT_ICONV		/* ICONV enabled: supporting SHAPEFILE and DBF */
+
+SPATIALITE_DECLARE int
+dump_shapefile (sqlite3 * sqlite, char *table, char *column, char *shp_path,
+		char *charset, char *geom_type, int verbose, int *xrows,
+		char *err_msg)
+{
+/* SHAPEFILE dump */
+    char sql[1024];
+    char dummy[1024];
+    int shape = -1;
+    int len;
+    int ret;
+    char *errMsg = NULL;
+    sqlite3_stmt *stmt;
+    int row1 = 0;
+    int n_cols = 0;
+    int offset = 0;
+    int i;
+    int rows = 0;
+    int type;
+    const void *blob_value;
+    gaiaShapefilePtr shp = NULL;
+    gaiaDbfListPtr dbf_export_list = NULL;
+    gaiaDbfListPtr dbf_list = NULL;
+    gaiaDbfListPtr dbf_write;
+    gaiaDbfFieldPtr dbf_field;
+    int *max_length = NULL;
+    int *sql_type = NULL;
+    if (geom_type)
+      {
+	  /* normalizing required geometry type */
+	  if (strcasecmp ((char *) geom_type, "POINT") == 0)
+	      shape = GAIA_POINT;
+	  if (strcasecmp ((char *) geom_type, "LINESTRING") == 0)
+	      shape = GAIA_LINESTRING;
+	  if (strcasecmp ((char *) geom_type, "POLYGON") == 0)
+	      shape = GAIA_POLYGON;
+	  if (strcasecmp ((char *) geom_type, "MULTIPOINT") == 0)
+	      shape = GAIA_POINT;
+      }
+    if (shape < 0)
+      {
+	  /* preparing SQL statement [no type was explicitly required, so we'll read GEOMETRY_COLUMNS */
+	  char **results;
+	  int rows;
+	  int columns;
+	  int i;
+	  char metatype[256];
+	  char metadims[256];
+	  sprintf (sql,
+		   "SELECT type, coord_dimension FROM geometry_columns WHERE f_table_name = '%s' AND f_geometry_column = '%s'",
+		   table, column);
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
+				 &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		else
+		    sprintf (err_msg, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  *metatype = '\0';
+	  *metadims = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (metatype, results[(i * columns) + 0]);
+		strcpy (metadims, results[(i * columns) + 1]);
+	    }
+	  sqlite3_free_table (results);
+	  if (strcasecmp (metatype, "POINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POINTZM;
+		else
+		    shape = GAIA_POINT;
+	    }
+	  if (strcasecmp (metatype, "MULTIPOINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_MULTIPOINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_MULTIPOINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_MULTIPOINTZM;
+		else
+		    shape = GAIA_MULTIPOINT;
+	    }
+	  if (strcasecmp (metatype, "LINESTRING") == 0
+	      || strcasecmp (metatype, "MULTILINESTRING") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_LINESTRINGZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_LINESTRINGM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_LINESTRINGZM;
+		else
+		    shape = GAIA_LINESTRING;
+	    }
+	  if (strcasecmp (metatype, "POLYGON") == 0
+	      || strcasecmp (metatype, "MULTIPOLYGON") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POLYGONZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POLYGONM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POLYGONZM;
+		else
+		    shape = GAIA_POLYGON;
+	    }
+      }
+    if (shape < 0)
+      {
+	  /* preparing SQL statement [type still undefined, so we'll read VIEWS_GEOMETRY_COLUMNS */
+	  char **results;
+	  int rows;
+	  int columns;
+	  int i;
+	  char metatype[256];
+	  char metadims[256];
+	  char sql2[1024];
+	  strcpy (sql,
+		  "SELECT type, coord_dimension FROM views_geometry_columns ");
+	  strcat (sql,
+		  "JOIN geometry_columns USING (f_table_name, f_geometry_column) ");
+	  sprintf (sql2, "WHERE view_name = '%s' AND view_geometry = '%s'",
+		   table, column);
+	  strcat (sql, sql2);
+	  ret =
+	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
+				 &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		else
+		    sprintf (err_msg, "dump shapefile MetaData error: <%s>\n",
+			     errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  *metatype = '\0';
+	  *metadims = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (metatype, results[(i * columns) + 0]);
+		strcpy (metadims, results[(i * columns) + 1]);
+	    }
+	  sqlite3_free_table (results);
+	  if (strcasecmp (metatype, "POINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POINTZM;
+		else
+		    shape = GAIA_POINT;
+	    }
+	  if (strcasecmp (metatype, "MULTIPOINT") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_MULTIPOINTZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_MULTIPOINTM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_MULTIPOINTZM;
+		else
+		    shape = GAIA_MULTIPOINT;
+	    }
+	  if (strcasecmp (metatype, "LINESTRING") == 0
+	      || strcasecmp (metatype, "MULTILINESTRING") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_LINESTRINGZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_LINESTRINGM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_LINESTRINGZM;
+		else
+		    shape = GAIA_LINESTRING;
+	    }
+	  if (strcasecmp (metatype, "POLYGON") == 0
+	      || strcasecmp (metatype, "MULTIPOLYGON") == 0)
+	    {
+		if (strcasecmp (metadims, "XYZ") == 0
+		    || strcmp (metadims, "3") == 0)
+		    shape = GAIA_POLYGONZ;
+		else if (strcasecmp (metadims, "XYM") == 0)
+		    shape = GAIA_POLYGONM;
+		else if (strcasecmp (metadims, "XYZM") == 0)
+		    shape = GAIA_POLYGONZM;
+		else
+		    shape = GAIA_POLYGON;
+	    }
+      }
+    if (shape < 0)
+      {
+	  if (!err_msg)
+	      fprintf (stderr,
+		       "Unable to detect GeometryType for \"%s\".\"%s\" ... sorry\n",
+		       table, column);
+	  else
+	      sprintf (err_msg,
+		       "Unable to detect GeometryType for \"%s\".\"%s\" ... sorry\n",
+		       table, column);
+	  return 0;
+      }
+    if (verbose)
+	fprintf (stderr,
+		 "========\nDumping SQLite table '%s' into shapefile at '%s'\n",
+		 table, shp_path);
+    /* preparing SQL statement */
+    sprintf (sql, "SELECT * FROM \"%s\" WHERE GeometryAliasType(\"%s\") = ",
+	     table, column);
+    if (shape == GAIA_LINESTRING || shape == GAIA_LINESTRINGZ
+	|| shape == GAIA_LINESTRINGM || shape == GAIA_LINESTRINGZM)
+      {
+	  strcat (sql, "'LINESTRING' OR GeometryAliasType(\"");
+	  strcat (sql, (char *) column);
+	  strcat (sql, "\") = 'MULTILINESTRING'");
+      }
+    else if (shape == GAIA_POLYGON || shape == GAIA_POLYGONZ
+	     || shape == GAIA_POLYGONM || shape == GAIA_POLYGONZM)
+      {
+	  strcat (sql, "'POLYGON' OR GeometryAliasType(\"");
+	  strcat (sql, (char *) column);
+	  strcat (sql, "\") = 'MULTIPOLYGON'");
+      }
+    else if (shape == GAIA_MULTIPOINT || shape == GAIA_MULTIPOINTZ
+	     || shape == GAIA_MULTIPOINTM || shape == GAIA_MULTIPOINTZM)
+      {
+	  strcat (sql, "'POINT' OR GeometryAliasType(\"");
+	  strcat (sql, (char *) column);
+	  strcat (sql, "\") = 'MULTIPOINT'");
+      }
+    else
+	strcat (sql, "'POINT'");
+/* fetching anyway NULL Geometries */
+    strcat (sql, " OR \"");
+    strcat (sql, (char *) column);
+    strcat (sql, "\" IS NULL");
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+    while (1)
+      {
+	  /* Pass I - scrolling the result set to compute real DBF attributes' sizes and types */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* processing a result set row */
+		row1++;
+		if (n_cols == 0)
+		  {
+		      /* this one is the first row, so we are going to prepare the DBF Fields list */
+		      n_cols = sqlite3_column_count (stmt);
+		      dbf_export_list = gaiaAllocDbfList ();
+		      max_length = malloc (sizeof (int) * n_cols);
+		      sql_type = malloc (sizeof (int) * n_cols);
+		      for (i = 0; i < n_cols; i++)
+			{
+			    /* initializes the DBF export fields */
+			    strcpy (dummy, sqlite3_column_name (stmt, i));
+			    gaiaAddDbfField (dbf_export_list, dummy, '\0', 0, 0,
+					     0);
+			    max_length[i] = 0;
+			    sql_type[i] = SQLITE_NULL;
+			}
+		  }
+		for (i = 0; i < n_cols; i++)
+		  {
+		      /* update the DBF export fields analyzing fetched data */
+		      type = sqlite3_column_type (stmt, i);
+		      if (type == SQLITE_NULL || type == SQLITE_BLOB)
+			  continue;
+		      if (type == SQLITE_TEXT)
+			{
+			    len = sqlite3_column_bytes (stmt, i);
+			    sql_type[i] = SQLITE_TEXT;
+			    if (len > max_length[i])
+				max_length[i] = len;
+			}
+		      else if (type == SQLITE_FLOAT
+			       && sql_type[i] != SQLITE_TEXT)
+			  sql_type[i] = SQLITE_FLOAT;	/* promoting a numeric column to be DOUBLE */
+		      else if (type == SQLITE_INTEGER &&
+			       (sql_type[i] == SQLITE_NULL
+				|| sql_type[i] == SQLITE_INTEGER))
+			  sql_type[i] = SQLITE_INTEGER;	/* promoting a null column to be INTEGER */
+		      if (type == SQLITE_INTEGER && max_length[i] < 18)
+			  max_length[i] = 18;
+		      if (type == SQLITE_FLOAT && max_length[i] < 24)
+			  max_length[i] = 24;
+		  }
+	    }
+	  else
+	      goto sql_error;
+      }
+    if (!row1)
+	goto empty_result_set;
+    i = 0;
+    offset = 0;
+    dbf_list = gaiaAllocDbfList ();
+    dbf_field = dbf_export_list->First;
+    while (dbf_field)
+      {
+	  /* preparing the final DBF attribute list */
+	  if (sql_type[i] == SQLITE_NULL)
+	    {
+		i++;
+		dbf_field = dbf_field->Next;
+		continue;
+	    }
+	  if (sql_type[i] == SQLITE_TEXT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'C', offset,
+				 max_length[i], 0);
+		offset += max_length[i];
+	    }
+	  if (sql_type[i] == SQLITE_FLOAT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 19, 6);
+		offset += 19;
+	    }
+	  if (sql_type[i] == SQLITE_INTEGER)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 18, 0);
+		offset += 18;
+	    }
+	  i++;
+	  dbf_field = dbf_field->Next;
+      }
+    free (max_length);
+    free (sql_type);
+    gaiaFreeDbfList (dbf_export_list);
+/* resetting SQLite query */
+    if (verbose)
+	fprintf (stderr, "\n%s;\n", sql);
+    ret = sqlite3_reset (stmt);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+/* trying to open shapefile files */
+    shp = gaiaAllocShapefile ();
+    gaiaOpenShpWrite (shp, shp_path, shape, dbf_list, "UTF-8", charset);
+    if (!(shp->Valid))
+	goto no_file;
+/* trying to export the .PRJ file */
+    output_prj_file (sqlite, shp_path, table, column);
+    while (1)
+      {
+	  /* Pass II - scrolling the result set to dump data into shapefile */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		rows++;
+		dbf_write = gaiaCloneDbfEntity (dbf_list);
+		for (i = 0; i < n_cols; i++)
+		  {
+		      if (strcasecmp
+			  ((char *) column,
+			   (char *) sqlite3_column_name (stmt, i)) == 0)
+			{
+			    /* this one is the internal BLOB encoded GEOMETRY to be exported */
+			    if (sqlite3_column_type (stmt, i) != SQLITE_BLOB)
+			      {
+				  /* this one is a NULL Geometry */
+				  dbf_write->Geometry = NULL;
+			      }
+			    else
+			      {
+				  blob_value = sqlite3_column_blob (stmt, i);
+				  len = sqlite3_column_bytes (stmt, i);
+				  dbf_write->Geometry =
+				      gaiaFromSpatiaLiteBlobWkb (blob_value,
+								 len);
+			      }
+			}
+		      strcpy (dummy, sqlite3_column_name (stmt, i));
+		      dbf_field = getDbfField (dbf_write, dummy);
+		      if (!dbf_field)
+			  continue;
+		      if (sqlite3_column_type (stmt, i) == SQLITE_NULL)
+			{
+			    /* handling NULL values */
+			    gaiaSetNullValue (dbf_field);
+			}
+		      else
+			{
+			    switch (dbf_field->Type)
+			      {
+			      case 'N':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_INTEGER)
+				      gaiaSetIntValue (dbf_field,
+						       sqlite3_column_int64
+						       (stmt, i));
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				      gaiaSetDoubleValue (dbf_field,
+							  sqlite3_column_double
+							  (stmt, i));
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      case 'C':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_TEXT)
+				    {
+					strcpy (dummy,
+						(char *)
+						sqlite3_column_text (stmt, i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_INTEGER)
+				    {
+#if defined(_WIN32) || defined(__MINGW32__)
+					/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+					sprintf (dummy, "%I64d",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#else
+					sprintf (dummy, "%lld",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#endif
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				    {
+					sprintf (dummy, "%1.6f",
+						 sqlite3_column_double (stmt,
+									i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      };
+			}
+		  }
+		if (!gaiaWriteShpEntity (shp, dbf_write))
+		    fprintf (stderr, "shapefile write error\n");
+		gaiaFreeDbfList (dbf_write);
+	    }
+	  else
+	      goto sql_error;
+      }
+    sqlite3_finalize (stmt);
+    gaiaFlushShpHeaders (shp);
+    gaiaFreeShapefile (shp);
+    if (verbose)
+	fprintf (stderr, "\nExported %d rows into SHAPEFILE\n========\n", rows);
+    if (xrows)
+	*xrows = rows;
+    if (err_msg)
+	sprintf (err_msg, "Exported %d rows into SHAPEFILE", rows);
+    return 1;
+  sql_error:
+/* some SQL error occurred */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (shp)
+	gaiaFreeShapefile (shp);
+    if (!err_msg)
+	fprintf (stderr, "SELECT failed: %s", sqlite3_errmsg (sqlite));
+    else
+	sprintf (err_msg, "SELECT failed: %s", sqlite3_errmsg (sqlite));
+    return 0;
+  no_file:
+/* shapefile can't be created/opened */
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (shp)
+	gaiaFreeShapefile (shp);
+    if (!err_msg)
+	fprintf (stderr, "ERROR: unable to open '%s' for writing", shp_path);
+    else
+	sprintf (err_msg, "ERROR: unable to open '%s' for writing", shp_path);
+    return 0;
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (shp)
+	gaiaFreeShapefile (shp);
+    if (!err_msg)
+	fprintf (stderr,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...");
+    else
+	sprintf (err_msg,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...");
+    return 0;
+}
+
+SPATIALITE_DECLARE int
+load_dbf (sqlite3 * sqlite, char *dbf_path, char *table, char *charset,
+	  int verbose, int *rows, char *err_msg)
+{
+    sqlite3_stmt *stmt;
+    int ret;
+    char *errMsg = NULL;
+    char sql[65536];
+    char dummyName[4096];
+    int already_exists = 0;
+    int sqlError = 0;
+    gaiaDbfPtr dbf = NULL;
+    gaiaDbfFieldPtr dbf_field;
+    int cnt;
+    int col_cnt;
+    int seed;
+    int len;
+    int dup;
+    int idup;
+    int current_row;
+    char **col_name = NULL;
+    int deleted;
+/* checking if TABLE already exists */
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     table);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      already_exists = 1;
+	  else
+	    {
+		fprintf (stderr, "load DBF error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (already_exists)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: table '%s' already exists\n",
+		       table);
+	  else
+	      sprintf (err_msg, "load DBF error: table '%s' already exists\n",
+		       table);
+	  return 0;
+      }
+    dbf = gaiaAllocDbf ();
+    gaiaOpenDbfRead (dbf, dbf_path, charset, "UTF-8");
+    if (!(dbf->Valid))
+      {
+	  if (!err_msg)
+	    {
+		fprintf (stderr, "load DBF error: cannot open '%s'\n",
+			 dbf_path);
+		if (dbf->LastError)
+		    fprintf (stderr, "\tcause: %s\n", dbf->LastError);
+	    }
+	  else
+	    {
+		char extra[512];
+		*extra = '\0';
+		if (dbf->LastError)
+		    sprintf (extra, "\n\tcause: %s", dbf->LastError);
+		sprintf (err_msg, "load DBF error: cannot open '%s'%s",
+			 dbf_path, extra);
+	    }
+	  gaiaFreeDbf (dbf);
+	  return 0;
+      }
+/* checking for duplicate / illegal column names and antialising them */
+    col_cnt = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* counting DBF fields */
+	  col_cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    col_name = malloc (sizeof (char *) * col_cnt);
+    cnt = 0;
+    seed = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* preparing column names */
+	  strcpy (dummyName, dbf_field->Name);
+	  dup = 0;
+	  for (idup = 0; idup < cnt; idup++)
+	    {
+		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
+		    dup = 1;
+	    }
+	  if (strcasecmp (dummyName, "PK_UID") == 0)
+	      dup = 1;
+	  if (dup)
+	      sprintf (dummyName, "COL_%d", seed++);
+	  len = strlen (dummyName);
+	  *(col_name + cnt) = malloc (len + 1);
+	  strcpy (*(col_name + cnt), dummyName);
+	  cnt++;
+	  dbf_field = dbf_field->Next;
+      }
+    if (verbose)
+	fprintf (stderr,
+		 "========\nLoading DBF at '%s' into SQLite table '%s'\n",
+		 dbf_path, table);
+/* starting a transaction */
+    if (verbose)
+	fprintf (stderr, "\nBEGIN;\n");
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* creating the Table */
+    sprintf (sql, "CREATE TABLE %s", table);
+    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
+    cnt = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  strcat (sql, ",\n\"");
+	  strcat (sql, *(col_name + cnt));
+	  cnt++;
+	  switch (dbf_field->Type)
+	    {
+	    case 'C':
+		strcat (sql, "\" TEXT");
+		break;
+	    case 'N':
+		fflush (stderr);
+		if (dbf_field->Decimals)
+		    strcat (sql, "\" DOUBLE");
+		else
+		  {
+		      if (dbf_field->Length <= 18)
+			  strcat (sql, "\" INTEGER");
+		      else
+			  strcat (sql, "\" DOUBLE");
+		  }
+		break;
+	    case 'D':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'F':
+		strcat (sql, "\" DOUBLE");
+		break;
+	    case 'L':
+		strcat (sql, "\" INTEGER");
+		break;
+	    };
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ")");
+    if (verbose)
+	fprintf (stderr, "%s;\n", sql);
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    /* preparing the INSERT INTO parametrerized statement */
+    sprintf (sql, "INSERT INTO %s (PK_UID", table);
+    cnt = 0;
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* columns corresponding to some DBF attribute */
+	  strcat (sql, ",\"");
+	  strcat (sql, *(col_name + cnt++));
+	  strcat (sql, "\"");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ")\nVALUES (?");
+    dbf_field = dbf->Dbf->First;
+    while (dbf_field)
+      {
+	  /* column values */
+	  strcat (sql, ", ?");
+	  dbf_field = dbf_field->Next;
+      }
+    strcat (sql, ")");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load DBF error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    current_row = 0;
+    while (1)
+      {
+	  /* inserting rows from DBF */
+	  ret = gaiaReadDbfEntity (dbf, current_row, &deleted);
+	  if (!ret)
+	    {
+		if (!(dbf->LastError))	/* normal DBF EOF */
+		    break;
+		if (!err_msg)
+		    fprintf (stderr, "%s\n", dbf->LastError);
+		else
+		    sprintf (err_msg, "%s\n", dbf->LastError);
+		sqlError = 1;
+		goto clean_up;
+	    }
+	  current_row++;
+	  if (deleted)
+	    {
+		/* skipping DBF deleted row */
+		continue;
+	    }
+	  /* binding query params */
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  sqlite3_bind_int (stmt, 1, current_row);
+	  cnt = 0;
+	  dbf_field = dbf->Dbf->First;
+	  while (dbf_field)
+	    {
+		/* column values */
+		if (!(dbf_field->Value))
+		    sqlite3_bind_null (stmt, cnt + 2);
+		else
+		  {
+		      switch (dbf_field->Value->Type)
+			{
+			case GAIA_INT_VALUE:
+			    sqlite3_bind_int64 (stmt, cnt + 2,
+						dbf_field->Value->IntValue);
+			    break;
+			case GAIA_DOUBLE_VALUE:
+			    sqlite3_bind_double (stmt, cnt + 2,
+						 dbf_field->Value->DblValue);
+			    break;
+			case GAIA_TEXT_VALUE:
+			    sqlite3_bind_text (stmt, cnt + 2,
+					       dbf_field->Value->TxtValue,
+					       strlen (dbf_field->
+						       Value->TxtValue),
+					       SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_bind_null (stmt, cnt + 2);
+			    break;
+			}
+		  }
+		cnt++;
+		dbf_field = dbf_field->Next;
+	    }
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	      ;
+	  else
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load DBF error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		else
+		    sprintf (err_msg, "load DBF error: <%s>\n",
+			     sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		sqlError = 1;
+		goto clean_up;
+	    }
+      }
+    sqlite3_finalize (stmt);
+  clean_up:
+    gaiaFreeDbf (dbf);
+    if (col_name)
+      {
+	  /* releasing memory allocation for column names */
+	  for (cnt = 0; cnt < col_cnt; cnt++)
+	      free (*(col_name + cnt));
+	  free (col_name);
+      }
+    if (sqlError)
+      {
+	  /* some error occurred - ROLLBACK */
+	  if (verbose)
+	      fprintf (stderr, "ROLLBACK;\n");
+	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+	    };
+	  if (rows)
+	      *rows = current_row;
+	  return 0;
+      }
+    else
+      {
+	  /* ok - confirming pending transaction - COMMIT */
+	  if (verbose)
+	      fprintf (stderr, "COMMIT;\n");
+	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load DBF error: <%s>\n", errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  if (rows)
+	      *rows = current_row;
+	  if (verbose)
+	      fprintf (stderr,
+		       "\nInserted %d rows into '%s' from DBF\n========\n",
+		       current_row, table);
+	  if (err_msg)
+	      sprintf (err_msg, "Inserted %d rows into '%s' from DBF",
+		       current_row, table);
+	  return 1;
+      }
+}
+
+SPATIALITE_DECLARE int
+dump_dbf (sqlite3 * sqlite, char *table, char *dbf_path, char *charset,
+	  char *err_msg)
+{
+/* DBF dump */
+    int rows;
+    int i;
+    char sql[4096];
+    char xtable[4096];
+    sqlite3_stmt *stmt;
+    int row1 = 0;
+    int n_cols = 0;
+    int offset = 0;
+    int type;
+    gaiaDbfPtr dbf = NULL;
+    gaiaDbfListPtr dbf_export_list = NULL;
+    gaiaDbfListPtr dbf_list = NULL;
+    gaiaDbfListPtr dbf_write;
+    gaiaDbfFieldPtr dbf_field;
+    int *max_length = NULL;
+    int *sql_type = NULL;
+    char dummy[1024];
+    int len;
+    int ret;
+/*
+/ preparing SQL statement 
+*/
+    strcpy (xtable, table);
+    shp_double_quoted_sql (xtable);
+    sprintf (sql, "SELECT * FROM %s", xtable);
+/*
+/ compiling SQL prepared statement 
+*/
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+    rows = 0;
+    while (1)
+      {
+	  /*
+	     / Pass I - scrolling the result set to compute real DBF attributes' sizes and types 
+	   */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* processing a result set row */
+		row1++;
+		if (n_cols == 0)
+		  {
+		      /* this one is the first row, so we are going to prepare the DBF Fields list */
+		      n_cols = sqlite3_column_count (stmt);
+		      dbf_export_list = gaiaAllocDbfList ();
+		      max_length = (int *) malloc (sizeof (int) * n_cols);
+		      sql_type = (int *) malloc (sizeof (int) * n_cols);
+		      for (i = 0; i < n_cols; i++)
+			{
+			    /* initializes the DBF export fields */
+			    strcpy (dummy, sqlite3_column_name (stmt, i));
+			    gaiaAddDbfField (dbf_export_list, dummy, '\0', 0, 0,
+					     0);
+			    max_length[i] = 0;
+			    sql_type[i] = SQLITE_NULL;
+			}
+		  }
+		for (i = 0; i < n_cols; i++)
+		  {
+		      /* update the DBF export fields analyzing fetched data */
+		      type = sqlite3_column_type (stmt, i);
+		      if (type == SQLITE_NULL || type == SQLITE_BLOB)
+			  continue;
+		      if (type == SQLITE_TEXT)
+			{
+			    len = sqlite3_column_bytes (stmt, i);
+			    sql_type[i] = SQLITE_TEXT;
+			    if (len > max_length[i])
+				max_length[i] = len;
+			}
+		      else if (type == SQLITE_FLOAT
+			       && sql_type[i] != SQLITE_TEXT)
+			  sql_type[i] = SQLITE_FLOAT;	/* promoting a numeric column to be DOUBLE */
+		      else if (type == SQLITE_INTEGER
+			       && (sql_type[i] == SQLITE_NULL
+				   || sql_type[i] == SQLITE_INTEGER))
+			  sql_type[i] = SQLITE_INTEGER;	/* promoting a null column to be INTEGER */
+		      if (type == SQLITE_INTEGER && max_length[i] < 18)
+			  max_length[i] = 18;
+		      if (type == SQLITE_FLOAT && max_length[i] < 24)
+			  max_length[i] = 24;
+		  }
+	    }
+	  else
+	      goto sql_error;
+      }
+    if (!row1)
+	goto empty_result_set;
+    i = 0;
+    offset = 0;
+    dbf_list = gaiaAllocDbfList ();
+    dbf_field = dbf_export_list->First;
+    while (dbf_field)
+      {
+	  /* preparing the final DBF attribute list */
+	  if (sql_type[i] == SQLITE_NULL || sql_type[i] == SQLITE_BLOB)
+	    {
+		i++;
+		dbf_field = dbf_field->Next;
+		continue;
+	    }
+	  if (sql_type[i] == SQLITE_TEXT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'C', offset,
+				 max_length[i], 0);
+		offset += max_length[i];
+	    }
+	  if (sql_type[i] == SQLITE_FLOAT)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 19, 6);
+		offset += 19;
+	    }
+	  if (sql_type[i] == SQLITE_INTEGER)
+	    {
+		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 18, 0);
+		offset += 18;
+	    }
+	  i++;
+	  dbf_field = dbf_field->Next;
+      }
+    free (max_length);
+    free (sql_type);
+    gaiaFreeDbfList (dbf_export_list);
+    dbf_export_list = NULL;
+/* resetting SQLite query */
+    ret = sqlite3_reset (stmt);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+/* trying to open the DBF file */
+    dbf = gaiaAllocDbf ();
+/* xfering export-list ownership */
+    dbf->Dbf = dbf_list;
+    dbf_list = NULL;
+    gaiaOpenDbfWrite (dbf, dbf_path, "UTF-8", charset);
+    if (!(dbf->Valid))
+	goto no_file;
+    while (1)
+      {
+	  /* Pass II - scrolling the result set to dump data into DBF */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		rows++;
+		dbf_write = gaiaCloneDbfEntity (dbf->Dbf);
+		for (i = 0; i < n_cols; i++)
+		  {
+		      strcpy (dummy, sqlite3_column_name (stmt, i));
+		      dbf_field = getDbfField (dbf_write, dummy);
+		      if (!dbf_field)
+			  continue;
+		      if (sqlite3_column_type (stmt, i) == SQLITE_NULL
+			  || sqlite3_column_type (stmt, i) == SQLITE_BLOB)
+			{
+			    /* handling NULL values */
+			    gaiaSetNullValue (dbf_field);
+			}
+		      else
+			{
+			    switch (dbf_field->Type)
+			      {
+			      case 'N':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_INTEGER)
+				      gaiaSetIntValue (dbf_field,
+						       sqlite3_column_int64
+						       (stmt, i));
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				      gaiaSetDoubleValue (dbf_field,
+							  sqlite3_column_double
+							  (stmt, i));
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      case 'C':
+				  if (sqlite3_column_type (stmt, i) ==
+				      SQLITE_TEXT)
+				    {
+					strcpy (dummy,
+						(char *)
+						sqlite3_column_text (stmt, i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_INTEGER)
+				    {
+#if defined(_WIN32) || defined(__MINGW32__)
+					/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+					sprintf (dummy, "%I64d",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#else
+					sprintf (dummy, "%lld",
+						 sqlite3_column_int64 (stmt,
+								       i));
+#endif
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else if (sqlite3_column_type (stmt, i) ==
+					   SQLITE_FLOAT)
+				    {
+					sprintf (dummy, "%1.6f",
+						 sqlite3_column_double (stmt,
+									i));
+					gaiaSetStrValue (dbf_field, dummy);
+				    }
+				  else
+				      gaiaSetNullValue (dbf_field);
+				  break;
+			      };
+			}
+		  }
+		if (!gaiaWriteDbfEntity (dbf, dbf_write))
+		    fprintf (stderr, "DBF write error\n");
+		gaiaFreeDbfList (dbf_write);
+	    }
+	  else
+	      goto sql_error;
+      }
+    sqlite3_finalize (stmt);
+    gaiaFlushDbfHeader (dbf);
+    gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr, "Exported %d rows into the DBF file\n", rows);
+    else
+	sprintf (err_msg, "Exported %d rows into the DBF file\n", rows);
+    return 1;
+  sql_error:
+/* some SQL error occurred */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (dbf)
+	gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr, "dump DBF file error: %s\n", sqlite3_errmsg (sqlite));
+    else
+	sprintf (err_msg, "dump DBF file error: %s\n", sqlite3_errmsg (sqlite));
+    return 0;
+  no_file:
+/* DBF can't be created/opened */
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (dbf)
+	gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr, "ERROR: unable to open '%s' for writing\n", dbf_path);
+    else
+	sprintf (err_msg, "ERROR: unable to open '%s' for writing\n", dbf_path);
+    return 0;
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    sqlite3_finalize (stmt);
+    if (dbf_export_list)
+	gaiaFreeDbfList (dbf_export_list);
+    if (dbf_list)
+	gaiaFreeDbfList (dbf_list);
+    if (dbf)
+	gaiaFreeDbf (dbf);
+    if (!err_msg)
+	fprintf (stderr,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...\n");
+    else
+	sprintf (err_msg,
+		 "The SQL SELECT returned an empty result set ... there is nothing to export ...\n");
+    return 0;
+}
+
+#endif /* end ICONV (SHP and DBF) */
+
+SPATIALITE_DECLARE int
+is_kml_constant (sqlite3 * sqlite, char *table, char *column)
+{
+/* checking a possible column name for KML dump */
+    char sql[1024];
+    int ret;
+    int k = 1;
+    const char *name;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+
+    sprintf (sql, "PRAGMA table_info(%s)", table);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+	return 1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, column) == 0)
+		    k = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+    return k;
+}
+
+SPATIALITE_DECLARE int
+dump_kml (sqlite3 * sqlite, char *table, char *geom_col, char *kml_path,
+	  char *name_col, char *desc_col, int precision)
+{
+/* dumping a  geometry table as KML */
+    char sql[4096];
+    char xname[1024];
+    char xdesc[1024];
+    sqlite3_stmt *stmt = NULL;
+    FILE *out = NULL;
+    int ret;
+    int rows = 0;
+    int is_const = 1;
+
+/* opening/creating the KML file */
+    out = fopen (kml_path, "wb");
+    if (!out)
+	goto no_file;
+
+/* preparing SQL statement */
+    if (name_col == NULL)
+	strcpy (xname, "'name'");
+    else
+      {
+	  is_const = is_kml_constant (sqlite, table, name_col);
+	  if (is_const)
+	      sprintf (xname, "'%s'", name_col);
+	  else
+	      strcpy (xname, name_col);
+      }
+    if (desc_col == NULL)
+	strcpy (xdesc, "'description'");
+    else
+      {
+	  is_const = is_kml_constant (sqlite, table, desc_col);
+	  if (is_const)
+	      sprintf (xdesc, "'%s'", desc_col);
+	  else
+	      strcpy (xdesc, desc_col);
+      }
+    sprintf (sql, "SELECT AsKML(%s, %s, %s, %d) FROM %s ", xname, xdesc,
+	     geom_col, precision, table);
+/* excluding NULL Geometries */
+    strcat (sql, "WHERE ");
+    strcat (sql, geom_col);
+    strcat (sql, " IS NOT NULL");
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* processing a result set row */
+		if (rows == 0)
+		  {
+		      fprintf (out,
+			       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
+		      fprintf (out,
+			       "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\r\n");
+		      fprintf (out, "<Document>\r\n");
+		  }
+		rows++;
+		fprintf (out, "\t%s\r\n", sqlite3_column_text (stmt, 0));
+	    }
+	  else
+	      goto sql_error;
+      }
+    if (!rows)
+	goto empty_result_set;
+
+
+    fprintf (out, "</Document>\r\n");
+    fprintf (out, "</kml>\r\n");
+    sqlite3_finalize (stmt);
+    fclose (out);
+    return 1;
+
+  sql_error:
+/* some SQL error occurred */
+    if (stmt)
+	sqlite3_finalize (stmt);
+    if (out)
+	fclose (out);
+    fprintf (stderr, "Dump KML error: %s\n", sqlite3_errmsg (sqlite));
+    return 0;
+  no_file:
+/* KML file can't be created/opened */
+    if (stmt)
+	sqlite3_finalize (stmt);
+    if (out)
+	fclose (out);
+    fprintf (stderr, "ERROR: unable to open '%s' for writing\n", kml_path);
+    return 0;
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    if (stmt)
+	sqlite3_finalize (stmt);
+    if (out)
+	fclose (out);
+    fprintf (stderr,
+	     "The SQL SELECT returned an empty result set\n... there is nothing to export ...\n");
+    return 0;
+}
+
+static int
+is_table (sqlite3 * sqlite, const char *table)
+{
+/* check if this one really is a TABLE */
+    char sql[8192];
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    char *errMsg = NULL;
+    int ok = 0;
+
+    strcpy (sql, "SELECT tbl_name FROM sqlite_master ");
+    strcat (sql, "WHERE type = 'table' AND tbl_name LIKE '");
+    strcat (sql, table);
+    strcat (sql, "'");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return ok;
+      }
+    if (rows < 1)
+	;
+    else
+	ok = 1;
+    sqlite3_free_table (results);
+    return ok;
+}
+
+SPATIALITE_DECLARE void
+check_duplicated_rows (sqlite3 * sqlite, char *table, int *dupl_count)
+{
+/* Checking a Table for Duplicate rows */
+    char sql[8192];
+    char col_list[4196];
+    int first = 1;
+    char xname[1024];
+    int pk;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+    sqlite3_stmt *stmt = NULL;
+
+    *dupl_count = 0;
+
+    if (is_table (sqlite, table) == 0)
+      {
+	  fprintf (stderr, ".chkdupl %s: no such table\n", table);
+	  return;
+      }
+/* extracting the column names (excluding any Primary Key) */
+    sprintf (sql, "PRAGMA table_info(%s)", table);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  *col_list = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (xname, results[(i * columns) + 1]);
+		pk = atoi (results[(i * columns) + 5]);
+		if (!pk)
+		  {
+		      if (first)
+			  first = 0;
+		      else
+			  strcat (col_list, ", ");
+		      shp_double_quoted_sql (xname);
+		      strcat (col_list, xname);
+		  }
+	    }
+      }
+    sqlite3_free_table (results);
+    /* preparing the SQL statement */
+    strcpy (sql, "SELECT Count(*) AS \"[dupl-count]\", ");
+    strcat (sql, col_list);
+    strcat (sql, "\nFROM ");
+    strcat (sql, table);
+    strcat (sql, "\nGROUP BY ");
+    strcat (sql, col_list);
+    strcat (sql, "\nHAVING \"[dupl-count]\" > 1");
+    strcat (sql, "\nORDER BY \"[dupl-count]\" DESC");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  return;
+      }
+    while (1)
+      {
+	  /* fetching the result set rows */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* fetching a row */
+		*dupl_count += sqlite3_column_int (stmt, 0) - 1;
+	    }
+	  else
+	    {
+		fprintf (stderr, "SQL error: %s", sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		return;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (*dupl_count)
+	fprintf (stderr, "%d duplicated rows found !!!\n", *dupl_count);
+    else
+	fprintf (stderr, "No duplicated rows have been identified\n");
+}
+
+static int
+do_delete_duplicates2 (sqlite3 * sqlite, sqlite3_stmt * stmt1,
+		       struct dupl_row *value_list, int *count)
+{
+/* deleting duplicate rows [actual delete] */
+    int cnt = 0;
+    int row_no = 0;
+    char sql[8192];
+    char where[4196];
+    char condition[1024];
+    int ret;
+    sqlite3_stmt *stmt2 = NULL;
+    struct dupl_column *col;
+    int first = 1;
+    int qcnt = 0;
+    int param = 1;
+    int match;
+    int n_cols;
+    int col_no;
+
+    *count = 0;
+    reset_query_pos (value_list);
+
+/* preparing the query statement */
+    strcpy (sql, "SELECT ROWID");
+    strcpy (where, "\nWHERE ");
+    col = value_list->first;
+    while (col)
+      {
+	  if (col->type == SQLITE_BLOB)
+	    {
+		strcat (sql, ", ");
+		strcat (sql, col->name);
+		col->query_pos = qcnt++;
+	    }
+	  else if (col->type == SQLITE_NULL)
+	    {
+		if (first)
+		  {
+		      first = 0;
+		      strcpy (condition, col->name);
+		  }
+		else
+		  {
+		      strcpy (condition, " AND ");
+		      strcat (condition, col->name);
+		  }
+		strcat (condition, " IS NULL");
+		strcat (where, condition);
+	    }
+	  else
+	    {
+		if (first)
+		  {
+		      first = 0;
+		      strcpy (condition, col->name);
+		  }
+		else
+		  {
+		      strcpy (condition, " AND ");
+		      strcat (condition, col->name);
+		  }
+		strcat (condition, " = ?");
+		strcat (where, condition);
+		col->query_pos = param++;
+	    }
+	  col = col->next;
+      }
+    strcat (sql, "\nFROM ");
+    strcat (sql, value_list->table);
+    strcat (sql, where);
+
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt2, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto error;
+      }
+
+    sqlite3_reset (stmt2);
+    sqlite3_clear_bindings (stmt2);
+    col = value_list->first;
+    while (col)
+      {
+	  /* binding query params */
+	  if (col->type == SQLITE_INTEGER)
+	      sqlite3_bind_int64 (stmt2, col->query_pos, col->int_value);
+	  if (col->type == SQLITE_FLOAT)
+	      sqlite3_bind_double (stmt2, col->query_pos, col->dbl_value);
+	  if (col->type == SQLITE_TEXT)
+	      sqlite3_bind_text (stmt2, col->query_pos, col->txt_value,
+				 strlen (col->txt_value), SQLITE_STATIC);
+	  col = col->next;
+      }
+
+    while (1)
+      {
+	  /* fetching the result set rows */
+	  ret = sqlite3_step (stmt2);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* fetching a row */
+		match = 1;
+		n_cols = sqlite3_column_count (stmt2);
+		for (col_no = 1; col_no < n_cols; col_no++)
+		  {
+		      /* checking blob columns */
+		      if (sqlite3_column_type (stmt2, col_no) == SQLITE_BLOB)
+			{
+			    const void *blob =
+				sqlite3_column_blob (stmt2, col_no);
+			    int blob_size =
+				sqlite3_column_bytes (stmt2, col_no);
+			    if (check_dupl_blob
+				(value_list, col_no - 1, blob, blob_size) == 0)
+				match = 0;
+			}
+		      else
+			  match = 0;
+		      if (match == 0)
+			  break;
+		  }
+		if (match == 0)
+		    continue;
+		row_no++;
+		if (row_no > 1)
+		  {
+		      /* deleting any duplicated row except the first one */
+		      sqlite3_reset (stmt1);
+		      sqlite3_clear_bindings (stmt1);
+		      sqlite3_bind_int64 (stmt1, 1,
+					  sqlite3_column_int64 (stmt2, 0));
+		      ret = sqlite3_step (stmt1);
+		      if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+			  cnt++;
+		      else
+			{
+			    fprintf (stderr, "SQL error: %s\n",
+				     sqlite3_errmsg (sqlite));
+			    goto error;
+			}
+		  }
+	    }
+	  else
+	    {
+		fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+		goto error;
+	    }
+      }
+    if (stmt2)
+	sqlite3_finalize (stmt2);
+    *count = cnt;
+    return 1;
+
+  error:
+    if (stmt2)
+	sqlite3_finalize (stmt2);
+    *count = 0;
+
+    return 0;
+}
+
+static int
+do_delete_duplicates (sqlite3 * sqlite, const char *sql1, const char *sql2,
+		      struct dupl_row *value_list, int *count)
+{
+/* deleting duplicate rows */
+    sqlite3_stmt *stmt1 = NULL;
+    sqlite3_stmt *stmt2 = NULL;
+    int ret;
+    int xcnt;
+    int cnt = 0;
+    int n_cols;
+    int col_no;
+    char *sql_err = NULL;
+
+    *count = 0;
+
+/* the complete operation is handled as an unique SQL Transaction */
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+/* preparing the main SELECT statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql1, strlen (sql1), &stmt1, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+/* preparing the DELETE statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql2, strlen (sql2), &stmt2, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto error;
+      }
+
+    while (1)
+      {
+	  /* fetching the result set rows */
+	  ret = sqlite3_step (stmt1);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		/* fetching a row */
+		sqlite3_reset (stmt2);
+		sqlite3_clear_bindings (stmt2);
+		n_cols = sqlite3_column_count (stmt1);
+		for (col_no = 1; col_no < n_cols; col_no++)
+		  {
+		      /* saving column values */
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_INTEGER)
+			  set_int_value (value_list, col_no - 1,
+					 sqlite3_column_int64 (stmt1, col_no));
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_FLOAT)
+			  set_double_value (value_list, col_no - 1,
+					    sqlite3_column_double (stmt1,
+								   col_no));
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_TEXT)
+			{
+			    const char *xtext =
+				(const char *) sqlite3_column_text (stmt1,
+								    col_no);
+			    set_text_value (value_list, col_no - 1, xtext);
+			}
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_BLOB)
+			{
+			    const void *blob =
+				sqlite3_column_blob (stmt1, col_no);
+			    int blob_size =
+				sqlite3_column_bytes (stmt1, col_no);
+			    set_blob_value (value_list, col_no - 1, blob,
+					    blob_size);
+			}
+		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_NULL)
+			  set_null_value (value_list, col_no - 1);
+		  }
+		if (do_delete_duplicates2 (sqlite, stmt2, value_list, &xcnt))
+		    cnt += xcnt;
+		else
+		    goto error;
+	    }
+	  else
+	    {
+		fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+		goto error;
+	    }
+      }
+
+    sqlite3_finalize (stmt1);
+    sqlite3_finalize (stmt2);
+
+/* confirm the still pending Transaction */
+    ret = sqlite3_exec (sqlite, "COMMIT", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+    *count = cnt;
+    return 1;
+
+  error:
+    *count = 0;
+    if (stmt1)
+	sqlite3_finalize (stmt1);
+    if (stmt2)
+	sqlite3_finalize (stmt2);
+
+/* performing a ROLLBACK anyway */
+    ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "ROLLBACK TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+    return 0;
+}
+
+SPATIALITE_DECLARE void
+remove_duplicated_rows (sqlite3 * sqlite, char *table)
+{
+/* attempting to delete Duplicate rows from a table */
+    struct dupl_row value_list;
+    char sql[8192];
+    char sql2[1024];
+    char col_list[4196];
+    int first = 1;
+    char xname[1024];
+    int pk;
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    int i;
+    char *errMsg = NULL;
+    int count;
+
+    value_list.count = 0;
+    value_list.first = NULL;
+    value_list.last = NULL;
+    value_list.table = table;
+
+    if (is_table (sqlite, table) == 0)
+      {
+	  fprintf (stderr, ".remdupl %s: no such table\n", table);
+	  return;
+      }
+/* extracting the column names (excluding any Primary Key) */
+    sprintf (sql, "PRAGMA table_info(%s)", table);
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  *col_list = '\0';
+	  for (i = 1; i <= rows; i++)
+	    {
+		strcpy (xname, results[(i * columns) + 1]);
+		pk = atoi (results[(i * columns) + 5]);
+		if (!pk)
+		  {
+		      if (first)
+			  first = 0;
+		      else
+			  strcat (col_list, ", ");
+		      shp_double_quoted_sql (xname);
+		      strcat (col_list, xname);
+		      add_to_dupl_row (&value_list, xname);
+		  }
+	    }
+      }
+    sqlite3_free_table (results);
+/* preparing the SQL statement (identifying duplicated rows) */
+    strcpy (sql, "SELECT Count(*) AS \"[dupl-count]\", ");
+    strcat (sql, col_list);
+    strcat (sql, "\nFROM ");
+    strcat (sql, table);
+    strcat (sql, "\nGROUP BY ");
+    strcat (sql, col_list);
+    strcat (sql, "\nHAVING \"[dupl-count]\" > 1");
+/* preparing the SQL statement [delete] */
+    strcpy (sql2, "DELETE FROM ");
+    strcat (sql2, table);
+    strcat (sql2, " WHERE ROWID = ?");
+
+    if (do_delete_duplicates (sqlite, sql, sql2, &value_list, &count))
+      {
+	  if (!count)
+	      fprintf (stderr, "No duplicated rows have been identified\n");
+	  else
+	      fprintf (stderr, "%d duplicated rows deleted from: %s\n", count,
+		       table);
+      }
+    clean_dupl_row (&value_list);
+}
+
+static int
+check_elementary (sqlite3 * sqlite, const char *inTable, const char *geom,
+		  const char *outTable, const char *pKey, const char *multiID,
+		  char *type, int *srid, char *coordDims)
+{
+/* preliminary check for ELEMENTARY GEOMETRIES */
+    char sql[8192];
+    int ret;
+    char **results;
+    int rows;
+    int columns;
+    char *errMsg = NULL;
+    int ok = 0;
+    int i;
+    char *gtp;
+    char *dims;
+    char *quoted;
+
+/* fetching metadata */
+    strcpy (sql, "SELECT type, coord_dimension, srid ");
+    strcat (sql, "FROM geometry_columns WHERE f_table_name LIKE '");
+    quoted = gaiaSingleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "' AND f_geometry_column LIKE '");
+    quoted = gaiaSingleQuotedSql (geom);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "'");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		gtp = results[(i * columns) + 0];
+		dims = results[(i * columns) + 1];
+		*srid = atoi (results[(i * columns) + 2]);
+		if (strcasecmp (gtp, "POINT") == 0
+		    || strcasecmp (gtp, "MULTIPOINT") == 0)
+		    strcpy (type, "POINT");
+		else if (strcasecmp (gtp, "LINESTRING") == 0
+			 || strcasecmp (gtp, "MULTILINESTRING") == 0)
+		    strcpy (type, "LINESTRING");
+		else if (strcasecmp (gtp, "POLYGON") == 0
+			 || strcasecmp (gtp, "MULTIPOLYGON") == 0)
+		    strcpy (type, "POLYGON");
+		else
+		    strcpy (type, "GEOMETRY");
+		strcpy (coordDims, dims);
+		ok = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (!ok)
+	return 0;
+
+/* checking if PrimaryKey already exists */
+    strcpy (sql, "PRAGMA table_info(\"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "\")");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (strcasecmp (pKey, results[(i * columns) + 1]) == 0)
+		    ok = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (!ok)
+	return 0;
+
+/* checking if MultiID already exists */
+    strcpy (sql, "PRAGMA table_info(\"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "\")");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (strcasecmp (multiID, results[(i * columns) + 1]) == 0)
+		    ok = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (!ok)
+	return 0;
+
+/* cheching if Output Table already exists */
+    strcpy (sql, "SELECT Count(*) FROM sqlite_master WHERE type ");
+    strcat (sql, "LIKE 'table' AND tbl_name LIKE '");
+    quoted = gaiaSingleQuotedSql (outTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "'");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  return 0;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (atoi (results[(i * columns) + 0]) != 0)
+		    ok = 0;
+	    }
+      }
+    sqlite3_free_table (results);
+
+    return ok;
+}
+
+static gaiaGeomCollPtr
+elemGeomFromPoint (gaiaPointPtr pt, int srid)
+{
+/* creating a Geometry containing a single Point */
+    gaiaGeomCollPtr g = NULL;
+    switch (pt->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  g = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  g = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  g = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  g = gaiaAllocGeomColl ();
+	  break;
+      };
+    if (!g)
+	return NULL;
+    g->Srid = srid;
+    g->DeclaredType = GAIA_POINT;
+    switch (pt->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  gaiaAddPointToGeomCollXYZM (g, pt->X, pt->Y, pt->Z, pt->M);
+	  break;
+      case GAIA_XY_Z:
+	  gaiaAddPointToGeomCollXYZ (g, pt->X, pt->Y, pt->Z);
+	  break;
+      case GAIA_XY_M:
+	  gaiaAddPointToGeomCollXYM (g, pt->X, pt->Y, pt->M);
+	  break;
+      default:
+	  gaiaAddPointToGeomColl (g, pt->X, pt->Y);
+	  break;
+      };
+    return g;
+}
+
+static gaiaGeomCollPtr
+elemGeomFromLinestring (gaiaLinestringPtr ln, int srid)
+{
+/* creating a Geometry containing a single Linestring */
+    gaiaGeomCollPtr g = NULL;
+    gaiaLinestringPtr ln2;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  g = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  g = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  g = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  g = gaiaAllocGeomColl ();
+	  break;
+      };
+    if (!g)
+	return NULL;
+    g->Srid = srid;
+    g->DeclaredType = GAIA_LINESTRING;
+    ln2 = gaiaAddLinestringToGeomColl (g, ln->Points);
+    switch (ln->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPointXYZM (ln->Coords, iv, &x, &y, &z, &m);
+		gaiaSetPointXYZM (ln2->Coords, iv, x, y, z, m);
+	    }
+	  break;
+      case GAIA_XY_Z:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPointXYZ (ln->Coords, iv, &x, &y, &z);
+		gaiaSetPointXYZ (ln2->Coords, iv, x, y, z);
+	    }
+	  break;
+      case GAIA_XY_M:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPointXYM (ln->Coords, iv, &x, &y, &m);
+		gaiaSetPointXYM (ln2->Coords, iv, x, y, m);
+	    }
+	  break;
+      default:
+	  for (iv = 0; iv < ln->Points; iv++)
+	    {
+		gaiaGetPoint (ln->Coords, iv, &x, &y);
+		gaiaSetPoint (ln2->Coords, iv, x, y);
+	    }
+	  break;
+      };
+    return g;
+}
+
+static gaiaGeomCollPtr
+elemGeomFromPolygon (gaiaPolygonPtr pg, int srid)
+{
+/* creating a Geometry containing a single Polygon */
+    gaiaGeomCollPtr g = NULL;
+    gaiaPolygonPtr pg2;
+    gaiaRingPtr rng;
+    gaiaRingPtr rng2;
+    int ib;
+    int iv;
+    double x;
+    double y;
+    double z;
+    double m;
+    switch (pg->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  g = gaiaAllocGeomCollXYZM ();
+	  break;
+      case GAIA_XY_Z:
+	  g = gaiaAllocGeomCollXYZ ();
+	  break;
+      case GAIA_XY_M:
+	  g = gaiaAllocGeomCollXYM ();
+	  break;
+      default:
+	  g = gaiaAllocGeomColl ();
+	  break;
+      };
+    if (!g)
+	return NULL;
+    g->Srid = srid;
+    g->DeclaredType = GAIA_POLYGON;
+    rng = pg->Exterior;
+    pg2 = gaiaAddPolygonToGeomColl (g, rng->Points, pg->NumInteriors);
+    rng2 = pg2->Exterior;
+    switch (pg->DimensionModel)
+      {
+      case GAIA_XY_Z_M:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		gaiaSetPointXYZM (rng2->Coords, iv, x, y, z, m);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZM (rng->Coords, iv, &x, &y, &z, &m);
+		      gaiaSetPointXYZM (rng2->Coords, iv, x, y, z, m);
+		  }
+	    }
+	  break;
+      case GAIA_XY_Z:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		gaiaSetPointXYZ (rng2->Coords, iv, x, y, z);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYZ (rng->Coords, iv, &x, &y, &z);
+		      gaiaSetPointXYZ (rng2->Coords, iv, x, y, z);
+		  }
+	    }
+	  break;
+      case GAIA_XY_M:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		gaiaSetPointXYM (rng2->Coords, iv, x, y, m);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPointXYM (rng->Coords, iv, &x, &y, &m);
+		      gaiaSetPointXYM (rng2->Coords, iv, x, y, m);
+		  }
+	    }
+	  break;
+      default:
+	  for (iv = 0; iv < rng->Points; iv++)
+	    {
+		gaiaGetPoint (rng->Coords, iv, &x, &y);
+		gaiaSetPoint (rng2->Coords, iv, x, y);
+	    }
+	  for (ib = 0; ib < pg->NumInteriors; ib++)
+	    {
+		rng = pg->Interiors + ib;
+		rng2 = gaiaAddInteriorRing (pg2, ib, rng->Points);
+		for (iv = 0; iv < rng->Points; iv++)
+		  {
+		      gaiaGetPoint (rng->Coords, iv, &x, &y);
+		      gaiaSetPoint (rng2->Coords, iv, x, y);
+		  }
+	    }
+	  break;
+      };
+    return g;
+}
+
+SPATIALITE_DECLARE void
+elementary_geometries (sqlite3 * sqlite,
+		       char *inTable, char *geometry, char *outTable,
+		       char *pKey, char *multiId)
+{
+/* attempting to create a derived table surely containing elemetary Geoms */
+    char type[128];
+    int srid;
+    char dims[64];
+    char sql[8192];
+    char sql2[8192];
+    char sql3[8192];
+    char sql4[8192];
+    char sqlx[1024];
+    char sql_geom[1024];
+    char dummy[1024];
+    char *quoted;
+    int ret;
+    int comma = 0;
+    char *errMsg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int geom_idx = -1;
+    sqlite3_stmt *stmt_in = NULL;
+    sqlite3_stmt *stmt_out = NULL;
+    int n_columns;
+    sqlite3_int64 id = 0;
+
+    if (check_elementary
+	(sqlite, inTable, geometry, outTable, pKey, multiId, type, &srid,
+	 dims) == 0)
+      {
+	  fprintf (stderr, ".elemgeo: invalid args\n");
+	  return;
+      }
+
+/* starts a transaction */
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+
+    strcpy (sql, "SELECT ");
+    strcpy (sql2, "INSERT INTO \"");
+    strcpy (sql3, ") VALUES (NULL, ?");
+    strcpy (sql4, "CREATE TABLE \"");
+    quoted = gaiaDoubleQuotedSql (outTable);
+    if (quoted)
+      {
+	  strcat (sql2, quoted);
+	  strcat (sql4, quoted);
+	  free (quoted);
+      }
+    strcat (sql2, "\" (\"");
+    quoted = gaiaDoubleQuotedSql (pKey);
+    if (quoted)
+      {
+	  strcat (sql2, quoted);
+	  free (quoted);
+      }
+    strcat (sql2, "\", \"");
+    quoted = gaiaDoubleQuotedSql (multiId);
+    if (quoted)
+      {
+	  strcat (sql2, quoted);
+	  free (quoted);
+      }
+    strcat (sql2, "\"");
+    strcat (sql4, "\" (\n\t\"");
+    quoted = gaiaDoubleQuotedSql (pKey);
+    if (quoted)
+      {
+	  strcat (sql4, quoted);
+	  free (quoted);
+      }
+    strcat (sql4, "\" INTEGER PRIMARY KEY AUTOINCREMENT");
+    strcat (sql4, ",\n\t\"");
+    quoted = gaiaDoubleQuotedSql (multiId);
+    if (quoted)
+      {
+	  strcat (sql4, quoted);
+	  free (quoted);
+      }
+    strcat (sql4, "\" INTEGER NOT NULL");
+
+    strcpy (sqlx, "PRAGMA table_info(\"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sqlx, quoted);
+	  free (quoted);
+      }
+    strcat (sqlx, "\")");
+    ret = sqlite3_get_table (sqlite, sqlx, &results, &rows, &columns, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		if (comma)
+		    strcat (sql, ", \"");
+		else
+		  {
+		      comma = 1;
+		      strcat (sql, "\"");
+		  }
+		strcat (sql2, ", \"");
+		quoted = gaiaDoubleQuotedSql (results[(i * columns) + 1]);
+		if (quoted)
+		  {
+		      strcat (sql, quoted);
+		      strcat (sql2, quoted);
+		      free (quoted);
+		  }
+		strcat (sql2, "\"");
+		strcat (sql3, ", ?");
+
+		if (strcasecmp (geometry, results[(i * columns) + 1]) == 0)
+		    geom_idx = i - 1;
+		else
+		  {
+		      strcat (sql4, ",\n\t\"");
+		      quoted = gaiaDoubleQuotedSql (results[(i * columns) + 1]);
+		      if (quoted)
+			{
+			    strcat (sql4, quoted);
+			    free (quoted);
+			}
+		      strcat (sql4, "\" ");
+		      strcat (sql4, results[(i * columns) + 2]);
+		      if (atoi (results[(i * columns) + 3]) != 0)
+			  strcat (sql4, " NOT NULL");
+		  }
+	    }
+      }
+    sqlite3_free_table (results);
+    if (geom_idx < 0)
+	goto abort;
+
+    strcat (sql, " FROM \"");
+    quoted = gaiaDoubleQuotedSql (inTable);
+    if (quoted)
+      {
+	  strcat (sql, quoted);
+	  free (quoted);
+      }
+    strcat (sql, "\"");
+    strcat (sql2, sql3);
+    strcat (sql2, ")");
+    strcat (sql4, ")");
+
+    strcpy (sql_geom, "SELECT AddGeometryColumn('");
+    quoted = gaiaSingleQuotedSql (outTable);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "', '");
+    quoted = gaiaSingleQuotedSql (geometry);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "', ");
+    sprintf (dummy, "%d, '", srid);
+    strcat (sql_geom, dummy);
+    quoted = gaiaSingleQuotedSql (type);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "', '");
+    quoted = gaiaSingleQuotedSql (dims);
+    if (quoted)
+      {
+	  strcat (sql_geom, quoted);
+	  free (quoted);
+      }
+    strcat (sql_geom, "')");
+
+/* creating the output table */
+    ret = sqlite3_exec (sqlite, sql4, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+/* creating the output Geometry */
+    ret = sqlite3_exec (sqlite, sql_geom, NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+
+/* preparing the INPUT statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt_in, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto abort;
+      }
+
+/* preparing the OUTPUT statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql2, strlen (sql2), &stmt_out, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
+	  goto abort;
+      }
+
+/* data transfer */
+    n_columns = sqlite3_column_count (stmt_in);
+    while (1)
+      {
+	  ret = sqlite3_step (stmt_in);
+	  if (ret == SQLITE_DONE)
+	      break;
+	  if (ret == SQLITE_ROW)
+	    {
+		gaiaGeomCollPtr g =
+		    gaiaFromSpatiaLiteBlobWkb ((const unsigned char *)
+					       sqlite3_column_blob (stmt_in,
+								    geom_idx),
+					       sqlite3_column_bytes (stmt_in,
+								     geom_idx));
+		if (!g)
+		  {
+		      /* NULL input geometry */
+		      sqlite3_reset (stmt_out);
+		      sqlite3_clear_bindings (stmt_out);
+		      sqlite3_bind_int64 (stmt_out, 1, id);
+		      sqlite3_bind_null (stmt_out, geom_idx + 2);
+
+		      for (i = 0; i < n_columns; i++)
+			{
+			    int type = sqlite3_column_type (stmt_in, i);
+			    if (i == geom_idx)
+				continue;
+			    switch (type)
+			      {
+			      case SQLITE_INTEGER:
+				  sqlite3_bind_int64 (stmt_out, i + 2,
+						      sqlite3_column_int
+						      (stmt_in, i));
+				  break;
+			      case SQLITE_FLOAT:
+				  sqlite3_bind_double (stmt_out, i + 2,
+						       sqlite3_column_double
+						       (stmt_in, i));
+				  break;
+			      case SQLITE_TEXT:
+				  sqlite3_bind_text (stmt_out, i + 2,
+						     (const char *)
+						     sqlite3_column_text
+						     (stmt_in, i),
+						     sqlite3_column_bytes
+						     (stmt_in, i),
+						     SQLITE_STATIC);
+				  break;
+			      case SQLITE_BLOB:
+				  sqlite3_bind_blob (stmt_out, i + 2,
+						     sqlite3_column_blob
+						     (stmt_in, i),
+						     sqlite3_column_bytes
+						     (stmt_in, i),
+						     SQLITE_STATIC);
+				  break;
+			      case SQLITE_NULL:
+			      default:
+				  sqlite3_bind_null (stmt_out, i + 2);
+				  break;
+			      };
+			}
+
+		      ret = sqlite3_step (stmt_out);
+		      if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+			  ;
+		      else
+			{
+			    fprintf (stderr, "[OUT]step error: %s\n",
+				     sqlite3_errmsg (sqlite));
+			    goto abort;
+			}
+		  }
+		else
+		  {
+		      /* separating Elementary Geoms */
+		      gaiaPointPtr pt;
+		      gaiaLinestringPtr ln;
+		      gaiaPolygonPtr pg;
+		      gaiaGeomCollPtr outGeom;
+		      pt = g->FirstPoint;
+		      while (pt)
+			{
+			    /* separating Points */
+			    outGeom = elemGeomFromPoint (pt, g->Srid);
+			    sqlite3_reset (stmt_out);
+			    sqlite3_clear_bindings (stmt_out);
+			    sqlite3_bind_int64 (stmt_out, 1, id);
+			    if (!outGeom)
+				sqlite3_bind_null (stmt_out, geom_idx + 2);
+			    else
+			      {
+				  unsigned char *blob;
+				  int size;
+				  gaiaToSpatiaLiteBlobWkb (outGeom, &blob,
+							   &size);
+				  sqlite3_bind_blob (stmt_out, geom_idx + 2,
+						     blob, size, free);
+				  gaiaFreeGeomColl (outGeom);
+			      }
+
+			    for (i = 0; i < n_columns; i++)
+			      {
+				  int type = sqlite3_column_type (stmt_in, i);
+				  if (i == geom_idx)
+				      continue;
+				  switch (type)
+				    {
+				    case SQLITE_INTEGER:
+					sqlite3_bind_int64 (stmt_out, i + 2,
+							    sqlite3_column_int
+							    (stmt_in, i));
+					break;
+				    case SQLITE_FLOAT:
+					sqlite3_bind_double (stmt_out, i + 2,
+							     sqlite3_column_double
+							     (stmt_in, i));
+					break;
+				    case SQLITE_TEXT:
+					sqlite3_bind_text (stmt_out, i + 2,
+							   (const char *)
+							   sqlite3_column_text
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_BLOB:
+					sqlite3_bind_blob (stmt_out, i + 2,
+							   sqlite3_column_blob
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_NULL:
+				    default:
+					sqlite3_bind_null (stmt_out, i + 2);
+					break;
+				    };
+			      }
+
+			    ret = sqlite3_step (stmt_out);
+			    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+				;
+			    else
+			      {
+				  fprintf (stderr, "[OUT]step error: %s\n",
+					   sqlite3_errmsg (sqlite));
+				  goto abort;
+			      }
+			    pt = pt->Next;
+			}
+		      ln = g->FirstLinestring;
+		      while (ln)
+			{
+			    /* separating Linestrings */
+			    outGeom = elemGeomFromLinestring (ln, g->Srid);
+			    sqlite3_reset (stmt_out);
+			    sqlite3_clear_bindings (stmt_out);
+			    sqlite3_bind_int64 (stmt_out, 1, id);
+			    if (!outGeom)
+				sqlite3_bind_null (stmt_out, geom_idx + 2);
+			    else
+			      {
+				  unsigned char *blob;
+				  int size;
+				  gaiaToSpatiaLiteBlobWkb (outGeom, &blob,
+							   &size);
+				  sqlite3_bind_blob (stmt_out, geom_idx + 2,
+						     blob, size, free);
+				  gaiaFreeGeomColl (outGeom);
+			      }
+
+			    for (i = 0; i < n_columns; i++)
+			      {
+				  int type = sqlite3_column_type (stmt_in, i);
+				  if (i == geom_idx)
+				      continue;
+				  switch (type)
+				    {
+				    case SQLITE_INTEGER:
+					sqlite3_bind_int64 (stmt_out, i + 2,
+							    sqlite3_column_int
+							    (stmt_in, i));
+					break;
+				    case SQLITE_FLOAT:
+					sqlite3_bind_double (stmt_out, i + 2,
+							     sqlite3_column_double
+							     (stmt_in, i));
+					break;
+				    case SQLITE_TEXT:
+					sqlite3_bind_text (stmt_out, i + 2,
+							   (const char *)
+							   sqlite3_column_text
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_BLOB:
+					sqlite3_bind_blob (stmt_out, i + 2,
+							   sqlite3_column_blob
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_NULL:
+				    default:
+					sqlite3_bind_null (stmt_out, i + 2);
+					break;
+				    };
+			      }
+
+			    ret = sqlite3_step (stmt_out);
+			    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+				;
+			    else
+			      {
+				  fprintf (stderr, "[OUT]step error: %s\n",
+					   sqlite3_errmsg (sqlite));
+				  goto abort;
+			      }
+			    ln = ln->Next;
+			}
+		      pg = g->FirstPolygon;
+		      while (pg)
+			{
+			    /* separating Polygons */
+			    outGeom = elemGeomFromPolygon (pg, g->Srid);
+			    sqlite3_reset (stmt_out);
+			    sqlite3_clear_bindings (stmt_out);
+			    sqlite3_bind_int64 (stmt_out, 1, id);
+			    if (!outGeom)
+				sqlite3_bind_null (stmt_out, geom_idx + 2);
+			    else
+			      {
+				  unsigned char *blob;
+				  int size;
+				  gaiaToSpatiaLiteBlobWkb (outGeom, &blob,
+							   &size);
+				  sqlite3_bind_blob (stmt_out, geom_idx + 2,
+						     blob, size, free);
+				  gaiaFreeGeomColl (outGeom);
+			      }
+
+			    for (i = 0; i < n_columns; i++)
+			      {
+				  int type = sqlite3_column_type (stmt_in, i);
+				  if (i == geom_idx)
+				      continue;
+				  switch (type)
+				    {
+				    case SQLITE_INTEGER:
+					sqlite3_bind_int64 (stmt_out, i + 2,
+							    sqlite3_column_int
+							    (stmt_in, i));
+					break;
+				    case SQLITE_FLOAT:
+					sqlite3_bind_double (stmt_out, i + 2,
+							     sqlite3_column_double
+							     (stmt_in, i));
+					break;
+				    case SQLITE_TEXT:
+					sqlite3_bind_text (stmt_out, i + 2,
+							   (const char *)
+							   sqlite3_column_text
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_BLOB:
+					sqlite3_bind_blob (stmt_out, i + 2,
+							   sqlite3_column_blob
+							   (stmt_in, i),
+							   sqlite3_column_bytes
+							   (stmt_in, i),
+							   SQLITE_STATIC);
+					break;
+				    case SQLITE_NULL:
+				    default:
+					sqlite3_bind_null (stmt_out, i + 2);
+					break;
+				    };
+			      }
+
+			    ret = sqlite3_step (stmt_out);
+			    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+				;
+			    else
+			      {
+				  fprintf (stderr, "[OUT]step error: %s\n",
+					   sqlite3_errmsg (sqlite));
+				  goto abort;
+			      }
+			    pg = pg->Next;
+			}
+		      gaiaFreeGeomColl (g);
+		  }
+		id++;
+	    }
+	  else
+	    {
+		fprintf (stderr, "[IN]step error: %s\n",
+			 sqlite3_errmsg (sqlite));
+		goto abort;
+	    }
+      }
+    sqlite3_finalize (stmt_in);
+    sqlite3_finalize (stmt_out);
+
+/* commits the transaction */
+    ret = sqlite3_exec (sqlite, "COMMIT", NULL, NULL, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  goto abort;
+      }
+    return;
+
+  abort:
+    if (stmt_in)
+	sqlite3_finalize (stmt_in);
+    if (stmt_out)
+	sqlite3_finalize (stmt_out);
+}
+
+#ifndef OMIT_FREEXL		/* including FreeXL */
+
+SPATIALITE_DECLARE int
+load_XL (sqlite3 * sqlite, const char *path, const char *table,
+	 unsigned int worksheetIndex, int first_titles, unsigned int *rows,
+	 char *err_msg)
+{
+/* loading an XL spreadsheet as a new DB table */
+    sqlite3_stmt *stmt;
+    unsigned int current_row;
+    int ret;
+    char *errMsg = NULL;
+    char xname[1024];
+    char dummyName[4096];
+    char sql[65536];
+    int sqlError = 0;
+    const void *xl_handle;
+    unsigned int info;
+    unsigned short columns;
+    unsigned short col;
+    FreeXL_CellValue cell;
+    int already_exists = 0;
+/* checking if TABLE already exists */
+    sprintf (sql,
+	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
+	     table);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load XL error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  else
+	      sprintf (err_msg, "load XL error: <%s>\n",
+		       sqlite3_errmsg (sqlite));
+	  return 0;
+      }
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	      already_exists = 1;
+	  else
+	    {
+		fprintf (stderr, "load XL error: <%s>\n",
+			 sqlite3_errmsg (sqlite));
+		break;
+	    }
+      }
+    sqlite3_finalize (stmt);
+    if (already_exists)
+      {
+	  if (!err_msg)
+	      fprintf (stderr, "load XL error: table '%s' already exists\n",
+		       table);
+	  else
+	      sprintf (err_msg, "load XL error: table '%s' already exists\n",
+		       table);
+	  return 0;
+      }
+/* opening the .XLS file [Workbook] */
+    ret = freexl_open (path, &xl_handle);
+    if (ret != FREEXL_OK)
+	goto error;
+/* checking if Password protected */
+    ret = freexl_get_info (xl_handle, FREEXL_BIFF_PASSWORD, &info);
+    if (ret != FREEXL_OK)
+	goto error;
+    if (info != FREEXL_BIFF_PLAIN)
+	goto error;
+/* Worksheet entries */
+    ret = freexl_get_info (xl_handle, FREEXL_BIFF_SHEET_COUNT, &info);
+    if (ret != FREEXL_OK)
+	goto error;
+    if (info == 0)
+	goto error;
+    if (worksheetIndex < info)
+	;
+    else
+	goto error;
+    ret = freexl_select_active_worksheet (xl_handle, worksheetIndex);
+    if (ret != FREEXL_OK)
+	goto error;
+    ret = freexl_worksheet_dimensions (xl_handle, rows, &columns);
+    if (ret != FREEXL_OK)
+	goto error;
+/* starting a transaction */
+    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "load XL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* creating the Table */
+    strcpy (xname, table);
+    shp_double_quoted_sql (xname);
+    sprintf (sql, "CREATE TABLE %s", xname);
+    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
+    for (col = 0; col < columns; col++)
+      {
+	  if (first_titles)
+	    {
+		/* fetching column names */
+		for (col = 0; col < columns; col++)
+		  {
+		      ret = freexl_get_cell_value (xl_handle, 0, col, &cell);
+		      if (ret != FREEXL_OK)
+			  sprintf (dummyName, "col_%d", col);
+		      else
+			{
+			    if (cell.type == FREEXL_CELL_INT)
+				sprintf (dummyName, "%d", cell.value.int_value);
+			    else if (cell.type == FREEXL_CELL_DOUBLE)
+				sprintf (dummyName, "%1.2f",
+					 cell.value.double_value);
+			    else if (cell.type == FREEXL_CELL_TEXT
+				     || cell.type == FREEXL_CELL_SST_TEXT
+				     || cell.type == FREEXL_CELL_DATE
+				     || cell.type == FREEXL_CELL_DATETIME
+				     || cell.type == FREEXL_CELL_TIME)
+			      {
+				  int len = strlen (cell.value.text_value);
+				  if (len < 256)
+				      strcpy (dummyName, cell.value.text_value);
+				  else
+				      sprintf (dummyName, "col_%d", col);
+			      }
+			    else
+				sprintf (dummyName, "col_%d", col);
+			}
+		      shp_double_quoted_sql (dummyName);
+		      strcat (sql, ", ");
+		      strcat (sql, dummyName);
+		  }
+	    }
+	  else
+	    {
+		/* setting default column names */
+		for (col = 0; col < columns; col++)
+		  {
+		      sprintf (dummyName, "col_%d", col);
+		      shp_double_quoted_sql (dummyName);
+		      strcat (sql, ", ");
+		      strcat (sql, dummyName);
+		  }
+	    }
+      }
+    strcat (sql, ")");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "load XL error: %s\n", errMsg);
+	  sqlite3_free (errMsg);
+	  sqlError = 1;
+	  goto clean_up;
+      }
+/* preparing the INSERT INTO parameterized statement */
+    strcpy (xname, table);
+    shp_double_quoted_sql (xname);
+    sprintf (sql, "INSERT INTO %s (PK_UID", xname);
+    for (col = 0; col < columns; col++)
+      {
+	  if (first_titles)
+	    {
+		ret = freexl_get_cell_value (xl_handle, 0, col, &cell);
+		if (ret != FREEXL_OK)
+		    sprintf (dummyName, "col_%d", col);
+		else
+		  {
+		      if (cell.type == FREEXL_CELL_INT)
+			  sprintf (dummyName, "%d", cell.value.int_value);
+		      else if (cell.type == FREEXL_CELL_DOUBLE)
+			  sprintf (dummyName, "%1.2f", cell.value.double_value);
+		      else if (cell.type == FREEXL_CELL_TEXT
+			       || cell.type == FREEXL_CELL_SST_TEXT
+			       || cell.type == FREEXL_CELL_DATE
+			       || cell.type == FREEXL_CELL_DATETIME
+			       || cell.type == FREEXL_CELL_TIME)
+			{
+			    int len = strlen (cell.value.text_value);
+			    if (len < 256)
+				strcpy (dummyName, cell.value.text_value);
+			    else
+				sprintf (dummyName, "col_%d", col);
+			}
+		      else
+			  sprintf (dummyName, "col_%d", col);
+		  }
+		shp_double_quoted_sql (dummyName);
+		strcat (sql, ", ");
+		strcat (sql, dummyName);
+	    }
+	  else
+	    {
+		/* setting default column names  */
+		sprintf (dummyName, "col_%d", col);
+		shp_double_quoted_sql (dummyName);
+		strcat (sql, ", ");
+		strcat (sql, dummyName);
+	    }
+      }
+    strcat (sql, ")\nVALUES (NULL");
+    for (col = 0; col < columns; col++)
+      {
+	  /* column values */
+	  strcat (sql, ", ?");
+      }
+    strcat (sql, ")");
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "load XL error: %s\n", sqlite3_errmsg (sqlite));
+	  sqlError = 1;
+	  goto clean_up;
+      }
+    if (first_titles)
+	current_row = 1;
+    else
+	current_row = 0;
+    while (current_row < *rows)
+      {
+	  /* binding query params */
+	  sqlite3_reset (stmt);
+	  sqlite3_clear_bindings (stmt);
+	  for (col = 0; col < columns; col++)
+	    {
+		/* column values */
+		ret =
+		    freexl_get_cell_value (xl_handle, current_row, col, &cell);
+		if (ret != FREEXL_OK)
+		    sqlite3_bind_null (stmt, col + 1);
+		else
+		  {
+		      switch (cell.type)
+			{
+			case FREEXL_CELL_INT:
+			    sqlite3_bind_int (stmt, col + 1,
+					      cell.value.int_value);
+			    break;
+			case FREEXL_CELL_DOUBLE:
+			    sqlite3_bind_double (stmt, col + 1,
+						 cell.value.double_value);
+			    break;
+			case FREEXL_CELL_TEXT:
+			case FREEXL_CELL_SST_TEXT:
+			case FREEXL_CELL_DATE:
+			case FREEXL_CELL_DATETIME:
+			case FREEXL_CELL_TIME:
+			    sqlite3_bind_text (stmt, col + 1,
+					       cell.value.text_value,
+					       strlen (cell.value.text_value),
+					       SQLITE_STATIC);
+			    break;
+			default:
+			    sqlite3_bind_null (stmt, col + 1);
+			    break;
+			};
+		  }
+	    }
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	      ;
+	  else
+	    {
+		fprintf (stderr, "load XL error: %s\n",
+			 sqlite3_errmsg (sqlite));
+		sqlite3_finalize (stmt);
+		sqlError = 1;
+		goto clean_up;
+	    }
+	  current_row++;
+      }
+    sqlite3_finalize (stmt);
+  clean_up:
+    if (sqlError)
+      {
+	  /* some error occurred - ROLLBACK */
+	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "load XL error: %s\n", errMsg);
+		sqlite3_free (errMsg);
+	    }
+	  fprintf (stderr,
+		   "XL not loaded\n\n\na ROLLBACK was automatically performed\n");
+      }
+    else
+      {
+	  /* ok - confirming pending transaction - COMMIT */
+	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
+	  if (ret != SQLITE_OK)
+	    {
+		if (!err_msg)
+		    fprintf (stderr, "load XL error: %s\n", errMsg);
+		else
+		    sprintf (err_msg, "load XL error: %s\n", errMsg);
+		sqlite3_free (errMsg);
+		return 0;
+	    }
+	  if (first_titles)
+	      *rows = *rows - 1;	/* allow for header row */
+	  fprintf (stderr, "XL loaded\n\n%d inserted rows\n", *rows);
+      }
+    freexl_close (xl_handle);
+    return 1;
+
+  error:
+    freexl_close (xl_handle);
+    if (!err_msg)
+	fprintf (stderr, "XL datasource '%s' is not valid\n", path);
+    else
+	sprintf (err_msg, "XL datasource '%s' is not valid\n", path);
+    return 0;
+}
+
+#endif /* FreeXL enabled/disabled */
+
+SPATIALITE_DECLARE int
+dump_geojson (sqlite3 * sqlite, char *table, char *geom_col, char *outfile_path,
+	      int precision, int option)
+{
+/* dumping a  geometry table as GeoJSON - Brad Hards 2011-11-09 */
+    char sql[4096];
+    sqlite3_stmt *stmt = NULL;
+    FILE *out = NULL;
+    int ret;
+    int rows = 0;
+    int is_const = 1;
+
+/* opening/creating the GeoJSON output file */
+    out = fopen (outfile_path, "wb");
+    if (!out)
+	goto no_file;
+
+/* preparing SQL statement */
+    sprintf (sql, "SELECT AsGeoJSON(%s, %d, %d) FROM %s WHERE %s IS NOT NULL",
+	     geom_col, precision, option, table, geom_col);
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	goto sql_error;
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	    {
+		break;		/* end of result set */
+	    }
+	  if (ret == SQLITE_ROW)
+	    {
+		rows++;
+		fprintf (out, "%s\r\n", sqlite3_column_text (stmt, 0));
+	    }
+	  else
+	    {
+		goto sql_error;
+	    }
+      }
+    if (rows == 0)
+      {
+	  goto empty_result_set;
+      }
+
+    sqlite3_finalize (stmt);
+    fclose (out);
+    return 1;
+
+  sql_error:
+/* an SQL error occurred */
+    if (stmt)
+      {
+	  sqlite3_finalize (stmt);
+      }
+    if (out)
+      {
+	  fclose (out);
+      }
+    fprintf (stderr, "Dump GeoJSON error: %s\n", sqlite3_errmsg (sqlite));
+    return 0;
+
+  no_file:
+/* Output file could not be created / opened */
+    if (stmt)
+      {
+	  sqlite3_finalize (stmt);
+      }
+    if (out)
+      {
+	  fclose (out);
+      }
+    fprintf (stderr, "ERROR: unable to open '%s' for writing\n", outfile_path);
+    return 0;
+
+  empty_result_set:
+/* the result set is empty - nothing to do */
+    if (stmt)
+      {
+	  sqlite3_finalize (stmt);
+      }
+    if (out)
+      {
+	  fclose (out);
+      }
+    fprintf (stderr, "The SQL SELECT returned no data to export...\n");
+    return 0;
+}
diff --git a/libspatialite/src/spatialite/Makefile.am b/libspatialite/src/spatialite/Makefile.am
index 88c8709..4f4cdae 100644
--- a/libspatialite/src/spatialite/Makefile.am
+++ b/libspatialite/src/spatialite/Makefile.am
@@ -19,3 +19,4 @@ libsplite_la_SOURCES = mbrcache.c \
 	virtualnetwork.c \
 	virtualshape.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/spatialite/Makefile.in b/libspatialite/src/spatialite/Makefile.in
index c2ef76c..53aed4f 100644
--- a/libspatialite/src/spatialite/Makefile.in
+++ b/libspatialite/src/spatialite/Makefile.in
@@ -113,6 +113,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -145,6 +146,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -178,7 +180,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -211,6 +212,7 @@ libsplite_la_SOURCES = mbrcache.c \
 	virtualnetwork.c \
 	virtualshape.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-am
 
 .SUFFIXES:
@@ -400,6 +402,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
diff --git a/libspatialite/src/spatialite/mbrcache.c b/libspatialite/src/spatialite/mbrcache.c
index 275c2ba..cbabb02 100644
--- a/libspatialite/src/spatialite/mbrcache.c
+++ b/libspatialite/src/spatialite/mbrcache.c
@@ -197,7 +197,7 @@ positioning parameters while performing a cache search
     int current_cell_index;
     struct mbr_cache_cell *current_cell;
 /* 
-the stategy to use:
+the strategy to use:
     0 = sequential scan
     1 = find rowid
     2 = spatial search
@@ -430,7 +430,7 @@ cache_get_free_page (struct mbr_cache *p)
     pp = p->first;
     while (pp)
       {
-	  /* scanning the page list in order to discover if there is an exixsting page not yet completly filled */
+	  /* scanning the page list in order to discover if there is an existing page not yet completely filled */
 	  if (pp->bitmap != 0xffffffff)
 	    {
 		p->current = pp;
@@ -472,7 +472,7 @@ cache_insert_cell (struct mbr_cache *p, sqlite3_int64 rowid, double minx,
 	pb->miny = miny;
     if (pb->maxy < maxy)
 	pb->maxy = maxy;
-/* updading the cache page MBR */
+/* updating the cache page MBR */
     if (pp->minx > minx)
 	pp->minx = minx;
     if (pp->maxx < maxx)
@@ -890,7 +890,6 @@ mbrc_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
     char **results;
     char *err_msg = NULL;
     char sql[4096];
-    int ok_tbl;
     int ok_col;
     MbrCachePtr p_vt;
     char xname[1024];
@@ -962,7 +961,6 @@ mbrc_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
       }
 /* retrieving the base table columns */
     err = 0;
-    ok_tbl = 0;
     ok_col = 0;
     strcpy (xname, table);
     mbrc_double_quoted_sql (xname);
@@ -975,7 +973,6 @@ mbrc_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
       }
     if (n_rows > 1)
       {
-	  ok_tbl = 1;
 	  for (i = 1; i <= n_rows; i++)
 	    {
 		col_name = results[(i * n_columns) + 1];
diff --git a/libspatialite/src/spatialite/spatialite.c b/libspatialite/src/spatialite/spatialite.c
index 42b2482..c6ebb5e 100644
--- a/libspatialite/src/spatialite/spatialite.c
+++ b/libspatialite/src/spatialite/spatialite.c
@@ -65,6 +65,7 @@ the terms of any one of the MPL, the GPL or the LGPL.
 #include <sqlite3ext.h>
 #endif
 
+#include <spatialite/gaiaaux.h>
 #include <spatialite/gaiageo.h>
 #include <spatialite/gaiaexif.h>
 #include <spatialite/spatialite.h>
@@ -301,7 +302,7 @@ fnct_GeometryConstraints (sqlite3_context * context, int argc,
 	  else if (*(p_blob + 1) == GAIA_BIG_ENDIAN)
 	      little_endian = 0;
 	  else
-	      goto illegal_geometry;	/* unknown encoding; nor litte-endian neither big-endian */
+	      goto illegal_geometry;	/* unknown encoding; neither little-endian nor big-endian */
 	  geom_type = gaiaImport32 (p_blob + 39, little_endian, endian_arch);
 	  geom_srid = gaiaImport32 (p_blob + 2, little_endian, endian_arch);
 	  goto valid_geometry;
@@ -508,6 +509,7 @@ fnct_RTreeAlign (sqlite3_context * context, int argc, sqlite3_value ** argv)
     const unsigned char *rtree_table;
     gaiaGeomCollPtr geom = NULL;
     int ret;
+    char table_name[1024];
     char sql[4192];
     sqlite3 *sqlite = sqlite3_context_db_handle (context);
     GAIA_UNUSED ();
@@ -548,16 +550,22 @@ fnct_RTreeAlign (sqlite3_context * context, int argc, sqlite3_value ** argv)
     else
       {
 	  /* INSERTing into the R*Tree */
+	  strcpy (table_name, rtree_table);
+	  if (*(table_name + 0) == '"'
+	      && *(table_name + strlen (table_name) - 1) == '"')
+	      ;			/* earlier versions may pass an already quoted name */
+	  else
+	      double_quoted_sql (table_name);
 #if defined(_WIN32) || defined(__MINGW32__)
-/* CAVEAT: M$ rutime doesn't supports %lld for 64 bits */
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
 	  sprintf (sql, "INSERT INTO %s (pkid, xmin, ymin, xmax, ymax) "
 		   "VALUES (%I64d, %1.12f, %1.12f, %1.12f, %1.12f)",
-		   rtree_table, pkid, geom->MinX, geom->MinY, geom->MaxX,
+		   table_name, pkid, geom->MinX, geom->MinY, geom->MaxX,
 		   geom->MaxY);
 #else
 	  sprintf (sql, "INSERT INTO %s (pkid, xmin, ymin, xmax, ymax) "
 		   "VALUES (%lld, %1.12f, %1.12f, %1.12f, %1.12f)",
-		   rtree_table, pkid, geom->MinX, geom->MinY, geom->MaxX,
+		   table_name, pkid, geom->MinX, geom->MinY, geom->MaxX,
 		   geom->MaxY);
 #endif
 	  gaiaFreeGeomColl (geom);
@@ -1141,7 +1149,7 @@ fnct_InitSpatialMetaData (sqlite3_context * context, int argc,
     if (ret != SQLITE_OK)
 	goto error;
     updateSpatiaLiteHistory (sqlite, "spatial_ref_sys", NULL,
-			     "table succesfully created");
+			     "table successfully created");
 /* creating the GEOMETRY_COLUMN table */
     strcpy (sql, "CREATE TABLE geometry_columns (\n");
     strcat (sql, "f_table_name TEXT NOT NULL,\n");
@@ -1158,7 +1166,7 @@ fnct_InitSpatialMetaData (sqlite3_context * context, int argc,
     if (ret != SQLITE_OK)
 	goto error;
     updateSpatiaLiteHistory (sqlite, "geometry_columns", NULL,
-			     "table succesfully created");
+			     "table successfully created");
 /* creating an INDEX corresponding to the SRID FK */
     strcpy (sql, "CREATE INDEX idx_srid_geocols ON geometry_columns\n");
     strcat (sql, "(srid) ");
@@ -1185,7 +1193,7 @@ fnct_InitSpatialMetaData (sqlite3_context * context, int argc,
 	goto error;
     if (spatial_ref_sys_init (sqlite, 0))
 	updateSpatiaLiteHistory (sqlite, "spatial_ref_sys", NULL,
-				 "table succesfully populated");
+				 "table successfully populated");
     sqlite3_result_int (context, 1);
     return;
   error:
@@ -1252,10 +1260,15 @@ recoverGeomColumn (sqlite3 * sqlite, const unsigned char *table,
 				  if (geom->Srid != srid)
 				      ok = 0;
 				  type = gaiaGeometryType (geom);
-				  if (xtype == type)
-				      ;
+				  if (xtype == -1)
+				      ;	/* GEOMETRY */
 				  else
-				      ok = 0;
+				    {
+					if (xtype == type)
+					    ;
+					else
+					    ok = 0;
+				    }
 				  gaiaFreeGeomColl (geom);
 			      }
 			}
@@ -1324,7 +1337,6 @@ updateGeometryTriggers (sqlite3 * sqlite, const unsigned char *table,
     char col_srid[32];
     char col_index[32];
     char col_dims[64];
-    int srid;
     int index;
     int cached;
     int dims;
@@ -1375,7 +1387,6 @@ updateGeometryTriggers (sqlite3 * sqlite, const unsigned char *table,
 	      strcpy (col_srid, results[(i * columns) + 3]);
 	  strcpy (col_index, results[(i * columns) + 4]);
 	  strcpy (col_dims, results[(i * columns) + 5]);
-	  srid = atoi (col_srid);
 	  if (atoi (col_index) == 1)
 	      index = 1;
 	  else
@@ -1498,7 +1509,7 @@ updateGeometryTriggers (sqlite3 * sqlite, const unsigned char *table,
 	  ret = sqlite3_exec (sqlite, trigger, NULL, NULL, &errMsg);
 	  if (ret != SQLITE_OK)
 	      goto error;
-	  /* inserting SpatialIndex infos into the linked list */
+	  /* inserting SpatialIndex information into the linked list */
 	  curr_idx = malloc (sizeof (struct spatial_index_str));
 	  len = strlen (tblname);
 	  curr_idx->TableName = malloc (len + 1);
@@ -1532,6 +1543,8 @@ updateGeometryTriggers (sqlite3 * sqlite, const unsigned char *table,
 		sprintf (dummy, "DELETE FROM %s WHERE pkid=NEW.ROWID;\n",
 			 xindex);
 		strcat (trigger, dummy);
+		sprintf (xindex, "idx_%s_%s", tblname, colname);
+		clean_sql_string (xindex);
 		sprintf (dummy, "SELECT RTreeAlign('%s', NEW.ROWID, NEW.%s);",
 			 xindex, xcolname);
 		strcat (trigger, dummy);
@@ -1558,6 +1571,8 @@ updateGeometryTriggers (sqlite3 * sqlite, const unsigned char *table,
 		sprintf (dummy, "DELETE FROM %s WHERE pkid=NEW.ROWID;\n",
 			 xindex);
 		strcat (trigger, dummy);
+		sprintf (xindex, "idx_%s_%s", tblname, colname);
+		clean_sql_string (xindex);
 		sprintf (dummy, "SELECT RTreeAlign('%s', NEW.ROWID, NEW.%s);",
 			 xindex, xcolname);
 		strcat (trigger, dummy);
@@ -1896,7 +1911,7 @@ fnct_AddGeometryColumn (sqlite3_context * context, int argc,
     if (*tblname == '\0')
       {
 	  fprintf (stderr,
-		   "AddGeometryColumn() error: table '%s' does not exists\n",
+		   "AddGeometryColumn() error: table '%s' does not exist\n",
 		   table);
 	  sqlite3_result_int (context, 0);
 	  return;
@@ -2058,7 +2073,7 @@ fnct_AddGeometryColumn (sqlite3_context * context, int argc,
       };
     sprintf (sqlcolumn, ",SRID=%d", (srid <= 0) ? -1 : srid);
     strcat (sql, sqlcolumn);
-    strcat (sql, "] succesfully created");
+    strcat (sql, "] successfully created");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) column, sql);
     return;
@@ -2221,12 +2236,12 @@ fnct_RecoverGeometryColumn (sqlite3_context * context, int argc,
     if (*tblname == '\0')
       {
 	  fprintf (stderr,
-		   "RecoverGeometryColumn() error: table '%s' does not exists\n",
+		   "RecoverGeometryColumn() error: table '%s' does not exist\n",
 		   table);
 	  sqlite3_result_int (context, 0);
 	  return;
       }
-/* adjusting the actucal GeometryType */
+/* adjusting the actual GeometryType */
     xxtype = xtype;
     xtype = GAIA_UNKNOWN;
     if (xxtype == GAIA_POINT)
@@ -2355,6 +2370,8 @@ fnct_RecoverGeometryColumn (sqlite3_context * context, int argc,
 		break;
 	    };
       }
+    if (xxtype == -1)
+	xtype = -1;		/* GEOMETRY */
     if (!recoverGeomColumn (sqlite, table, column, xtype, dims, srid))
       {
 	  fprintf (stderr, "RecoverGeometryColumn(): validation failed\n");
@@ -2493,7 +2510,7 @@ fnct_RecoverGeometryColumn (sqlite3_context * context, int argc,
       };
     sprintf (sqlcolumn, ",SRID=%d", (srid <= 0) ? -1 : srid);
     strcat (sql, sqlcolumn);
-    strcat (sql, "] succesfully recovered");
+    strcat (sql, "] successfully recovered");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) column, sql);
     return;
@@ -2511,7 +2528,7 @@ fnct_DiscardGeometryColumn (sqlite3_context * context, int argc,
 /* SQL function:
 / DiscardGeometryColumn(table, column)
 /
-/ removes TABLE.COLUMN from the Spatial MetaData [thus disablig triggers too]
+/ removes TABLE.COLUMN from the Spatial MetaData [thus disabling triggers too]
 / returns 1 on success
 / 0 on failure
 */
@@ -2629,7 +2646,7 @@ fnct_DiscardGeometryColumn (sqlite3_context * context, int argc,
     /* end deletion old versions [v2.0, v2.2] triggers[if any] */
 
     sqlite3_result_int (context, 1);
-    strcpy (sql, "Geometry succesfully discarded");
+    strcpy (sql, "Geometry successfully discarded");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) column, sql);
     return;
@@ -2722,7 +2739,7 @@ recoverFDOGeomColumn (sqlite3 * sqlite, const unsigned char *table,
 	      break;		/* end of result set */
 	  if (ret == SQLITE_ROW)
 	    {
-		/* cecking Geometry features */
+		/* checking Geometry features */
 		geom = NULL;
 		for (i_col = 0; i_col < sqlite3_column_count (stmt); i_col++)
 		  {
@@ -2910,7 +2927,7 @@ fnct_AddFDOGeometryColumn (sqlite3_context * context, int argc,
     if (*tblname == '\0')
       {
 	  fprintf (stderr,
-		   "AddFDOGeometryColumn() error: table '%s' does not exists\n",
+		   "AddFDOGeometryColumn() error: table '%s' does not exist\n",
 		   table);
 	  sqlite3_result_int (context, 0);
 	  return;
@@ -3100,7 +3117,7 @@ fnct_RecoverFDOGeometryColumn (sqlite3_context * context, int argc,
     if (*tblname == '\0')
       {
 	  fprintf (stderr,
-		   "RecoverFDOGeometryColumn() error: table '%s' does not exists\n",
+		   "RecoverFDOGeometryColumn() error: table '%s' does not exist\n",
 		   table);
 	  sqlite3_result_int (context, 0);
 	  return;
@@ -3211,8 +3228,8 @@ eval_rtree_entry (int ok_geom, double geom_value, int ok_rtree,
 	return 1;
     if (ok_geom && ok_rtree)
       {
-	  float g = geom_value;
-	  float r = rtree_value;
+	  float g = (float) geom_value;
+	  float r = (float) rtree_value;
 	  if (g != r)
 	      return 0;
 	  return 1;
@@ -3545,7 +3562,7 @@ check_spatial_index (sqlite3 * sqlite, const unsigned char *table,
     return 1;
   mismatching:
     sqlite3_finalize (stmt);
-    strcpy (sql, "Check SpatialIndex: INCONSISTENTENCIES detected");
+    strcpy (sql, "Check SpatialIndex: INCONSISTENCIES detected");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) geom, sql);
     return 0;
@@ -3722,7 +3739,7 @@ recover_spatial_index (sqlite3 * sqlite, const unsigned char *table,
 	goto error;
 /* populating the R*Tree table from scratch */
     buildSpatialIndex (sqlite, table, (const char *) geom);
-    strcpy (sql, "SpatialIndex: succesfully recovered");
+    strcpy (sql, "SpatialIndex: successfully recovered");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) geom, sql);
     return 1;
@@ -3970,7 +3987,7 @@ fnct_CreateSpatialIndex (sqlite3_context * context, int argc,
       }
     updateGeometryTriggers (sqlite, table, column);
     sqlite3_result_int (context, 1);
-    strcpy (sql, "R*Tree Spatial Index succesfully created");
+    strcpy (sql, "R*Tree Spatial Index successfully created");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) column, sql);
     return;
@@ -4039,7 +4056,7 @@ fnct_CreateMbrCache (sqlite3_context * context, int argc, sqlite3_value ** argv)
       }
     updateGeometryTriggers (sqlite, table, column);
     sqlite3_result_int (context, 1);
-    strcpy (sql, "MbrCache succesfully created");
+    strcpy (sql, "MbrCache successfully created");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) column, sql);
     return;
@@ -4109,7 +4126,7 @@ fnct_DisableSpatialIndex (sqlite3_context * context, int argc,
       }
     updateGeometryTriggers (sqlite, table, column);
     sqlite3_result_int (context, 1);
-    strcpy (sql, "SpatialIndex succesfully disabled");
+    strcpy (sql, "SpatialIndex successfully disabled");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) column, sql);
     return;
@@ -4183,7 +4200,7 @@ fnct_RebuildGeometryTriggers (sqlite3_context * context, int argc,
       }
     updateGeometryTriggers (sqlite, table, column);
     sqlite3_result_int (context, 1);
-    strcpy (sql, "Geometry Triggers succesfully rebuilt");
+    strcpy (sql, "Geometry Triggers successfully rebuilt");
     updateSpatiaLiteHistory (sqlite, (const char *) table,
 			     (const char *) column, sql);
     return;
@@ -5279,7 +5296,7 @@ fnct_CreateTopologyTables (sqlite3_context * context, int argc,
 	 view_surfaces_resolved, srid, dims))
 	goto error;
     updateSpatiaLiteHistory (sqlite, "*** TOPOLOGY ***", NULL,
-			     "Topology tables succesfully created");
+			     "Topology tables successfully created");
     sqlite3_result_int (context, 1);
     return;
 
@@ -5288,6 +5305,60 @@ fnct_CreateTopologyTables (sqlite3_context * context, int argc,
     return;
 }
 
+static void
+fnct_UpdateLayerStatistics (sqlite3_context * context, int argc,
+			    sqlite3_value ** argv)
+{
+/* SQL function:
+/ UpdateLayerStatistics(table, column )
+/
+/ Updates LAYER_STATISTICS [based on Column and Table]
+/ returns 1 on success
+/ 0 on failure
+*/
+    const char *sql;
+    const unsigned char *table = NULL;
+    const unsigned char *column = NULL;
+    sqlite3 *sqlite = sqlite3_context_db_handle (context);
+    GAIA_UNUSED ();
+    if (argc >= 1)
+      {
+	  if (sqlite3_value_type (argv[0]) != SQLITE_TEXT)
+	    {
+		fprintf (stderr,
+			 "UpdateLayerStatistics() error: argument 1 [table_name] is not of the String type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  table = sqlite3_value_text (argv[0]);
+      }
+    if (argc >= 2)
+      {
+	  if (sqlite3_value_type (argv[1]) != SQLITE_TEXT)
+	    {
+		fprintf (stderr,
+			 "UpdateLayerStatistics() error: argument 2 [column_name] is not of the String type\n");
+		sqlite3_result_int (context, 0);
+		return;
+	    }
+	  column = sqlite3_value_text (argv[1]);
+      }
+    if (!update_layer_statistics (sqlite, table, column))
+	goto error;
+    sqlite3_result_int (context, 1);
+    sql = "UpdateLayerStatistics";
+    if (table == NULL)
+	table = "ALL-TABLES";
+    if (column == NULL)
+	column = "ALL-GEOMETRY-COLUMNS";
+    updateSpatiaLiteHistory (sqlite, (const char *) table,
+			     (const char *) column, sql);
+    return;
+  error:
+    sqlite3_result_int (context, 0);
+    return;
+}
+
 static gaiaPointPtr
 simplePoint (gaiaGeomCollPtr geo)
 {
@@ -5394,12 +5465,12 @@ fnct_AsText (sqlite3_context * context, int argc, sqlite3_value ** argv)
       }
     p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
     n_bytes = sqlite3_value_bytes (argv[0]);
+    gaiaOutBufferInitialize (&out_buf);
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
     if (!geo)
 	sqlite3_result_null (context);
     else
       {
-	  gaiaOutBufferInitialize (&out_buf);
 	  gaiaOutWkt (&out_buf, geo);
 	  if (out_buf.Error || out_buf.Buffer == NULL)
 	      sqlite3_result_null (context);
@@ -5448,11 +5519,11 @@ fnct_AsWkt (sqlite3_context * context, int argc, sqlite3_value ** argv)
     p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
     n_bytes = sqlite3_value_bytes (argv[0]);
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    gaiaOutBufferInitialize (&out_buf);
     if (!geo)
 	sqlite3_result_null (context);
     else
       {
-	  gaiaOutBufferInitialize (&out_buf);
 	  gaiaOutWktStrict (&out_buf, geo, precision);
 	  if (out_buf.Error || out_buf.Buffer == NULL)
 	      sqlite3_result_null (context);
@@ -5629,6 +5700,7 @@ fnct_AsKml1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
 		return;
 	    }
       }
+    gaiaOutBufferInitialize (&out_buf);
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
     if (!geo)
 	sqlite3_result_null (context);
@@ -5636,6 +5708,12 @@ fnct_AsKml1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
       {
 	  if (geo->Srid == 4326)
 	      ;			/* already WGS84 */
+	  else if (geo->Srid == -1)
+	    {
+		/* unknown SRID: giving up */
+		sqlite3_result_null (context);
+		goto stop;
+	    }
 	  else
 	    {
 		/* attempting to reproject into WGS84 */
@@ -5652,12 +5730,11 @@ fnct_AsKml1 (sqlite3_context * context, int argc, sqlite3_value ** argv)
 		      sqlite3_result_null (context);
 		      goto stop;
 		  }
-		/* ok, reprojection was succesfull */
+		/* ok, reprojection was successful */
 		gaiaFreeGeomColl (geo);
 		geo = geo_wgs84;
 	    }
 	  /* produce KML-notation - actual work is done in gaiageo/gg_wkt.c */
-	  gaiaOutBufferInitialize (&out_buf);
 	  gaiaOutBareKml (&out_buf, geo, precision);
 	  if (out_buf.Error || out_buf.Buffer == NULL)
 	      sqlite3_result_null (context);
@@ -5712,7 +5789,7 @@ fnct_AsKml3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
       case SQLITE_INTEGER:
 	  int_value = sqlite3_value_int64 (argv[0]);
 #if defined(_WIN32) || defined(__MINGW32__)
-/* CAVEAT: M$ rutime doesn't supports %lld for 64 bits */
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
 	  sprintf (dummy, "%I64d", int_value);
 #else
 	  sprintf (dummy, "%lld", int_value);
@@ -5749,7 +5826,7 @@ fnct_AsKml3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
       case SQLITE_INTEGER:
 	  int_value = sqlite3_value_int64 (argv[1]);
 #if defined(_WIN32) || defined(__MINGW32__)
-/* CAVEAT: M$ rutime doesn't supports %lld for 64 bits */
+/* CAVEAT: M$ runtime doesn't supports %lld for 64 bits */
 	  sprintf (dummy, "%I64d", int_value);
 #else
 	  sprintf (dummy, "%lld", int_value);
@@ -5774,10 +5851,11 @@ fnct_AsKml3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
 	  desc = "NULL";
 	  break;
       };
+    gaiaOutBufferInitialize (&out_buf);
     if (sqlite3_value_type (argv[2]) != SQLITE_BLOB)
       {
 	  sqlite3_result_null (context);
-	  return;
+	  goto stop;
       }
     p_blob = (unsigned char *) sqlite3_value_blob (argv[2]);
     n_bytes = sqlite3_value_bytes (argv[2]);
@@ -5788,7 +5866,7 @@ fnct_AsKml3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
 	  else
 	    {
 		sqlite3_result_null (context);
-		return;
+		goto stop;
 	    }
       }
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
@@ -5798,6 +5876,12 @@ fnct_AsKml3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
       {
 	  if (geo->Srid == 4326)
 	      ;			/* already WGS84 */
+	  else if (geo->Srid == -1)
+	    {
+		/* unknown SRID: giving up */
+		sqlite3_result_null (context);
+		goto stop;
+	    }
 	  else
 	    {
 		/* attempting to reproject into WGS84 */
@@ -5814,12 +5898,11 @@ fnct_AsKml3 (sqlite3_context * context, int argc, sqlite3_value ** argv)
 		      sqlite3_result_null (context);
 		      goto stop;
 		  }
-		/* ok, reprojection was succesfull */
+		/* ok, reprojection was successful */
 		gaiaFreeGeomColl (geo);
 		geo = geo_wgs84;
 	    }
 	  /* produce KML-notation - actual work is done in gaiageo/gg_wkt.c */
-	  gaiaOutBufferInitialize (&out_buf);
 	  gaiaOutFullKml (&out_buf, name, desc, geo, precision);
 	  if (out_buf.Error || out_buf.Buffer == NULL)
 	      sqlite3_result_null (context);
@@ -5940,21 +6023,26 @@ fnct_AsGml (sqlite3_context * context, int argc, sqlite3_value ** argv)
 	  p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
 	  n_bytes = sqlite3_value_bytes (argv[0]);
       }
+    gaiaOutBufferInitialize (&out_buf);
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
     if (!geo)
 	sqlite3_result_null (context);
     else
       {
-	  /* produce GML-notation - actual work is done in gaiageo/gg_wkt.c */
-	  gaiaOutBufferInitialize (&out_buf);
-	  gaiaOutGml (&out_buf, version, precision, geo);
-	  if (out_buf.Error || out_buf.Buffer == NULL)
-	      sqlite3_result_null (context);
+	  if (geo->Srid == -1)
+	      sqlite3_result_null (context);	/* unknown SRID: giving up */
 	  else
 	    {
-		len = out_buf.WriteOffset;
-		sqlite3_result_text (context, out_buf.Buffer, len, free);
-		out_buf.Buffer = NULL;
+		/* produce GML-notation - actual work is done in gaiageo/gg_wkt.c */
+		gaiaOutGml (&out_buf, version, precision, geo);
+		if (out_buf.Error || out_buf.Buffer == NULL)
+		    sqlite3_result_null (context);
+		else
+		  {
+		      len = out_buf.WriteOffset;
+		      sqlite3_result_text (context, out_buf.Buffer, len, free);
+		      out_buf.Buffer = NULL;
+		  }
 	    }
       }
     gaiaFreeGeomColl (geo);
@@ -6039,21 +6127,26 @@ fnct_AsGeoJSON (sqlite3_context * context, int argc, sqlite3_value ** argv)
 	  p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
 	  n_bytes = sqlite3_value_bytes (argv[0]);
       }
+    gaiaOutBufferInitialize (&out_buf);
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
     if (!geo)
 	sqlite3_result_null (context);
     else
       {
-	  /* produce GeoJSON-notation - actual work is done in gaiageo/gg_wkt.c */
-	  gaiaOutBufferInitialize (&out_buf);
-	  gaiaOutGeoJSON (&out_buf, geo, precision, options);
-	  if (out_buf.Error || out_buf.Buffer == NULL)
-	      sqlite3_result_null (context);
+	  if (geo->Srid == -1)
+	      sqlite3_result_null (context);	/* unknown SRID: giving up */
 	  else
 	    {
-		len = out_buf.WriteOffset;
-		sqlite3_result_text (context, out_buf.Buffer, len, free);
-		out_buf.Buffer = NULL;
+		/* produce GeoJSON-notation - actual work is done in gaiageo/gg_wkt.c */
+		gaiaOutGeoJSON (&out_buf, geo, precision, options);
+		if (out_buf.Error || out_buf.Buffer == NULL)
+		    sqlite3_result_null (context);
+		else
+		  {
+		      len = out_buf.WriteOffset;
+		      sqlite3_result_text (context, out_buf.Buffer, len, free);
+		      out_buf.Buffer = NULL;
+		  }
 	    }
       }
     gaiaFreeGeomColl (geo);
@@ -6489,6 +6582,7 @@ fnct_MakeLine_final (sqlite3_context * context)
 	  return;
       }
     result = geomFromDynamicLine (*p);
+    gaiaFreeDynamicLine (*p);
     if (!result)
 	sqlite3_result_null (context);
     else
@@ -9219,184 +9313,6 @@ gaia_mbr_del (void *p)
 }
 
 static int
-fnct_RTreeWithin (sqlite3_rtree_geometry * p, int nCoord, double *aCoord,
-		  int *pRes)
-{
-/* R*Tree Geometry callback function:
-/ ... MATCH RTreeWithin(double x1, double y1, double x2, double y2)
-*/
-    struct gaia_rtree_mbr *mbr;
-    double xmin;
-    double xmax;
-    double ymin;
-    double ymax;
-    float fminx;
-    float fminy;
-    float fmaxx;
-    float fmaxy;
-    double tic;
-    double tic2;
-
-    if (p->pUser == 0)
-      {
-	  /* first call: we must check args and then initialize the MBR struct */
-	  if (nCoord != 4)
-	      return SQLITE_ERROR;
-	  if (p->nParam != 4)
-	      return SQLITE_ERROR;
-	  mbr = (struct gaia_rtree_mbr *) (p->pUser =
-					   sqlite3_malloc (sizeof
-							   (struct
-							    gaia_rtree_mbr)));
-	  if (!mbr)
-	      return SQLITE_NOMEM;
-	  p->xDelUser = gaia_mbr_del;
-	  xmin = p->aParam[0];
-	  ymin = p->aParam[1];
-	  xmax = p->aParam[2];
-	  ymax = p->aParam[3];
-	  if (xmin > xmax)
-	    {
-		xmin = p->aParam[2];
-		xmax = p->aParam[0];
-	    }
-	  if (ymin > ymax)
-	    {
-		ymin = p->aParam[3];
-		ymax = p->aParam[1];
-	    }
-
-	  /* adjusting the MBR so to compensate for DOUBLE/FLOAT truncations */
-	  fminx = xmin;
-	  fminy = ymin;
-	  fmaxx = xmax;
-	  fmaxy = ymax;
-	  tic = fabs (xmin - fminx);
-	  tic2 = fabs (ymin - fminy);
-	  if (tic2 > tic)
-	      tic = tic2;
-	  tic2 = fabs (xmax - fmaxx);
-	  if (tic2 > tic)
-	      tic = tic2;
-	  tic2 = fabs (ymax - fmaxy);
-	  if (tic2 > tic)
-	      tic = tic2;
-	  tic *= 2.0;
-
-	  mbr->minx = xmin - tic;
-	  mbr->miny = ymin - tic;
-	  mbr->maxx = xmax + tic;
-	  mbr->maxy = ymax + tic;
-      }
-
-    mbr = (struct gaia_rtree_mbr *) (p->pUser);
-    xmin = aCoord[0];
-    xmax = aCoord[1];
-    ymin = aCoord[2];
-    ymax = aCoord[3];
-    *pRes = 1;
-/* evaluating Within relationship */
-    if (xmin < mbr->minx)
-	*pRes = 0;
-    if (xmax > mbr->maxx)
-	*pRes = 0;
-    if (ymin < mbr->miny)
-	*pRes = 0;
-    if (ymax > mbr->maxy)
-	*pRes = 0;
-    return SQLITE_OK;
-}
-
-static int
-fnct_RTreeContains (sqlite3_rtree_geometry * p, int nCoord, double *aCoord,
-		    int *pRes)
-{
-/* R*Tree Geometry callback function:
-/ ... MATCH RTreeContains(double x1, double y1, double x2, double y2)
-*/
-    struct gaia_rtree_mbr *mbr;
-    double xmin;
-    double xmax;
-    double ymin;
-    double ymax;
-    float fminx;
-    float fminy;
-    float fmaxx;
-    float fmaxy;
-    double tic;
-    double tic2;
-
-    if (p->pUser == 0)
-      {
-	  /* first call: we must check args and then initialize the MBR struct */
-	  if (nCoord != 4)
-	      return SQLITE_ERROR;
-	  if (p->nParam != 4)
-	      return SQLITE_ERROR;
-	  mbr = (struct gaia_rtree_mbr *) (p->pUser =
-					   sqlite3_malloc (sizeof
-							   (struct
-							    gaia_rtree_mbr)));
-	  if (!mbr)
-	      return SQLITE_NOMEM;
-	  p->xDelUser = gaia_mbr_del;
-	  xmin = p->aParam[0];
-	  ymin = p->aParam[1];
-	  xmax = p->aParam[2];
-	  ymax = p->aParam[3];
-	  if (xmin > xmax)
-	    {
-		xmin = p->aParam[2];
-		xmax = p->aParam[0];
-	    }
-	  if (ymin > ymax)
-	    {
-		ymin = p->aParam[3];
-		ymax = p->aParam[1];
-	    }
-
-	  /* adjusting the MBR so to compensate for DOUBLE/FLOAT truncations */
-	  fminx = xmin;
-	  fminy = ymin;
-	  fmaxx = xmax;
-	  fmaxy = ymax;
-	  tic = fabs (xmin - fminx);
-	  tic2 = fabs (ymin - fminy);
-	  if (tic2 > tic)
-	      tic = tic2;
-	  tic2 = fabs (xmax - fmaxx);
-	  if (tic2 > tic)
-	      tic = tic2;
-	  tic2 = fabs (ymax - fmaxy);
-	  if (tic2 > tic)
-	      tic = tic2;
-	  tic *= 2.0;
-
-	  mbr->minx = xmin - tic;
-	  mbr->miny = ymin - tic;
-	  mbr->maxx = xmax + tic;
-	  mbr->maxy = ymax + tic;
-      }
-
-    mbr = (struct gaia_rtree_mbr *) (p->pUser);
-    xmin = aCoord[0];
-    xmax = aCoord[1];
-    ymin = aCoord[2];
-    ymax = aCoord[3];
-    *pRes = 1;
-/* evaluating Contains relationship */
-    if (mbr->minx < xmin)
-	*pRes = 0;
-    if (mbr->maxx > xmax)
-	*pRes = 0;
-    if (mbr->miny < ymin)
-	*pRes = 0;
-    if (mbr->maxy > ymax)
-	*pRes = 0;
-    return SQLITE_OK;
-}
-
-static int
 fnct_RTreeIntersects (sqlite3_rtree_geometry * p, int nCoord, double *aCoord,
 		      int *pRes)
 {
@@ -9445,10 +9361,10 @@ fnct_RTreeIntersects (sqlite3_rtree_geometry * p, int nCoord, double *aCoord,
 	    }
 
 	  /* adjusting the MBR so to compensate for DOUBLE/FLOAT truncations */
-	  fminx = xmin;
-	  fminy = ymin;
-	  fmaxx = xmax;
-	  fmaxy = ymax;
+	  fminx = (float) xmin;
+	  fminy = (float) ymin;
+	  fmaxx = (float) xmax;
+	  fmaxy = (float) ymax;
 	  tic = fabs (xmin - fminx);
 	  tic2 = fabs (ymin - fminy);
 	  if (tic2 > tic)
@@ -9695,7 +9611,7 @@ fnct_NumPoints (sqlite3_context * context, int argc, sqlite3_value ** argv)
 /* SQL function:
 / NumPoints(BLOB encoded LINESTRING)
 /
-/ returns the numer of vertices for current LINESTRING geometry 
+/ returns the number of vertices for current LINESTRING geometry 
 / or NULL if any error is encountered
 */
     unsigned char *p_blob;
@@ -10739,7 +10655,7 @@ get_ellipse_params (sqlite3 * sqlite, int srid, double *a, double *b,
 		    double *rf)
 {
 /* 
-/ retrives the PROJ +ellps=xx [+a=xx +b=xx] params 
+/ retrieves the PROJ +ellps=xx [+a=xx +b=xx] params 
 /from SPATIAL_SYS_REF table, if possible 
 */
     char proj4text[2048];
@@ -10766,7 +10682,7 @@ get_ellipse_params (sqlite3 * sqlite, int srid, double *a, double *b,
 	return 0;
     if (p_ellps)
       {
-	  /* tryng to retrieve the ellipsoid params by name */
+	  /* trying to retrieve the ellipsoid params by name */
 	  p_end = strchr (p_ellps, ' ');
 	  if (p_end)
 	      *p_end = '\0';
@@ -10838,14 +10754,17 @@ fnct_ToEWKB (sqlite3_context * context, int argc, sqlite3_value ** argv)
     GAIA_UNUSED ();
     if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
       {
-	  sqlite3_result_int (context, -1);
+	  sqlite3_result_null (context);
 	  return;
       }
     p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
     n_bytes = sqlite3_value_bytes (argv[0]);
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
     if (!geo)
-	sqlite3_result_int (context, -1);
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
     else
       {
 	  gaiaOutBufferInitialize (&out_buf);
@@ -10885,12 +10804,12 @@ fnct_ToEWKT (sqlite3_context * context, int argc, sqlite3_value ** argv)
       }
     p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
     n_bytes = sqlite3_value_bytes (argv[0]);
+    gaiaOutBufferInitialize (&out_buf);
     geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
     if (!geo)
 	sqlite3_result_null (context);
     else
       {
-	  gaiaOutBufferInitialize (&out_buf);
 	  gaiaToEWKT (&out_buf, geo);
 	  if (out_buf.Error || out_buf.Buffer == NULL)
 	      sqlite3_result_null (context);
@@ -11080,6 +10999,8 @@ fnct_LinesFromRings (sqlite3_context * context, int argc, sqlite3_value ** argv)
     sqlite3_result_null (context);
 }
 
+#ifndef OMIT_GEOS		/* including GEOS */
+
 static void
 fnct_BuildArea (sqlite3_context * context, int argc, sqlite3_value ** argv)
 {
@@ -11125,6 +11046,7 @@ fnct_BuildArea (sqlite3_context * context, int argc, sqlite3_value ** argv)
     gaiaFreeGeomColl (geo);
 }
 
+
 static void
 fnct_Polygonize_step (sqlite3_context * context, int argc,
 		      sqlite3_value ** argv)
@@ -11206,6 +11128,8 @@ fnct_Polygonize_final (sqlite3_context * context)
       }
 }
 
+#endif /* end including GEOS */
+
 static void
 fnct_DissolveSegments (sqlite3_context * context, int argc,
 		       sqlite3_value ** argv)
@@ -11442,7 +11366,7 @@ fnct_Boundary (sqlite3_context * context, int argc, sqlite3_value ** argv)
 /* SQL function:
 / Boundary(BLOB encoded geometry)
 /
-/ returns the combinatioral boundary for current geometry 
+/ returns the combinatorial boundary for current geometry 
 / or NULL if any error is encountered
 */
     unsigned char *p_blob;
@@ -11638,7 +11562,7 @@ static void
 fnct_Length (sqlite3_context * context, int argc, sqlite3_value ** argv)
 {
 /* SQL function:
-/ Length(BLOB encoded GEOMETRYCOLLECTION)
+/ GLength(BLOB encoded GEOMETRYCOLLECTION)
 /
 / returns  the total length for current geometry 
 / or NULL if any error is encountered
@@ -12771,7 +12695,7 @@ fnct_PtDistWithin (sqlite3_context * context, int argc, sqlite3_value ** argv)
 / [, boolen use_spheroid])
 /
 / returns TRUE if the distance between GEOM-1 and GEOM-2
-/ is less or equale to dist
+/ is less or equal to dist
 /
 / - if both geom1 and geom2 are in the 4326 (WGS84) SRID,
 /   (and does actually contains a single POINT each one)
@@ -12781,7 +12705,7 @@ fnct_PtDistWithin (sqlite3_context * context, int argc, sqlite3_value ** argv)
 /   computed on the sphere (quickest) or on the spheroid 
 /   default: use_spheroid = FALSE
 / 
-/ in any other case the "plain" distance is evaluted
+/ in any other case the "plain" distance is evaluated
 */
     unsigned char *p_blob;
     int n_bytes;
@@ -13402,22 +13326,134 @@ fnct_OffsetCurve (sqlite3_context * context, int argc, sqlite3_value ** argv)
 }
 
 static void
-fnct_CommonEdges (sqlite3_context * context, int argc, sqlite3_value ** argv)
+fnct_SingleSidedBuffer (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
 {
 /* SQL function:
-/ CommonEdges(BLOBencoded geometry1, BLOBencoded geometry2)
+/ SingleSidedBuffer(BLOBencoded geometry, radius, left-or-right-side)
 /
-/ returns a new geometry representing common (shared) Edges
-/ [two LINESTRINGs/MULTILINESTRINGs are expected]
+/ returns a new geometry representing the SingleSided BUFFER 
+/ for current geometry [a LINESTRING is expected]
 / or NULL if any error is encountered
 */
     unsigned char *p_blob;
     int n_bytes;
-    gaiaGeomCollPtr geo1 = NULL;
-    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr geo = NULL;
     gaiaGeomCollPtr result;
-    GAIA_UNUSED ();
-    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+    double radius;
+    int int_value;
+    int left_right;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) == SQLITE_FLOAT)
+	radius = sqlite3_value_double (argv[1]);
+    else if (sqlite3_value_type (argv[1]) == SQLITE_INTEGER)
+      {
+	  int_value = sqlite3_value_int (argv[1]);
+	  radius = int_value;
+      }
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[2]) == SQLITE_INTEGER)
+	left_right = sqlite3_value_int (argv[2]);
+    else
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo)
+	sqlite3_result_null (context);
+    else
+      {
+	  result = gaiaSingleSidedBuffer (geo, radius, 16, left_right);
+	  if (!result)
+	      sqlite3_result_null (context);
+	  else
+	    {
+		/* builds the BLOB geometry to be returned */
+		int len;
+		unsigned char *p_result = NULL;
+		result->Srid = geo->Srid;
+		gaiaToSpatiaLiteBlobWkb (result, &p_result, &len);
+		sqlite3_result_blob (context, p_result, len, free);
+		gaiaFreeGeomColl (result);
+	    }
+      }
+    gaiaFreeGeomColl (geo);
+}
+
+static void
+fnct_HausdorffDistance (sqlite3_context * context, int argc,
+			sqlite3_value ** argv)
+{
+/* SQL function:
+/ HausdorffDistance(BLOBencoded geom1, BLOBencoded geom2)
+/
+/ returns the discrete Hausdorff distance between GEOM-1 and GEOM-2
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    double dist;
+    int ret;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    if (sqlite3_value_type (argv[1]) != SQLITE_BLOB)
+      {
+	  sqlite3_result_null (context);
+	  return;
+      }
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[0]);
+    n_bytes = sqlite3_value_bytes (argv[0]);
+    geo1 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    p_blob = (unsigned char *) sqlite3_value_blob (argv[1]);
+    n_bytes = sqlite3_value_bytes (argv[1]);
+    geo2 = gaiaFromSpatiaLiteBlobWkb (p_blob, n_bytes);
+    if (!geo1 || !geo2)
+	sqlite3_result_null (context);
+    else
+      {
+	  ret = gaiaHausdorffDistance (geo1, geo2, &dist);
+	  if (!ret)
+	      sqlite3_result_null (context);
+	  sqlite3_result_double (context, dist);
+      }
+    gaiaFreeGeomColl (geo1);
+    gaiaFreeGeomColl (geo2);
+}
+
+static void
+fnct_SharedPaths (sqlite3_context * context, int argc, sqlite3_value ** argv)
+{
+/* SQL function:
+/ SharedPaths(BLOBencoded geometry1, BLOBencoded geometry2)
+/
+/ returns a new geometry representing common (shared) Edges
+/ [two LINESTRINGs/MULTILINESTRINGs are expected]
+/ or NULL if any error is encountered
+*/
+    unsigned char *p_blob;
+    int n_bytes;
+    gaiaGeomCollPtr geo1 = NULL;
+    gaiaGeomCollPtr geo2 = NULL;
+    gaiaGeomCollPtr result;
+    GAIA_UNUSED ();
+    if (sqlite3_value_type (argv[0]) != SQLITE_BLOB)
       {
 	  sqlite3_result_null (context);
 	  return;
@@ -14034,32 +14070,6 @@ fnct_UnaryUnion (sqlite3_context * context, int argc, sqlite3_value ** argv)
 #ifndef OMIT_MATHSQL		/* supporting SQL math functions */
 
 static void
-fnct_math_abs (sqlite3_context * context, int argc, sqlite3_value ** argv)
-{
-/* SQL function:
-/ abs(double X)
-/
-/ Returns the absolute value of X
-/ or NULL if any error is encountered
-*/
-    sqlite3_int64 int_value;
-    double x;
-    GAIA_UNUSED ();
-    if (sqlite3_value_type (argv[0]) == SQLITE_FLOAT)
-      {
-	  x = fabs (sqlite3_value_double (argv[0]));
-	  sqlite3_result_double (context, x);
-      }
-    else if (sqlite3_value_type (argv[0]) == SQLITE_INTEGER)
-      {
-	  int_value = math_llabs (sqlite3_value_int64 (argv[0]));
-	  sqlite3_result_int64 (context, int_value);
-      }
-    else
-	sqlite3_result_null (context);
-}
-
-static void
 fnct_math_acos (sqlite3_context * context, int argc, sqlite3_value ** argv)
 {
 /* SQL function:
@@ -15529,13 +15539,8 @@ fnct_cvtFromIndCh (sqlite3_context * context, int argc, sqlite3_value ** argv)
 }
 
 static void
-init_static_spatialite (sqlite3 * db, char **pzErrMsg,
-			const sqlite3_api_routines * pApi)
+register_spatialite_sql_functions (sqlite3 * db)
 {
-    SQLITE_EXTENSION_INIT2 (pApi);
-/* setting the POSIX locale for numeric */
-    setlocale (LC_NUMERIC, "POSIX");
-    *pzErrMsg = NULL;
     sqlite3_create_function (db, "spatialite_version", 0, SQLITE_ANY, 0,
 			     fnct_spatialite_version, 0, 0);
     sqlite3_create_function (db, "proj4_version", 0, SQLITE_ANY, 0,
@@ -15596,6 +15601,12 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
 			     fnct_CreateTopologyTables, 0, 0);
     sqlite3_create_function (db, "CreateTopologyTables", 3, SQLITE_ANY, 0,
 			     fnct_CreateTopologyTables, 0, 0);
+    sqlite3_create_function (db, "UpdateLayerStatistics", 0, SQLITE_ANY, 0,
+			     fnct_UpdateLayerStatistics, 0, 0);
+    sqlite3_create_function (db, "UpdateLayerStatistics", 1, SQLITE_ANY, 0,
+			     fnct_UpdateLayerStatistics, 0, 0);
+    sqlite3_create_function (db, "UpdateLayerStatistics", 2, SQLITE_ANY, 0,
+			     fnct_UpdateLayerStatistics, 0, 0);
     sqlite3_create_function (db, "AsText", 1, SQLITE_ANY, 0, fnct_AsText, 0, 0);
     sqlite3_create_function (db, "ST_AsText", 1, SQLITE_ANY, 0, fnct_AsText,
 			     0, 0);
@@ -16077,6 +16088,8 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
 			     fnct_LinesFromRings, 0, 0);
     sqlite3_create_function (db, "LinesFromRings", 2, SQLITE_ANY, 0,
 			     fnct_LinesFromRings, 0, 0);
+
+#ifndef OMIT_GEOS		/* including GEOS */
     sqlite3_create_function (db, "BuildArea", 1, SQLITE_ANY, 0, fnct_BuildArea,
 			     0, 0);
     sqlite3_create_function (db, "ST_BuildArea", 1, SQLITE_ANY, 0,
@@ -16085,6 +16098,8 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
 			     fnct_Polygonize_step, fnct_Polygonize_final);
     sqlite3_create_function (db, "ST_Polygonize", 1, SQLITE_ANY, 0, 0,
 			     fnct_Polygonize_step, fnct_Polygonize_final);
+#endif /* end including GEOS */
+
     sqlite3_create_function (db, "DissolveSegments", 1, SQLITE_ANY, 0,
 			     fnct_DissolveSegments, 0, 0);
     sqlite3_create_function (db, "ST_DissolveSegments", 1, SQLITE_ANY, 0,
@@ -16098,8 +16113,9 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
     sqlite3_create_function (db, "ST_CollectionExtract", 2, SQLITE_ANY, 0,
 			     fnct_CollectionExtract, 0, 0);
 #ifndef OMIT_GEOCALLBACKS	/* supporting RTree geometry callbacks */
-    sqlite3_rtree_geometry_callback (db, "RTreeWithin", fnct_RTreeWithin, 0);
-    sqlite3_rtree_geometry_callback (db, "RTreeContains", fnct_RTreeContains,
+    sqlite3_rtree_geometry_callback (db, "RTreeWithin", fnct_RTreeIntersects,
+				     0);
+    sqlite3_rtree_geometry_callback (db, "RTreeContains", fnct_RTreeIntersects,
 				     0);
     sqlite3_rtree_geometry_callback (db, "RTreeIntersects",
 				     fnct_RTreeIntersects, 0);
@@ -16220,7 +16236,6 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
 #ifndef OMIT_MATHSQL		/* supporting SQL math functions */
 
 /* some extra math functions */
-    sqlite3_create_function (db, "abs", 1, SQLITE_ANY, 0, fnct_math_abs, 0, 0);
     sqlite3_create_function (db, "acos", 1, SQLITE_ANY, 0, fnct_math_acos, 0,
 			     0);
     sqlite3_create_function (db, "asin", 1, SQLITE_ANY, 0, fnct_math_asin, 0,
@@ -16429,10 +16444,18 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
 			     fnct_OffsetCurve, 0, 0);
     sqlite3_create_function (db, "ST_OffsetCurve", 3, SQLITE_ANY, 0,
 			     fnct_OffsetCurve, 0, 0);
-    sqlite3_create_function (db, "CommonEdges", 2, SQLITE_ANY, 0,
-			     fnct_CommonEdges, 0, 0);
-    sqlite3_create_function (db, "ST_CommonEdges", 2, SQLITE_ANY, 0,
-			     fnct_CommonEdges, 0, 0);
+    sqlite3_create_function (db, "SingleSidedBuffer", 3, SQLITE_ANY, 0,
+			     fnct_SingleSidedBuffer, 0, 0);
+    sqlite3_create_function (db, "ST_SingleSidedBuffer", 3, SQLITE_ANY, 0,
+			     fnct_SingleSidedBuffer, 0, 0);
+    sqlite3_create_function (db, "HausdorffDistance", 2, SQLITE_ANY, 0,
+			     fnct_HausdorffDistance, 0, 0);
+    sqlite3_create_function (db, "ST_HausdorffDistance", 2, SQLITE_ANY, 0,
+			     fnct_HausdorffDistance, 0, 0);
+    sqlite3_create_function (db, "SharedPaths", 2, SQLITE_ANY, 0,
+			     fnct_SharedPaths, 0, 0);
+    sqlite3_create_function (db, "ST_SharedPaths", 2, SQLITE_ANY, 0,
+			     fnct_SharedPaths, 0, 0);
     sqlite3_create_function (db, "Covers", 2, SQLITE_ANY, 0, fnct_Covers, 0, 0);
     sqlite3_create_function (db, "ST_Covers", 2, SQLITE_ANY, 0, fnct_Covers, 0,
 			     0);
@@ -16474,7 +16497,11 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
 #endif /* end GEOS advanced and experimental features */
 
 #endif /* end including GEOS */
+}
 
+static void
+init_spatialite_virtualtables (sqlite3 * db)
+{
 #ifndef OMIT_ICONV		/* when ICONV is disabled SHP/DBF/TXT cannot be supported */
 /* initializing the VirtualShape  extension */
     virtualshape_extension_init (db);
@@ -16496,6 +16523,21 @@ init_static_spatialite (sqlite3 * db, char **pzErrMsg,
     virtualfdo_extension_init (db);
 /* initializing the VirtualSpatialIndex  extension */
     virtual_spatialindex_extension_init (db);
+}
+
+static void
+init_static_spatialite (sqlite3 * db, char **pzErrMsg,
+			const sqlite3_api_routines * pApi)
+{
+    SQLITE_EXTENSION_INIT2 (pApi);
+/* setting the POSIX locale for numeric */
+    setlocale (LC_NUMERIC, "POSIX");
+    *pzErrMsg = NULL;
+
+    register_spatialite_sql_functions (db);
+
+    init_spatialite_virtualtables (db);
+
 /* setting a timeout handler */
     sqlite3_busy_timeout (db, 5000);
 }
@@ -16538,6 +16580,14 @@ spatialite_init (int verbose)
       }
 }
 
+void
+spatialite_cleanup ()
+{
+#ifndef OMIT_GEOS
+    finishGEOS ();
+#endif
+}
+
 SPATIALITE_DECLARE int
 sqlite3_extension_init (sqlite3 * db, char **pzErrMsg,
 			const sqlite3_api_routines * pApi)
@@ -16546,1013 +16596,805 @@ sqlite3_extension_init (sqlite3 * db, char **pzErrMsg,
     SQLITE_EXTENSION_INIT2 (pApi);
     setlocale (LC_NUMERIC, "POSIX");
     *pzErrMsg = NULL;
-    sqlite3_create_function (db, "spatialite_version", 0, SQLITE_ANY, 0,
-			     fnct_spatialite_version, 0, 0);
-    sqlite3_create_function (db, "proj4_version", 0, SQLITE_ANY, 0,
-			     fnct_proj4_version, 0, 0);
-    sqlite3_create_function (db, "geos_version", 0, SQLITE_ANY, 0,
-			     fnct_geos_version, 0, 0);
-    sqlite3_create_function (db, "GeometryConstraints", 3, SQLITE_ANY, 0,
-			     fnct_GeometryConstraints, 0, 0);
-    sqlite3_create_function (db, "GeometryConstraints", 4, SQLITE_ANY, 0,
-			     fnct_GeometryConstraints, 0, 0);
-    sqlite3_create_function (db, "RTreeAlign", 3, SQLITE_ANY, 0,
-			     fnct_RTreeAlign, 0, 0);
-    sqlite3_create_function (db, "CheckSpatialMetaData", 0, SQLITE_ANY, 0,
-			     fnct_CheckSpatialMetaData, 0, 0);
-    sqlite3_create_function (db, "AutoFDOStart", 0, SQLITE_ANY, 0,
-			     fnct_AutoFDOStart, 0, 0);
-    sqlite3_create_function (db, "AutoFDOStop", 0, SQLITE_ANY, 0,
-			     fnct_AutoFDOStop, 0, 0);
-    sqlite3_create_function (db, "InitFDOSpatialMetaData", 0, SQLITE_ANY, 0,
-			     fnct_InitFDOSpatialMetaData, 0, 0);
-    sqlite3_create_function (db, "AddFDOGeometryColumn", 6, SQLITE_ANY, 0,
-			     fnct_AddFDOGeometryColumn, 0, 0);
-    sqlite3_create_function (db, "RecoverFDOGeometryColumn", 6, SQLITE_ANY, 0,
-			     fnct_RecoverFDOGeometryColumn, 0, 0);
-    sqlite3_create_function (db, "DiscardFDOGeometryColumn", 2, SQLITE_ANY, 0,
-			     fnct_DiscardFDOGeometryColumn, 0, 0);
-    sqlite3_create_function (db, "InitSpatialMetaData", 0, SQLITE_ANY, 0,
-			     fnct_InitSpatialMetaData, 0, 0);
-    sqlite3_create_function (db, "AddGeometryColumn", 5, SQLITE_ANY, 0,
-			     fnct_AddGeometryColumn, 0, 0);
-    sqlite3_create_function (db, "AddGeometryColumn", 6, SQLITE_ANY, 0,
-			     fnct_AddGeometryColumn, 0, 0);
-    sqlite3_create_function (db, "RecoverGeometryColumn", 5, SQLITE_ANY, 0,
-			     fnct_RecoverGeometryColumn, 0, 0);
-    sqlite3_create_function (db, "DiscardGeometryColumn", 2, SQLITE_ANY, 0,
-			     fnct_DiscardGeometryColumn, 0, 0);
-    sqlite3_create_function (db, "RecoverSpatialIndex", 0, SQLITE_ANY, 0,
-			     fnct_RecoverSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "RecoverSpatialIndex", 1, SQLITE_ANY, 0,
-			     fnct_RecoverSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "RecoverSpatialIndex", 2, SQLITE_ANY, 0,
-			     fnct_RecoverSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "RecoverSpatialIndex", 3, SQLITE_ANY, 0,
-			     fnct_RecoverSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "CheckSpatialIndex", 0, SQLITE_ANY, 0,
-			     fnct_CheckSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "CheckSpatialIndex", 2, SQLITE_ANY, 0,
-			     fnct_CheckSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "CreateSpatialIndex", 2, SQLITE_ANY, 0,
-			     fnct_CreateSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "CreateMbrCache", 2, SQLITE_ANY, 0,
-			     fnct_CreateMbrCache, 0, 0);
-    sqlite3_create_function (db, "DisableSpatialIndex", 2, SQLITE_ANY, 0,
-			     fnct_DisableSpatialIndex, 0, 0);
-    sqlite3_create_function (db, "RebuildGeometryTriggers", 2, SQLITE_ANY, 0,
-			     fnct_RebuildGeometryTriggers, 0, 0);
-    sqlite3_create_function (db, "CreateTopologyTables", 2, SQLITE_ANY, 0,
-			     fnct_CreateTopologyTables, 0, 0);
-    sqlite3_create_function (db, "CreateTopologyTables", 3, SQLITE_ANY, 0,
-			     fnct_CreateTopologyTables, 0, 0);
-    sqlite3_create_function (db, "AsText", 1, SQLITE_ANY, 0, fnct_AsText, 0, 0);
-    sqlite3_create_function (db, "ST_AsText", 1, SQLITE_ANY, 0, fnct_AsText,
-			     0, 0);
-    sqlite3_create_function (db, "AsWkt", 1, SQLITE_ANY, 0, fnct_AsWkt, 0, 0);
-    sqlite3_create_function (db, "AsWkt", 2, SQLITE_ANY, 0, fnct_AsWkt, 0, 0);
-    sqlite3_create_function (db, "AsSvg", 1, SQLITE_ANY, 0, fnct_AsSvg1, 0, 0);
-    sqlite3_create_function (db, "AsSvg", 2, SQLITE_ANY, 0, fnct_AsSvg2, 0, 0);
-    sqlite3_create_function (db, "AsSvg", 3, SQLITE_ANY, 0, fnct_AsSvg3, 0, 0);
 
-#ifndef OMIT_PROJ		/* PROJ.4 is strictly required to support KML */
-    sqlite3_create_function (db, "AsKml", 1, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
-    sqlite3_create_function (db, "AsKml", 2, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
-    sqlite3_create_function (db, "AsKml", 3, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
-    sqlite3_create_function (db, "AsKml", 4, SQLITE_ANY, 0, fnct_AsKml, 0, 0);
-#endif /* end including PROJ.4 */
+    register_spatialite_sql_functions (db);
 
-    sqlite3_create_function (db, "AsGml", 1, SQLITE_ANY, 0, fnct_AsGml, 0, 0);
-    sqlite3_create_function (db, "AsGml", 2, SQLITE_ANY, 0, fnct_AsGml, 0, 0);
-    sqlite3_create_function (db, "AsGml", 3, SQLITE_ANY, 0, fnct_AsGml, 0, 0);
-    sqlite3_create_function (db, "GeomFromGml", 1, SQLITE_ANY, 0,
-			     fnct_FromGml, 0, 0);
-    sqlite3_create_function (db, "AsGeoJSON", 1, SQLITE_ANY, 0, fnct_AsGeoJSON,
-			     0, 0);
-    sqlite3_create_function (db, "AsGeoJSON", 2, SQLITE_ANY, 0, fnct_AsGeoJSON,
-			     0, 0);
-    sqlite3_create_function (db, "AsGeoJSON", 3, SQLITE_ANY, 0, fnct_AsGeoJSON,
-			     0, 0);
-    sqlite3_create_function (db, "GeomFromGeoJSON", 1, SQLITE_ANY, 0,
-			     fnct_FromGeoJSON, 0, 0);
-    sqlite3_create_function (db, "GeomFromKml", 1, SQLITE_ANY, 0,
-			     fnct_FromKml, 0, 0);
-    sqlite3_create_function (db, "AsFGF", 2, SQLITE_ANY, 0, fnct_AsFGF, 0, 0);
-    sqlite3_create_function (db, "GeomFromEWKB", 1, SQLITE_ANY, 0,
-			     fnct_FromEWKB, 0, 0);
-    sqlite3_create_function (db, "AsEWKB", 1, SQLITE_ANY, 0, fnct_ToEWKB, 0, 0);
-    sqlite3_create_function (db, "GeomFromEWKT", 1, SQLITE_ANY, 0,
-			     fnct_FromEWKT, 0, 0);
-    sqlite3_create_function (db, "AsEWKT", 1, SQLITE_ANY, 0, fnct_ToEWKT, 0, 0);
-    sqlite3_create_function (db, "AsBinary", 1, SQLITE_ANY, 0, fnct_AsBinary,
-			     0, 0);
-    sqlite3_create_function (db, "ST_AsBinary", 1, SQLITE_ANY, 0,
-			     fnct_AsBinary, 0, 0);
-    sqlite3_create_function (db, "GeomFromText", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromText1, 0, 0);
-    sqlite3_create_function (db, "GeomFromText", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromText2, 0, 0);
-    sqlite3_create_function (db, "GeometryFromText", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromText1, 0, 0);
-    sqlite3_create_function (db, "GeometryFromText", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromText2, 0, 0);
-    sqlite3_create_function (db, "GeomCollFromText", 1, SQLITE_ANY, 0,
-			     fnct_GeomCollFromText1, 0, 0);
-    sqlite3_create_function (db, "GeomCollFromText", 2, SQLITE_ANY, 0,
-			     fnct_GeomCollFromText2, 0, 0);
-    sqlite3_create_function (db, "GeometryCollectionFromText", 1, SQLITE_ANY,
-			     0, fnct_GeomCollFromText1, 0, 0);
-    sqlite3_create_function (db, "GeometryCollectionFromText", 2, SQLITE_ANY,
-			     0, fnct_GeomCollFromText2, 0, 0);
-    sqlite3_create_function (db, "LineFromText", 1, SQLITE_ANY, 0,
-			     fnct_LineFromText1, 0, 0);
-    sqlite3_create_function (db, "LineFromText", 2, SQLITE_ANY, 0,
-			     fnct_LineFromText2, 0, 0);
-    sqlite3_create_function (db, "LineStringFromText", 1, SQLITE_ANY, 0,
-			     fnct_LineFromText1, 0, 0);
-    sqlite3_create_function (db, "LineStringFromText", 2, SQLITE_ANY, 0,
-			     fnct_LineFromText2, 0, 0);
-    sqlite3_create_function (db, "MLineFromText", 1, SQLITE_ANY, 0,
-			     fnct_MLineFromText1, 0, 0);
-    sqlite3_create_function (db, "MLineFromText", 2, SQLITE_ANY, 0,
-			     fnct_MLineFromText2, 0, 0);
-    sqlite3_create_function (db, "MultiLineStringFromText", 1, SQLITE_ANY, 0,
-			     fnct_MLineFromText1, 0, 0);
-    sqlite3_create_function (db, "MultiLineStringFromText", 2, SQLITE_ANY, 0,
-			     fnct_MLineFromText2, 0, 0);
-    sqlite3_create_function (db, "MPointFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromText1, 0, 0);
-    sqlite3_create_function (db, "MPointFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromText2, 0, 0);
-    sqlite3_create_function (db, "MultiPointFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromText1, 0, 0);
-    sqlite3_create_function (db, "MultiPointFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromText2, 0, 0);
-    sqlite3_create_function (db, "MPolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "MPolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "MultiPolygonFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "MultiPolygonFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "PointFromText", 1, SQLITE_ANY, 0,
-			     fnct_PointFromText1, 0, 0);
-    sqlite3_create_function (db, "PointFromText", 2, SQLITE_ANY, 0,
-			     fnct_PointFromText2, 0, 0);
-    sqlite3_create_function (db, "PolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromText1, 0, 0);
-    sqlite3_create_function (db, "PolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromText2, 0, 0);
-    sqlite3_create_function (db, "PolygonFromText", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromText1, 0, 0);
-    sqlite3_create_function (db, "PolygomFromText", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromText2, 0, 0);
-    sqlite3_create_function (db, "GeomFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb1, 0, 0);
-    sqlite3_create_function (db, "GeomFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb2, 0, 0);
-    sqlite3_create_function (db, "GeometryFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb1, 0, 0);
-    sqlite3_create_function (db, "GeometryFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb2, 0, 0);
-    sqlite3_create_function (db, "GeomCollFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_GeomCollFromWkb1, 0, 0);
-    sqlite3_create_function (db, "GeomCollFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_GeomCollFromWkb2, 0, 0);
-    sqlite3_create_function (db, "GeometryCollectionFromWKB", 1, SQLITE_ANY,
-			     0, fnct_GeomCollFromWkb1, 0, 0);
-    sqlite3_create_function (db, "GeometryCollectionFromWKB", 2, SQLITE_ANY,
-			     0, fnct_GeomCollFromWkb2, 0, 0);
-    sqlite3_create_function (db, "LineFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_LineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "LineFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_LineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "LineStringFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_LineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "LineStringFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_LineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "MLineFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MLineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "MLineFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MLineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "MultiLineStringFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MLineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "MultiLineStringFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MLineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "MPointFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb1, 0, 0);
-    sqlite3_create_function (db, "MPointFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb2, 0, 0);
-    sqlite3_create_function (db, "MultiPointFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb1, 0, 0);
-    sqlite3_create_function (db, "MultiPointFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb2, 0, 0);
-    sqlite3_create_function (db, "MPolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "MPolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "MultiPolygonFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "MultiPolygomFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "PointFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_PointFromWkb1, 0, 0);
-    sqlite3_create_function (db, "PointFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_PointFromWkb2, 0, 0);
-    sqlite3_create_function (db, "PolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "PolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "PolygonFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "PolygonFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_GeomFromText", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_GeomFromText", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryFromText", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryFromText", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_GeomCollFromText", 1, SQLITE_ANY, 0,
-			     fnct_GeomCollFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_GeomCollFromText", 2, SQLITE_ANY, 0,
-			     fnct_GeomCollFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryCollectionFromText", 1,
-			     SQLITE_ANY, 0, fnct_GeomCollFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryCollectionFromText", 2,
-			     SQLITE_ANY, 0, fnct_GeomCollFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_PointFromText", 1, SQLITE_ANY, 0,
-			     fnct_PointFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_PointFromText", 2, SQLITE_ANY, 0,
-			     fnct_PointFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_LineFromText", 1, SQLITE_ANY, 0,
-			     fnct_LineFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_LineFromText", 2, SQLITE_ANY, 0,
-			     fnct_LineFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_LineStringFromText", 1, SQLITE_ANY, 0,
-			     fnct_LineFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_LineStringFromText", 2, SQLITE_ANY, 0,
-			     fnct_LineFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_PolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_PolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_PolygonFromText", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_PolygonFromText", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_MPointFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_MPointFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPointFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPointFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_MLineFromText", 1, SQLITE_ANY, 0,
-			     fnct_MLineFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_MLineFromText", 2, SQLITE_ANY, 0,
-			     fnct_MLineFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_MultiLineStringFromText", 1, SQLITE_ANY,
-			     0, fnct_MLineFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_MultiLineStringFromText", 2, SQLITE_ANY,
-			     0, fnct_MLineFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_MPolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_MPolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPolygonFromText", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPolygonFromText", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_GeomFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_GeomFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_GeomFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_GeomCollFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_GeomCollFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_GeomCollFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_GeomCollFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryCollectionFromWKB", 1,
-			     SQLITE_ANY, 0, fnct_GeomCollFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryCollectionFromWKB", 2,
-			     SQLITE_ANY, 0, fnct_GeomCollFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_PointFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_PointFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_PointFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_PointFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_LineFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_LineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_LineFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_LineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_LineStringFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_LineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_LineStringFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_LineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_PolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_PolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_PolygonFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_PolygonFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_PolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_MPointFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_MPointFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPointFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPointFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPointFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_MLineFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MLineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_MLineFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MLineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_MultiLineStringFromWKB", 1, SQLITE_ANY,
-			     0, fnct_MLineFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_MultiLineStringFromWKB", 2, SQLITE_ANY,
-			     0, fnct_MLineFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_MPolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_MPolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPolygonFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb1, 0, 0);
-    sqlite3_create_function (db, "ST_MultiPolygonFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_MPolyFromWkb2, 0, 0);
-    sqlite3_create_function (db, "GeomFromFGF", 1, SQLITE_ANY, 0,
-			     fnct_GeometryFromFGF1, 0, 0);
-    sqlite3_create_function (db, "GeomFromFGF", 2, SQLITE_ANY, 0,
-			     fnct_GeometryFromFGF2, 0, 0);
-    sqlite3_create_function (db, "CompressGeometry", 1, SQLITE_ANY, 0,
-			     fnct_CompressGeometry, 0, 0);
-    sqlite3_create_function (db, "UncompressGeometry", 1, SQLITE_ANY, 0,
-			     fnct_UncompressGeometry, 0, 0);
-    sqlite3_create_function (db, "SanitizeGeometry", 1, SQLITE_ANY, 0,
-			     fnct_SanitizeGeometry, 0, 0);
-    sqlite3_create_function (db, "CastToPoint", 1, SQLITE_ANY, 0,
-			     fnct_CastToPoint, 0, 0);
-    sqlite3_create_function (db, "CastToLinestring", 1, SQLITE_ANY, 0,
-			     fnct_CastToLinestring, 0, 0);
-    sqlite3_create_function (db, "CastToPolygon", 1, SQLITE_ANY, 0,
-			     fnct_CastToPolygon, 0, 0);
-    sqlite3_create_function (db, "CastToMultiPoint", 1, SQLITE_ANY, 0,
-			     fnct_CastToMultiPoint, 0, 0);
-    sqlite3_create_function (db, "CastToMultiLinestring", 1, SQLITE_ANY, 0,
-			     fnct_CastToMultiLinestring, 0, 0);
-    sqlite3_create_function (db, "CastToMultiPolygon", 1, SQLITE_ANY, 0,
-			     fnct_CastToMultiPolygon, 0, 0);
-    sqlite3_create_function (db, "CastToGeometryCollection", 1, SQLITE_ANY, 0,
-			     fnct_CastToGeometryCollection, 0, 0);
-    sqlite3_create_function (db, "CastToMulti", 1, SQLITE_ANY, 0,
-			     fnct_CastToMulti, 0, 0);
-    sqlite3_create_function (db, "ST_Multi", 1, SQLITE_ANY, 0,
-			     fnct_CastToMulti, 0, 0);
-    sqlite3_create_function (db, "CastToSingle", 1, SQLITE_ANY, 0,
-			     fnct_CastToSingle, 0, 0);
-    sqlite3_create_function (db, "CastToXY", 1, SQLITE_ANY, 0, fnct_CastToXY,
-			     0, 0);
-    sqlite3_create_function (db, "CastToXYZ", 1, SQLITE_ANY, 0,
-			     fnct_CastToXYZ, 0, 0);
-    sqlite3_create_function (db, "CastToXYM", 1, SQLITE_ANY, 0,
-			     fnct_CastToXYM, 0, 0);
-    sqlite3_create_function (db, "CastToXYZM", 1, SQLITE_ANY, 0,
-			     fnct_CastToXYZM, 0, 0);
-    sqlite3_create_function (db, "ExtractMultiPoint", 1, SQLITE_ANY, 0,
-			     fnct_ExtractMultiPoint, 0, 0);
-    sqlite3_create_function (db, "ExtractMultiLinestring", 1, SQLITE_ANY, 0,
-			     fnct_ExtractMultiLinestring, 0, 0);
-    sqlite3_create_function (db, "ExtractMultiPolygon", 1, SQLITE_ANY, 0,
-			     fnct_ExtractMultiPolygon, 0, 0);
-    sqlite3_create_function (db, "Dimension", 1, SQLITE_ANY, 0,
-			     fnct_Dimension, 0, 0);
-    sqlite3_create_function (db, "ST_Dimension", 1, SQLITE_ANY, 0,
-			     fnct_Dimension, 0, 0);
-    sqlite3_create_function (db, "CoordDimension", 1, SQLITE_ANY, 0,
-			     fnct_CoordDimension, 0, 0);
-    sqlite3_create_function (db, "GeometryType", 1, SQLITE_ANY, 0,
-			     fnct_GeometryType, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryType", 1, SQLITE_ANY, 0,
-			     fnct_GeometryType, 0, 0);
-    sqlite3_create_function (db, "GeometryAliasType", 1, SQLITE_ANY, 0,
-			     fnct_GeometryAliasType, 0, 0);
-    sqlite3_create_function (db, "SridFromAuthCRS", 2, SQLITE_ANY, 0,
-			     fnct_SridFromAuthCRS, 0, 0);
-    sqlite3_create_function (db, "SRID", 1, SQLITE_ANY, 0, fnct_SRID, 0, 0);
-    sqlite3_create_function (db, "ST_SRID", 1, SQLITE_ANY, 0, fnct_SRID, 0, 0);
-    sqlite3_create_function (db, "SetSrid", 2, SQLITE_ANY, 0, fnct_SetSRID, 0,
-			     0);
-    sqlite3_create_function (db, "IsEmpty", 1, SQLITE_ANY, 0, fnct_IsEmpty, 0,
-			     0);
-    sqlite3_create_function (db, "ST_IsEmpty", 1, SQLITE_ANY, 0, fnct_IsEmpty,
-			     0, 0);
-    sqlite3_create_function (db, "Envelope", 1, SQLITE_ANY, 0, fnct_Envelope,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Envelope", 1, SQLITE_ANY, 0,
-			     fnct_Envelope, 0, 0);
-    sqlite3_create_function (db, "X", 1, SQLITE_ANY, 0, fnct_X, 0, 0);
-    sqlite3_create_function (db, "Y", 1, SQLITE_ANY, 0, fnct_Y, 0, 0);
-    sqlite3_create_function (db, "Z", 1, SQLITE_ANY, 0, fnct_Z, 0, 0);
-    sqlite3_create_function (db, "M", 1, SQLITE_ANY, 0, fnct_M, 0, 0);
-    sqlite3_create_function (db, "ST_X", 1, SQLITE_ANY, 0, fnct_X, 0, 0);
-    sqlite3_create_function (db, "ST_Y", 1, SQLITE_ANY, 0, fnct_Y, 0, 0);
-    sqlite3_create_function (db, "ST_Z", 1, SQLITE_ANY, 0, fnct_Z, 0, 0);
-    sqlite3_create_function (db, "ST_M", 1, SQLITE_ANY, 0, fnct_M, 0, 0);
-    sqlite3_create_function (db, "NumPoints", 1, SQLITE_ANY, 0,
-			     fnct_NumPoints, 0, 0);
-    sqlite3_create_function (db, "ST_NumPoints", 1, SQLITE_ANY, 0,
-			     fnct_NumPoints, 0, 0);
-    sqlite3_create_function (db, "StartPoint", 1, SQLITE_ANY, 0,
-			     fnct_StartPoint, 0, 0);
-    sqlite3_create_function (db, "EndPoint", 1, SQLITE_ANY, 0, fnct_EndPoint,
-			     0, 0);
-    sqlite3_create_function (db, "ST_StartPoint", 1, SQLITE_ANY, 0,
-			     fnct_StartPoint, 0, 0);
-    sqlite3_create_function (db, "ST_EndPoint", 1, SQLITE_ANY, 0,
-			     fnct_EndPoint, 0, 0);
-    sqlite3_create_function (db, "PointN", 2, SQLITE_ANY, 0, fnct_PointN, 0, 0);
-    sqlite3_create_function (db, "ST_PointN", 2, SQLITE_ANY, 0, fnct_PointN,
-			     0, 0);
-    sqlite3_create_function (db, "ExteriorRing", 1, SQLITE_ANY, 0,
-			     fnct_ExteriorRing, 0, 0);
-    sqlite3_create_function (db, "ST_ExteriorRing", 1, SQLITE_ANY, 0,
-			     fnct_ExteriorRing, 0, 0);
-    sqlite3_create_function (db, "NumInteriorRings", 1, SQLITE_ANY, 0,
-			     fnct_NumInteriorRings, 0, 0);
-    sqlite3_create_function (db, "NumInteriorRing", 1, SQLITE_ANY, 0,
-			     fnct_NumInteriorRings, 0, 0);
-    sqlite3_create_function (db, "ST_NumInteriorRing", 1, SQLITE_ANY, 0,
-			     fnct_NumInteriorRings, 0, 0);
-    sqlite3_create_function (db, "InteriorRingN", 2, SQLITE_ANY, 0,
-			     fnct_InteriorRingN, 0, 0);
-    sqlite3_create_function (db, "ST_InteriorRingN", 2, SQLITE_ANY, 0,
-			     fnct_InteriorRingN, 0, 0);
-    sqlite3_create_function (db, "NumGeometries", 1, SQLITE_ANY, 0,
-			     fnct_NumGeometries, 0, 0);
-    sqlite3_create_function (db, "ST_NumGeometries", 1, SQLITE_ANY, 0,
-			     fnct_NumGeometries, 0, 0);
-    sqlite3_create_function (db, "GeometryN", 2, SQLITE_ANY, 0,
-			     fnct_GeometryN, 0, 0);
-    sqlite3_create_function (db, "ST_GeometryN", 2, SQLITE_ANY, 0,
-			     fnct_GeometryN, 0, 0);
-    sqlite3_create_function (db, "MBRContains", 2, SQLITE_ANY, 0,
-			     fnct_MbrContains, 0, 0);
-    sqlite3_create_function (db, "MBRDisjoint", 2, SQLITE_ANY, 0,
-			     fnct_MbrDisjoint, 0, 0);
-    sqlite3_create_function (db, "MBREqual", 2, SQLITE_ANY, 0, fnct_MbrEqual,
-			     0, 0);
-    sqlite3_create_function (db, "MBRIntersects", 2, SQLITE_ANY, 0,
-			     fnct_MbrIntersects, 0, 0);
-    sqlite3_create_function (db, "MBROverlaps", 2, SQLITE_ANY, 0,
-			     fnct_MbrOverlaps, 0, 0);
-    sqlite3_create_function (db, "MBRTouches", 2, SQLITE_ANY, 0,
-			     fnct_MbrTouches, 0, 0);
-    sqlite3_create_function (db, "MBRWithin", 2, SQLITE_ANY, 0,
-			     fnct_MbrWithin, 0, 0);
-    sqlite3_create_function (db, "ShiftCoords", 3, SQLITE_ANY, 0,
-			     fnct_ShiftCoords, 0, 0);
-    sqlite3_create_function (db, "ShiftCoordinates", 3, SQLITE_ANY, 0,
-			     fnct_ShiftCoords, 0, 0);
-    sqlite3_create_function (db, "ScaleCoords", 2, SQLITE_ANY, 0,
-			     fnct_ScaleCoords, 0, 0);
-    sqlite3_create_function (db, "ScaleCoords", 3, SQLITE_ANY, 0,
-			     fnct_ScaleCoords, 0, 0);
-    sqlite3_create_function (db, "ScaleCoordinates", 2, SQLITE_ANY, 0,
-			     fnct_ScaleCoords, 0, 0);
-    sqlite3_create_function (db, "ScaleCoordinates", 3, SQLITE_ANY, 0,
-			     fnct_ScaleCoords, 0, 0);
-    sqlite3_create_function (db, "RotateCoords", 2, SQLITE_ANY, 0,
-			     fnct_RotateCoords, 0, 0);
-    sqlite3_create_function (db, "ReflectCoords", 3, SQLITE_ANY, 0,
-			     fnct_ReflectCoords, 0, 0);
-    sqlite3_create_function (db, "SwapCoords", 1, SQLITE_ANY, 0,
-			     fnct_SwapCoords, 0, 0);
-    sqlite3_create_function (db, "RotateCoordinates", 2, SQLITE_ANY, 0,
-			     fnct_RotateCoords, 0, 0);
-    sqlite3_create_function (db, "ReflectCoordinates", 3, SQLITE_ANY, 0,
-			     fnct_ReflectCoords, 0, 0);
-    sqlite3_create_function (db, "SwapCoordinates", 1, SQLITE_ANY, 0,
-			     fnct_SwapCoords, 0, 0);
-    sqlite3_create_function (db, "BuildMbr", 4, SQLITE_ANY, 0, fnct_BuildMbr1,
-			     0, 0);
-    sqlite3_create_function (db, "BuildMbr", 5, SQLITE_ANY, 0, fnct_BuildMbr2,
-			     0, 0);
-    sqlite3_create_function (db, "BuildCircleMbr", 3, SQLITE_ANY, 0,
-			     fnct_BuildCircleMbr1, 0, 0);
-    sqlite3_create_function (db, "BuildCircleMbr", 4, SQLITE_ANY, 0,
-			     fnct_BuildCircleMbr2, 0, 0);
-    sqlite3_create_function (db, "Extent", 1, SQLITE_ANY, 0, 0,
-			     fnct_Extent_step, fnct_Extent_final);
-    sqlite3_create_function (db, "MbrMinX", 1, SQLITE_ANY, 0, fnct_MbrMinX, 0,
-			     0);
-    sqlite3_create_function (db, "MbrMaxX", 1, SQLITE_ANY, 0, fnct_MbrMaxX, 0,
-			     0);
-    sqlite3_create_function (db, "MbrMinY", 1, SQLITE_ANY, 0, fnct_MbrMinY, 0,
-			     0);
-    sqlite3_create_function (db, "MbrMaxY", 1, SQLITE_ANY, 0, fnct_MbrMaxY, 0,
-			     0);
-    sqlite3_create_function (db, "MakePoint", 2, SQLITE_ANY, 0, fnct_MakePoint1,
-			     0, 0);
-    sqlite3_create_function (db, "MakePoint", 3, SQLITE_ANY, 0, fnct_MakePoint2,
-			     0, 0);
-    sqlite3_create_function (db, "MakeLine", 1, SQLITE_ANY, 0, 0,
-			     fnct_MakeLine_step, fnct_MakeLine_final);
-    sqlite3_create_function (db, "MakeLine", 2, SQLITE_ANY, 0, fnct_MakeLine, 0,
-			     0);
-    sqlite3_create_function (db, "Collect", 1, SQLITE_ANY, 0, 0,
-			     fnct_Collect_step, fnct_Collect_final);
-    sqlite3_create_function (db, "Collect", 2, SQLITE_ANY, 0, fnct_Collect, 0,
-			     0);
-    sqlite3_create_function (db, "ST_Collect", 1, SQLITE_ANY, 0, 0,
-			     fnct_Collect_step, fnct_Collect_final);
-    sqlite3_create_function (db, "ST_Collect", 2, SQLITE_ANY, 0, fnct_Collect,
-			     0, 0);
-    sqlite3_create_function (db, "BuildMbrFilter", 4, SQLITE_ANY, 0,
-			     fnct_BuildMbrFilter, 0, 0);
-    sqlite3_create_function (db, "FilterMbrWithin", 4, SQLITE_ANY, 0,
-			     fnct_FilterMbrWithin, 0, 0);
-    sqlite3_create_function (db, "FilterMbrContains", 4, SQLITE_ANY, 0,
-			     fnct_FilterMbrContains, 0, 0);
-    sqlite3_create_function (db, "FilterMbrIntersects", 4, SQLITE_ANY, 0,
-			     fnct_FilterMbrIntersects, 0, 0);
-    sqlite3_create_function (db, "LinesFromRings", 1, SQLITE_ANY, 0,
-			     fnct_LinesFromRings, 0, 0);
-    sqlite3_create_function (db, "LinesFromRings", 2, SQLITE_ANY, 0,
-			     fnct_LinesFromRings, 0, 0);
+    init_spatialite_virtualtables (db);
+
+    /* setting a timeout handler */
+    sqlite3_busy_timeout (db, 5000);
+    return 0;
+}
+
+SPATIALITE_DECLARE sqlite3_int64
+math_llabs (sqlite3_int64 value)
+{
+/* replacing the C99 llabs() function */
+    return value < 0 ? -value : value;
+}
+
+SPATIALITE_DECLARE double
+math_round (double value)
+{
+/* replacing the C99 round() function */
+    double min = floor (value);
+    if (fabs (value - min) < 0.5)
+	return min;
+    return min + 1.0;
+}
+
+static int
+check_layer_statistics (sqlite3 * sqlite)
+{
+/*
+/ checks the LAYER_STATISTICS table for validity;
+/ if the table doesn't exist, attempts to create
+*/
+    char sql[8192];
+    char **results;
+    int rows;
+    int columns;
+    int ret;
+    int raster_layer = 0;
+    int table_name = 0;
+    int geometry_column = 0;
+    int row_count = 0;
+    int extent_min_x = 0;
+    int extent_min_y = 0;
+    int extent_max_x = 0;
+    int extent_max_y = 0;
+    int i;
+    const char *name;
 
-#ifndef OMIT_GEOCALLBACKS	/* supporting RTree geometry callbacks */
-    sqlite3_rtree_geometry_callback (db, "RTreeWithin", fnct_RTreeWithin, 0);
-    sqlite3_rtree_geometry_callback (db, "RTreeContains", fnct_RTreeContains,
-				     0);
-    sqlite3_rtree_geometry_callback (db, "RTreeIntersects",
-				     fnct_RTreeIntersects, 0);
-    sqlite3_rtree_geometry_callback (db, "RTreeDistWithin",
-				     fnct_RTreeDistWithin, 0);
-#endif /* end RTree geometry callbacks */
+/* checking the LAYER_STATISTICS table */
+    strcpy (sql, "PRAGMA table_info(layer_statistics)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "raster_layer") == 0)
+		    raster_layer = 1;
+		if (strcasecmp (name, "table_name") == 0)
+		    table_name = 1;
+		if (strcasecmp (name, "geometry_column") == 0)
+		    geometry_column = 1;
+		if (strcasecmp (name, "row_count") == 0)
+		    row_count = 1;
+		if (strcasecmp (name, "extent_min_x") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_min_y") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_max_x") == 0)
+		    extent_max_x = 1;
+		if (strcasecmp (name, "extent_max_y") == 0)
+		    extent_max_y = 1;
+	    }
+      }
+    sqlite3_free_table (results);
 
-/* some BLOB/JPEG/EXIF functions */
-    sqlite3_create_function (db, "IsGeometryBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsGeometryBlob, 0, 0);
-    sqlite3_create_function (db, "IsZipBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsZipBlob, 0, 0);
-    sqlite3_create_function (db, "IsPdfBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsPdfBlob, 0, 0);
-    sqlite3_create_function (db, "IsTiffBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsTiffBlob, 0, 0);
-    sqlite3_create_function (db, "IsGifBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsGifBlob, 0, 0);
-    sqlite3_create_function (db, "IsPngBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsPngBlob, 0, 0);
-    sqlite3_create_function (db, "IsJpegBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsJpegBlob, 0, 0);
-    sqlite3_create_function (db, "IsExifBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsExifBlob, 0, 0);
-    sqlite3_create_function (db, "IsExifGpsBlob", 1, SQLITE_ANY, 0,
-			     fnct_IsExifGpsBlob, 0, 0);
-    sqlite3_create_function (db, "GeomFromExifGpsBlob", 1, SQLITE_ANY, 0,
-			     fnct_GeomFromExifGpsBlob, 0, 0);
+/* LAYER_STATISTICS already exists and has a valid layout */
+    if (raster_layer && table_name && geometry_column && row_count
+	&& extent_min_x && extent_max_x && extent_max_y)
+	return 1;
+/* LAYER_STATISTICS already exists, but has an invalid layout */
+    if (raster_layer || table_name || geometry_column || row_count
+	|| extent_min_x || extent_max_x || extent_max_y)
+	return 0;
 
-/* some Geodesic functions */
-    sqlite3_create_function (db, "GreatCircleLength", 1, SQLITE_ANY, 0,
-			     fnct_GreatCircleLength, 0, 0);
-    sqlite3_create_function (db, "GeodesicLength", 1, SQLITE_ANY, 0,
-			     fnct_GeodesicLength, 0, 0);
+/* attempting to create LAYER_STATISTICS */
+    strcpy (sql, "CREATE TABLE layer_statistics (\n");
+    strcat (sql, "raster_layer INTEGER NOT NULL,\n");
+    strcat (sql, "table_name TEXT NOT NULL,\n");
+    strcat (sql, "geometry_column TEXT NOT NULL,\n");
+    strcat (sql, "row_count INTEGER,\n");
+    strcat (sql, "extent_min_x DOUBLE,\n");
+    strcat (sql, "extent_min_y DOUBLE,\n");
+    strcat (sql, "extent_max_x DOUBLE,\n");
+    strcat (sql, "extent_max_y DOUBLE,\n");
+    strcat (sql, "CONSTRAINT pk_layer_statistics PRIMARY KEY ");
+    strcat (sql, "(raster_layer, table_name, geometry_column),\n");
+    strcat (sql, "CONSTRAINT fk_layer_statistics FOREIGN KEY ");
+    strcat (sql, "(table_name, geometry_column) REFERENCES ");
+    strcat (sql, "geometry_columns (f_table_name, f_geometry_column) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    return 1;
+}
 
-/* some Length Unit conversion functions */
-    sqlite3_create_function (db, "CvtToKm", 1, SQLITE_ANY, 0, fnct_cvtToKm, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToDm", 1, SQLITE_ANY, 0, fnct_cvtToDm, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToCm", 1, SQLITE_ANY, 0, fnct_cvtToCm, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToMm", 1, SQLITE_ANY, 0, fnct_cvtToMm, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToKmi", 1, SQLITE_ANY, 0, fnct_cvtToKmi,
-			     0, 0);
-    sqlite3_create_function (db, "CvtToIn", 1, SQLITE_ANY, 0, fnct_cvtToIn, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToFt", 1, SQLITE_ANY, 0, fnct_cvtToFt, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToYd", 1, SQLITE_ANY, 0, fnct_cvtToYd, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToMi", 1, SQLITE_ANY, 0, fnct_cvtToMi, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToFath", 1, SQLITE_ANY, 0,
-			     fnct_cvtToFath, 0, 0);
-    sqlite3_create_function (db, "CvtToCh", 1, SQLITE_ANY, 0, fnct_cvtToCh, 0,
-			     0);
-    sqlite3_create_function (db, "CvtToLink", 1, SQLITE_ANY, 0,
-			     fnct_cvtToLink, 0, 0);
-    sqlite3_create_function (db, "CvtToUsIn", 1, SQLITE_ANY, 0,
-			     fnct_cvtToUsIn, 0, 0);
-    sqlite3_create_function (db, "CvtToUsFt", 1, SQLITE_ANY, 0,
-			     fnct_cvtToUsFt, 0, 0);
-    sqlite3_create_function (db, "CvtToUsYd", 1, SQLITE_ANY, 0,
-			     fnct_cvtToUsYd, 0, 0);
-    sqlite3_create_function (db, "CvtToUsCh", 1, SQLITE_ANY, 0,
-			     fnct_cvtToUsCh, 0, 0);
-    sqlite3_create_function (db, "CvtToUsMi", 1, SQLITE_ANY, 0,
-			     fnct_cvtToUsMi, 0, 0);
-    sqlite3_create_function (db, "CvtToIndFt", 1, SQLITE_ANY, 0,
-			     fnct_cvtToIndFt, 0, 0);
-    sqlite3_create_function (db, "CvtToIndYd", 1, SQLITE_ANY, 0,
-			     fnct_cvtToIndYd, 0, 0);
-    sqlite3_create_function (db, "CvtToIndCh", 1, SQLITE_ANY, 0,
-			     fnct_cvtToIndCh, 0, 0);
-    sqlite3_create_function (db, "CvtFromKm", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromKm, 0, 0);
-    sqlite3_create_function (db, "CvtFromDm", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromDm, 0, 0);
-    sqlite3_create_function (db, "CvtFromCm", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromCm, 0, 0);
-    sqlite3_create_function (db, "CvtFromMm", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromMm, 0, 0);
-    sqlite3_create_function (db, "CvtFromKmi", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromKmi, 0, 0);
-    sqlite3_create_function (db, "CvtFromIn", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromIn, 0, 0);
-    sqlite3_create_function (db, "CvtFromFt", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromFt, 0, 0);
-    sqlite3_create_function (db, "CvtFromYd", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromYd, 0, 0);
-    sqlite3_create_function (db, "CvtFromMi", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromMi, 0, 0);
-    sqlite3_create_function (db, "CvtFromFath", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromFath, 0, 0);
-    sqlite3_create_function (db, "CvtFromCh", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromCh, 0, 0);
-    sqlite3_create_function (db, "CvtFromLink", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromLink, 0, 0);
-    sqlite3_create_function (db, "CvtFromUsIn", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromUsIn, 0, 0);
-    sqlite3_create_function (db, "CvtFromUsFt", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromUsFt, 0, 0);
-    sqlite3_create_function (db, "CvtFromUsYd", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromUsYd, 0, 0);
-    sqlite3_create_function (db, "CvtFromUsCh", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromUsCh, 0, 0);
-    sqlite3_create_function (db, "CvtFromUsMi", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromUsMi, 0, 0);
-    sqlite3_create_function (db, "CvtFromIndFt", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromIndFt, 0, 0);
-    sqlite3_create_function (db, "CvtFromIndYd", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromIndYd, 0, 0);
-    sqlite3_create_function (db, "CvtFromIndCh", 1, SQLITE_ANY, 0,
-			     fnct_cvtFromIndCh, 0, 0);
+static int
+do_update_layer_statistics (sqlite3 * sqlite, const char *table,
+			    const char *column, int count, int has_coords,
+			    double min_x, double min_y, double max_x,
+			    double max_y)
+{
+/* update LAYER_STATISTICS [single table/geometry] */
+    char sql[8192];
+    int ret;
+    int error = 0;
+    sqlite3_stmt *stmt;
 
-#ifndef OMIT_MATHSQL		/* supporting SQL math functions */
+    if (!check_layer_statistics (sqlite))
+	return 0;
+    strcpy (sql, "INSERT OR REPLACE INTO layer_statistics ");
+    strcat (sql, "(raster_layer, table_name, geometry_column, ");
+    strcat (sql, "row_count, extent_min_x, extent_min_y, ");
+    strcat (sql, "extent_max_x, extent_max_y) ");
+    strcat (sql, "VALUES (0, ?, ?, ?, ?, ?, ?, ?)");
+
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+
+/* binding INSERT params */
+    sqlite3_reset (stmt);
+    sqlite3_clear_bindings (stmt);
+    sqlite3_bind_text (stmt, 1, table, strlen (table), SQLITE_STATIC);
+    sqlite3_bind_text (stmt, 2, column, strlen (column), SQLITE_STATIC);
+    sqlite3_bind_int (stmt, 3, count);
+    if (has_coords)
+      {
+	  sqlite3_bind_double (stmt, 4, min_x);
+	  sqlite3_bind_double (stmt, 5, min_y);
+	  sqlite3_bind_double (stmt, 6, max_x);
+	  sqlite3_bind_double (stmt, 7, max_y);
+      }
+    else
+      {
+	  sqlite3_bind_null (stmt, 4);
+	  sqlite3_bind_null (stmt, 5);
+	  sqlite3_bind_null (stmt, 6);
+	  sqlite3_bind_null (stmt, 7);
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+	error = 1;
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
+
+static int
+check_views_layer_statistics (sqlite3 * sqlite)
+{
+/*
+/ checks the VIEWS_LAYER_STATISTICS table for validity;
+/ if the table doesn't exist, attempts to create
+*/
+    char sql[8192];
+    char **results;
+    int rows;
+    int columns;
+    int ret;
+    int view_name = 0;
+    int view_geometry = 0;
+    int row_count = 0;
+    int extent_min_x = 0;
+    int extent_min_y = 0;
+    int extent_max_x = 0;
+    int extent_max_y = 0;
+    int i;
+    const char *name;
+
+/* checking the VIEWS_LAYER_STATISTICS table */
+    strcpy (sql, "PRAGMA table_info(views_layer_statistics)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "view_name") == 0)
+		    view_name = 1;
+		if (strcasecmp (name, "view_geometry") == 0)
+		    view_geometry = 1;
+		if (strcasecmp (name, "row_count") == 0)
+		    row_count = 1;
+		if (strcasecmp (name, "extent_min_x") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_min_y") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_max_x") == 0)
+		    extent_max_x = 1;
+		if (strcasecmp (name, "extent_max_y") == 0)
+		    extent_max_y = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+
+/* VIEWS_LAYER_STATISTICS already exists and has a valid layout */
+    if (view_name && view_geometry && row_count && extent_min_x && extent_max_x
+	&& extent_max_y)
+	return 1;
+/* VIEWS_LAYER_STATISTICS already exists, but has an invalid layout */
+    if (view_name || view_geometry || row_count || extent_min_x || extent_max_x
+	|| extent_max_y)
+	return 0;
+
+/* attempting to create VIEWS_LAYER_STATISTICS */
+    strcpy (sql, "CREATE TABLE views_layer_statistics (\n");
+    strcat (sql, "view_name TEXT NOT NULL,\n");
+    strcat (sql, "view_geometry TEXT NOT NULL,\n");
+    strcat (sql, "row_count INTEGER,\n");
+    strcat (sql, "extent_min_x DOUBLE,\n");
+    strcat (sql, "extent_min_y DOUBLE,\n");
+    strcat (sql, "extent_max_x DOUBLE,\n");
+    strcat (sql, "extent_max_y DOUBLE,\n");
+    strcat (sql, "CONSTRAINT pk_views_layer_statistics PRIMARY KEY ");
+    strcat (sql, "(view_name, view_geometry),\n");
+    strcat (sql, "CONSTRAINT fk_views_layer_statistics FOREIGN KEY ");
+    strcat (sql, "(view_name, view_geometry) REFERENCES ");
+    strcat (sql, "views_geometry_columns (view_name, view_geometry) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    return 1;
+}
+
+static int
+do_update_views_layer_statistics (sqlite3 * sqlite, const char *table,
+				  const char *column, int count, int has_coords,
+				  double min_x, double min_y, double max_x,
+				  double max_y)
+{
+/* update VIEWS_LAYER_STATISTICS [single table/geometry] */
+    char sql[8192];
+    int ret;
+    int error = 0;
+    sqlite3_stmt *stmt;
+
+    if (!check_views_layer_statistics (sqlite))
+	return 0;
+    strcpy (sql, "INSERT OR REPLACE INTO views_layer_statistics ");
+    strcat (sql, "(view_name, view_geometry, ");
+    strcat (sql, "row_count, extent_min_x, extent_min_y, ");
+    strcat (sql, "extent_max_x, extent_max_y) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, ?)");
+
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+
+/* binding INSERT params */
+    sqlite3_reset (stmt);
+    sqlite3_clear_bindings (stmt);
+    sqlite3_bind_text (stmt, 1, table, strlen (table), SQLITE_STATIC);
+    sqlite3_bind_text (stmt, 2, column, strlen (column), SQLITE_STATIC);
+    sqlite3_bind_int (stmt, 3, count);
+    if (has_coords)
+      {
+	  sqlite3_bind_double (stmt, 4, min_x);
+	  sqlite3_bind_double (stmt, 5, min_y);
+	  sqlite3_bind_double (stmt, 6, max_x);
+	  sqlite3_bind_double (stmt, 7, max_y);
+      }
+    else
+      {
+	  sqlite3_bind_null (stmt, 4);
+	  sqlite3_bind_null (stmt, 5);
+	  sqlite3_bind_null (stmt, 6);
+	  sqlite3_bind_null (stmt, 7);
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+	error = 1;
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
+
+static int
+check_virts_layer_statistics (sqlite3 * sqlite)
+{
+/*
+/ checks the VIRTS_LAYER_STATISTICS table for validity;
+/ if the table doesn't exist, attempts to create
+*/
+    char sql[8192];
+    char **results;
+    int rows;
+    int columns;
+    int ret;
+    int virt_name = 0;
+    int virt_geometry = 0;
+    int row_count = 0;
+    int extent_min_x = 0;
+    int extent_min_y = 0;
+    int extent_max_x = 0;
+    int extent_max_y = 0;
+    int i;
+    const char *name;
 
-/* some extra math functions */
-    sqlite3_create_function (db, "abs", 1, SQLITE_ANY, 0, fnct_math_abs, 0, 0);
-    sqlite3_create_function (db, "acos", 1, SQLITE_ANY, 0, fnct_math_acos, 0,
-			     0);
-    sqlite3_create_function (db, "asin", 1, SQLITE_ANY, 0, fnct_math_asin, 0,
-			     0);
-    sqlite3_create_function (db, "atan", 1, SQLITE_ANY, 0, fnct_math_atan, 0,
-			     0);
-    sqlite3_create_function (db, "ceil", 1, SQLITE_ANY, 0, fnct_math_ceil, 0,
-			     0);
-    sqlite3_create_function (db, "ceiling", 1, SQLITE_ANY, 0, fnct_math_ceil,
-			     0, 0);
-    sqlite3_create_function (db, "cos", 1, SQLITE_ANY, 0, fnct_math_cos, 0, 0);
-    sqlite3_create_function (db, "cot", 1, SQLITE_ANY, 0, fnct_math_cot, 0, 0);
-    sqlite3_create_function (db, "degrees", 1, SQLITE_ANY, 0,
-			     fnct_math_degrees, 0, 0);
-    sqlite3_create_function (db, "exp", 1, SQLITE_ANY, 0, fnct_math_exp, 0, 0);
-    sqlite3_create_function (db, "floor", 1, SQLITE_ANY, 0, fnct_math_floor,
-			     0, 0);
-    sqlite3_create_function (db, "ln", 1, SQLITE_ANY, 0, fnct_math_logn, 0, 0);
-    sqlite3_create_function (db, "log", 1, SQLITE_ANY, 0, fnct_math_logn, 0, 0);
-    sqlite3_create_function (db, "log", 2, SQLITE_ANY, 0, fnct_math_logn2, 0,
-			     0);
-    sqlite3_create_function (db, "log2", 1, SQLITE_ANY, 0, fnct_math_log_2, 0,
-			     0);
-    sqlite3_create_function (db, "log10", 1, SQLITE_ANY, 0, fnct_math_log_10,
-			     0, 0);
-    sqlite3_create_function (db, "pi", 0, SQLITE_ANY, 0, fnct_math_pi, 0, 0);
-    sqlite3_create_function (db, "pow", 2, SQLITE_ANY, 0, fnct_math_pow, 0, 0);
-    sqlite3_create_function (db, "power", 2, SQLITE_ANY, 0, fnct_math_pow, 0,
-			     0);
-    sqlite3_create_function (db, "radians", 1, SQLITE_ANY, 0,
-			     fnct_math_radians, 0, 0);
-    sqlite3_create_function (db, "round", 1, SQLITE_ANY, 0, fnct_math_round,
-			     0, 0);
-    sqlite3_create_function (db, "sign", 1, SQLITE_ANY, 0, fnct_math_sign, 0,
-			     0);
-    sqlite3_create_function (db, "sin", 1, SQLITE_ANY, 0, fnct_math_sin, 0, 0);
-    sqlite3_create_function (db, "stddev_pop", 1, SQLITE_ANY, 0, 0,
-			     fnct_math_stddev_step, fnct_math_stddev_pop_final);
-    sqlite3_create_function (db, "stddev_samp", 1, SQLITE_ANY, 0, 0,
-			     fnct_math_stddev_step,
-			     fnct_math_stddev_samp_final);
-    sqlite3_create_function (db, "sqrt", 1, SQLITE_ANY, 0, fnct_math_sqrt, 0,
-			     0);
-    sqlite3_create_function (db, "tan", 1, SQLITE_ANY, 0, fnct_math_tan, 0, 0);
-    sqlite3_create_function (db, "var_pop", 1, SQLITE_ANY, 0, 0,
-			     fnct_math_stddev_step, fnct_math_var_pop_final);
-    sqlite3_create_function (db, "var_samp", 1, SQLITE_ANY, 0, 0,
-			     fnct_math_stddev_step, fnct_math_var_samp_final);
+/* checking the VIRTS_LAYER_STATISTICS table */
+    strcpy (sql, "PRAGMA table_info(virts_layer_statistics)");
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "virt_name") == 0)
+		    virt_name = 1;
+		if (strcasecmp (name, "virt_geometry") == 0)
+		    virt_geometry = 1;
+		if (strcasecmp (name, "row_count") == 0)
+		    row_count = 1;
+		if (strcasecmp (name, "extent_min_x") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_min_y") == 0)
+		    extent_min_x = 1;
+		if (strcasecmp (name, "extent_max_x") == 0)
+		    extent_max_x = 1;
+		if (strcasecmp (name, "extent_max_y") == 0)
+		    extent_max_y = 1;
+	    }
+      }
+    sqlite3_free_table (results);
 
-#endif /* end supporting SQL math functions */
+/* VIRTS_LAYER_STATISTICS already exists and has a valid layout */
+    if (virt_name && virt_geometry && row_count && extent_min_x && extent_max_x
+	&& extent_max_y)
+	return 1;
+/* VIRTS_LAYER_STATISTICS already exists, but has an invalid layout */
+    if (virt_name || virt_geometry || row_count || extent_min_x || extent_max_x
+	|| extent_max_y)
+	return 0;
 
-#ifndef OMIT_PROJ		/* including PROJ.4 */
+/* attempting to create VIRTS_LAYER_STATISTICS */
+    strcpy (sql, "CREATE TABLE virts_layer_statistics (\n");
+    strcat (sql, "virt_name TEXT NOT NULL,\n");
+    strcat (sql, "virt_geometry TEXT NOT NULL,\n");
+    strcat (sql, "row_count INTEGER,\n");
+    strcat (sql, "extent_min_x DOUBLE,\n");
+    strcat (sql, "extent_min_y DOUBLE,\n");
+    strcat (sql, "extent_max_x DOUBLE,\n");
+    strcat (sql, "extent_max_y DOUBLE,\n");
+    strcat (sql, "CONSTRAINT pk_virts_layer_statistics PRIMARY KEY ");
+    strcat (sql, "(virt_name, virt_geometry),\n");
+    strcat (sql, "CONSTRAINT fk_virts_layer_statistics FOREIGN KEY ");
+    strcat (sql, "(virt_name, virt_geometry) REFERENCES ");
+    strcat (sql, "virts_geometry_columns (virt_name, virt_geometry) ");
+    strcat (sql, "ON DELETE CASCADE)");
+    ret = sqlite3_exec (sqlite, sql, NULL, 0, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    return 1;
+}
 
-    sqlite3_create_function (db, "Transform", 2, SQLITE_ANY, 0,
-			     fnct_Transform, 0, 0);
-    sqlite3_create_function (db, "ST_Transform", 2, SQLITE_ANY, 0,
-			     fnct_Transform, 0, 0);
+static int
+do_update_virts_layer_statistics (sqlite3 * sqlite, const char *table,
+				  const char *column, int count, int has_coords,
+				  double min_x, double min_y, double max_x,
+				  double max_y)
+{
+/* update VIRTS_LAYER_STATISTICS [single table/geometry] */
+    char sql[8192];
+    int ret;
+    int error = 0;
+    sqlite3_stmt *stmt;
 
-#endif /* end including PROJ.4 */
+    if (!check_virts_layer_statistics (sqlite))
+	return 0;
+    strcpy (sql, "INSERT OR REPLACE INTO virts_layer_statistics ");
+    strcat (sql, "(virt_name, virt_geometry, ");
+    strcat (sql, "row_count, extent_min_x, extent_min_y, ");
+    strcat (sql, "extent_max_x, extent_max_y) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, ?)");
 
-#ifndef OMIT_GEOS		/* including GEOS */
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
 
-    initGEOS (geos_warning, geos_error);
-    sqlite3_create_function (db, "Equals", 2, SQLITE_ANY, 0, fnct_Equals, 0, 0);
-    sqlite3_create_function (db, "ST_Equals", 2, SQLITE_ANY, 0, fnct_Equals,
-			     0, 0);
-    sqlite3_create_function (db, "Intersects", 2, SQLITE_ANY, 0,
-			     fnct_Intersects, 0, 0);
-    sqlite3_create_function (db, "ST_Intersects", 2, SQLITE_ANY, 0,
-			     fnct_Intersects, 0, 0);
-    sqlite3_create_function (db, "Disjoint", 2, SQLITE_ANY, 0, fnct_Disjoint,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Disjoint", 2, SQLITE_ANY, 0,
-			     fnct_Disjoint, 0, 0);
-    sqlite3_create_function (db, "Overlaps", 2, SQLITE_ANY, 0, fnct_Overlaps,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Overlaps", 2, SQLITE_ANY, 0,
-			     fnct_Overlaps, 0, 0);
-    sqlite3_create_function (db, "Crosses", 2, SQLITE_ANY, 0, fnct_Crosses, 0,
-			     0);
-    sqlite3_create_function (db, "ST_Crosses", 2, SQLITE_ANY, 0, fnct_Crosses,
-			     0, 0);
-    sqlite3_create_function (db, "Touches", 2, SQLITE_ANY, 0, fnct_Touches, 0,
-			     0);
-    sqlite3_create_function (db, "ST_Touches", 2, SQLITE_ANY, 0, fnct_Touches,
-			     0, 0);
-    sqlite3_create_function (db, "Within", 2, SQLITE_ANY, 0, fnct_Within, 0, 0);
-    sqlite3_create_function (db, "ST_Within", 2, SQLITE_ANY, 0, fnct_Within,
-			     0, 0);
-    sqlite3_create_function (db, "Contains", 2, SQLITE_ANY, 0, fnct_Contains,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Contains", 2, SQLITE_ANY, 0,
-			     fnct_Contains, 0, 0);
-    sqlite3_create_function (db, "Relate", 3, SQLITE_ANY, 0, fnct_Relate, 0, 0);
-    sqlite3_create_function (db, "ST_Relate", 3, SQLITE_ANY, 0, fnct_Relate,
-			     0, 0);
-    sqlite3_create_function (db, "Distance", 2, SQLITE_ANY, 0, fnct_Distance,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Distance", 2, SQLITE_ANY, 0,
-			     fnct_Distance, 0, 0);
-    sqlite3_create_function (db, "PtDistWithin", 3, SQLITE_ANY, 0,
-			     fnct_PtDistWithin, 0, 0);
-    sqlite3_create_function (db, "PtDistWithin", 4, SQLITE_ANY, 0,
-			     fnct_PtDistWithin, 0, 0);
-    sqlite3_create_function (db, "Intersection", 2, SQLITE_ANY, 0,
-			     fnct_Intersection, 0, 0);
-    sqlite3_create_function (db, "ST_Intersection", 2, SQLITE_ANY, 0,
-			     fnct_Intersection, 0, 0);
-    sqlite3_create_function (db, "Difference", 2, SQLITE_ANY, 0,
-			     fnct_Difference, 0, 0);
-    sqlite3_create_function (db, "ST_Difference", 2, SQLITE_ANY, 0,
-			     fnct_Difference, 0, 0);
-    sqlite3_create_function (db, "GUnion", 1, SQLITE_ANY, 0, 0,
-			     fnct_Union_step, fnct_Union_final);
-    sqlite3_create_function (db, "GUnion", 2, SQLITE_ANY, 0, fnct_Union, 0, 0);
-    sqlite3_create_function (db, "ST_Union", 1, SQLITE_ANY, 0, 0,
-			     fnct_Union_step, fnct_Union_final);
-    sqlite3_create_function (db, "ST_Union", 2, SQLITE_ANY, 0, fnct_Union, 0,
-			     0);
-    sqlite3_create_function (db, "SymDifference", 2, SQLITE_ANY, 0,
-			     fnct_SymDifference, 0, 0);
-    sqlite3_create_function (db, "ST_SymDifference", 2, SQLITE_ANY, 0,
-			     fnct_SymDifference, 0, 0);
-    sqlite3_create_function (db, "Boundary", 1, SQLITE_ANY, 0, fnct_Boundary,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Boundary", 1, SQLITE_ANY, 0,
-			     fnct_Boundary, 0, 0);
-    sqlite3_create_function (db, "GLength", 1, SQLITE_ANY, 0, fnct_Length, 0,
-			     0);
-    sqlite3_create_function (db, "ST_Length", 1, SQLITE_ANY, 0, fnct_Length,
-			     0, 0);
-    sqlite3_create_function (db, "Area", 1, SQLITE_ANY, 0, fnct_Area, 0, 0);
-    sqlite3_create_function (db, "ST_Area", 1, SQLITE_ANY, 0, fnct_Area, 0, 0);
-    sqlite3_create_function (db, "Centroid", 1, SQLITE_ANY, 0, fnct_Centroid,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Centroid", 1, SQLITE_ANY, 0,
-			     fnct_Centroid, 0, 0);
-    sqlite3_create_function (db, "PointOnSurface", 1, SQLITE_ANY, 0,
-			     fnct_PointOnSurface, 0, 0);
-    sqlite3_create_function (db, "ST_PointOnSurface", 1, SQLITE_ANY, 0,
-			     fnct_PointOnSurface, 0, 0);
-    sqlite3_create_function (db, "Simplify", 2, SQLITE_ANY, 0, fnct_Simplify,
-			     0, 0);
-    sqlite3_create_function (db, "ST_Generalize", 2, SQLITE_ANY, 0,
-			     fnct_Simplify, 0, 0);
-    sqlite3_create_function (db, "SimplifyPreserveTopology", 2, SQLITE_ANY, 0,
-			     fnct_SimplifyPreserveTopology, 0, 0);
-    sqlite3_create_function (db, "ConvexHull", 1, SQLITE_ANY, 0,
-			     fnct_ConvexHull, 0, 0);
-    sqlite3_create_function (db, "ST_ConvexHull", 1, SQLITE_ANY, 0,
-			     fnct_ConvexHull, 0, 0);
-    sqlite3_create_function (db, "Buffer", 2, SQLITE_ANY, 0, fnct_Buffer, 0, 0);
-    sqlite3_create_function (db, "ST_Buffer", 2, SQLITE_ANY, 0, fnct_Buffer,
-			     0, 0);
-    sqlite3_create_function (db, "IsClosed", 1, SQLITE_ANY, 0, fnct_IsClosed,
-			     0, 0);
-    sqlite3_create_function (db, "ST_IsClosed", 1, SQLITE_ANY, 0,
-			     fnct_IsClosed, 0, 0);
-    sqlite3_create_function (db, "IsSimple", 1, SQLITE_ANY, 0, fnct_IsSimple,
-			     0, 0);
-    sqlite3_create_function (db, "ST_IsSimple", 1, SQLITE_ANY, 0,
-			     fnct_IsSimple, 0, 0);
-    sqlite3_create_function (db, "IsRing", 1, SQLITE_ANY, 0, fnct_IsRing, 0, 0);
-    sqlite3_create_function (db, "ST_IsRing", 1, SQLITE_ANY, 0, fnct_IsRing,
-			     0, 0);
-    sqlite3_create_function (db, "IsValid", 1, SQLITE_ANY, 0, fnct_IsValid, 0,
-			     0);
-    sqlite3_create_function (db, "ST_IsValid", 1, SQLITE_ANY, 0, fnct_IsValid,
-			     0, 0);
-    sqlite3_create_function (db, "BdPolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_BdPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "BdPolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_BdPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "BdMPolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "BdMPolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "BdPolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_BdPolyFromWKB1, 0, 0);
-    sqlite3_create_function (db, "BdPolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_BdPolyFromWKB2, 0, 0);
-    sqlite3_create_function (db, "BdMPolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromWKB1, 0, 0);
-    sqlite3_create_function (db, "BdMPolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromWKB2, 0, 0);
-    sqlite3_create_function (db, "ST_BdPolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_BdPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_BdPolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_BdPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_BdMPolyFromText", 1, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromText1, 0, 0);
-    sqlite3_create_function (db, "ST_BdMPolyFromText", 2, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromText2, 0, 0);
-    sqlite3_create_function (db, "ST_BdPolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_BdPolyFromWKB1, 0, 0);
-    sqlite3_create_function (db, "ST_BdPolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_BdPolyFromWKB2, 0, 0);
-    sqlite3_create_function (db, "ST_BdMPolyFromWKB", 1, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromWKB1, 0, 0);
-    sqlite3_create_function (db, "ST_BdMPolyFromWKB", 2, SQLITE_ANY, 0,
-			     fnct_BdMPolyFromWKB2, 0, 0);
-    sqlite3_create_function (db, "BuildArea", 1, SQLITE_ANY, 0,
-			     fnct_BuildArea, 0, 0);
-    sqlite3_create_function (db, "ST_BuildArea", 1, SQLITE_ANY, 0,
-			     fnct_BuildArea, 0, 0);
-    sqlite3_create_function (db, "Polygonize", 1, SQLITE_ANY, 0, 0,
-			     fnct_Polygonize_step, fnct_Polygonize_final);
-    sqlite3_create_function (db, "ST_Polygonize", 1, SQLITE_ANY, 0, 0,
-			     fnct_Polygonize_step, fnct_Polygonize_final);
-    sqlite3_create_function (db, "DissolveSegments", 1, SQLITE_ANY, 0,
-			     fnct_DissolveSegments, 0, 0);
-    sqlite3_create_function (db, "ST_DissolveSegments", 1, SQLITE_ANY, 0,
-			     fnct_DissolveSegments, 0, 0);
-    sqlite3_create_function (db, "DissolvePoints", 1, SQLITE_ANY, 0,
-			     fnct_DissolvePoints, 0, 0);
-    sqlite3_create_function (db, "ST_DissolvePoints", 1, SQLITE_ANY, 0,
-			     fnct_DissolvePoints, 0, 0);
-    sqlite3_create_function (db, "CollectionExtract", 2, SQLITE_ANY, 0,
-			     fnct_CollectionExtract, 0, 0);
-    sqlite3_create_function (db, "ST_CollectionExtract", 2, SQLITE_ANY, 0,
-			     fnct_CollectionExtract, 0, 0);
+/* binding INSERT params */
+    sqlite3_reset (stmt);
+    sqlite3_clear_bindings (stmt);
+    sqlite3_bind_text (stmt, 1, table, strlen (table), SQLITE_STATIC);
+    sqlite3_bind_text (stmt, 2, column, strlen (column), SQLITE_STATIC);
+    sqlite3_bind_int (stmt, 3, count);
+    if (has_coords)
+      {
+	  sqlite3_bind_double (stmt, 4, min_x);
+	  sqlite3_bind_double (stmt, 5, min_y);
+	  sqlite3_bind_double (stmt, 6, max_x);
+	  sqlite3_bind_double (stmt, 7, max_y);
+      }
+    else
+      {
+	  sqlite3_bind_null (stmt, 4);
+	  sqlite3_bind_null (stmt, 5);
+	  sqlite3_bind_null (stmt, 6);
+	  sqlite3_bind_null (stmt, 7);
+      }
+    ret = sqlite3_step (stmt);
+    if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+	;
+    else
+	error = 1;
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
 
-#ifdef GEOS_ADVANCED		/* GEOS advanced and experimental features */
+#define SPATIALITE_STATISTICS_GENUINE	1
+#define SPATIALITE_STATISTICS_VIEWS	2
+#define SPATIALITE_STATISTICS_VIRTS	3
 
-    sqlite3_create_function (db, "OffsetCurve", 3, SQLITE_ANY, 0,
-			     fnct_OffsetCurve, 0, 0);
-    sqlite3_create_function (db, "ST_OffsetCurve", 3, SQLITE_ANY, 0,
-			     fnct_OffsetCurve, 0, 0);
-    sqlite3_create_function (db, "CommonEdges", 2, SQLITE_ANY, 0,
-			     fnct_CommonEdges, 0, 0);
-    sqlite3_create_function (db, "ST_CommonEdges", 2, SQLITE_ANY, 0,
-			     fnct_CommonEdges, 0, 0);
-    sqlite3_create_function (db, "Covers", 2, SQLITE_ANY, 0, fnct_Covers, 0, 0);
-    sqlite3_create_function (db, "ST_Covers", 2, SQLITE_ANY, 0, fnct_Covers, 0,
-			     0);
-    sqlite3_create_function (db, "CoveredBy", 2, SQLITE_ANY, 0, fnct_CoveredBy,
-			     0, 0);
-    sqlite3_create_function (db, "ST_CoveredBy", 2, SQLITE_ANY, 0,
-			     fnct_CoveredBy, 0, 0);
-    sqlite3_create_function (db, "ST_CoveredBy", 2, SQLITE_ANY, 0,
-			     fnct_CoveredBy, 0, 0);
-    sqlite3_create_function (db, "Line_Interpolate_Point", 2, SQLITE_ANY, 0,
-			     fnct_LineInterpolatePoint, 0, 0);
-    sqlite3_create_function (db, "ST_Line_Interpolate_Point", 2, SQLITE_ANY, 0,
-			     fnct_LineInterpolatePoint, 0, 0);
-    sqlite3_create_function (db, "Line_Locate_Point", 2, SQLITE_ANY, 0,
-			     fnct_LineLocatePoint, 0, 0);
-    sqlite3_create_function (db, "ST_Line_Locate_Point", 2, SQLITE_ANY, 0,
-			     fnct_LineLocatePoint, 0, 0);
-    sqlite3_create_function (db, "Line_Substring", 3, SQLITE_ANY, 0,
-			     fnct_LineSubstring, 0, 0);
-    sqlite3_create_function (db, "ST_Line_Substring", 3, SQLITE_ANY, 0,
-			     fnct_LineSubstring, 0, 0);
-    sqlite3_create_function (db, "ClosestPoint", 2, SQLITE_ANY, 0,
-			     fnct_ClosestPoint, 0, 0);
-    sqlite3_create_function (db, "ST_ClosestPoint", 2, SQLITE_ANY, 0,
-			     fnct_ClosestPoint, 0, 0);
-    sqlite3_create_function (db, "ShortestLine", 2, SQLITE_ANY, 0,
-			     fnct_ShortestLine, 0, 0);
-    sqlite3_create_function (db, "ST_ShortestLine", 2, SQLITE_ANY, 0,
-			     fnct_ShortestLine, 0, 0);
-    sqlite3_create_function (db, "Snap", 3, SQLITE_ANY, 0, fnct_Snap, 0, 0);
-    sqlite3_create_function (db, "ST_Snap", 3, SQLITE_ANY, 0, fnct_Snap, 0, 0);
-    sqlite3_create_function (db, "LineMerge", 1, SQLITE_ANY, 0,
-			     fnct_LineMerge, 0, 0);
-    sqlite3_create_function (db, "ST_LineMerge", 1, SQLITE_ANY, 0,
-			     fnct_LineMerge, 0, 0);
-    sqlite3_create_function (db, "UnaryUnion", 1, SQLITE_ANY, 0,
-			     fnct_UnaryUnion, 0, 0);
-    sqlite3_create_function (db, "ST_UnaryUnion", 1, SQLITE_ANY, 0,
-			     fnct_UnaryUnion, 0, 0);
+static int
+do_compute_layer_statistics (sqlite3 * sqlite, const char *table,
+			     const char *column, int stat_type)
+{
+/* computes LAYER_STATISTICS [single table/geometry] */
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    int error = 0;
+    int count;
+    double min_x;
+    double min_y;
+    double max_x;
+    double max_y;
+    int has_coords = 1;
+    sqlite3_stmt *stmt;
 
-#endif /* end GEOS advanced and experimental features */
+    strcpy (xtable, table);
+    double_quoted_sql (xtable);
+    strcpy (xgeom, column);
+    double_quoted_sql (xgeom);
+    strcpy (sql, "SELECT Count(*), ");
+    sprintf (sql2, "Min(MbrMinX(%s)), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "Min(MbrMinY(%s)), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "Max(MbrMaxX(%s)), ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "Max(MbrMaxY(%s)) ", xgeom);
+    strcat (sql, sql2);
+    sprintf (sql2, "FROM %s", xtable);
+    strcat (sql, sql2);
 
-#endif /* end including GEOS */
+/* compiling SQL prepared statement */
+    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
+    if (ret != SQLITE_OK)
+	return 0;
+    while (1)
+      {
+	  /* scrolling the result set rows */
+	  ret = sqlite3_step (stmt);
+	  if (ret == SQLITE_DONE)
+	      break;		/* end of result set */
+	  if (ret == SQLITE_ROW)
+	    {
+		count = sqlite3_column_int (stmt, 0);
+		if (sqlite3_column_type (stmt, 1) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    min_x = sqlite3_column_double (stmt, 1);
+		if (sqlite3_column_type (stmt, 2) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    min_y = sqlite3_column_double (stmt, 2);
+		if (sqlite3_column_type (stmt, 3) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    max_x = sqlite3_column_double (stmt, 3);
+		if (sqlite3_column_type (stmt, 4) == SQLITE_NULL)
+		    has_coords = 0;
+		else
+		    max_y = sqlite3_column_double (stmt, 4);
+		switch (stat_type)
+		  {
+		  case SPATIALITE_STATISTICS_GENUINE:
+		      if (!do_update_layer_statistics
+			  (sqlite, table, column, count, has_coords, min_x,
+			   min_y, max_x, max_y))
+			  error = 1;
+		      break;
+		  case SPATIALITE_STATISTICS_VIEWS:
+		      if (!do_update_views_layer_statistics
+			  (sqlite, table, column, count, has_coords, min_x,
+			   min_y, max_x, max_y))
+			  error = 1;
+		      break;
+		  case SPATIALITE_STATISTICS_VIRTS:
+		      if (!do_update_virts_layer_statistics
+			  (sqlite, table, column, count, has_coords, min_x,
+			   min_y, max_x, max_y))
+			  error = 1;
+		      break;
+		  };
+	    }
+	  else
+	      error = 1;
+      }
+    ret = sqlite3_finalize (stmt);
+    if (ret != SQLITE_OK)
+	return 0;
+    if (error)
+	return 0;
+    return 1;
+}
 
-#ifndef OMIT_ICONV		/* when ICONV is disabled SHP/DBF/TXT cannot be supported */
-/* initializing the VirtualShape  extension */
-    virtualshape_extension_init (db);
-/* initializing the VirtualDbf  extension */
-    virtualdbf_extension_init (db);
-/* initializing the VirtualText  extension */
-    virtualtext_extension_init (db);
-#ifndef OMIT_FREEXL
-/* initializing the VirtualXL  extension */
-    virtualXL_extension_init (db);
-#endif /* FreeXL enabled/disabled */
-#endif /* ICONV enabled/disabled */
+static int
+genuine_layer_statistics (sqlite3 * sqlite, const char *table,
+			  const char *column)
+{
+/* updating genuine LAYER_STATISTICS metadata */
+    int count = 0;
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    const char *f_table_name;
+    const char *f_geometry_column;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int error = 0;
 
-/* initializing the VirtualNetwork  extension */
-    virtualnetwork_extension_init (db);
-/* initializing the MbrCache  extension */
-    mbrcache_extension_init (db);
-/* initializing the VirtualFDO  extension */
-    virtualfdo_extension_init (db);
-/* initializing the VirtualSpatialIndex  extension */
-    virtual_spatialindex_extension_init (db);
-/* setting a timeout handler */
-    sqlite3_busy_timeout (db, 5000);
+    if (table == NULL && column == NULL)
+      {
+	  /* processing any table/geometry found in GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT f_table_name, f_geometry_column ");
+	  strcat (sql, "FROM geometry_columns");
+      }
+    else if (column == NULL)
+      {
+	  /* processing any geometry belonging to this table */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (sql, "SELECT f_table_name, f_geometry_column ");
+	  strcat (sql, "FROM geometry_columns ");
+	  sprintf (sql2, "WHERE f_table_name LIKE '%s'", xtable);
+	  strcat (sql, sql2);
+      }
+    else
+      {
+	  /* processing a single table/geometry entry */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (xgeom, column);
+	  clean_sql_string (xgeom);
+	  strcpy (sql, "SELECT f_table_name, f_geometry_column ");
+	  strcat (sql, "FROM geometry_columns ");
+	  sprintf (sql2, "WHERE f_table_name LIKE '%s' ", xtable);
+	  strcat (sql, sql2);
+	  sprintf (sql2, "AND f_geometry_column LIKE '%s'", xgeom);
+	  strcat (sql2, sql);
+      }
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return -1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		f_table_name = results[(i * columns) + 0];
+		f_geometry_column = results[(i * columns) + 1];
+		if (!do_compute_layer_statistics
+		    (sqlite, f_table_name, f_geometry_column,
+		     SPATIALITE_STATISTICS_GENUINE))
+		  {
+		      error = 1;
+		      break;
+		  }
+		else
+		    count++;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (error)
+	return -1;
+    return count;
+}
 
-    printf ("SpatiaLite version ..: %s", spatialite_version ());
-    printf ("\tSupported Extensions:\n");
-#ifndef OMIT_ICONV		/* ICONV is required by SHP/DBF/TXT */
-    printf ("\t- 'VirtualShape'\t[direct Shapefile access]\n");
-    printf ("\t- 'VirtualDbf'\t\t[direct Dbf access]\n");
-    printf ("\t- 'VirtualText'\t\t[direct CSV/TXT access]\n");
-#ifndef OMIT_FREEXL
-    printf ("\t- 'VirtualXL'\t\t[direct XLS access]\n");
-#endif /* end FreeXL conditional */
-    printf ("\t- 'VirtualText'\t\t[direct CSV/TXT access]\n");
-#endif /* end ICONV conditional */
-    printf ("\t- 'VirtualNetwork'\t[Dijkstra shortest path]\n");
-    printf ("\t- 'RTree'\t\t[Spatial Index - R*Tree]\n");
-    printf ("\t- 'MbrCache'\t\t[Spatial Index - MBR cache]\n");
-    printf ("\t- 'VirtualSpatialIndex'\t[R*Tree metahandler]\n");
-    printf ("\t- 'VirtualFDO'\t\t[FDO-OGR interoperability]\n");
-    printf ("\t- 'SpatiaLite'\t\t[Spatial SQL - OGC]\n");
-#ifndef OMIT_PROJ		/* PROJ.4 version */
-    printf ("PROJ.4 %s\n", pj_get_release ());
-    fflush (stdout);
-#endif /* end including PROJ.4 */
-#ifndef OMIT_GEOS		/* GEOS version */
-    printf ("GEOS version %s\n", GEOSversion ());
-    fflush (stdout);
-#endif /* end GEOS version */
-    return 0;
+static int
+views_layer_statistics (sqlite3 * sqlite, const char *table, const char *column)
+{
+/* updating VIEWS_LAYER_STATISTICS metadata */
+    int count = 0;
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    const char *view_name;
+    const char *view_geometry;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int error = 0;
+
+    if (table == NULL && column == NULL)
+      {
+	  /* processing any table/geometry found in VIEWS_GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT view_name, view_geometry ");
+	  strcat (sql, "FROM views_geometry_columns");
+      }
+    else if (column == NULL)
+      {
+	  /* processing any geometry belonging to this table */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (sql, "SELECT view_name, view_geometry ");
+	  strcat (sql, "FROM views_geometry_columns ");
+	  sprintf (sql2, "WHERE view_name LIKE '%s'", xtable);
+	  strcat (sql, sql2);
+      }
+    else
+      {
+	  /* processing a single table/geometry entry */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (xgeom, column);
+	  clean_sql_string (xgeom);
+	  strcpy (sql, "SELECT view_name, view_geometry ");
+	  strcat (sql, "FROM views_geometry_columns ");
+	  sprintf (sql2, "WHERE view_name LIKE '%s' ", xtable);
+	  strcat (sql, sql2);
+	  sprintf (sql2, "AND view_geometry LIKE '%s'", xgeom);
+	  strcat (sql2, sql);
+      }
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return -1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		view_name = results[(i * columns) + 0];
+		view_geometry = results[(i * columns) + 1];
+		if (!do_compute_layer_statistics
+		    (sqlite, view_name, view_geometry,
+		     SPATIALITE_STATISTICS_VIEWS))
+		  {
+		      error = 1;
+		      break;
+		  }
+		else
+		    count++;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (error)
+	return -1;
+    return count;
 }
 
-SPATIALITE_DECLARE sqlite3_int64
-math_llabs (sqlite3_int64 value)
+static int
+virts_layer_statistics (sqlite3 * sqlite, const char *table, const char *column)
 {
-/* replacing the C99 llabs() function */
-    return value < 0 ? -value : value;
+/* updating VIRTS_LAYER_STATISTICS metadata */
+    int count = 0;
+    char xtable[1024];
+    char xgeom[1024];
+    char sql[8192];
+    char sql2[2048];
+    int ret;
+    const char *f_table_name;
+    const char *f_geometry_column;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    int error = 0;
+
+    if (table == NULL && column == NULL)
+      {
+	  /* processing any table/geometry found in GEOMETRY_COLUMNS */
+	  strcpy (sql, "SELECT virt_name, virt_geometry ");
+	  strcat (sql, "FROM virts_geometry_columns");
+      }
+    else if (column == NULL)
+      {
+	  /* processing any geometry belonging to this table */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (sql, "SELECT virt_name, virt_geometry ");
+	  strcat (sql, "FROM virts_geometry_columns ");
+	  sprintf (sql2, "WHERE virt_name LIKE '%s'", xtable);
+	  strcat (sql, sql2);
+      }
+    else
+      {
+	  /* processing a single table/geometry entry */
+	  strcpy (xtable, table);
+	  clean_sql_string (xtable);
+	  strcpy (xgeom, column);
+	  clean_sql_string (xgeom);
+	  strcpy (sql, "SELECT virt_name, virt_geometry ");
+	  strcat (sql, "FROM virts_geometry_columns ");
+	  sprintf (sql2, "WHERE virt_name LIKE '%s' ", xtable);
+	  strcat (sql, sql2);
+	  sprintf (sql2, "AND virt_geometry LIKE '%s'", xgeom);
+	  strcat (sql2, sql);
+      }
+    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	return -1;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		f_table_name = results[(i * columns) + 0];
+		f_geometry_column = results[(i * columns) + 1];
+		if (!do_compute_layer_statistics
+		    (sqlite, f_table_name, f_geometry_column,
+		     SPATIALITE_STATISTICS_VIRTS))
+		  {
+		      error = 1;
+		      break;
+		  }
+		else
+		    count++;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (error)
+	return -1;
+    return count;
 }
 
-SPATIALITE_DECLARE double
-math_round (double value)
+SPATIALITE_DECLARE int
+update_layer_statistics (sqlite3 * sqlite, const char *table,
+			 const char *column)
 {
-/* replacing the C99 round() function */
-    double min = floor (value);
-    if (fabs (value - min) < 0.5)
-	return min;
-    return min + 1.0;
+/* updating LAYER_STATISTICS metadata [main] */
+    int ret;
+    int count = 0;
+    ret = genuine_layer_statistics (sqlite, table, column);
+    if (ret < 0)
+	return 0;
+    count += ret;
+    ret = views_layer_statistics (sqlite, table, column);
+    if (ret < 0)
+	return 0;
+    count += ret;
+    ret = virts_layer_statistics (sqlite, table, column);
+    if (ret < 0)
+	return 0;
+    count += ret;
+    return count;
 }
diff --git a/libspatialite/src/spatialite/virtualXL.c b/libspatialite/src/spatialite/virtualXL.c
index e934df7..2f9b583 100644
--- a/libspatialite/src/spatialite/virtualXL.c
+++ b/libspatialite/src/spatialite/virtualXL.c
@@ -196,6 +196,8 @@ vXL_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
     ret = freexl_open (path, &handle);
     if (ret != FREEXL_OK)
       {
+	  /* free memory */
+	  freexl_close (handle);
 	  /* something is going the wrong way; creating a stupid default table */
 	  strcpy (dummyName, argv[2]);
 	  vXL_double_quoted_sql (dummyName);
@@ -214,6 +216,8 @@ vXL_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
     freexl_get_info (handle, FREEXL_BIFF_PASSWORD, &info);
     if (info != FREEXL_BIFF_PLAIN)
       {
+	  /* free memory */
+	  freexl_close (handle);
 	  /* Obfuscated: creating a stupid default table */
 	  strcpy (dummyName, argv[2]);
 	  vXL_double_quoted_sql (dummyName);
@@ -232,6 +236,8 @@ vXL_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
     freexl_get_info (handle, FREEXL_BIFF_SHEET_COUNT, &max_worksheet);
     if (worksheet >= max_worksheet)
       {
+	  /* free memory */
+	  freexl_close (handle);
 	  /* no such Worksheet: creating a stupid default table */
 	  strcpy (dummyName, argv[2]);
 	  vXL_double_quoted_sql (dummyName);
@@ -261,33 +267,28 @@ vXL_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
     strcat (buf, " (row_no INTEGER");
     if (firstLineTitles == 'Y')
       {
-	  /* fetching comun names */
+	  /* fetching column names */
 	  for (col = 0; col < columns; col++)
 	    {
-		unsigned char type;
-		int int_value;
-		double dbl_value;
-		const char *text_value;
-		int ret =
-		    freexl_get_cell_value (handle, 0, col, &type, &int_value,
-					   &dbl_value, &text_value);
+		FreeXL_CellValue cell;
+		int ret = freexl_get_cell_value (handle, 0, col, &cell);
 		if (ret != FREEXL_OK)
 		    sprintf (dummyName, "col_%d", col);
 		else
 		  {
-		      if (type == FREEXL_CELL_INT)
-			  sprintf (dummyName, "%d", int_value);
-		      else if (type == FREEXL_CELL_DOUBLE)
-			  sprintf (dummyName, "%1.2f", dbl_value);
-		      else if (type == FREEXL_CELL_TEXT
-			       || type == FREEXL_CELL_SST_TEXT
-			       || type == FREEXL_CELL_DATE
-			       || type == FREEXL_CELL_DATETIME
-			       || type == FREEXL_CELL_TIME)
+		      if (cell.type == FREEXL_CELL_INT)
+			  sprintf (dummyName, "%d", cell.value.int_value);
+		      else if (cell.type == FREEXL_CELL_DOUBLE)
+			  sprintf (dummyName, "%1.2f", cell.value.double_value);
+		      else if (cell.type == FREEXL_CELL_TEXT
+			       || cell.type == FREEXL_CELL_SST_TEXT
+			       || cell.type == FREEXL_CELL_DATE
+			       || cell.type == FREEXL_CELL_DATETIME
+			       || cell.type == FREEXL_CELL_TIME)
 			{
-			    int len = strlen (text_value);
+			    int len = strlen (cell.value.text_value);
 			    if (len < 256)
-				strcpy (dummyName, text_value);
+				strcpy (dummyName, cell.value.text_value);
 			    else
 				sprintf (dummyName, "col_%d", col);
 			}
@@ -327,7 +328,7 @@ static int
 vXL_connect (sqlite3 * db, void *pAux, int argc, const char *const *argv,
 	     sqlite3_vtab ** ppVTab, char **pzErr)
 {
-/* connects the virtual table to some DBF - simply aliases vdbf_create() */
+/* connects the virtual table to a .xls file - simply aliases vXL_create() */
     return vXL_create (db, pAux, argc, argv, ppVTab, pzErr);
 }
 
@@ -495,10 +496,7 @@ static int
 vXL_eval_constraints (VirtualXLCursorPtr cursor)
 {
 /* evaluating Filter constraints */
-    unsigned char type;
-    int int_value;
-    double dbl_value;
-    const char *text_value;
+    FreeXL_CellValue cell;
     VirtualXLConstraintPtr pC = cursor->firstConstraint;
     if (pC == NULL)
 	return 1;
@@ -544,34 +542,33 @@ vXL_eval_constraints (VirtualXLCursorPtr cursor)
 	      && pC->iColumn <= cursor->pVtab->columns)
 	      freexl_get_cell_value (cursor->pVtab->XL_handle,
 				     cursor->current_row - 1, pC->iColumn - 1,
-				     &type, &int_value, &dbl_value,
-				     &text_value);
+				     &cell);
 	  else
-	      type = FREEXL_CELL_NULL;
-	  if (type == FREEXL_CELL_INT)
+	      cell.type = FREEXL_CELL_NULL;
+	  if (cell.type == FREEXL_CELL_INT)
 	    {
 		if (pC->valueType == 'I')
 		  {
 		      switch (pC->op)
 			{
 			case SQLITE_INDEX_CONSTRAINT_EQ:
-			    if (int_value == pC->intValue)
+			    if (cell.value.int_value == pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GT:
-			    if (int_value > pC->intValue)
+			    if (cell.value.int_value > pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LE:
-			    if (int_value <= pC->intValue)
+			    if (cell.value.int_value <= pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LT:
-			    if (int_value < pC->intValue)
+			    if (cell.value.int_value < pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GE:
-			    if (int_value >= pC->intValue)
+			    if (cell.value.int_value >= pC->intValue)
 				ok = 1;
 			    break;
 			};
@@ -581,52 +578,52 @@ vXL_eval_constraints (VirtualXLCursorPtr cursor)
 		      switch (pC->op)
 			{
 			case SQLITE_INDEX_CONSTRAINT_EQ:
-			    if (int_value == pC->dblValue)
+			    if (cell.value.int_value == pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GT:
-			    if (int_value > pC->dblValue)
+			    if (cell.value.int_value > pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LE:
-			    if (int_value <= pC->dblValue)
+			    if (cell.value.int_value <= pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LT:
-			    if (int_value < pC->dblValue)
+			    if (cell.value.int_value < pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GE:
-			    if (int_value >= pC->dblValue)
+			    if (cell.value.int_value >= pC->dblValue)
 				ok = 1;
 			    break;
 			};
 		  }
 	    }
-	  if (type == FREEXL_CELL_DOUBLE)
+	  if (cell.type == FREEXL_CELL_DOUBLE)
 	    {
 		if (pC->valueType == 'I')
 		  {
 		      switch (pC->op)
 			{
 			case SQLITE_INDEX_CONSTRAINT_EQ:
-			    if (dbl_value == pC->intValue)
+			    if (cell.value.double_value == pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GT:
-			    if (dbl_value > pC->intValue)
+			    if (cell.value.double_value > pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LE:
-			    if (dbl_value <= pC->intValue)
+			    if (cell.value.double_value <= pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LT:
-			    if (dbl_value < pC->intValue)
+			    if (cell.value.double_value < pC->intValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GE:
-			    if (dbl_value >= pC->intValue)
+			    if (cell.value.double_value >= pC->intValue)
 				ok = 1;
 			    break;
 			};
@@ -636,33 +633,35 @@ vXL_eval_constraints (VirtualXLCursorPtr cursor)
 		      switch (pC->op)
 			{
 			case SQLITE_INDEX_CONSTRAINT_EQ:
-			    if (dbl_value == pC->dblValue)
+			    if (cell.value.double_value == pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GT:
-			    if (dbl_value > pC->dblValue)
+			    if (cell.value.double_value > pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LE:
-			    if (dbl_value <= pC->dblValue)
+			    if (cell.value.double_value <= pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LT:
-			    if (dbl_value < pC->dblValue)
+			    if (cell.value.double_value < pC->dblValue)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GE:
-			    if (dbl_value >= pC->dblValue)
+			    if (cell.value.double_value >= pC->dblValue)
 				ok = 1;
 			    break;
 			};
 		  }
 	    }
-	  if ((type == FREEXL_CELL_TEXT || type == FREEXL_CELL_SST_TEXT
-	       || type == FREEXL_CELL_DATE || type == FREEXL_CELL_DATETIME
-	       || type == FREEXL_CELL_TIME) && pC->valueType == 'T')
+	  if ((cell.type == FREEXL_CELL_TEXT
+	       || cell.type == FREEXL_CELL_SST_TEXT
+	       || cell.type == FREEXL_CELL_DATE
+	       || cell.type == FREEXL_CELL_DATETIME
+	       || cell.type == FREEXL_CELL_TIME) && pC->valueType == 'T')
 	    {
-		int ret = strcmp (text_value, pC->txtValue);
+		int ret = strcmp (cell.value.text_value, pC->txtValue);
 		switch (pC->op)
 		  {
 		  case SQLITE_INDEX_CONSTRAINT_EQ:
@@ -670,19 +669,19 @@ vXL_eval_constraints (VirtualXLCursorPtr cursor)
 			  ok = 1;
 		      break;
 		  case SQLITE_INDEX_CONSTRAINT_GT:
-		      if (ret == 1)
+		      if (ret > 0)
 			  ok = 1;
 		      break;
 		  case SQLITE_INDEX_CONSTRAINT_LE:
-		      if (ret == -1 || ret == 0)
+		      if (ret <= 0)
 			  ok = 1;
 		      break;
 		  case SQLITE_INDEX_CONSTRAINT_LT:
-		      if (ret == -1)
+		      if (ret < 0)
 			  ok = 1;
 		      break;
 		  case SQLITE_INDEX_CONSTRAINT_GE:
-		      if (ret == 1 || ret == 0)
+		      if (ret >= 0)
 			  ok = 1;
 		      break;
 		  };
@@ -796,10 +795,7 @@ vXL_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
 	    int column)
 {
 /* fetching value for the Nth column */
-    unsigned char type;
-    int int_value;
-    double dbl_value;
-    const char *text_value;
+    FreeXL_CellValue cell;
     VirtualXLCursorPtr cursor = (VirtualXLCursorPtr) pCursor;
     if (column == 0)
       {
@@ -814,25 +810,24 @@ vXL_column (sqlite3_vtab_cursor * pCursor, sqlite3_context * pContext,
 	&& cursor->current_row <= cursor->pVtab->rows
 	&& column <= cursor->pVtab->columns)
 	freexl_get_cell_value (cursor->pVtab->XL_handle,
-			       cursor->current_row - 1, column - 1, &type,
-			       &int_value, &dbl_value, &text_value);
+			       cursor->current_row - 1, column - 1, &cell);
     else
-	type = FREEXL_CELL_NULL;
-    switch (type)
+	cell.type = FREEXL_CELL_NULL;
+    switch (cell.type)
       {
       case FREEXL_CELL_INT:
-	  sqlite3_result_int (pContext, int_value);
+	  sqlite3_result_int (pContext, cell.value.int_value);
 	  break;
       case FREEXL_CELL_DOUBLE:
-	  sqlite3_result_double (pContext, dbl_value);
+	  sqlite3_result_double (pContext, cell.value.double_value);
 	  break;
       case FREEXL_CELL_TEXT:
       case FREEXL_CELL_SST_TEXT:
       case FREEXL_CELL_DATE:
       case FREEXL_CELL_DATETIME:
       case FREEXL_CELL_TIME:
-	  sqlite3_result_text (pContext, text_value, strlen (text_value),
-			       SQLITE_STATIC);
+	  sqlite3_result_text (pContext, cell.value.text_value,
+			       strlen (cell.value.text_value), SQLITE_STATIC);
 	  break;
       default:
 	  sqlite3_result_null (pContext);
@@ -934,4 +929,3 @@ virtualXL_extension_init (sqlite3 * db)
 
 #endif /* FreeXL enabled/disabled */
 #endif /* ICONV enabled/disabled */
-
diff --git a/libspatialite/src/spatialite/virtualdbf.c b/libspatialite/src/spatialite/virtualdbf.c
index 330258d..9851caa 100644
--- a/libspatialite/src/spatialite/virtualdbf.c
+++ b/libspatialite/src/spatialite/virtualdbf.c
@@ -387,10 +387,10 @@ vdbf_open (sqlite3_vtab * pVTab, sqlite3_vtab_cursor ** ppCursor)
     while (1)
       {
 	  vdbf_read_row (cursor, &deleted);
-	  if (!deleted)
-	      break;
 	  if (cursor->eof)
 	      break;
+	  if (!deleted)
+	      break;
       }
     return SQLITE_OK;
 }
@@ -565,27 +565,27 @@ vdbf_eval_constraints (VirtualDbfCursorPtr cursor)
 					  {
 					  case SQLITE_INDEX_CONSTRAINT_EQ:
 					      if (pFld->Value->DblValue ==
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GT:
 					      if (pFld->Value->DblValue >
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LE:
 					      if (pFld->Value->DblValue <=
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LT:
 					      if (pFld->Value->DblValue <
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GE:
 					      if (pFld->Value->DblValue >=
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  };
@@ -638,19 +638,19 @@ vdbf_eval_constraints (VirtualDbfCursorPtr cursor)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GT:
-					      if (ret == 1)
+					      if (ret > 0)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LE:
-					      if (ret == -1 || ret == 0)
+					      if (ret <= 0)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LT:
-					      if (ret == -1)
+					      if (ret < 0)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GE:
-					      if (ret == 1 || ret == 0)
+					      if (ret >= 0)
 						  ok = 1;
 					      break;
 					  };
diff --git a/libspatialite/src/spatialite/virtualfdo.c b/libspatialite/src/spatialite/virtualfdo.c
index a216e58..12ae989 100644
--- a/libspatialite/src/spatialite/virtualfdo.c
+++ b/libspatialite/src/spatialite/virtualfdo.c
@@ -68,6 +68,7 @@ the terms of any one of the MPL, the GPL or the LGPL.
 
 #ifdef _WIN32
 #define strcasecmp	_stricmp
+#define strncasecmp	_strnicmp
 #endif /* not WIN32 */
 
 #if defined(_WIN32) && !defined(__MINGW32__)
@@ -1433,7 +1434,7 @@ vfdo_convertWKT3D (const char *wkt)
 		extra++;
 		continue;
 	    }
-	  *p++;
+	  p++;
       }
     out = malloc (len + extra + 1);
     o = out;
diff --git a/libspatialite/src/spatialite/virtualnetwork.c b/libspatialite/src/spatialite/virtualnetwork.c
index f51daff..402d32b 100644
--- a/libspatialite/src/spatialite/virtualnetwork.c
+++ b/libspatialite/src/spatialite/virtualnetwork.c
@@ -1655,7 +1655,6 @@ vnet_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
     char **results;
     char *err_msg = NULL;
     char sql[4096];
-    int ok_tbl;
     int ok_id;
     int ok_data;
     char xname[1024];
@@ -1679,7 +1678,6 @@ vnet_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
       }
 /* retrieving the base table columns */
     err = 0;
-    ok_tbl = 0;
     ok_id = 0;
     ok_data = 0;
     strcpy (xname, table);
@@ -1693,7 +1691,6 @@ vnet_create (sqlite3 * db, void *pAux, int argc, const char *const *argv,
       }
     if (n_rows > 1)
       {
-	  ok_tbl = 1;
 	  for (i = 1; i <= n_rows; i++)
 	    {
 		col_name = results[(i * n_columns) + 1];
diff --git a/libspatialite/src/spatialite/virtualshape.c b/libspatialite/src/spatialite/virtualshape.c
index 9b10f0f..58d5a4e 100644
--- a/libspatialite/src/spatialite/virtualshape.c
+++ b/libspatialite/src/spatialite/virtualshape.c
@@ -590,27 +590,27 @@ vshp_eval_constraints (VirtualShapeCursorPtr cursor)
 					  {
 					  case SQLITE_INDEX_CONSTRAINT_EQ:
 					      if (pFld->Value->DblValue ==
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GT:
 					      if (pFld->Value->DblValue >
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LE:
 					      if (pFld->Value->DblValue <=
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LT:
 					      if (pFld->Value->DblValue <
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GE:
 					      if (pFld->Value->DblValue >=
-						  pC->dblValue)
+						  pC->intValue)
 						  ok = 1;
 					      break;
 					  };
@@ -661,19 +661,19 @@ vshp_eval_constraints (VirtualShapeCursorPtr cursor)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GT:
-					      if (ret == 1)
+					      if (ret > 0)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LE:
-					      if (ret == -1 || ret == 0)
+					      if (ret <= 0)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_LT:
-					      if (ret == -1)
+					      if (ret < 0)
 						  ok = 1;
 					      break;
 					  case SQLITE_INDEX_CONSTRAINT_GE:
-					      if (ret == 1 || ret == 0)
+					      if (ret >= 0)
 						  ok = 1;
 					      break;
 					  };
diff --git a/libspatialite/src/spatialite/virtualspatialindex.c b/libspatialite/src/spatialite/virtualspatialindex.c
index da7d522..084c6c6 100644
--- a/libspatialite/src/spatialite/virtualspatialindex.c
+++ b/libspatialite/src/spatialite/virtualspatialindex.c
@@ -315,9 +315,6 @@ vspidx_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIdxInfo)
     int table = 0;
     int geom = 0;
     int mbr = 0;
-    int i_table = -1;
-    int i_geom = -1;
-    int i_mbr = -1;
     if (pVTab)
 	pVTab = pVTab;		/* unused arg warning suppression */
     for (i = 0; i < pIdxInfo->nConstraint; i++)
@@ -327,20 +324,11 @@ vspidx_best_index (sqlite3_vtab * pVTab, sqlite3_index_info * pIdxInfo)
 	  if (p->usable)
 	    {
 		if (p->iColumn == 0 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
-		  {
 		      table++;
-		      i_table = i;
-		  }
 		else if (p->iColumn == 1 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
-		  {
 		      geom++;
-		      i_geom = i;
-		  }
 		else if (p->iColumn == 2 && p->op == SQLITE_INDEX_CONSTRAINT_EQ)
-		  {
 		      mbr++;
-		      i_mbr = i;
-		  }
 		else
 		    errors++;
 	    }
@@ -517,10 +505,10 @@ vspidx_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
     gaiaMbrGeometry (geom);
 
 /* adjusting the MBR so to compensate for DOUBLE/FLOAT truncations */
-    minx = geom->MinX;
-    miny = geom->MinY;
-    maxx = geom->MaxX;
-    maxy = geom->MaxY;
+    minx = (float)(geom->MinX);
+    miny = (float)(geom->MinY);
+    maxx = (float)(geom->MaxX);
+    maxy = (float)(geom->MaxY);
     tic = fabs (geom->MinX - minx);
     tic2 = fabs (geom->MinY - miny);
     if (tic2 > tic)
diff --git a/libspatialite/src/srsinit/Makefile.am b/libspatialite/src/srsinit/Makefile.am
index 7411a29..7b86a96 100644
--- a/libspatialite/src/srsinit/Makefile.am
+++ b/libspatialite/src/srsinit/Makefile.am
@@ -12,3 +12,4 @@ noinst_LTLIBRARIES = libsrsinit.la
 
 libsrsinit_la_SOURCES = srs_init.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/srsinit/Makefile.in b/libspatialite/src/srsinit/Makefile.in
index e76c800..92a8f40 100644
--- a/libspatialite/src/srsinit/Makefile.in
+++ b/libspatialite/src/srsinit/Makefile.in
@@ -111,6 +111,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -143,6 +144,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -176,7 +178,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -201,6 +202,7 @@ AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
 INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
 noinst_LTLIBRARIES = libsrsinit.la
 libsrsinit_la_SOURCES = srs_init.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-am
 
 .SUFFIXES:
@@ -383,6 +385,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
diff --git a/libspatialite/src/srsinit/srs_init.c b/libspatialite/src/srsinit/srs_init.c
index 558bf29..1c1d536 100644
--- a/libspatialite/src/srsinit/srs_init.c
+++ b/libspatialite/src/srsinit/srs_init.c
@@ -110617,7 +110617,6 @@ check_spatial_ref_sys (sqlite3 * handle)
     int rs_srid = 0;
     int auth_name = 0;
     int auth_srid = 0;
-    int srtext = 0;
     int ref_sys_name = 0;
     int proj4text = 0;
     int srs_wkt = 0;
@@ -110644,8 +110643,6 @@ check_spatial_ref_sys (sqlite3 * handle)
 		    auth_name = 1;
 		if (strcasecmp (name, "auth_srid") == 0)
 		    auth_srid = 1;
-		if (strcasecmp (name, "srtext") == 0)
-		    srtext = 1;
 		if (strcasecmp (name, "ref_sys_name") == 0)
 		    ref_sys_name = 1;
 		if (strcasecmp (name, "proj4text") == 0)
@@ -110726,7 +110723,7 @@ spatial_ref_sys_init (sqlite3 * handle, int verbose)
       {
 	  if (verbose)
 	      fprintf (stderr,
-		       "OK: the SPATIAL_REF_SYS table was succesfully populated\n");
+		       "OK: the SPATIAL_REF_SYS table was successfully populated\n");
 	  return 1;
       }
     return 0;
diff --git a/libspatialite/src/versioninfo/version.c b/libspatialite/src/versioninfo/version.c
index b6df896..72aafa4 100644
--- a/libspatialite/src/versioninfo/version.c
+++ b/libspatialite/src/versioninfo/version.c
@@ -50,7 +50,7 @@ the terms of any one of the MPL, the GPL or the LGPL.
 
 #include <spatialite.h>
 
-const char spatialiteversion[] = "3.0.0-beta";
+const char spatialiteversion[] = VERSION;
 
 SPATIALITE_DECLARE const char *
 spatialite_version (void)
diff --git a/libspatialite/src/virtualtext/Makefile.am b/libspatialite/src/virtualtext/Makefile.am
index 72279e3..1848ded 100644
--- a/libspatialite/src/virtualtext/Makefile.am
+++ b/libspatialite/src/virtualtext/Makefile.am
@@ -12,3 +12,4 @@ noinst_LTLIBRARIES = libvirtualtext.la
 
 libvirtualtext_la_SOURCES = virtualtext.c
 
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
diff --git a/libspatialite/src/virtualtext/Makefile.in b/libspatialite/src/virtualtext/Makefile.in
index c162bcb..27bdb28 100644
--- a/libspatialite/src/virtualtext/Makefile.in
+++ b/libspatialite/src/virtualtext/Makefile.in
@@ -111,6 +111,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -143,6 +144,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -176,7 +178,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -201,6 +202,7 @@ AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 \
 INCLUDES = @CFLAGS@ -I$(top_srcdir)/src/headers
 noinst_LTLIBRARIES = libvirtualtext.la
 libvirtualtext_la_SOURCES = virtualtext.c
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
 all: all-am
 
 .SUFFIXES:
@@ -383,6 +385,7 @@ install-strip:
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 
diff --git a/libspatialite/src/virtualtext/virtualtext.c b/libspatialite/src/virtualtext/virtualtext.c
index 706cabb..9c887a2 100644
--- a/libspatialite/src/virtualtext/virtualtext.c
+++ b/libspatialite/src/virtualtext/virtualtext.c
@@ -480,7 +480,6 @@ vtxt_eval_constraints (VirtualTextCursorPtr cursor)
     sqlite3_int64 int_value;
     double dbl_value;
     const char *txt_value;
-    int is_null;
     int is_int;
     int is_dbl;
     int is_txt;
@@ -501,14 +500,13 @@ vtxt_eval_constraints (VirtualTextCursorPtr cursor)
 	  nCol = 1;
 	  for (i = 0; i < text->max_fields; i++)
 	    {
-		is_null = 0;
 		is_int = 0;
 		is_dbl = 0;
 		is_txt = 0;
 		if (nCol == pC->iColumn)
 		  {
 		      if (!gaiaTextReaderFetchField (text, i, &type, &value))
-			  is_null = 1;
+			  ;
 		      else
 			{
 			    if (type == VRTTXT_INTEGER)
@@ -535,8 +533,6 @@ vtxt_eval_constraints (VirtualTextCursorPtr cursor)
 				  txt_value = value;
 				  is_txt = 1;
 			      }
-			    else
-				is_null = 1;
 			}
 		      goto eval;
 		  }
@@ -655,7 +651,7 @@ vtxt_eval_constraints (VirtualTextCursorPtr cursor)
 			};
 		  }
 	    }
-	  if (pC->valueType == 'D')
+	  if (pC->valueType == 'T')
 	    {
 		if (is_txt)
 		  {
@@ -667,19 +663,19 @@ vtxt_eval_constraints (VirtualTextCursorPtr cursor)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GT:
-			    if (ret == 1)
+			    if (ret > 0)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LE:
-			    if (ret == -1 || ret == 0)
+			    if (ret <= 0)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_LT:
-			    if (ret == -1)
+			    if (ret < 0)
 				ok = 1;
 			    break;
 			case SQLITE_INDEX_CONSTRAINT_GE:
-			    if (ret == 1 || ret == 0)
+			    if (ret >= 0)
 				ok = 1;
 			    break;
 			};
@@ -753,7 +749,6 @@ vtxt_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
     cursor->eof = 0;
     while (1)
       {
-	  cursor->current_row++;
 	  if (!gaiaTextReaderGetRow (text, cursor->current_row))
 	    {
 		cursor->eof = 1;
@@ -761,6 +756,7 @@ vtxt_filter (sqlite3_vtab_cursor * pCursor, int idxNum, const char *idxStr,
 	    }
 	  if (vtxt_eval_constraints (cursor))
 	      break;
+	  cursor->current_row++;
       }
     return SQLITE_OK;
 }
@@ -1298,7 +1294,7 @@ vrttxt_add_line (gaiaTextReaderPtr txt, struct vrttxt_line *line)
       }
     else if (p_block->num_rows >= VRTTXT_BLOCK_MAX)
       {
-	  /* the currect offset Block is full: expanding the list */
+	  /* the current offset Block is full: expanding the list */
 	  p_block = vrttxt_block_alloc ();
 	  if (!p_block)
 	    {
@@ -1422,7 +1418,7 @@ vrttxt_line_push (gaiaTextReaderPtr txt, char c)
       }
     *(txt->line_buffer + txt->current_buf_off) = c;
     txt->current_buf_off++;
-/* ensuring that input buffer will bel null terminated anyway */
+/* ensuring that input buffer will be null terminated anyway */
     *(txt->line_buffer + txt->current_buf_off) = '\0';
 }
 
diff --git a/libspatialite/test/Makefile.am b/libspatialite/test/Makefile.am
new file mode 100644
index 0000000..95b1289
--- /dev/null
+++ b/libspatialite/test/Makefile.am
@@ -0,0 +1,780 @@
+check_PROGRAMS = check_version \
+		check_init \
+		check_create \
+		check_dbf_load \
+		check_shp_load \
+		check_shp_load_3d \
+		shape_cp1252 \
+		shape_utf8_1 \
+		shape_utf8_2 \
+		shape_3d \
+		check_xls_load \
+		check_math_funcs \
+		check_gaia_util \
+		check_gaia_utf8 \
+		check_extension \
+		check_sql_stmt \
+		check_virtualtable1 \
+		check_virtualtable2 \
+		check_virtualtable3 \
+		check_virtualtable4 \
+		check_virtualtable5 \
+		check_virtualtable6 \
+		check_mbrcache \
+		check_spatialindex
+
+AM_CFLAGS = -I at srcdir@/../src/headers
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+
+TESTS = $(check_PROGRAMS)
+
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+
+EXTRA_DIST = shapetest1.dbf \
+	shapetest1.prj \
+	shapetest1.qpj \
+	shapetest1.shp \
+	shapetest1.shx \
+	shp/new-caledonia/buildings.dbf \
+	shp/new-caledonia/buildings.prj \
+	shp/new-caledonia/buildings.shp \
+	shp/new-caledonia/buildings.shx \
+	shp/new-caledonia/points.dbf \
+	shp/new-caledonia/points.prj \
+	shp/new-caledonia/points.shp \
+	shp/new-caledonia/points.shx \
+	shp/new-caledonia/railways.dbf \
+	shp/new-caledonia/railways.shp \
+	shp/new-caledonia/railways.shx \
+	shp/gaza/aeroway.dbf \
+	shp/gaza/aeroway.prj \
+	shp/gaza/aeroway.shp \
+	shp/gaza/aeroway.shx \
+	shp/gaza/barrier.dbf \
+	shp/gaza/barrier.prj \
+	shp/gaza/barrier.shp \
+	shp/gaza/barrier.shx \
+	shp/gaza/route.dbf \
+	shp/gaza/route.prj \
+	shp/gaza/route.shp \
+	shp/gaza/route.shx \
+	shp/taiwan/hystoric.dbf \
+	shp/taiwan/hystoric.prj \
+	shp/taiwan/hystoric.shp \
+	shp/taiwan/hystoric.shx \
+	shp/taiwan/leisure.dbf \
+	shp/taiwan/leisure.prj \
+	shp/taiwan/leisure.shp \
+	shp/taiwan/leisure.shx \
+	shp/taiwan/route.dbf \
+	shp/taiwan/route.prj \
+	shp/taiwan/route.shp \
+	shp/taiwan/route.shx \
+	shp/merano-3d/points.dbf \
+	shp/merano-3d/points.prj \
+	shp/merano-3d/points.shp \
+	shp/merano-3d/points.shx \
+	shp/merano-3d/polygons.dbf \
+	shp/merano-3d/polygons.prj \
+	shp/merano-3d/polygons.shp \
+	shp/merano-3d/polygons.shx \
+	shp/merano-3d/roads.dbf \
+	shp/merano-3d/roads.prj \
+	shp/merano-3d/roads.shp \
+	shp/merano-3d/roads.shx \
+	shp/foggia/local_councils.dbf \
+	shp/foggia/local_councils.prj \
+	shp/foggia/local_councils.shp \
+	shp/foggia/local_councils.shx \
+	testcase1.xls \
+	testcase1.csv \
+	sql_stmt_tests/trivial.sqlite_RO \
+	sql_stmt_tests/fdo-wkb.sqlite_RO \
+	sql_stmt_tests/testdb1.sqlite \
+	sql_stmt_tests/acos10.testcase \
+	sql_stmt_tests/acos20.testcase \
+	sql_stmt_tests/acos2.testcase \
+	sql_stmt_tests/acos.testcase \
+	sql_stmt_tests/acos-text.testcase \
+	sql_stmt_tests/asgeojson1.testcase\
+	sql_stmt_tests/asgeojson2.testcase\
+	sql_stmt_tests/asgeojson3.testcase\
+	sql_stmt_tests/asgeojson4.testcase\
+	sql_stmt_tests/asgeojson5.testcase\
+	sql_stmt_tests/asgeojson6.testcase\
+	sql_stmt_tests/asgeojson7.testcase\
+	sql_stmt_tests/asgml10.testcase\
+	sql_stmt_tests/asgml11.testcase\
+	sql_stmt_tests/asgml1.testcase\
+	sql_stmt_tests/asgml2.testcase\
+	sql_stmt_tests/asgml3.testcase\
+	sql_stmt_tests/asgml4.testcase\
+	sql_stmt_tests/asgml5.testcase\
+	sql_stmt_tests/asgml6.testcase\
+	sql_stmt_tests/asgml7.testcase\
+	sql_stmt_tests/asgml8.testcase\
+	sql_stmt_tests/asgml9.testcase\
+	sql_stmt_tests/asin10.testcase \
+	sql_stmt_tests/asin1.testcase \
+	sql_stmt_tests/asin20.testcase \
+	sql_stmt_tests/asin2.testcase \
+	sql_stmt_tests/asin-text.testcase \
+	sql_stmt_tests/askml1.testcase\
+	sql_stmt_tests/askml2.testcase\
+	sql_stmt_tests/askml3.testcase\
+	sql_stmt_tests/askml4.testcase\
+	sql_stmt_tests/askml5.testcase\
+	sql_stmt_tests/askml6.testcase\
+	sql_stmt_tests/askml7.testcase\
+	sql_stmt_tests/askml8.testcase\
+	sql_stmt_tests/askml9.testcase\
+	sql_stmt_tests/aswkt-text.testcase \
+	sql_stmt_tests/atan00.testcase \
+	sql_stmt_tests/atan0.testcase \
+	sql_stmt_tests/atan-text.testcase \
+	sql_stmt_tests/buffer1.testcase \
+	sql_stmt_tests/buffer2.testcase \
+	sql_stmt_tests/buffer3.testcase \
+	sql_stmt_tests/buffer4.testcase \
+	sql_stmt_tests/buffer5.testcase \
+	sql_stmt_tests/buffer6.testcase \
+	sql_stmt_tests/buffer7.testcase \
+	sql_stmt_tests/ceilfloat2.testcase \
+	sql_stmt_tests/ceilfloat.testcase \
+	sql_stmt_tests/ceil-int.testcase \
+	sql_stmt_tests/ceilnull.testcase \
+	sql_stmt_tests/checkspatialmetadata1.testcase\
+	sql_stmt_tests/checkspatialmetadata2.testcase\
+	sql_stmt_tests/checkspatialmetadata3.testcase\
+	sql_stmt_tests/ch_m.testcase \
+	sql_stmt_tests/closestpoint10.testcase \
+	sql_stmt_tests/closestpoint11.testcase \
+	sql_stmt_tests/closestpoint12.testcase \
+	sql_stmt_tests/closestpoint13.testcase \
+	sql_stmt_tests/closestpoint14.testcase \
+	sql_stmt_tests/closestpoint15.testcase\
+	sql_stmt_tests/closestpoint16.testcase\
+	sql_stmt_tests/closestpoint1.testcase \
+	sql_stmt_tests/closestpoint2.testcase \
+	sql_stmt_tests/closestpoint3.testcase \
+	sql_stmt_tests/closestpoint4.testcase \
+	sql_stmt_tests/closestpoint5.testcase \
+	sql_stmt_tests/closestpoint6.testcase \
+	sql_stmt_tests/closestpoint7.testcase \
+	sql_stmt_tests/closestpoint8.testcase \
+	sql_stmt_tests/closestpoint9.testcase \
+	sql_stmt_tests/cm_m.testcase \
+	sql_stmt_tests/collectextract1.testcase \
+	sql_stmt_tests/collectextract2.testcase \
+	sql_stmt_tests/collectextract3.testcase \
+	sql_stmt_tests/collectextract4.testcase \
+	sql_stmt_tests/collectextract5.testcase \
+	sql_stmt_tests/collectextract6.testcase \
+	sql_stmt_tests/collectextract7.testcase \
+	sql_stmt_tests/collectextract8.testcase \
+	sql_stmt_tests/collectextract9.testcase \
+	sql_stmt_tests/cos00.testcase \
+	sql_stmt_tests/cos0.testcase \
+	sql_stmt_tests/cos-text.testcase \
+	sql_stmt_tests/cot00.testcase \
+	sql_stmt_tests/cot0.testcase \
+	sql_stmt_tests/cotpi2.testcase \
+	sql_stmt_tests/cot-text.testcase \
+	sql_stmt_tests/createtopo10.testcase \
+	sql_stmt_tests/createtopo11.testcase \
+	sql_stmt_tests/createtopo12.testcase \
+	sql_stmt_tests/createtopo13.testcase \
+	sql_stmt_tests/createtopo14.testcase \
+	sql_stmt_tests/createtopo15.testcase \
+	sql_stmt_tests/createtopo16.testcase \
+	sql_stmt_tests/createtopo17.testcase \
+	sql_stmt_tests/createtopo18.testcase \
+	sql_stmt_tests/createtopo1.testcase \
+	sql_stmt_tests/createtopo2.testcase \
+	sql_stmt_tests/createtopo3.testcase \
+	sql_stmt_tests/createtopo4.testcase \
+	sql_stmt_tests/createtopo5.testcase \
+	sql_stmt_tests/createtopo6.testcase \
+	sql_stmt_tests/createtopo7.testcase \
+	sql_stmt_tests/createtopo8.testcase \
+	sql_stmt_tests/createtopo9.testcase \
+	sql_stmt_tests/degrees45.testcase \
+	sql_stmt_tests/degrees.testcase \
+	sql_stmt_tests/degreestext.testcase \
+	sql_stmt_tests/dimension1.testcase \
+	sql_stmt_tests/dimension2.testcase \
+	sql_stmt_tests/dimension3.testcase \
+	sql_stmt_tests/dimension4.testcase \
+	sql_stmt_tests/dimension5.testcase \
+	sql_stmt_tests/dimension6.testcase \
+	sql_stmt_tests/dimension7.testcase \
+	sql_stmt_tests/dimension8.testcase \
+	sql_stmt_tests/dm_m.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/exp00.testcase \
+	sql_stmt_tests/exp0.testcase \
+	sql_stmt_tests/exp10.testcase \
+	sql_stmt_tests/exp1.testcase \
+	sql_stmt_tests/expneg.testcase \
+	sql_stmt_tests/exptext.testcase \
+	sql_stmt_tests/fath_m.testcase \
+	sql_stmt_tests/fdo_ogr1.testcase\
+	sql_stmt_tests/fdo_ogr2.testcase\
+	sql_stmt_tests/fdo-wkb.sqlite_RO\
+	sql_stmt_tests/floor32.testcase \
+	sql_stmt_tests/floorint.testcase \
+	sql_stmt_tests/floornull.testcase \
+	sql_stmt_tests/ft_m.testcase \
+	sql_stmt_tests/geomcollfromtext1.testcase \
+	sql_stmt_tests/geomcollfromtext2.testcase \
+	sql_stmt_tests/geomconstraints10.testcase\
+	sql_stmt_tests/geomconstraints11.testcase\
+	sql_stmt_tests/geomconstraints12.testcase\
+	sql_stmt_tests/geomconstraints13.testcase\
+	sql_stmt_tests/geomconstraints14.testcase\
+	sql_stmt_tests/geomconstraints1.testcase\
+	sql_stmt_tests/geomconstraints2.testcase\
+	sql_stmt_tests/geomconstraints3.testcase\
+	sql_stmt_tests/geomconstraints4.testcase\
+	sql_stmt_tests/geomconstraints5.testcase\
+	sql_stmt_tests/geomconstraints6.testcase\
+	sql_stmt_tests/geomconstraints7.testcase\
+	sql_stmt_tests/geomconstraints8.testcase\
+	sql_stmt_tests/geomconstraints9.testcase\
+	sql_stmt_tests/geometryn1.testcase \
+	sql_stmt_tests/geometryn2.testcase \
+	sql_stmt_tests/geometryn3.testcase \
+	sql_stmt_tests/geometryn4.testcase \
+	sql_stmt_tests/geometryn5.testcase \
+	sql_stmt_tests/geometryn6.testcase \
+	sql_stmt_tests/geometryn.testcase \
+	sql_stmt_tests/geomfromtext1.testcase \
+	sql_stmt_tests/geomfromtext2.testcase \
+	sql_stmt_tests/geomfromtext3.testcase \
+	sql_stmt_tests/geomfromtext4.testcase \
+	sql_stmt_tests/geomfromtext5.testcase \
+	sql_stmt_tests/geomfromtext6.testcase \
+	sql_stmt_tests/geomfromtext7.testcase \
+	sql_stmt_tests/geomfromtext8.testcase \
+	sql_stmt_tests/geomfromtext9.testcase \
+	sql_stmt_tests/geomtype10.testcase \
+	sql_stmt_tests/geomtype11.testcase \
+	sql_stmt_tests/geomtype12.testcase \
+	sql_stmt_tests/geomtype13.testcase \
+	sql_stmt_tests/geomtype14.testcase \
+	sql_stmt_tests/geomtype15.testcase \
+	sql_stmt_tests/geomtype16.testcase \
+	sql_stmt_tests/geomtype17.testcase \
+	sql_stmt_tests/geomtype18.testcase \
+	sql_stmt_tests/geomtype19.testcase \
+	sql_stmt_tests/geomtype1.testcase \
+	sql_stmt_tests/geomtype20.testcase \
+	sql_stmt_tests/geomtype21.testcase \
+	sql_stmt_tests/geomtype22.testcase \
+	sql_stmt_tests/geomtype23.testcase \
+	sql_stmt_tests/geomtype24.testcase \
+	sql_stmt_tests/geomtype25.testcase \
+	sql_stmt_tests/geomtype26.testcase \
+	sql_stmt_tests/geomtype27.testcase \
+	sql_stmt_tests/geomtype28.testcase \
+	sql_stmt_tests/geomtype29.testcase \
+	sql_stmt_tests/geomtype2.testcase \
+	sql_stmt_tests/geomtype30.testcase \
+	sql_stmt_tests/geomtype31.testcase \
+	sql_stmt_tests/geomtype32.testcase \
+	sql_stmt_tests/geomtype33.testcase \
+	sql_stmt_tests/geomtype34.testcase \
+	sql_stmt_tests/geomtype35.testcase \
+	sql_stmt_tests/geomtype36.testcase \
+	sql_stmt_tests/geomtype37.testcase \
+	sql_stmt_tests/geomtype38.testcase \
+	sql_stmt_tests/geomtype39.testcase \
+	sql_stmt_tests/geomtype3.testcase \
+	sql_stmt_tests/geomtype40.testcase \
+	sql_stmt_tests/geomtype41.testcase \
+	sql_stmt_tests/geomtype42.testcase \
+	sql_stmt_tests/geomtype43.testcase \
+	sql_stmt_tests/geomtype44.testcase \
+	sql_stmt_tests/geomtype45.testcase \
+	sql_stmt_tests/geomtype46.testcase \
+	sql_stmt_tests/geomtype47.testcase \
+	sql_stmt_tests/geomtype48.testcase \
+	sql_stmt_tests/geomtype49.testcase \
+	sql_stmt_tests/geomtype4.testcase \
+	sql_stmt_tests/geomtype50.testcase \
+	sql_stmt_tests/geomtype51.testcase \
+	sql_stmt_tests/geomtype52.testcase \
+	sql_stmt_tests/geomtype53.testcase \
+	sql_stmt_tests/geomtype54.testcase \
+	sql_stmt_tests/geomtype55.testcase \
+	sql_stmt_tests/geomtype56.testcase \
+	sql_stmt_tests/geomtype57.testcase \
+	sql_stmt_tests/geomtype58.testcase \
+	sql_stmt_tests/geomtype59.testcase \
+	sql_stmt_tests/geomtype5.testcase \
+	sql_stmt_tests/geomtype60.testcase \
+	sql_stmt_tests/geomtype61.testcase \
+	sql_stmt_tests/geomtype62.testcase \
+	sql_stmt_tests/geomtype63.testcase \
+	sql_stmt_tests/geomtype64.testcase \
+	sql_stmt_tests/geomtype65.testcase \
+	sql_stmt_tests/geomtype66.testcase \
+	sql_stmt_tests/geomtype67.testcase \
+	sql_stmt_tests/geomtype68.testcase \
+	sql_stmt_tests/geomtype69.testcase \
+	sql_stmt_tests/geomtype6.testcase \
+	sql_stmt_tests/geomtype7.testcase \
+	sql_stmt_tests/geomtype8.testcase \
+	sql_stmt_tests/geomtype9.testcase \
+	sql_stmt_tests/greatcircle-badblob.testcase \
+	sql_stmt_tests/greatcircle-poly2.testcase \
+	sql_stmt_tests/greatcircle-poly.testcase \
+	sql_stmt_tests/greatcircle.testcase \
+	sql_stmt_tests/greatcircle-text.testcase \
+	sql_stmt_tests/ind_ch_m.testcase \
+	sql_stmt_tests/ind_ft_m.testcase \
+	sql_stmt_tests/ind_yd_m.testcase \
+	sql_stmt_tests/in_m.testcase \
+	sql_stmt_tests/isclosed1.testcase \
+	sql_stmt_tests/isclosed2.testcase \
+	sql_stmt_tests/isclosed3.testcase \
+	sql_stmt_tests/isclosed4.testcase \
+	sql_stmt_tests/isclosed5.testcase \
+	sql_stmt_tests/isring1.testcase \
+	sql_stmt_tests/isring2.testcase \
+	sql_stmt_tests/isring3.testcase \
+	sql_stmt_tests/isring4.testcase \
+	sql_stmt_tests/issimple1.testcase \
+	sql_stmt_tests/issimple2.testcase \
+	sql_stmt_tests/issimple3.testcase \
+	sql_stmt_tests/issimple4.testcase \
+	sql_stmt_tests/issimple5.testcase \
+	sql_stmt_tests/isvalid1.testcase \
+	sql_stmt_tests/isvalid2.testcase \
+	sql_stmt_tests/isvalid3.testcase \
+	sql_stmt_tests/isvalid4.testcase \
+	sql_stmt_tests/isvalid5.testcase \
+	sql_stmt_tests/isvalid6.testcase \
+	sql_stmt_tests/km_m.testcase \
+	sql_stmt_tests/linefromtext1.testcase \
+	sql_stmt_tests/linefromtext2.testcase \
+	sql_stmt_tests/linemerge10.testcase\
+	sql_stmt_tests/linemerge1.testcase\
+	sql_stmt_tests/linemerge2.testcase\
+	sql_stmt_tests/linemerge3.testcase\
+	sql_stmt_tests/linemerge4.testcase\
+	sql_stmt_tests/linemerge5.testcase\
+	sql_stmt_tests/linemerge6.testcase\
+	sql_stmt_tests/linemerge7.testcase\
+	sql_stmt_tests/linemerge8.testcase\
+	sql_stmt_tests/linemerge9.testcase\
+	sql_stmt_tests/linesfromrings1.testcase \
+	sql_stmt_tests/linesfromrings2.testcase \
+	sql_stmt_tests/linesfromrings3.testcase \
+	sql_stmt_tests/linesfromrings4.testcase \
+	sql_stmt_tests/linesfromrings5.testcase \
+	sql_stmt_tests/linesfromrings6.testcase \
+	sql_stmt_tests/linesfromrings7.testcase \
+	sql_stmt_tests/linesubstring10.testcase\
+	sql_stmt_tests/linesubstring11.testcase\
+	sql_stmt_tests/linesubstring12.testcase\
+	sql_stmt_tests/linesubstring13.testcase\
+	sql_stmt_tests/linesubstring14.testcase\
+	sql_stmt_tests/linesubstring15.testcase\
+	sql_stmt_tests/linesubstring16.testcase\
+	sql_stmt_tests/linesubstring17.testcase\
+	sql_stmt_tests/linesubstring18.testcase \
+	sql_stmt_tests/linesubstring19.testcase\
+	sql_stmt_tests/linesubstring1.testcase\
+	sql_stmt_tests/linesubstring20.testcase\
+	sql_stmt_tests/linesubstring21.testcase\
+	sql_stmt_tests/linesubstring22.testcase\
+	sql_stmt_tests/linesubstring23.testcase\
+	sql_stmt_tests/linesubstring24.testcase\
+	sql_stmt_tests/linesubstring25.testcase\
+	sql_stmt_tests/linesubstring2.testcase\
+	sql_stmt_tests/linesubstring3.testcase\
+	sql_stmt_tests/linesubstring4.testcase\
+	sql_stmt_tests/linesubstring5.testcase\
+	sql_stmt_tests/linesubstring6.testcase\
+	sql_stmt_tests/linesubstring7.testcase\
+	sql_stmt_tests/linesubstring8.testcase\
+	sql_stmt_tests/linesubstring9.testcase\
+	sql_stmt_tests/link_m.testcase \
+	sql_stmt_tests/log10-0.0.testcase \
+	sql_stmt_tests/log10-100.0.testcase \
+	sql_stmt_tests/log10-100.testcase \
+	sql_stmt_tests/log10-text.testcase \
+	sql_stmt_tests/log2-0.0.testcase \
+	sql_stmt_tests/log2-0.testcase \
+	sql_stmt_tests/log2-4.0.testcase \
+	sql_stmt_tests/log2-4.testcase \
+	sql_stmt_tests/log2-text.testcase \
+	sql_stmt_tests/logn00.testcase \
+	sql_stmt_tests/logn0.testcase \
+	sql_stmt_tests/logn10.testcase \
+	sql_stmt_tests/logn1.testcase \
+	sql_stmt_tests/logn2-01.testcase \
+	sql_stmt_tests/logn2-02.testcase \
+	sql_stmt_tests/logn2-2.2.testcase \
+	sql_stmt_tests/logn2-4.2int.testcase \
+	sql_stmt_tests/logn2-4.2.testcase \
+	sql_stmt_tests/logn2-text2.testcase \
+	sql_stmt_tests/logn2-text3.testcase \
+	sql_stmt_tests/logn2-text4.testcase \
+	sql_stmt_tests/logn2-text.testcase \
+	sql_stmt_tests/logn-text.testcase \
+	sql_stmt_tests/makeline10.testcase \
+	sql_stmt_tests/makeline11.testcase \
+	sql_stmt_tests/makeline12.testcase \
+	sql_stmt_tests/makeline13.testcase \
+	sql_stmt_tests/makeline14.testcase \
+	sql_stmt_tests/makeline15.testcase \
+	sql_stmt_tests/makeline16.testcase \
+	sql_stmt_tests/makeline17.testcase \
+	sql_stmt_tests/makeline18.testcase \
+	sql_stmt_tests/makeline2.testcase \
+	sql_stmt_tests/makeline3.testcase \
+	sql_stmt_tests/makeline4.testcase \
+	sql_stmt_tests/makeline5.testcase \
+	sql_stmt_tests/makeline6.testcase \
+	sql_stmt_tests/makeline7.testcase \
+	sql_stmt_tests/makeline8.testcase \
+	sql_stmt_tests/makeline9.testcase \
+	sql_stmt_tests/makeline.testcase \
+	sql_stmt_tests/makepoint1.testcase \
+	sql_stmt_tests/makepoint2.testcase \
+	sql_stmt_tests/makepoint3.testcase \
+	sql_stmt_tests/makepoint4.testcase \
+	sql_stmt_tests/makepoint5.testcase \
+	sql_stmt_tests/makepoint6.testcase \
+	sql_stmt_tests/makepoint7.testcase \
+	sql_stmt_tests/makepoint-null1.testcase \
+	sql_stmt_tests/makepoint-null2.testcase \
+	sql_stmt_tests/makepoint-null3.testcase \
+	sql_stmt_tests/makepoint-null4.testcase \
+	sql_stmt_tests/makepoint-null5.testcase \
+	sql_stmt_tests/makepoint-null6.testcase \
+	sql_stmt_tests/makepoint-null7.testcase \
+	sql_stmt_tests/mbr10.testcase \
+	sql_stmt_tests/mbr11.testcase \
+	sql_stmt_tests/mbr12.testcase \
+	sql_stmt_tests/mbr13.testcase \
+	sql_stmt_tests/mbr14.testcase \
+	sql_stmt_tests/mbr15.testcase \
+	sql_stmt_tests/mbr16.testcase \
+	sql_stmt_tests/mbr17.testcase \
+	sql_stmt_tests/mbr18.testcase \
+	sql_stmt_tests/mbr19.testcase \
+	sql_stmt_tests/mbr1.testcase \
+	sql_stmt_tests/mbr20.testcase \
+	sql_stmt_tests/mbr21.testcase \
+	sql_stmt_tests/mbr22.testcase \
+	sql_stmt_tests/mbr23.testcase \
+	sql_stmt_tests/mbr24.testcase \
+	sql_stmt_tests/mbr25.testcase \
+	sql_stmt_tests/mbr26.testcase \
+	sql_stmt_tests/mbr27.testcase \
+	sql_stmt_tests/mbr28.testcase \
+	sql_stmt_tests/mbr29.testcase \
+	sql_stmt_tests/mbr2.testcase \
+	sql_stmt_tests/mbr30.testcase \
+	sql_stmt_tests/mbr31.testcase \
+	sql_stmt_tests/mbr32.testcase \
+	sql_stmt_tests/mbr3.testcase \
+	sql_stmt_tests/mbr4.testcase \
+	sql_stmt_tests/mbr5.testcase \
+	sql_stmt_tests/mbr6.testcase \
+	sql_stmt_tests/mbr7.testcase \
+	sql_stmt_tests/mbr8.testcase \
+	sql_stmt_tests/mbr9.testcase \
+	sql_stmt_tests/m_ch.testcase \
+	sql_stmt_tests/m_cm.testcase \
+	sql_stmt_tests/m_dm.testcase \
+	sql_stmt_tests/m_fath.testcase \
+	sql_stmt_tests/m_ft.testcase \
+	sql_stmt_tests/m_ft-text.testcase \
+	sql_stmt_tests/mi_m.testcase \
+	sql_stmt_tests/m_ind_ch.testcase \
+	sql_stmt_tests/m_ind_ft.testcase \
+	sql_stmt_tests/m_ind_yd.testcase \
+	sql_stmt_tests/m_in.testcase \
+	sql_stmt_tests/m_in_us.testcase \
+	sql_stmt_tests/m_km.testcase \
+	sql_stmt_tests/mlinefromtext1.testcase \
+	sql_stmt_tests/mlinefromtext2.testcase \
+	sql_stmt_tests/m_ln.testcase \
+	sql_stmt_tests/m_mi.testcase \
+	sql_stmt_tests/m_mm.testcase \
+	sql_stmt_tests/mm_m.testcase \
+	sql_stmt_tests/m_nm.testcase \
+	sql_stmt_tests/mpointfromtext1.testcase \
+	sql_stmt_tests/mpointfromtext2.testcase \
+	sql_stmt_tests/mpolygonfromtext1.testcase \
+	sql_stmt_tests/mpolygonfromtext2.testcase \
+	sql_stmt_tests/m_us_ch.testcase \
+	sql_stmt_tests/m_us_ft.testcase \
+	sql_stmt_tests/m_usmi.testcase \
+	sql_stmt_tests/m_yd.testcase \
+	sql_stmt_tests/m_yd_us.testcase \
+	sql_stmt_tests/nm_m.testcase \
+	sql_stmt_tests/NumPoints2.testcase \
+	sql_stmt_tests/NumPoints3.testcase \
+	sql_stmt_tests/NumPoints4.testcase \
+	sql_stmt_tests/NumPoints5.testcase \
+	sql_stmt_tests/NumPoints6.testcase \
+	sql_stmt_tests/NumPoints7.testcase \
+	sql_stmt_tests/NumPoints.testcase \
+	sql_stmt_tests/output1.testcase \
+	sql_stmt_tests/output2.testcase \
+	sql_stmt_tests/output3.testcase \
+	sql_stmt_tests/output4.testcase \
+	sql_stmt_tests/output5.testcase \
+	sql_stmt_tests/output6.testcase \
+	sql_stmt_tests/output7.testcase \
+	sql_stmt_tests/pi.testcase \
+	sql_stmt_tests/pointfromtext1.testcase \
+	sql_stmt_tests/pointfromtext2.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/polygonfromtext1.testcase \
+	sql_stmt_tests/polygonfromtext2.testcase \
+	sql_stmt_tests/polygonize1.testcase \
+	sql_stmt_tests/polygonize2.testcase \
+	sql_stmt_tests/polygonize3.testcase \
+	sql_stmt_tests/polygonize4.testcase \
+	sql_stmt_tests/pow00-1.testcase \
+	sql_stmt_tests/pow00-2.testcase \
+	sql_stmt_tests/pow00double.testcase \
+	sql_stmt_tests/pow00.testcase \
+	sql_stmt_tests/pow-badarg1.testcase \
+	sql_stmt_tests/pow-badarg2.testcase \
+	sql_stmt_tests/pow-edom.testcase \
+	sql_stmt_tests/pow-fp.testcase \
+	sql_stmt_tests/rad0.testcase \
+	sql_stmt_tests/radpi.testcase \
+	sql_stmt_tests/rad-text.testcase \
+	sql_stmt_tests/reflectcoords1.testcase \
+	sql_stmt_tests/reflectcoords2.testcase \
+	sql_stmt_tests/reflectcoords3.testcase \
+	sql_stmt_tests/reflectcoords4.testcase \
+	sql_stmt_tests/reflectcoords5.testcase \
+	sql_stmt_tests/reflectcoords6.testcase \
+	sql_stmt_tests/reflectcoords7.testcase \
+	sql_stmt_tests/reflectcoords8.testcase \
+	sql_stmt_tests/relations1.testcase \
+	sql_stmt_tests/relations2.testcase \
+	sql_stmt_tests/relations3.testcase \
+	sql_stmt_tests/relations4.testcase \
+	sql_stmt_tests/relations5.testcase \
+	sql_stmt_tests/relations6.testcase \
+	sql_stmt_tests/ring10.testcase \
+	sql_stmt_tests/ring11.testcase \
+	sql_stmt_tests/ring12.testcase \
+	sql_stmt_tests/ring13.testcase \
+	sql_stmt_tests/ring14.testcase \
+	sql_stmt_tests/ring15.testcase \
+	sql_stmt_tests/ring16.testcase \
+	sql_stmt_tests/ring17.testcase \
+	sql_stmt_tests/ring18.testcase \
+	sql_stmt_tests/ring19.testcase \
+	sql_stmt_tests/ring1.testcase \
+	sql_stmt_tests/ring20.testcase \
+	sql_stmt_tests/ring21.testcase \
+	sql_stmt_tests/ring22.testcase \
+	sql_stmt_tests/ring23.testcase \
+	sql_stmt_tests/ring24.testcase \
+	sql_stmt_tests/ring25.testcase \
+	sql_stmt_tests/ring26.testcase \
+	sql_stmt_tests/ring27.testcase \
+	sql_stmt_tests/ring2.testcase \
+	sql_stmt_tests/ring3.testcase \
+	sql_stmt_tests/ring4.testcase \
+	sql_stmt_tests/ring5.testcase \
+	sql_stmt_tests/ring6.testcase \
+	sql_stmt_tests/ring7.testcase \
+	sql_stmt_tests/ring8.testcase \
+	sql_stmt_tests/ring9.testcase \
+	sql_stmt_tests/rotatecoords10.testcase \
+	sql_stmt_tests/rotatecoords11.testcase \
+	sql_stmt_tests/rotatecoords12.testcase \
+	sql_stmt_tests/rotatecoords13.testcase \
+	sql_stmt_tests/rotatecoords14.testcase \
+	sql_stmt_tests/rotatecoords1.testcase \
+	sql_stmt_tests/rotatecoords2.testcase \
+	sql_stmt_tests/rotatecoords3.testcase \
+	sql_stmt_tests/rotatecoords4.testcase \
+	sql_stmt_tests/rotatecoords5.testcase \
+	sql_stmt_tests/rotatecoords6.testcase \
+	sql_stmt_tests/rotatecoords7.testcase \
+	sql_stmt_tests/rotatecoords8.testcase \
+	sql_stmt_tests/rotatecoords9.testcase \
+	sql_stmt_tests/round0.testcase \
+	sql_stmt_tests/round-29.testcase \
+	sql_stmt_tests/round29.testcase \
+	sql_stmt_tests/round30.testcase \
+	sql_stmt_tests/round-31.testcase \
+	sql_stmt_tests/round31.testcase \
+	sql_stmt_tests/round3.testcase \
+	sql_stmt_tests/round-text.testcase \
+	sql_stmt_tests/scalecoords10.testcase \
+	sql_stmt_tests/scalecoords11.testcase \
+	sql_stmt_tests/scalecoords12.testcase \
+	sql_stmt_tests/scalecoords13.testcase \
+	sql_stmt_tests/scalecoords1.testcase \
+	sql_stmt_tests/scalecoords2.testcase \
+	sql_stmt_tests/scalecoords3.testcase \
+	sql_stmt_tests/scalecoords4.testcase \
+	sql_stmt_tests/scalecoords5.testcase \
+	sql_stmt_tests/scalecoords6.testcase \
+	sql_stmt_tests/scalecoords7.testcase \
+	sql_stmt_tests/scalecoords8.testcase \
+	sql_stmt_tests/scalecoords9.testcase \
+	sql_stmt_tests/shiftcoords1.testcase \
+	sql_stmt_tests/shiftcoords2.testcase \
+	sql_stmt_tests/shiftcoords3.testcase \
+	sql_stmt_tests/shiftcoords4.testcase \
+	sql_stmt_tests/shiftcoords5.testcase \
+	sql_stmt_tests/shiftcoords6.testcase \
+	sql_stmt_tests/shiftcoords7.testcase \
+	sql_stmt_tests/sign00.testcase \
+	sql_stmt_tests/sign01.testcase \
+	sql_stmt_tests/sign0.testcase \
+	sql_stmt_tests/sign10.testcase \
+	sql_stmt_tests/signeg2int.testcase \
+	sql_stmt_tests/signeg2.testcase \
+	sql_stmt_tests/signeg.testcase \
+	sql_stmt_tests/signtext.testcase \
+	sql_stmt_tests/sin00.testcase \
+	sql_stmt_tests/sin0.testcase \
+	sql_stmt_tests/singlesidedbuffer11.testcase\
+	sql_stmt_tests/singlesidedbuffer12.testcase\
+	sql_stmt_tests/singlesidedbuffer13.testcase\
+	sql_stmt_tests/singlesidedbuffer14.testcase\
+	sql_stmt_tests/singlesidedbuffer1.testcase\
+	sql_stmt_tests/singlesidedbuffer2.testcase\
+	sql_stmt_tests/singlesidedbuffer3.testcase\
+	sql_stmt_tests/singlesidedbuffer4.testcase\
+	sql_stmt_tests/singlesidedbuffer5.testcase\
+	sql_stmt_tests/singlesidedbuffer6.testcase\
+	sql_stmt_tests/singlesidedbuffer7.testcase\
+	sql_stmt_tests/singlesidedbuffer8.testcase\
+	sql_stmt_tests/singlesidedbuffer9.testcase\
+	sql_stmt_tests/sin-pi2.testcase \
+	sql_stmt_tests/sinpi2.testcase \
+	sql_stmt_tests/sin-pi.testcase \
+	sql_stmt_tests/sinpi.testcase \
+	sql_stmt_tests/sin-text.testcase \
+	sql_stmt_tests/sqrt00.testcase \
+	sql_stmt_tests/sqrt0.testcase \
+	sql_stmt_tests/sqrt-10.testcase \
+	sql_stmt_tests/sqrt-1.testcase \
+	sql_stmt_tests/sqrt-640.testcase \
+	sql_stmt_tests/sqrt-64.testcase \
+	sql_stmt_tests/sqrt-text.testcase \
+	sql_stmt_tests/st_area1.testcase \
+	sql_stmt_tests/st_area2.testcase \
+	sql_stmt_tests/st_area3.testcase \
+	sql_stmt_tests/st_area4.testcase \
+	sql_stmt_tests/st_area5.testcase \
+	sql_stmt_tests/st_area6.testcase \
+	sql_stmt_tests/st_area7.testcase \
+	sql_stmt_tests/st_area8.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/stddev.testcase\
+	sql_stmt_tests/st_length1.testcase \
+	sql_stmt_tests/st_length2.testcase \
+	sql_stmt_tests/st_length3.testcase \
+	sql_stmt_tests/st_length4.testcase \
+	sql_stmt_tests/st_length5.testcase \
+	sql_stmt_tests/st_length6.testcase \
+	sql_stmt_tests/st_length7.testcase \
+	sql_stmt_tests/st_m1.testcase \
+	sql_stmt_tests/st_m2.testcase \
+	sql_stmt_tests/st_m3.testcase \
+	sql_stmt_tests/st_m4.testcase \
+	sql_stmt_tests/st_m5.testcase \
+	sql_stmt_tests/st_m6.testcase \
+	sql_stmt_tests/st_x1.testcase \
+	sql_stmt_tests/st_x2.testcase \
+	sql_stmt_tests/st_x3.testcase \
+	sql_stmt_tests/st_x4.testcase \
+	sql_stmt_tests/st_x5.testcase \
+	sql_stmt_tests/st_x6.testcase \
+	sql_stmt_tests/st_y1.testcase \
+	sql_stmt_tests/st_y2.testcase \
+	sql_stmt_tests/st_y3.testcase \
+	sql_stmt_tests/st_y4.testcase \
+	sql_stmt_tests/st_y5.testcase \
+	sql_stmt_tests/st_z1.testcase \
+	sql_stmt_tests/st_z2.testcase \
+	sql_stmt_tests/st_z3.testcase \
+	sql_stmt_tests/st_z4.testcase \
+	sql_stmt_tests/st_z5.testcase \
+	sql_stmt_tests/st_z6.testcase \
+	sql_stmt_tests/swapcoords1.testcase \
+	sql_stmt_tests/swapcoords2.testcase \
+	sql_stmt_tests/swapcoords3.testcase \
+	sql_stmt_tests/swapcoords4.testcase \
+	sql_stmt_tests/tan00.testcase \
+	sql_stmt_tests/tan0.testcase \
+	sql_stmt_tests/tanpi4.testcase \
+	sql_stmt_tests/tan-pi.testcase \
+	sql_stmt_tests/tanpi.testcase \
+	sql_stmt_tests/tan-text.testcase \
+	sql_stmt_tests/testdb1.sqlite\
+	sql_stmt_tests/trivial.sqlite_RO\
+	sql_stmt_tests/unaryunion1.testcase\
+	sql_stmt_tests/unaryunion2.testcase\
+	sql_stmt_tests/unaryunion3.testcase\
+	sql_stmt_tests/unaryunion4.testcase\
+	sql_stmt_tests/unaryunion5.testcase\
+	sql_stmt_tests/unaryunion6.testcase\
+	sql_stmt_tests/unaryunion7.testcase\
+	sql_stmt_tests/unaryunion8.testcase\
+	sql_stmt_tests/us_ch_m.testcase \
+	sql_stmt_tests/us_ft_m.testcase \
+	sql_stmt_tests/us_in_m.testcase \
+	sql_stmt_tests/us_mi_m.testcase \
+	sql_stmt_tests/us_yd_m.testcase \
+	sql_stmt_tests/variance.testcase\
+	sql_stmt_tests/yd_m.testcase
+
+
+
+
+
+
+
diff --git a/libspatialite/test/Makefile.in b/libspatialite/test/Makefile.in
new file mode 100644
index 0000000..4775c23
--- /dev/null
+++ b/libspatialite/test/Makefile.in
@@ -0,0 +1,1507 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = check_version$(EXEEXT) check_init$(EXEEXT) \
+	check_create$(EXEEXT) check_dbf_load$(EXEEXT) \
+	check_shp_load$(EXEEXT) check_shp_load_3d$(EXEEXT) \
+	shape_cp1252$(EXEEXT) shape_utf8_1$(EXEEXT) \
+	shape_utf8_2$(EXEEXT) shape_3d$(EXEEXT) \
+	check_xls_load$(EXEEXT) check_math_funcs$(EXEEXT) \
+	check_gaia_util$(EXEEXT) check_gaia_utf8$(EXEEXT) \
+	check_extension$(EXEEXT) check_sql_stmt$(EXEEXT) \
+	check_virtualtable1$(EXEEXT) check_virtualtable2$(EXEEXT) \
+	check_virtualtable3$(EXEEXT) check_virtualtable4$(EXEEXT) \
+	check_virtualtable5$(EXEEXT) check_virtualtable6$(EXEEXT) \
+	check_mbrcache$(EXEEXT) check_spatialindex$(EXEEXT)
+subdir = test
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+check_create_SOURCES = check_create.c
+check_create_OBJECTS = check_create.$(OBJEXT)
+check_create_LDADD = $(LDADD)
+check_dbf_load_SOURCES = check_dbf_load.c
+check_dbf_load_OBJECTS = check_dbf_load.$(OBJEXT)
+check_dbf_load_LDADD = $(LDADD)
+check_extension_SOURCES = check_extension.c
+check_extension_OBJECTS = check_extension.$(OBJEXT)
+check_extension_LDADD = $(LDADD)
+check_gaia_utf8_SOURCES = check_gaia_utf8.c
+check_gaia_utf8_OBJECTS = check_gaia_utf8.$(OBJEXT)
+check_gaia_utf8_LDADD = $(LDADD)
+check_gaia_util_SOURCES = check_gaia_util.c
+check_gaia_util_OBJECTS = check_gaia_util.$(OBJEXT)
+check_gaia_util_LDADD = $(LDADD)
+check_init_SOURCES = check_init.c
+check_init_OBJECTS = check_init.$(OBJEXT)
+check_init_LDADD = $(LDADD)
+check_math_funcs_SOURCES = check_math_funcs.c
+check_math_funcs_OBJECTS = check_math_funcs.$(OBJEXT)
+check_math_funcs_LDADD = $(LDADD)
+check_mbrcache_SOURCES = check_mbrcache.c
+check_mbrcache_OBJECTS = check_mbrcache.$(OBJEXT)
+check_mbrcache_LDADD = $(LDADD)
+check_shp_load_SOURCES = check_shp_load.c
+check_shp_load_OBJECTS = check_shp_load.$(OBJEXT)
+check_shp_load_LDADD = $(LDADD)
+check_shp_load_3d_SOURCES = check_shp_load_3d.c
+check_shp_load_3d_OBJECTS = check_shp_load_3d.$(OBJEXT)
+check_shp_load_3d_LDADD = $(LDADD)
+check_spatialindex_SOURCES = check_spatialindex.c
+check_spatialindex_OBJECTS = check_spatialindex.$(OBJEXT)
+check_spatialindex_LDADD = $(LDADD)
+check_sql_stmt_SOURCES = check_sql_stmt.c
+check_sql_stmt_OBJECTS = check_sql_stmt.$(OBJEXT)
+check_sql_stmt_LDADD = $(LDADD)
+check_version_SOURCES = check_version.c
+check_version_OBJECTS = check_version.$(OBJEXT)
+check_version_LDADD = $(LDADD)
+check_virtualtable1_SOURCES = check_virtualtable1.c
+check_virtualtable1_OBJECTS = check_virtualtable1.$(OBJEXT)
+check_virtualtable1_LDADD = $(LDADD)
+check_virtualtable2_SOURCES = check_virtualtable2.c
+check_virtualtable2_OBJECTS = check_virtualtable2.$(OBJEXT)
+check_virtualtable2_LDADD = $(LDADD)
+check_virtualtable3_SOURCES = check_virtualtable3.c
+check_virtualtable3_OBJECTS = check_virtualtable3.$(OBJEXT)
+check_virtualtable3_LDADD = $(LDADD)
+check_virtualtable4_SOURCES = check_virtualtable4.c
+check_virtualtable4_OBJECTS = check_virtualtable4.$(OBJEXT)
+check_virtualtable4_LDADD = $(LDADD)
+check_virtualtable5_SOURCES = check_virtualtable5.c
+check_virtualtable5_OBJECTS = check_virtualtable5.$(OBJEXT)
+check_virtualtable5_LDADD = $(LDADD)
+check_virtualtable6_SOURCES = check_virtualtable6.c
+check_virtualtable6_OBJECTS = check_virtualtable6.$(OBJEXT)
+check_virtualtable6_LDADD = $(LDADD)
+check_xls_load_SOURCES = check_xls_load.c
+check_xls_load_OBJECTS = check_xls_load.$(OBJEXT)
+check_xls_load_LDADD = $(LDADD)
+shape_3d_SOURCES = shape_3d.c
+shape_3d_OBJECTS = shape_3d.$(OBJEXT)
+shape_3d_LDADD = $(LDADD)
+shape_cp1252_SOURCES = shape_cp1252.c
+shape_cp1252_OBJECTS = shape_cp1252.$(OBJEXT)
+shape_cp1252_LDADD = $(LDADD)
+shape_utf8_1_SOURCES = shape_utf8_1.c
+shape_utf8_1_OBJECTS = shape_utf8_1.$(OBJEXT)
+shape_utf8_1_LDADD = $(LDADD)
+shape_utf8_2_SOURCES = shape_utf8_2.c
+shape_utf8_2_OBJECTS = shape_utf8_2.$(OBJEXT)
+shape_utf8_2_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = check_create.c check_dbf_load.c check_extension.c \
+	check_gaia_utf8.c check_gaia_util.c check_init.c \
+	check_math_funcs.c check_mbrcache.c check_shp_load.c \
+	check_shp_load_3d.c check_spatialindex.c check_sql_stmt.c \
+	check_version.c check_virtualtable1.c check_virtualtable2.c \
+	check_virtualtable3.c check_virtualtable4.c \
+	check_virtualtable5.c check_virtualtable6.c check_xls_load.c \
+	shape_3d.c shape_cp1252.c shape_utf8_1.c shape_utf8_2.c
+DIST_SOURCES = check_create.c check_dbf_load.c check_extension.c \
+	check_gaia_utf8.c check_gaia_util.c check_init.c \
+	check_math_funcs.c check_mbrcache.c check_shp_load.c \
+	check_shp_load_3d.c check_spatialindex.c check_sql_stmt.c \
+	check_version.c check_virtualtable1.c check_virtualtable2.c \
+	check_virtualtable3.c check_virtualtable4.c \
+	check_virtualtable5.c check_virtualtable6.c check_xls_load.c \
+	shape_3d.c shape_cp1252.c shape_utf8_1.c shape_utf8_2.c
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GEOSADVANCED_FLAGS = @GEOSADVANCED_FLAGS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMIT_EPSG_FLAGS = @OMIT_EPSG_FLAGS@
+OMIT_FREEXL_FLAGS = @OMIT_FREEXL_FLAGS@
+OMIT_GEOCALLBACKS_FLAGS = @OMIT_GEOCALLBACKS_FLAGS@
+OMIT_GEOS_FLAGS = @OMIT_GEOS_FLAGS@
+OMIT_ICONV_FLAGS = @OMIT_ICONV_FLAGS@
+OMIT_MATHSQL_FLAGS = @OMIT_MATHSQL_FLAGS@
+OMIT_PROJ_FLAGS = @OMIT_PROJ_FLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = -I at srcdir@/../src/headers
+AM_LDFLAGS = -L../src -lspatialite -lm $(GCOV_FLAGS)
+TESTS = $(check_PROGRAMS)
+MOSTLYCLEANFILES = *.gcna *.gcno *.gcda
+EXTRA_DIST = shapetest1.dbf \
+	shapetest1.prj \
+	shapetest1.qpj \
+	shapetest1.shp \
+	shapetest1.shx \
+	shp/new-caledonia/buildings.dbf \
+	shp/new-caledonia/buildings.prj \
+	shp/new-caledonia/buildings.shp \
+	shp/new-caledonia/buildings.shx \
+	shp/new-caledonia/points.dbf \
+	shp/new-caledonia/points.prj \
+	shp/new-caledonia/points.shp \
+	shp/new-caledonia/points.shx \
+	shp/new-caledonia/railways.dbf \
+	shp/new-caledonia/railways.shp \
+	shp/new-caledonia/railways.shx \
+	shp/gaza/aeroway.dbf \
+	shp/gaza/aeroway.prj \
+	shp/gaza/aeroway.shp \
+	shp/gaza/aeroway.shx \
+	shp/gaza/barrier.dbf \
+	shp/gaza/barrier.prj \
+	shp/gaza/barrier.shp \
+	shp/gaza/barrier.shx \
+	shp/gaza/route.dbf \
+	shp/gaza/route.prj \
+	shp/gaza/route.shp \
+	shp/gaza/route.shx \
+	shp/taiwan/hystoric.dbf \
+	shp/taiwan/hystoric.prj \
+	shp/taiwan/hystoric.shp \
+	shp/taiwan/hystoric.shx \
+	shp/taiwan/leisure.dbf \
+	shp/taiwan/leisure.prj \
+	shp/taiwan/leisure.shp \
+	shp/taiwan/leisure.shx \
+	shp/taiwan/route.dbf \
+	shp/taiwan/route.prj \
+	shp/taiwan/route.shp \
+	shp/taiwan/route.shx \
+	shp/merano-3d/points.dbf \
+	shp/merano-3d/points.prj \
+	shp/merano-3d/points.shp \
+	shp/merano-3d/points.shx \
+	shp/merano-3d/polygons.dbf \
+	shp/merano-3d/polygons.prj \
+	shp/merano-3d/polygons.shp \
+	shp/merano-3d/polygons.shx \
+	shp/merano-3d/roads.dbf \
+	shp/merano-3d/roads.prj \
+	shp/merano-3d/roads.shp \
+	shp/merano-3d/roads.shx \
+	shp/foggia/local_councils.dbf \
+	shp/foggia/local_councils.prj \
+	shp/foggia/local_councils.shp \
+	shp/foggia/local_councils.shx \
+	testcase1.xls \
+	testcase1.csv \
+	sql_stmt_tests/trivial.sqlite_RO \
+	sql_stmt_tests/fdo-wkb.sqlite_RO \
+	sql_stmt_tests/testdb1.sqlite \
+	sql_stmt_tests/acos10.testcase \
+	sql_stmt_tests/acos20.testcase \
+	sql_stmt_tests/acos2.testcase \
+	sql_stmt_tests/acos.testcase \
+	sql_stmt_tests/acos-text.testcase \
+	sql_stmt_tests/asgeojson1.testcase\
+	sql_stmt_tests/asgeojson2.testcase\
+	sql_stmt_tests/asgeojson3.testcase\
+	sql_stmt_tests/asgeojson4.testcase\
+	sql_stmt_tests/asgeojson5.testcase\
+	sql_stmt_tests/asgeojson6.testcase\
+	sql_stmt_tests/asgeojson7.testcase\
+	sql_stmt_tests/asgml10.testcase\
+	sql_stmt_tests/asgml11.testcase\
+	sql_stmt_tests/asgml1.testcase\
+	sql_stmt_tests/asgml2.testcase\
+	sql_stmt_tests/asgml3.testcase\
+	sql_stmt_tests/asgml4.testcase\
+	sql_stmt_tests/asgml5.testcase\
+	sql_stmt_tests/asgml6.testcase\
+	sql_stmt_tests/asgml7.testcase\
+	sql_stmt_tests/asgml8.testcase\
+	sql_stmt_tests/asgml9.testcase\
+	sql_stmt_tests/asin10.testcase \
+	sql_stmt_tests/asin1.testcase \
+	sql_stmt_tests/asin20.testcase \
+	sql_stmt_tests/asin2.testcase \
+	sql_stmt_tests/asin-text.testcase \
+	sql_stmt_tests/askml1.testcase\
+	sql_stmt_tests/askml2.testcase\
+	sql_stmt_tests/askml3.testcase\
+	sql_stmt_tests/askml4.testcase\
+	sql_stmt_tests/askml5.testcase\
+	sql_stmt_tests/askml6.testcase\
+	sql_stmt_tests/askml7.testcase\
+	sql_stmt_tests/askml8.testcase\
+	sql_stmt_tests/askml9.testcase\
+	sql_stmt_tests/aswkt-text.testcase \
+	sql_stmt_tests/atan00.testcase \
+	sql_stmt_tests/atan0.testcase \
+	sql_stmt_tests/atan-text.testcase \
+	sql_stmt_tests/buffer1.testcase \
+	sql_stmt_tests/buffer2.testcase \
+	sql_stmt_tests/buffer3.testcase \
+	sql_stmt_tests/buffer4.testcase \
+	sql_stmt_tests/buffer5.testcase \
+	sql_stmt_tests/buffer6.testcase \
+	sql_stmt_tests/buffer7.testcase \
+	sql_stmt_tests/ceilfloat2.testcase \
+	sql_stmt_tests/ceilfloat.testcase \
+	sql_stmt_tests/ceil-int.testcase \
+	sql_stmt_tests/ceilnull.testcase \
+	sql_stmt_tests/checkspatialmetadata1.testcase\
+	sql_stmt_tests/checkspatialmetadata2.testcase\
+	sql_stmt_tests/checkspatialmetadata3.testcase\
+	sql_stmt_tests/ch_m.testcase \
+	sql_stmt_tests/closestpoint10.testcase \
+	sql_stmt_tests/closestpoint11.testcase \
+	sql_stmt_tests/closestpoint12.testcase \
+	sql_stmt_tests/closestpoint13.testcase \
+	sql_stmt_tests/closestpoint14.testcase \
+	sql_stmt_tests/closestpoint15.testcase\
+	sql_stmt_tests/closestpoint16.testcase\
+	sql_stmt_tests/closestpoint1.testcase \
+	sql_stmt_tests/closestpoint2.testcase \
+	sql_stmt_tests/closestpoint3.testcase \
+	sql_stmt_tests/closestpoint4.testcase \
+	sql_stmt_tests/closestpoint5.testcase \
+	sql_stmt_tests/closestpoint6.testcase \
+	sql_stmt_tests/closestpoint7.testcase \
+	sql_stmt_tests/closestpoint8.testcase \
+	sql_stmt_tests/closestpoint9.testcase \
+	sql_stmt_tests/cm_m.testcase \
+	sql_stmt_tests/collectextract1.testcase \
+	sql_stmt_tests/collectextract2.testcase \
+	sql_stmt_tests/collectextract3.testcase \
+	sql_stmt_tests/collectextract4.testcase \
+	sql_stmt_tests/collectextract5.testcase \
+	sql_stmt_tests/collectextract6.testcase \
+	sql_stmt_tests/collectextract7.testcase \
+	sql_stmt_tests/collectextract8.testcase \
+	sql_stmt_tests/collectextract9.testcase \
+	sql_stmt_tests/cos00.testcase \
+	sql_stmt_tests/cos0.testcase \
+	sql_stmt_tests/cos-text.testcase \
+	sql_stmt_tests/cot00.testcase \
+	sql_stmt_tests/cot0.testcase \
+	sql_stmt_tests/cotpi2.testcase \
+	sql_stmt_tests/cot-text.testcase \
+	sql_stmt_tests/createtopo10.testcase \
+	sql_stmt_tests/createtopo11.testcase \
+	sql_stmt_tests/createtopo12.testcase \
+	sql_stmt_tests/createtopo13.testcase \
+	sql_stmt_tests/createtopo14.testcase \
+	sql_stmt_tests/createtopo15.testcase \
+	sql_stmt_tests/createtopo16.testcase \
+	sql_stmt_tests/createtopo17.testcase \
+	sql_stmt_tests/createtopo18.testcase \
+	sql_stmt_tests/createtopo1.testcase \
+	sql_stmt_tests/createtopo2.testcase \
+	sql_stmt_tests/createtopo3.testcase \
+	sql_stmt_tests/createtopo4.testcase \
+	sql_stmt_tests/createtopo5.testcase \
+	sql_stmt_tests/createtopo6.testcase \
+	sql_stmt_tests/createtopo7.testcase \
+	sql_stmt_tests/createtopo8.testcase \
+	sql_stmt_tests/createtopo9.testcase \
+	sql_stmt_tests/degrees45.testcase \
+	sql_stmt_tests/degrees.testcase \
+	sql_stmt_tests/degreestext.testcase \
+	sql_stmt_tests/dimension1.testcase \
+	sql_stmt_tests/dimension2.testcase \
+	sql_stmt_tests/dimension3.testcase \
+	sql_stmt_tests/dimension4.testcase \
+	sql_stmt_tests/dimension5.testcase \
+	sql_stmt_tests/dimension6.testcase \
+	sql_stmt_tests/dimension7.testcase \
+	sql_stmt_tests/dimension8.testcase \
+	sql_stmt_tests/dm_m.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/endpoint1.testcase \
+	sql_stmt_tests/exp00.testcase \
+	sql_stmt_tests/exp0.testcase \
+	sql_stmt_tests/exp10.testcase \
+	sql_stmt_tests/exp1.testcase \
+	sql_stmt_tests/expneg.testcase \
+	sql_stmt_tests/exptext.testcase \
+	sql_stmt_tests/fath_m.testcase \
+	sql_stmt_tests/fdo_ogr1.testcase\
+	sql_stmt_tests/fdo_ogr2.testcase\
+	sql_stmt_tests/fdo-wkb.sqlite_RO\
+	sql_stmt_tests/floor32.testcase \
+	sql_stmt_tests/floorint.testcase \
+	sql_stmt_tests/floornull.testcase \
+	sql_stmt_tests/ft_m.testcase \
+	sql_stmt_tests/geomcollfromtext1.testcase \
+	sql_stmt_tests/geomcollfromtext2.testcase \
+	sql_stmt_tests/geomconstraints10.testcase\
+	sql_stmt_tests/geomconstraints11.testcase\
+	sql_stmt_tests/geomconstraints12.testcase\
+	sql_stmt_tests/geomconstraints13.testcase\
+	sql_stmt_tests/geomconstraints14.testcase\
+	sql_stmt_tests/geomconstraints1.testcase\
+	sql_stmt_tests/geomconstraints2.testcase\
+	sql_stmt_tests/geomconstraints3.testcase\
+	sql_stmt_tests/geomconstraints4.testcase\
+	sql_stmt_tests/geomconstraints5.testcase\
+	sql_stmt_tests/geomconstraints6.testcase\
+	sql_stmt_tests/geomconstraints7.testcase\
+	sql_stmt_tests/geomconstraints8.testcase\
+	sql_stmt_tests/geomconstraints9.testcase\
+	sql_stmt_tests/geometryn1.testcase \
+	sql_stmt_tests/geometryn2.testcase \
+	sql_stmt_tests/geometryn3.testcase \
+	sql_stmt_tests/geometryn4.testcase \
+	sql_stmt_tests/geometryn5.testcase \
+	sql_stmt_tests/geometryn6.testcase \
+	sql_stmt_tests/geometryn.testcase \
+	sql_stmt_tests/geomfromtext1.testcase \
+	sql_stmt_tests/geomfromtext2.testcase \
+	sql_stmt_tests/geomfromtext3.testcase \
+	sql_stmt_tests/geomfromtext4.testcase \
+	sql_stmt_tests/geomfromtext5.testcase \
+	sql_stmt_tests/geomfromtext6.testcase \
+	sql_stmt_tests/geomfromtext7.testcase \
+	sql_stmt_tests/geomfromtext8.testcase \
+	sql_stmt_tests/geomfromtext9.testcase \
+	sql_stmt_tests/geomtype10.testcase \
+	sql_stmt_tests/geomtype11.testcase \
+	sql_stmt_tests/geomtype12.testcase \
+	sql_stmt_tests/geomtype13.testcase \
+	sql_stmt_tests/geomtype14.testcase \
+	sql_stmt_tests/geomtype15.testcase \
+	sql_stmt_tests/geomtype16.testcase \
+	sql_stmt_tests/geomtype17.testcase \
+	sql_stmt_tests/geomtype18.testcase \
+	sql_stmt_tests/geomtype19.testcase \
+	sql_stmt_tests/geomtype1.testcase \
+	sql_stmt_tests/geomtype20.testcase \
+	sql_stmt_tests/geomtype21.testcase \
+	sql_stmt_tests/geomtype22.testcase \
+	sql_stmt_tests/geomtype23.testcase \
+	sql_stmt_tests/geomtype24.testcase \
+	sql_stmt_tests/geomtype25.testcase \
+	sql_stmt_tests/geomtype26.testcase \
+	sql_stmt_tests/geomtype27.testcase \
+	sql_stmt_tests/geomtype28.testcase \
+	sql_stmt_tests/geomtype29.testcase \
+	sql_stmt_tests/geomtype2.testcase \
+	sql_stmt_tests/geomtype30.testcase \
+	sql_stmt_tests/geomtype31.testcase \
+	sql_stmt_tests/geomtype32.testcase \
+	sql_stmt_tests/geomtype33.testcase \
+	sql_stmt_tests/geomtype34.testcase \
+	sql_stmt_tests/geomtype35.testcase \
+	sql_stmt_tests/geomtype36.testcase \
+	sql_stmt_tests/geomtype37.testcase \
+	sql_stmt_tests/geomtype38.testcase \
+	sql_stmt_tests/geomtype39.testcase \
+	sql_stmt_tests/geomtype3.testcase \
+	sql_stmt_tests/geomtype40.testcase \
+	sql_stmt_tests/geomtype41.testcase \
+	sql_stmt_tests/geomtype42.testcase \
+	sql_stmt_tests/geomtype43.testcase \
+	sql_stmt_tests/geomtype44.testcase \
+	sql_stmt_tests/geomtype45.testcase \
+	sql_stmt_tests/geomtype46.testcase \
+	sql_stmt_tests/geomtype47.testcase \
+	sql_stmt_tests/geomtype48.testcase \
+	sql_stmt_tests/geomtype49.testcase \
+	sql_stmt_tests/geomtype4.testcase \
+	sql_stmt_tests/geomtype50.testcase \
+	sql_stmt_tests/geomtype51.testcase \
+	sql_stmt_tests/geomtype52.testcase \
+	sql_stmt_tests/geomtype53.testcase \
+	sql_stmt_tests/geomtype54.testcase \
+	sql_stmt_tests/geomtype55.testcase \
+	sql_stmt_tests/geomtype56.testcase \
+	sql_stmt_tests/geomtype57.testcase \
+	sql_stmt_tests/geomtype58.testcase \
+	sql_stmt_tests/geomtype59.testcase \
+	sql_stmt_tests/geomtype5.testcase \
+	sql_stmt_tests/geomtype60.testcase \
+	sql_stmt_tests/geomtype61.testcase \
+	sql_stmt_tests/geomtype62.testcase \
+	sql_stmt_tests/geomtype63.testcase \
+	sql_stmt_tests/geomtype64.testcase \
+	sql_stmt_tests/geomtype65.testcase \
+	sql_stmt_tests/geomtype66.testcase \
+	sql_stmt_tests/geomtype67.testcase \
+	sql_stmt_tests/geomtype68.testcase \
+	sql_stmt_tests/geomtype69.testcase \
+	sql_stmt_tests/geomtype6.testcase \
+	sql_stmt_tests/geomtype7.testcase \
+	sql_stmt_tests/geomtype8.testcase \
+	sql_stmt_tests/geomtype9.testcase \
+	sql_stmt_tests/greatcircle-badblob.testcase \
+	sql_stmt_tests/greatcircle-poly2.testcase \
+	sql_stmt_tests/greatcircle-poly.testcase \
+	sql_stmt_tests/greatcircle.testcase \
+	sql_stmt_tests/greatcircle-text.testcase \
+	sql_stmt_tests/ind_ch_m.testcase \
+	sql_stmt_tests/ind_ft_m.testcase \
+	sql_stmt_tests/ind_yd_m.testcase \
+	sql_stmt_tests/in_m.testcase \
+	sql_stmt_tests/isclosed1.testcase \
+	sql_stmt_tests/isclosed2.testcase \
+	sql_stmt_tests/isclosed3.testcase \
+	sql_stmt_tests/isclosed4.testcase \
+	sql_stmt_tests/isclosed5.testcase \
+	sql_stmt_tests/isring1.testcase \
+	sql_stmt_tests/isring2.testcase \
+	sql_stmt_tests/isring3.testcase \
+	sql_stmt_tests/isring4.testcase \
+	sql_stmt_tests/issimple1.testcase \
+	sql_stmt_tests/issimple2.testcase \
+	sql_stmt_tests/issimple3.testcase \
+	sql_stmt_tests/issimple4.testcase \
+	sql_stmt_tests/issimple5.testcase \
+	sql_stmt_tests/isvalid1.testcase \
+	sql_stmt_tests/isvalid2.testcase \
+	sql_stmt_tests/isvalid3.testcase \
+	sql_stmt_tests/isvalid4.testcase \
+	sql_stmt_tests/isvalid5.testcase \
+	sql_stmt_tests/isvalid6.testcase \
+	sql_stmt_tests/km_m.testcase \
+	sql_stmt_tests/linefromtext1.testcase \
+	sql_stmt_tests/linefromtext2.testcase \
+	sql_stmt_tests/linemerge10.testcase\
+	sql_stmt_tests/linemerge1.testcase\
+	sql_stmt_tests/linemerge2.testcase\
+	sql_stmt_tests/linemerge3.testcase\
+	sql_stmt_tests/linemerge4.testcase\
+	sql_stmt_tests/linemerge5.testcase\
+	sql_stmt_tests/linemerge6.testcase\
+	sql_stmt_tests/linemerge7.testcase\
+	sql_stmt_tests/linemerge8.testcase\
+	sql_stmt_tests/linemerge9.testcase\
+	sql_stmt_tests/linesfromrings1.testcase \
+	sql_stmt_tests/linesfromrings2.testcase \
+	sql_stmt_tests/linesfromrings3.testcase \
+	sql_stmt_tests/linesfromrings4.testcase \
+	sql_stmt_tests/linesfromrings5.testcase \
+	sql_stmt_tests/linesfromrings6.testcase \
+	sql_stmt_tests/linesfromrings7.testcase \
+	sql_stmt_tests/linesubstring10.testcase\
+	sql_stmt_tests/linesubstring11.testcase\
+	sql_stmt_tests/linesubstring12.testcase\
+	sql_stmt_tests/linesubstring13.testcase\
+	sql_stmt_tests/linesubstring14.testcase\
+	sql_stmt_tests/linesubstring15.testcase\
+	sql_stmt_tests/linesubstring16.testcase\
+	sql_stmt_tests/linesubstring17.testcase\
+	sql_stmt_tests/linesubstring18.testcase \
+	sql_stmt_tests/linesubstring19.testcase\
+	sql_stmt_tests/linesubstring1.testcase\
+	sql_stmt_tests/linesubstring20.testcase\
+	sql_stmt_tests/linesubstring21.testcase\
+	sql_stmt_tests/linesubstring22.testcase\
+	sql_stmt_tests/linesubstring23.testcase\
+	sql_stmt_tests/linesubstring24.testcase\
+	sql_stmt_tests/linesubstring25.testcase\
+	sql_stmt_tests/linesubstring2.testcase\
+	sql_stmt_tests/linesubstring3.testcase\
+	sql_stmt_tests/linesubstring4.testcase\
+	sql_stmt_tests/linesubstring5.testcase\
+	sql_stmt_tests/linesubstring6.testcase\
+	sql_stmt_tests/linesubstring7.testcase\
+	sql_stmt_tests/linesubstring8.testcase\
+	sql_stmt_tests/linesubstring9.testcase\
+	sql_stmt_tests/link_m.testcase \
+	sql_stmt_tests/log10-0.0.testcase \
+	sql_stmt_tests/log10-100.0.testcase \
+	sql_stmt_tests/log10-100.testcase \
+	sql_stmt_tests/log10-text.testcase \
+	sql_stmt_tests/log2-0.0.testcase \
+	sql_stmt_tests/log2-0.testcase \
+	sql_stmt_tests/log2-4.0.testcase \
+	sql_stmt_tests/log2-4.testcase \
+	sql_stmt_tests/log2-text.testcase \
+	sql_stmt_tests/logn00.testcase \
+	sql_stmt_tests/logn0.testcase \
+	sql_stmt_tests/logn10.testcase \
+	sql_stmt_tests/logn1.testcase \
+	sql_stmt_tests/logn2-01.testcase \
+	sql_stmt_tests/logn2-02.testcase \
+	sql_stmt_tests/logn2-2.2.testcase \
+	sql_stmt_tests/logn2-4.2int.testcase \
+	sql_stmt_tests/logn2-4.2.testcase \
+	sql_stmt_tests/logn2-text2.testcase \
+	sql_stmt_tests/logn2-text3.testcase \
+	sql_stmt_tests/logn2-text4.testcase \
+	sql_stmt_tests/logn2-text.testcase \
+	sql_stmt_tests/logn-text.testcase \
+	sql_stmt_tests/makeline10.testcase \
+	sql_stmt_tests/makeline11.testcase \
+	sql_stmt_tests/makeline12.testcase \
+	sql_stmt_tests/makeline13.testcase \
+	sql_stmt_tests/makeline14.testcase \
+	sql_stmt_tests/makeline15.testcase \
+	sql_stmt_tests/makeline16.testcase \
+	sql_stmt_tests/makeline17.testcase \
+	sql_stmt_tests/makeline18.testcase \
+	sql_stmt_tests/makeline2.testcase \
+	sql_stmt_tests/makeline3.testcase \
+	sql_stmt_tests/makeline4.testcase \
+	sql_stmt_tests/makeline5.testcase \
+	sql_stmt_tests/makeline6.testcase \
+	sql_stmt_tests/makeline7.testcase \
+	sql_stmt_tests/makeline8.testcase \
+	sql_stmt_tests/makeline9.testcase \
+	sql_stmt_tests/makeline.testcase \
+	sql_stmt_tests/makepoint1.testcase \
+	sql_stmt_tests/makepoint2.testcase \
+	sql_stmt_tests/makepoint3.testcase \
+	sql_stmt_tests/makepoint4.testcase \
+	sql_stmt_tests/makepoint5.testcase \
+	sql_stmt_tests/makepoint6.testcase \
+	sql_stmt_tests/makepoint7.testcase \
+	sql_stmt_tests/makepoint-null1.testcase \
+	sql_stmt_tests/makepoint-null2.testcase \
+	sql_stmt_tests/makepoint-null3.testcase \
+	sql_stmt_tests/makepoint-null4.testcase \
+	sql_stmt_tests/makepoint-null5.testcase \
+	sql_stmt_tests/makepoint-null6.testcase \
+	sql_stmt_tests/makepoint-null7.testcase \
+	sql_stmt_tests/mbr10.testcase \
+	sql_stmt_tests/mbr11.testcase \
+	sql_stmt_tests/mbr12.testcase \
+	sql_stmt_tests/mbr13.testcase \
+	sql_stmt_tests/mbr14.testcase \
+	sql_stmt_tests/mbr15.testcase \
+	sql_stmt_tests/mbr16.testcase \
+	sql_stmt_tests/mbr17.testcase \
+	sql_stmt_tests/mbr18.testcase \
+	sql_stmt_tests/mbr19.testcase \
+	sql_stmt_tests/mbr1.testcase \
+	sql_stmt_tests/mbr20.testcase \
+	sql_stmt_tests/mbr21.testcase \
+	sql_stmt_tests/mbr22.testcase \
+	sql_stmt_tests/mbr23.testcase \
+	sql_stmt_tests/mbr24.testcase \
+	sql_stmt_tests/mbr25.testcase \
+	sql_stmt_tests/mbr26.testcase \
+	sql_stmt_tests/mbr27.testcase \
+	sql_stmt_tests/mbr28.testcase \
+	sql_stmt_tests/mbr29.testcase \
+	sql_stmt_tests/mbr2.testcase \
+	sql_stmt_tests/mbr30.testcase \
+	sql_stmt_tests/mbr31.testcase \
+	sql_stmt_tests/mbr32.testcase \
+	sql_stmt_tests/mbr3.testcase \
+	sql_stmt_tests/mbr4.testcase \
+	sql_stmt_tests/mbr5.testcase \
+	sql_stmt_tests/mbr6.testcase \
+	sql_stmt_tests/mbr7.testcase \
+	sql_stmt_tests/mbr8.testcase \
+	sql_stmt_tests/mbr9.testcase \
+	sql_stmt_tests/m_ch.testcase \
+	sql_stmt_tests/m_cm.testcase \
+	sql_stmt_tests/m_dm.testcase \
+	sql_stmt_tests/m_fath.testcase \
+	sql_stmt_tests/m_ft.testcase \
+	sql_stmt_tests/m_ft-text.testcase \
+	sql_stmt_tests/mi_m.testcase \
+	sql_stmt_tests/m_ind_ch.testcase \
+	sql_stmt_tests/m_ind_ft.testcase \
+	sql_stmt_tests/m_ind_yd.testcase \
+	sql_stmt_tests/m_in.testcase \
+	sql_stmt_tests/m_in_us.testcase \
+	sql_stmt_tests/m_km.testcase \
+	sql_stmt_tests/mlinefromtext1.testcase \
+	sql_stmt_tests/mlinefromtext2.testcase \
+	sql_stmt_tests/m_ln.testcase \
+	sql_stmt_tests/m_mi.testcase \
+	sql_stmt_tests/m_mm.testcase \
+	sql_stmt_tests/mm_m.testcase \
+	sql_stmt_tests/m_nm.testcase \
+	sql_stmt_tests/mpointfromtext1.testcase \
+	sql_stmt_tests/mpointfromtext2.testcase \
+	sql_stmt_tests/mpolygonfromtext1.testcase \
+	sql_stmt_tests/mpolygonfromtext2.testcase \
+	sql_stmt_tests/m_us_ch.testcase \
+	sql_stmt_tests/m_us_ft.testcase \
+	sql_stmt_tests/m_usmi.testcase \
+	sql_stmt_tests/m_yd.testcase \
+	sql_stmt_tests/m_yd_us.testcase \
+	sql_stmt_tests/nm_m.testcase \
+	sql_stmt_tests/NumPoints2.testcase \
+	sql_stmt_tests/NumPoints3.testcase \
+	sql_stmt_tests/NumPoints4.testcase \
+	sql_stmt_tests/NumPoints5.testcase \
+	sql_stmt_tests/NumPoints6.testcase \
+	sql_stmt_tests/NumPoints7.testcase \
+	sql_stmt_tests/NumPoints.testcase \
+	sql_stmt_tests/output1.testcase \
+	sql_stmt_tests/output2.testcase \
+	sql_stmt_tests/output3.testcase \
+	sql_stmt_tests/output4.testcase \
+	sql_stmt_tests/output5.testcase \
+	sql_stmt_tests/output6.testcase \
+	sql_stmt_tests/output7.testcase \
+	sql_stmt_tests/pi.testcase \
+	sql_stmt_tests/pointfromtext1.testcase \
+	sql_stmt_tests/pointfromtext2.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn10.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn11.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn12.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn13.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn14.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn1.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn2.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn3.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn4.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn5.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn6.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn7.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn8.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/pointn9.testcase \
+	sql_stmt_tests/polygonfromtext1.testcase \
+	sql_stmt_tests/polygonfromtext2.testcase \
+	sql_stmt_tests/polygonize1.testcase \
+	sql_stmt_tests/polygonize2.testcase \
+	sql_stmt_tests/polygonize3.testcase \
+	sql_stmt_tests/polygonize4.testcase \
+	sql_stmt_tests/pow00-1.testcase \
+	sql_stmt_tests/pow00-2.testcase \
+	sql_stmt_tests/pow00double.testcase \
+	sql_stmt_tests/pow00.testcase \
+	sql_stmt_tests/pow-badarg1.testcase \
+	sql_stmt_tests/pow-badarg2.testcase \
+	sql_stmt_tests/pow-edom.testcase \
+	sql_stmt_tests/pow-fp.testcase \
+	sql_stmt_tests/rad0.testcase \
+	sql_stmt_tests/radpi.testcase \
+	sql_stmt_tests/rad-text.testcase \
+	sql_stmt_tests/reflectcoords1.testcase \
+	sql_stmt_tests/reflectcoords2.testcase \
+	sql_stmt_tests/reflectcoords3.testcase \
+	sql_stmt_tests/reflectcoords4.testcase \
+	sql_stmt_tests/reflectcoords5.testcase \
+	sql_stmt_tests/reflectcoords6.testcase \
+	sql_stmt_tests/reflectcoords7.testcase \
+	sql_stmt_tests/reflectcoords8.testcase \
+	sql_stmt_tests/relations1.testcase \
+	sql_stmt_tests/relations2.testcase \
+	sql_stmt_tests/relations3.testcase \
+	sql_stmt_tests/relations4.testcase \
+	sql_stmt_tests/relations5.testcase \
+	sql_stmt_tests/relations6.testcase \
+	sql_stmt_tests/ring10.testcase \
+	sql_stmt_tests/ring11.testcase \
+	sql_stmt_tests/ring12.testcase \
+	sql_stmt_tests/ring13.testcase \
+	sql_stmt_tests/ring14.testcase \
+	sql_stmt_tests/ring15.testcase \
+	sql_stmt_tests/ring16.testcase \
+	sql_stmt_tests/ring17.testcase \
+	sql_stmt_tests/ring18.testcase \
+	sql_stmt_tests/ring19.testcase \
+	sql_stmt_tests/ring1.testcase \
+	sql_stmt_tests/ring20.testcase \
+	sql_stmt_tests/ring21.testcase \
+	sql_stmt_tests/ring22.testcase \
+	sql_stmt_tests/ring23.testcase \
+	sql_stmt_tests/ring24.testcase \
+	sql_stmt_tests/ring25.testcase \
+	sql_stmt_tests/ring26.testcase \
+	sql_stmt_tests/ring27.testcase \
+	sql_stmt_tests/ring2.testcase \
+	sql_stmt_tests/ring3.testcase \
+	sql_stmt_tests/ring4.testcase \
+	sql_stmt_tests/ring5.testcase \
+	sql_stmt_tests/ring6.testcase \
+	sql_stmt_tests/ring7.testcase \
+	sql_stmt_tests/ring8.testcase \
+	sql_stmt_tests/ring9.testcase \
+	sql_stmt_tests/rotatecoords10.testcase \
+	sql_stmt_tests/rotatecoords11.testcase \
+	sql_stmt_tests/rotatecoords12.testcase \
+	sql_stmt_tests/rotatecoords13.testcase \
+	sql_stmt_tests/rotatecoords14.testcase \
+	sql_stmt_tests/rotatecoords1.testcase \
+	sql_stmt_tests/rotatecoords2.testcase \
+	sql_stmt_tests/rotatecoords3.testcase \
+	sql_stmt_tests/rotatecoords4.testcase \
+	sql_stmt_tests/rotatecoords5.testcase \
+	sql_stmt_tests/rotatecoords6.testcase \
+	sql_stmt_tests/rotatecoords7.testcase \
+	sql_stmt_tests/rotatecoords8.testcase \
+	sql_stmt_tests/rotatecoords9.testcase \
+	sql_stmt_tests/round0.testcase \
+	sql_stmt_tests/round-29.testcase \
+	sql_stmt_tests/round29.testcase \
+	sql_stmt_tests/round30.testcase \
+	sql_stmt_tests/round-31.testcase \
+	sql_stmt_tests/round31.testcase \
+	sql_stmt_tests/round3.testcase \
+	sql_stmt_tests/round-text.testcase \
+	sql_stmt_tests/scalecoords10.testcase \
+	sql_stmt_tests/scalecoords11.testcase \
+	sql_stmt_tests/scalecoords12.testcase \
+	sql_stmt_tests/scalecoords13.testcase \
+	sql_stmt_tests/scalecoords1.testcase \
+	sql_stmt_tests/scalecoords2.testcase \
+	sql_stmt_tests/scalecoords3.testcase \
+	sql_stmt_tests/scalecoords4.testcase \
+	sql_stmt_tests/scalecoords5.testcase \
+	sql_stmt_tests/scalecoords6.testcase \
+	sql_stmt_tests/scalecoords7.testcase \
+	sql_stmt_tests/scalecoords8.testcase \
+	sql_stmt_tests/scalecoords9.testcase \
+	sql_stmt_tests/shiftcoords1.testcase \
+	sql_stmt_tests/shiftcoords2.testcase \
+	sql_stmt_tests/shiftcoords3.testcase \
+	sql_stmt_tests/shiftcoords4.testcase \
+	sql_stmt_tests/shiftcoords5.testcase \
+	sql_stmt_tests/shiftcoords6.testcase \
+	sql_stmt_tests/shiftcoords7.testcase \
+	sql_stmt_tests/sign00.testcase \
+	sql_stmt_tests/sign01.testcase \
+	sql_stmt_tests/sign0.testcase \
+	sql_stmt_tests/sign10.testcase \
+	sql_stmt_tests/signeg2int.testcase \
+	sql_stmt_tests/signeg2.testcase \
+	sql_stmt_tests/signeg.testcase \
+	sql_stmt_tests/signtext.testcase \
+	sql_stmt_tests/sin00.testcase \
+	sql_stmt_tests/sin0.testcase \
+	sql_stmt_tests/singlesidedbuffer11.testcase\
+	sql_stmt_tests/singlesidedbuffer12.testcase\
+	sql_stmt_tests/singlesidedbuffer13.testcase\
+	sql_stmt_tests/singlesidedbuffer14.testcase\
+	sql_stmt_tests/singlesidedbuffer1.testcase\
+	sql_stmt_tests/singlesidedbuffer2.testcase\
+	sql_stmt_tests/singlesidedbuffer3.testcase\
+	sql_stmt_tests/singlesidedbuffer4.testcase\
+	sql_stmt_tests/singlesidedbuffer5.testcase\
+	sql_stmt_tests/singlesidedbuffer6.testcase\
+	sql_stmt_tests/singlesidedbuffer7.testcase\
+	sql_stmt_tests/singlesidedbuffer8.testcase\
+	sql_stmt_tests/singlesidedbuffer9.testcase\
+	sql_stmt_tests/sin-pi2.testcase \
+	sql_stmt_tests/sinpi2.testcase \
+	sql_stmt_tests/sin-pi.testcase \
+	sql_stmt_tests/sinpi.testcase \
+	sql_stmt_tests/sin-text.testcase \
+	sql_stmt_tests/sqrt00.testcase \
+	sql_stmt_tests/sqrt0.testcase \
+	sql_stmt_tests/sqrt-10.testcase \
+	sql_stmt_tests/sqrt-1.testcase \
+	sql_stmt_tests/sqrt-640.testcase \
+	sql_stmt_tests/sqrt-64.testcase \
+	sql_stmt_tests/sqrt-text.testcase \
+	sql_stmt_tests/st_area1.testcase \
+	sql_stmt_tests/st_area2.testcase \
+	sql_stmt_tests/st_area3.testcase \
+	sql_stmt_tests/st_area4.testcase \
+	sql_stmt_tests/st_area5.testcase \
+	sql_stmt_tests/st_area6.testcase \
+	sql_stmt_tests/st_area7.testcase \
+	sql_stmt_tests/st_area8.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint1.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint2.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/startpoint3.testcase \
+	sql_stmt_tests/stddev.testcase\
+	sql_stmt_tests/st_length1.testcase \
+	sql_stmt_tests/st_length2.testcase \
+	sql_stmt_tests/st_length3.testcase \
+	sql_stmt_tests/st_length4.testcase \
+	sql_stmt_tests/st_length5.testcase \
+	sql_stmt_tests/st_length6.testcase \
+	sql_stmt_tests/st_length7.testcase \
+	sql_stmt_tests/st_m1.testcase \
+	sql_stmt_tests/st_m2.testcase \
+	sql_stmt_tests/st_m3.testcase \
+	sql_stmt_tests/st_m4.testcase \
+	sql_stmt_tests/st_m5.testcase \
+	sql_stmt_tests/st_m6.testcase \
+	sql_stmt_tests/st_x1.testcase \
+	sql_stmt_tests/st_x2.testcase \
+	sql_stmt_tests/st_x3.testcase \
+	sql_stmt_tests/st_x4.testcase \
+	sql_stmt_tests/st_x5.testcase \
+	sql_stmt_tests/st_x6.testcase \
+	sql_stmt_tests/st_y1.testcase \
+	sql_stmt_tests/st_y2.testcase \
+	sql_stmt_tests/st_y3.testcase \
+	sql_stmt_tests/st_y4.testcase \
+	sql_stmt_tests/st_y5.testcase \
+	sql_stmt_tests/st_z1.testcase \
+	sql_stmt_tests/st_z2.testcase \
+	sql_stmt_tests/st_z3.testcase \
+	sql_stmt_tests/st_z4.testcase \
+	sql_stmt_tests/st_z5.testcase \
+	sql_stmt_tests/st_z6.testcase \
+	sql_stmt_tests/swapcoords1.testcase \
+	sql_stmt_tests/swapcoords2.testcase \
+	sql_stmt_tests/swapcoords3.testcase \
+	sql_stmt_tests/swapcoords4.testcase \
+	sql_stmt_tests/tan00.testcase \
+	sql_stmt_tests/tan0.testcase \
+	sql_stmt_tests/tanpi4.testcase \
+	sql_stmt_tests/tan-pi.testcase \
+	sql_stmt_tests/tanpi.testcase \
+	sql_stmt_tests/tan-text.testcase \
+	sql_stmt_tests/testdb1.sqlite\
+	sql_stmt_tests/trivial.sqlite_RO\
+	sql_stmt_tests/unaryunion1.testcase\
+	sql_stmt_tests/unaryunion2.testcase\
+	sql_stmt_tests/unaryunion3.testcase\
+	sql_stmt_tests/unaryunion4.testcase\
+	sql_stmt_tests/unaryunion5.testcase\
+	sql_stmt_tests/unaryunion6.testcase\
+	sql_stmt_tests/unaryunion7.testcase\
+	sql_stmt_tests/unaryunion8.testcase\
+	sql_stmt_tests/us_ch_m.testcase \
+	sql_stmt_tests/us_ft_m.testcase \
+	sql_stmt_tests/us_in_m.testcase \
+	sql_stmt_tests/us_mi_m.testcase \
+	sql_stmt_tests/us_yd_m.testcase \
+	sql_stmt_tests/variance.testcase\
+	sql_stmt_tests/yd_m.testcase
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+check_create$(EXEEXT): $(check_create_OBJECTS) $(check_create_DEPENDENCIES) 
+	@rm -f check_create$(EXEEXT)
+	$(LINK) $(check_create_OBJECTS) $(check_create_LDADD) $(LIBS)
+check_dbf_load$(EXEEXT): $(check_dbf_load_OBJECTS) $(check_dbf_load_DEPENDENCIES) 
+	@rm -f check_dbf_load$(EXEEXT)
+	$(LINK) $(check_dbf_load_OBJECTS) $(check_dbf_load_LDADD) $(LIBS)
+check_extension$(EXEEXT): $(check_extension_OBJECTS) $(check_extension_DEPENDENCIES) 
+	@rm -f check_extension$(EXEEXT)
+	$(LINK) $(check_extension_OBJECTS) $(check_extension_LDADD) $(LIBS)
+check_gaia_utf8$(EXEEXT): $(check_gaia_utf8_OBJECTS) $(check_gaia_utf8_DEPENDENCIES) 
+	@rm -f check_gaia_utf8$(EXEEXT)
+	$(LINK) $(check_gaia_utf8_OBJECTS) $(check_gaia_utf8_LDADD) $(LIBS)
+check_gaia_util$(EXEEXT): $(check_gaia_util_OBJECTS) $(check_gaia_util_DEPENDENCIES) 
+	@rm -f check_gaia_util$(EXEEXT)
+	$(LINK) $(check_gaia_util_OBJECTS) $(check_gaia_util_LDADD) $(LIBS)
+check_init$(EXEEXT): $(check_init_OBJECTS) $(check_init_DEPENDENCIES) 
+	@rm -f check_init$(EXEEXT)
+	$(LINK) $(check_init_OBJECTS) $(check_init_LDADD) $(LIBS)
+check_math_funcs$(EXEEXT): $(check_math_funcs_OBJECTS) $(check_math_funcs_DEPENDENCIES) 
+	@rm -f check_math_funcs$(EXEEXT)
+	$(LINK) $(check_math_funcs_OBJECTS) $(check_math_funcs_LDADD) $(LIBS)
+check_mbrcache$(EXEEXT): $(check_mbrcache_OBJECTS) $(check_mbrcache_DEPENDENCIES) 
+	@rm -f check_mbrcache$(EXEEXT)
+	$(LINK) $(check_mbrcache_OBJECTS) $(check_mbrcache_LDADD) $(LIBS)
+check_shp_load$(EXEEXT): $(check_shp_load_OBJECTS) $(check_shp_load_DEPENDENCIES) 
+	@rm -f check_shp_load$(EXEEXT)
+	$(LINK) $(check_shp_load_OBJECTS) $(check_shp_load_LDADD) $(LIBS)
+check_shp_load_3d$(EXEEXT): $(check_shp_load_3d_OBJECTS) $(check_shp_load_3d_DEPENDENCIES) 
+	@rm -f check_shp_load_3d$(EXEEXT)
+	$(LINK) $(check_shp_load_3d_OBJECTS) $(check_shp_load_3d_LDADD) $(LIBS)
+check_spatialindex$(EXEEXT): $(check_spatialindex_OBJECTS) $(check_spatialindex_DEPENDENCIES) 
+	@rm -f check_spatialindex$(EXEEXT)
+	$(LINK) $(check_spatialindex_OBJECTS) $(check_spatialindex_LDADD) $(LIBS)
+check_sql_stmt$(EXEEXT): $(check_sql_stmt_OBJECTS) $(check_sql_stmt_DEPENDENCIES) 
+	@rm -f check_sql_stmt$(EXEEXT)
+	$(LINK) $(check_sql_stmt_OBJECTS) $(check_sql_stmt_LDADD) $(LIBS)
+check_version$(EXEEXT): $(check_version_OBJECTS) $(check_version_DEPENDENCIES) 
+	@rm -f check_version$(EXEEXT)
+	$(LINK) $(check_version_OBJECTS) $(check_version_LDADD) $(LIBS)
+check_virtualtable1$(EXEEXT): $(check_virtualtable1_OBJECTS) $(check_virtualtable1_DEPENDENCIES) 
+	@rm -f check_virtualtable1$(EXEEXT)
+	$(LINK) $(check_virtualtable1_OBJECTS) $(check_virtualtable1_LDADD) $(LIBS)
+check_virtualtable2$(EXEEXT): $(check_virtualtable2_OBJECTS) $(check_virtualtable2_DEPENDENCIES) 
+	@rm -f check_virtualtable2$(EXEEXT)
+	$(LINK) $(check_virtualtable2_OBJECTS) $(check_virtualtable2_LDADD) $(LIBS)
+check_virtualtable3$(EXEEXT): $(check_virtualtable3_OBJECTS) $(check_virtualtable3_DEPENDENCIES) 
+	@rm -f check_virtualtable3$(EXEEXT)
+	$(LINK) $(check_virtualtable3_OBJECTS) $(check_virtualtable3_LDADD) $(LIBS)
+check_virtualtable4$(EXEEXT): $(check_virtualtable4_OBJECTS) $(check_virtualtable4_DEPENDENCIES) 
+	@rm -f check_virtualtable4$(EXEEXT)
+	$(LINK) $(check_virtualtable4_OBJECTS) $(check_virtualtable4_LDADD) $(LIBS)
+check_virtualtable5$(EXEEXT): $(check_virtualtable5_OBJECTS) $(check_virtualtable5_DEPENDENCIES) 
+	@rm -f check_virtualtable5$(EXEEXT)
+	$(LINK) $(check_virtualtable5_OBJECTS) $(check_virtualtable5_LDADD) $(LIBS)
+check_virtualtable6$(EXEEXT): $(check_virtualtable6_OBJECTS) $(check_virtualtable6_DEPENDENCIES) 
+	@rm -f check_virtualtable6$(EXEEXT)
+	$(LINK) $(check_virtualtable6_OBJECTS) $(check_virtualtable6_LDADD) $(LIBS)
+check_xls_load$(EXEEXT): $(check_xls_load_OBJECTS) $(check_xls_load_DEPENDENCIES) 
+	@rm -f check_xls_load$(EXEEXT)
+	$(LINK) $(check_xls_load_OBJECTS) $(check_xls_load_LDADD) $(LIBS)
+shape_3d$(EXEEXT): $(shape_3d_OBJECTS) $(shape_3d_DEPENDENCIES) 
+	@rm -f shape_3d$(EXEEXT)
+	$(LINK) $(shape_3d_OBJECTS) $(shape_3d_LDADD) $(LIBS)
+shape_cp1252$(EXEEXT): $(shape_cp1252_OBJECTS) $(shape_cp1252_DEPENDENCIES) 
+	@rm -f shape_cp1252$(EXEEXT)
+	$(LINK) $(shape_cp1252_OBJECTS) $(shape_cp1252_LDADD) $(LIBS)
+shape_utf8_1$(EXEEXT): $(shape_utf8_1_OBJECTS) $(shape_utf8_1_DEPENDENCIES) 
+	@rm -f shape_utf8_1$(EXEEXT)
+	$(LINK) $(shape_utf8_1_OBJECTS) $(shape_utf8_1_LDADD) $(LIBS)
+shape_utf8_2$(EXEEXT): $(shape_utf8_2_OBJECTS) $(shape_utf8_2_DEPENDENCIES) 
+	@rm -f shape_utf8_2$(EXEEXT)
+	$(LINK) $(shape_utf8_2_OBJECTS) $(shape_utf8_2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_create.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_dbf_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_extension.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_gaia_utf8.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_gaia_util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_init.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_math_funcs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_mbrcache.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_shp_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_shp_load_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_spatialindex.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_sql_stmt.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_version.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable3.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable4.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable5.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_virtualtable6.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_xls_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_cp1252.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_utf8_1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shape_utf8_2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list=' $(TESTS) '; \
+	$(am__tty_colors); \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=XPASS; \
+	      ;; \
+	      *) \
+		col=$$grn; res=PASS; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xfail=`expr $$xfail + 1`; \
+		col=$$lgn; res=XFAIL; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=FAIL; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      col=$$blu; res=SKIP; \
+	    fi; \
+	    echo "$${col}$$res$${std}: $$tst"; \
+	  done; \
+	  if test "$$all" -eq 1; then \
+	    tests="test"; \
+	    All=""; \
+	  else \
+	    tests="tests"; \
+	    All="All "; \
+	  fi; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="$$All$$all $$tests passed"; \
+	    else \
+	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all $$tests failed"; \
+	    else \
+	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    if test "$$skip" -eq 1; then \
+	      skipped="($$skip test was not run)"; \
+	    else \
+	      skipped="($$skip tests were not run)"; \
+	    fi; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  if test "$$failed" -eq 0; then \
+	    echo "$$grn$$dashes"; \
+	  else \
+	    echo "$$red$$dashes"; \
+	  fi; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes$$std"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libspatialite/test/check_create.c b/libspatialite/test/check_create.c
new file mode 100644
index 0000000..7cfafcb
--- /dev/null
+++ b/libspatialite/test/check_create.c
@@ -0,0 +1,82 @@
+/*
+
+ check_create.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -3;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_dbf_load.c b/libspatialite/test/check_dbf_load.c
new file mode 100644
index 0000000..aa8a077
--- /dev/null
+++ b/libspatialite/test/check_dbf_load.c
@@ -0,0 +1,91 @@
+/*
+
+ check_dbf_load.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory databse: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_dbf (handle, "./shapetest1.dbf", "test1", "UTF-8", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_dbf() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -4;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+
+    return 0;
+}
diff --git a/libspatialite/test/check_extension.c b/libspatialite/test/check_extension.c
new file mode 100644
index 0000000..a69746f
--- /dev/null
+++ b/libspatialite/test/check_extension.c
@@ -0,0 +1,143 @@
+/*
+
+ check_extension.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+      sqlite3_close (db_handle);
+      db_handle = NULL;
+      return -1;
+    }
+    
+    sqlite3_enable_load_extension (db_handle, 1);
+    
+    asprintf(&sql_statement, "SELECT load_extension('libspatialite.so')");
+    ret = sqlite3_exec (db_handle, sql_statement, NULL, NULL, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "load_extension() error: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -2;
+    }
+
+    asprintf(&sql_statement, "SELECT spatialite_version()");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -10;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: spatialite_version() bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[1], VERSION) != 0) {
+	fprintf (stderr, "Unexpected error: spatialite_version() bad result: %s.\n", results[1]);
+	return  -12;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "SELECT geos_version()");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error2: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -13;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: geos_version() bad result: %i/%i.\n", rows, columns);
+	return  -14;
+    }
+    /* we tolerate any string here, because versions always change */
+    if (strlen(results[1]) == 0) {
+	fprintf (stderr, "Unexpected error: geos_version() bad result.\n");
+	return  -15;
+    }
+    sqlite3_free_table (results);
+
+    
+    asprintf(&sql_statement, "SELECT proj4_version()");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error3: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -14;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: proj4_version() bad result: %i/%i.\n", rows, columns);
+	return  -14;
+    }
+    /* we tolerate any string here, because versions always change */
+    if (strlen(results[1]) == 0) {
+	fprintf (stderr, "Unexpected error: proj4_version() bad result.\n");
+	return  -15;
+    }
+    sqlite3_free_table (results);
+ 
+    sqlite3_close (db_handle);
+    
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_gaia_utf8.c b/libspatialite/test/check_gaia_utf8.c
new file mode 100644
index 0000000..0d4de77
--- /dev/null
+++ b/libspatialite/test/check_gaia_utf8.c
@@ -0,0 +1,108 @@
+/*
+
+ check_gaia_utf8.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+#include "spatialite/gaiaaux.h"
+
+int main (int argc, char *argv[])
+{
+    void * converter;
+    char *test_str1;
+    int err;
+
+    asprintf(&test_str1, "Hello World");
+    gaiaConvertCharset(&test_str1, "ASCII", "UTF-8");
+    if (strcmp(test_str1, "Hello World") != 0) {
+	fprintf(stderr, "bad ASCII to UTF-8 conversion: %s\n", test_str1);
+	free(test_str1);
+	return -1;
+    }
+    free(test_str1);
+
+#if 0
+    /* TODO: this will cause a buffer overflow */
+    asprintf(&test_str1, "Hello World");
+    gaiaConvertCharset(&test_str1, "ASCII", "UTF-16LE");
+    if (memcmp(test_str1, "H\0e\0l\0l\0o\0 \0W\0o\0r\0l\0d\0\0\0", 24) != 0) {
+	fprintf(stderr, "bad ASCII to UTF-16LE conversion\n");
+	free(test_str1);
+	return -2;
+    }
+    free(test_str1);
+#endif
+
+    converter = gaiaCreateUTF8Converter ("CP1252");
+    if (! converter) {
+	fprintf(stderr, "null UTF8 converter\n");
+	return -3;
+    }
+    
+    test_str1 = gaiaConvertToUTF8(converter, "Hello world", strlen("Hello world"), &err);
+    if (memcmp("Hello world", test_str1, strlen("Hello world") + 1) != 0) {
+	fprintf(stderr, "bad conversion to UTF8: %s\n", test_str1);
+	free(test_str1);
+	return -4;
+    }
+    free(test_str1);
+    
+    gaiaFreeUTF8Converter (converter);
+    converter = NULL;
+    /* test null converter */
+    gaiaFreeUTF8Converter (converter);
+    
+    test_str1 = gaiaConvertToUTF8(converter, "Hello world", strlen("Hello world"), &err);
+    if ((test_str1 != NULL) || (err != 1)) {
+	fprintf(stderr, "unexpected null converter result: %s, %i\n", test_str1, err);
+	return -5;
+    }
+
+    /* there is no sane way to test this automatically */
+    printf("Local codeset: %s\n", gaiaGetLocaleCharset() );
+
+    return 0;
+}
diff --git a/libspatialite/test/check_gaia_util.c b/libspatialite/test/check_gaia_util.c
new file mode 100644
index 0000000..b5020ef
--- /dev/null
+++ b/libspatialite/test/check_gaia_util.c
@@ -0,0 +1,408 @@
+/*
+
+ check_gaia_util.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+#include "spatialite/gaiaaux.h"
+
+int main (int argc, char *argv[])
+{
+    int result;
+    char *test_str1;
+    char *quoted_str;
+    
+    result = gaiaIsReservedSqliteName ("AUTOINCREMENT");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for AUTOINCREMENT: %i\n", result);
+	return -1;
+    }
+
+    result = gaiaIsReservedSqliteName ("AUTOINCREMEN");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for AUTOINCREMEN: %i\n", result);
+	return -2;
+    }
+
+    result = gaiaIsReservedSqliteName ("AUTOINCREMENTED");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for AUTOINCREMENT: %i\n", result);
+	return -3;
+    }
+
+    result = gaiaIsReservedSqliteName ("foo");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for foo: %i\n", result);
+	return -4;
+    }
+
+    result = gaiaIsReservedSqliteName ("ALL"); /* first item */
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for ALL: %i\n", result);
+	return -5;
+    }
+
+    result = gaiaIsReservedSqliteName ("WHERE"); /* last item */
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for WHERE: %i\n", result);
+	return -6;
+    }
+ 
+    result = gaiaIsReservedSqliteName ("autoincrement");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqliteName() fail for autoincrement: %i\n", result);
+	return -7;
+    }
+ 
+    result = gaiaIsReservedSqlName ("SELECT");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for SELECT: %i\n", result);
+	return -8;
+    }
+
+    result = gaiaIsReservedSqlName ("select");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for select: %i\n", result);
+	return -9;
+    }
+ 
+    result = gaiaIsReservedSqlName ("foo");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for foo: %i\n", result);
+	return -10;
+    }
+
+    result = gaiaIsReservedSqlName ("ABSOLUTE");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for ABSOLUTE: %i\n", result);
+	return -11;
+    }
+
+    result = gaiaIsReservedSqlName ("ZONE");
+    if (!result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for ZONE: %i\n", result);
+	return -12;
+    }
+
+    result = gaiaIsReservedSqlName ("SELECTED");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for SELECTED: %i\n", result);
+	return -13;
+    }
+ 
+    result = gaiaIsReservedSqlName ("SELEC");
+    if (result) {
+	fprintf(stderr, "gaiaIsReservedSqlName() fail for SELEC: %i\n", result);
+	return -14;
+    }
+
+    result = gaiaIllegalSqlName(NULL);
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for (NULL): %i\n", result);
+	return -15;
+    }
+
+    result = gaiaIllegalSqlName("a");
+    if (result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for a: %i\n", result);
+	return -16;
+    }
+    result = gaiaIllegalSqlName("-");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for -: %i\n", result);
+	return -17;
+    }
+    result = gaiaIllegalSqlName("AbbcdE0187r");
+    if (result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for AbbcdE0187r: %i\n", result);
+	return -18;
+    }
+    result = gaiaIllegalSqlName("AbbcdE0187+");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for AbbcdE0187r+: %i\n", result);
+	return -19;
+    }
+    result = gaiaIllegalSqlName("");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for (empty): %i\n", result);
+	return -20;
+    }
+    result = gaiaIllegalSqlName("_ABCedFg");
+    if (!result) {
+	fprintf(stderr, "gaiaIllegalSqlName() fail for (empty): %i\n", result);
+	return -21;
+    }
+
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "Bar");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -22;
+    }
+    free(test_str1);
+
+    asprintf(&test_str1, "SELECT %s from %s;           ", "Foo", "Bar");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -23;
+    }
+    free(test_str1);
+
+    asprintf(&test_str1, "SELECT %s from %s;           ", "Foo", "'");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from '';") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -24;
+    }
+    free(test_str1);
+
+#if 0
+    /* TODO: This will cause a buffer overflow */
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "'");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "SELECT Foo from '';") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -25;
+    }
+    free(test_str1);
+#endif
+
+    asprintf(&test_str1, "           ");
+    gaiaCleanSqlString(test_str1);
+    if (strcmp(test_str1, "") != 0) {
+	fprintf(stderr, "gaiaCleanSqlString failure: %s\n", test_str1);
+	free(test_str1);
+	return -26;
+    }
+    free(test_str1);
+
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -27;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s;           ", "Foo", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from Bar;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -28;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s;", "Foo", "'");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from '';") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -29;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s   ;    ", "Foo", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT Foo from Bar   ;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -30;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "SELECT %s from %s;", "'", "Bar");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "SELECT '' from Bar;") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -31;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "My Name");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "My Name") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -32;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    quoted_str = gaiaDoubleQuotedSql(NULL);
+    if (quoted_str != NULL) {
+	fprintf(stderr, "gaiaDoubleQuotedSql NULL failure: %s\n", quoted_str);
+	free(quoted_str);
+	return -33;
+    }
+
+    quoted_str = gaiaSingleQuotedSql(NULL);
+    if (quoted_str != NULL) {
+	fprintf(stderr, "gaiaSingleQuotedSql NULL failure: %s\n", quoted_str);
+	free(quoted_str);
+	return -34;
+    }
+
+    quoted_str = gaiaQuotedSql("foo", GAIA_SQL_SINGLE_QUOTE);
+    if (strcmp(quoted_str, "foo") != 0) {
+	fprintf(stderr, "gaiaQuotedSql failure SINGLE_QUOTE: %s\n", quoted_str);
+	free(quoted_str);
+	return -35;
+    }
+    free(quoted_str);
+
+    quoted_str = gaiaQuotedSql("foo", GAIA_SQL_DOUBLE_QUOTE);
+    if (strcmp(quoted_str, "foo") != 0) {
+	fprintf(stderr, "gaiaQuotedSql failure DOUBLE_QUOTE: %s\n", quoted_str);
+	free(quoted_str);
+	return -36;
+    }
+    free(quoted_str);
+
+    quoted_str = gaiaQuotedSql("foo", 1000);
+    if (quoted_str != NULL) {
+	fprintf(stderr, "gaiaQuotedSql failure 1000: %s\n", quoted_str);
+	free(quoted_str);
+	return -37;
+    }
+
+    asprintf(&test_str1, "My \"Name");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "My \"\"Name") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -38;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "My \"Name                   ");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "My \"\"Name") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -39;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -40;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "          ");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: |%s|\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -41;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "'          ");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "'") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -42;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "'");
+    quoted_str = gaiaDoubleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "'") != 0) {
+	fprintf(stderr, "gaiaDoubleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -43;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    asprintf(&test_str1, "\"");
+    quoted_str = gaiaSingleQuotedSql(test_str1);
+    if (strcmp(quoted_str, "\"") != 0) {
+	fprintf(stderr, "gaiaSingleQuotedSql failure: %s\n", quoted_str);
+	free(test_str1);
+	free(quoted_str);
+	return -44;
+    }
+    free(test_str1);
+    free(quoted_str);
+
+    return 0;
+}
diff --git a/libspatialite/test/check_init.c b/libspatialite/test/check_init.c
new file mode 100644
index 0000000..efbbe35
--- /dev/null
+++ b/libspatialite/test/check_init.c
@@ -0,0 +1,62 @@
+/*
+
+ check_init.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    spatialite_init(0);
+    spatialite_cleanup();
+    
+    spatialite_init(1);
+    spatialite_cleanup();
+    
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_math_funcs.c b/libspatialite/test/check_math_funcs.c
new file mode 100644
index 0000000..a5296ec
--- /dev/null
+++ b/libspatialite/test/check_math_funcs.c
@@ -0,0 +1,95 @@
+/*
+
+ check_math_funcs.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+static const double double_eps = 0.00000001;
+
+int main (int argc, char *argv[])
+{
+    double result;
+    sqlite3_int64 result64;
+    
+    result = math_round(3.4);
+    if (abs(result - 3) > double_eps) {
+	fprintf(stderr, "bad math_round() result for 3.4: %f\n", result);
+	return -1;
+    }
+
+    result = math_round(3.6);
+    if (abs(result - 4) > double_eps) {
+	fprintf(stderr, "bad math_round() result for 3.6: %f\n", result);
+	return -2;
+    }
+    
+    result = math_round(-3.4);
+    if (abs(result + 3) > double_eps) {
+	fprintf(stderr, "bad math_round() result for -3.4: %f\n", result);
+	return -3;
+    }
+
+    result = math_round(-3.6);
+    if (abs(result + 4) > double_eps) {
+	fprintf(stderr, "bad math_round() result for -3.6: %f\n", result);
+	return -4;
+    }
+
+    result64 = math_llabs((sqlite3_int64) 26);
+    if (result64 != 26) {
+	fprintf(stderr, "bad math_llabs() result for 26");
+	return -5;
+    }
+
+    result64 = math_llabs((sqlite3_int64) -26);
+    if (result64 != 26) {
+	fprintf(stderr, "bad math_llabs() result for -26");
+	return -6;
+    }
+
+    return 0;
+}
diff --git a/libspatialite/test/check_mbrcache.c b/libspatialite/test/check_mbrcache.c
new file mode 100644
index 0000000..2212e4f
--- /dev/null
+++ b/libspatialite/test/check_mbrcache.c
@@ -0,0 +1,357 @@
+/*
+
+ check_mbrcache.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "shp/foggia/local_councils", "Councils",
+			  "CP1252", 23032, "geom", 1, 0, 1, 0, &row_count,
+			  err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 61) {
+	fprintf (stderr, "unexpected number of rows loaded: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+    
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE MbrWithin(geom, BuildMbr(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -6;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -8;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "SELECT CreateMbrCache('Councils', 'geom');",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "CreateMbrCache error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -9;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -14;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -15;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -16;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -17;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrContains(997226.750031, 4627372.000018, 997226.750031, 4627372.000018)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT Contains: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -18;
+    }
+    if ((rows != 1) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -19;
+    }
+    if (strcmp(results[1], "Carlantino") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -20;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrIntersects(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+    if ((rows != 35) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -22;
+    }
+    if (strcmp(results[1], "Apricena") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -23;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DELETE FROM Councils WHERE lc_name = 'Zapponeta';",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DELETE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -24;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -25;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -26;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -27;
+    }
+    if (strcmp(results[21], "Vieste") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -28;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "INSERT INTO Councils (lc_name, geom) VALUES ('Quairading', GeomFromText('MULTIPOLYGON(((997226.750031 4627372.000018, 997301.750031 4627332.000018, 997402.500031 4627344.000018, 997541.500031 4627326.500018,997226.750031 4627372.000018)))', 23032));",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "INSERT error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -29;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT2: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -30;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -31;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -32;
+    }
+    if (strcmp(results[21], "Vieste") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -33;
+    }
+    sqlite3_free_table (results);
+    
+    ret = sqlite3_exec (handle, "UPDATE Councils SET geom = GeomFromText('MULTIPOLYGON(((987226.750031 4627372.000018, 997301.750031 4627331.000018, 997402.500032 4627344.000018, 997541.500031 4627326.500018, 987226.750031 4627372.000018)))', 23032) WHERE lc_name = \"Quairading\";",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT3: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -35;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -36;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -37;
+    }
+    if (strcmp(results[21], "Vieste") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -38;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT rowid, mbr FROM cache_Councils_geom;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -39;
+    }
+    if ((rows != 61) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad cache2 result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -40;
+    }
+    if (strcmp(results[2], "1") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[2]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -41;
+    }
+    if (strcmp(results[12], "6") != 0) {
+	fprintf (stderr, "unexpected mbr result at 6: %s\n", results[12]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -42;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DROP TABLE Councils;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE Councils error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -44;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -45;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
\ No newline at end of file
diff --git a/libspatialite/test/check_shp_load.c b/libspatialite/test/check_shp_load.c
new file mode 100644
index 0000000..e02e471
--- /dev/null
+++ b/libspatialite/test/check_shp_load.c
@@ -0,0 +1,92 @@
+/*
+
+ check_shp_load.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "./shapetest1", "test1", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -4;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/test/check_shp_load_3d.c b/libspatialite/test/check_shp_load_3d.c
new file mode 100644
index 0000000..2860778
--- /dev/null
+++ b/libspatialite/test/check_shp_load_3d.c
@@ -0,0 +1,165 @@
+/*
+
+ check_shp_load_3d.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+    const char *sql;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "shp/merano-3d/polygons", "polygons", "CP1252", 25832, 
+			  "geom", 0, 1, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+
+    ret = update_layer_statistics (handle, "polygons", "geom");
+    if (!ret) {
+        fprintf (stderr, "update_layer_statistics() error\n", err_msg);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = load_shapefile (handle, "shp/merano-3d/roads", "roads", "CP1252", 25832, 
+			  "geom", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "shp/merano-3d/points", "points", "CP1252", 25832, 
+			  "geom", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    
+    elementary_geometries (handle, "points", "geom", "elem_point", "pk_elem", "mul_id");
+    elementary_geometries (handle, "roads", "geom", "elem_linestring", "pk_elem", "mul_id");
+    elementary_geometries (handle, "polygons", "geom", "elem_poly", "pk_elem", "mul_id");
+
+    ret = update_layer_statistics (handle, NULL, NULL);
+    if (!ret) {
+        fprintf (stderr, "update_layer_statistics() error\n", err_msg);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    sql = "SELECT row_count, extent_min_x, extent_max_y "
+          "FROM layer_statistics "
+          "WHERE raster_layer = 0 AND table_name LIKE 'roads' "
+          "AND geometry_column LIKE 'geom'";
+    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "Error: %s\n", err_msg);
+        sqlite3_free (err_msg);
+        return -9;
+    }
+    if (rows != 1) {
+        fprintf (stderr, "Unexpected num of rows for LAYER_STATISTICS.\n");
+        return  -10;
+    }
+    if (atoi(results[columns+0]) != 18) {
+        fprintf (stderr, "Unexpected error: LAYER_STATISTICS bad result row_count: %s\n", results[columns+0]);
+        return -11;
+    }
+    if (atof(results[columns+1]) != 666057.648017325) {
+        fprintf (stderr, "Unexpected error: LAYER_STATISTICS bad result extent_min_x: %s\n", results[columns+1]);
+        return -12;
+    }
+    if (atof(results[columns+2]) != 5170671.31627796) {
+        fprintf (stderr, "Unexpected error: LAYER_STATISTICS bad result extent_max_y: %s\n", results[columns+2]);
+        return -13;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DROP TABLE polygons", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP polygons error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -6;
+    }
+    
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -7;
+    }
+
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/test/check_spatialindex.c b/libspatialite/test/check_spatialindex.c
new file mode 100644
index 0000000..48e3b89
--- /dev/null
+++ b/libspatialite/test/check_spatialindex.c
@@ -0,0 +1,356 @@
+/*
+
+ check_spatialindex.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_shapefile (handle, "shp/foggia/local_councils", "Councils",
+			  "CP1252", 23032, "geom", 1, 0, 1, 0, &row_count,
+			  err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 61) {
+	fprintf (stderr, "unexpected number of rows loaded: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+    
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE MbrWithin(geom, BuildMbr(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -6;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -8;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "SELECT CreateSpatialIndex('Councils', 'geom');",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "CreateMbrCache error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -9;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT pkid FROM idx_Councils_geom;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in idx SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 61) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select pkid bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -11;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT Contains: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -12;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -13;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -14;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -15;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "INSERT INTO Councils (lc_name, geom) VALUES ('Quairading', GeomFromText('MULTIPOLYGON(((997226.750031 4627372.000018, 997301.750031 4627332.000018, 997402.500031 4627344.000018, 997541.500031 4627326.500018,997226.750031 4627372.000018)))', 23032));",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "INSERT error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -16;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT2: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -17;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -18;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -19;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -20;
+    }
+    sqlite3_free_table (results);
+  
+    ret = sqlite3_exec (handle, "UPDATE Councils SET geom = GeomFromText('MULTIPOLYGON(((987226.750031 4627372.000018, 997301.750031 4627331.000018, 997402.500032 4627344.000018, 997541.500031 4627326.500018, 987226.750031 4627372.000018)))', 23032) WHERE lc_name = \"Quairading\";",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT3: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -35;
+    }
+    if ((rows != 22) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -36;
+    }
+    if (strcmp(results[1], "Ascoli Satriano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -37;
+    }
+    if (strcmp(results[22], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -38;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "DELETE FROM Councils WHERE lc_name = \"Ascoli Satriano\";",
+			NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -39;
+    }
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT pkid FROM idx_Councils_geom WHERE xmin > 1040523 AND ymin > 4010000 AND xmax < 1140523 AND ymax < 4850000) ORDER BY lc_name;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT3: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -40;
+    }
+    if ((rows != 21) || (columns != 1)) {
+	fprintf (stderr, "Unexpected error: select lc_name bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -41;
+    }
+    if (strcmp(results[1], "Cagnano Varano") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -42;
+    }
+    if (strcmp(results[21], "Zapponeta") != 0) {
+	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -43;
+    }
+    sqlite3_free_table (results);
+
+    rows = 0;
+    columns = 0;
+    ret = sqlite3_get_table (handle, "SELECT rowid, nodeno FROM idx_Councils_geom_rowid ORDER BY rowid;",
+			     &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -44;
+    }
+    if ((rows != 61) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select rowid bad idx result: %i/%i.\n", rows, columns);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return  -45;
+    }
+    if (strcmp(results[2], "1") != 0) {
+	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[2]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -46;
+    }
+    if (strcmp(results[12], "6") != 0) {
+	fprintf (stderr, "unexpected mbr result at 6: %s\n", results[12]);
+	sqlite3_free_table (results);
+	sqlite3_close(handle);
+	return -47;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (handle, "SELECT CheckSpatialIndex('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "CheckSpatialIndex error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+
+    ret = sqlite3_exec (handle, "SELECT RebuildGeometryTriggers('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Rebuild triggers error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -49;
+    }
+
+    ret = sqlite3_exec (handle, "SELECT DisableSpatialIndex('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Disable index error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -50;
+    }
+
+    ret = sqlite3_exec (handle, "SELECT RebuildGeometryTriggers('Councils', 'geom');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Disable index error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -51;
+    }
+
+    ret = sqlite3_exec (handle, "DROP TABLE Councils;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE Councils error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -52;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -53;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/test/check_sql_stmt.c b/libspatialite/test/check_sql_stmt.c
new file mode 100644
index 0000000..5128cb2
--- /dev/null
+++ b/libspatialite/test/check_sql_stmt.c
@@ -0,0 +1,279 @@
+/*
+
+ check_sql_stmt.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dirent.h>
+#include <fnmatch.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_data
+{
+    char * test_case_name;
+    char * database_name;
+    char * sql_statement;
+    int expected_rows;
+    int expected_columns;
+    char ** expected_results;
+    int *expected_precision;
+};
+
+int do_one_case (const struct test_data *data)
+{
+    sqlite3 *db_handle = NULL;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    fprintf(stderr, "Test case: %s\n", data->test_case_name);
+    // This hack checks if the name ends with _RO
+    if (strncmp("_RO", data->database_name + strlen(data->database_name) - 3, strlen("_RO")) == 0) {
+	fprintf(stderr, "opening read_only\n");
+	ret = sqlite3_open_v2 (data->database_name, &db_handle, SQLITE_OPEN_READONLY, NULL);
+    } else {
+	ret = sqlite3_open_v2 (data->database_name, &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    }
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "cannot open %s db: %s\n", data->database_name, sqlite3_errmsg (db_handle));
+      sqlite3_close (db_handle);
+      db_handle = NULL;
+      return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(db_handle);
+	return -2;
+    }
+
+    ret = sqlite3_get_table (db_handle, data->sql_statement, &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+      fprintf (stderr, "Error: %s\n", err_msg);
+      sqlite3_free (err_msg);
+      return -10;
+    }
+    if ((rows != data->expected_rows) || (columns != data->expected_columns)) {
+	fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    for (i = 0; i < (data->expected_rows + 1) * data->expected_columns; ++i) {
+	if (results[i] != NULL && data->expected_precision[i] == 0) {
+	    data->expected_precision[i] = strlen(results[i]);
+	}
+	if (results[i] == NULL) {
+	    if (strcmp("(NULL)", data->expected_results[i]) == 0) {
+		/* we expected this */
+		continue;
+	    } else {
+		fprintf (stderr, "Null value at %i.\n", i);
+		fprintf (stderr, "Expected value was: %s\n", data->expected_results[i]);
+		return  -12;
+	    }
+	} else if (strlen(results[i]) == 0) {
+	    fprintf (stderr, "zero length result at %i\n", i);
+	    fprintf (stderr, "Expected value was    : %s|\n", data->expected_results[i]);
+	    return -13;
+	} else if (strncmp(results[i], data->expected_results[i], data->expected_precision[i]) != 0) {
+	    fprintf (stderr, "Unexpected value at %i: %s|\n", i, results[i]);
+	    fprintf (stderr, "Expected value was    : %s|\n", data->expected_results[i]);
+	    return  -14;
+	}
+    }
+    sqlite3_free_table (results);
+
+    sqlite3_close (db_handle);
+    
+    return 0;
+}
+
+int get_clean_line(FILE *f, char ** line)
+{
+    size_t len = 0;
+    ssize_t num_read = 0;
+    size_t end = 0;
+    char *tmp_line = NULL;
+    num_read = getline(&(tmp_line), &len, f);
+    if (num_read < 1) {
+	fprintf(stderr, "failed to read at %li: %zi\n", ftell(f), num_read);
+	return -1;
+    }
+    /* trim the trailing new line and any comments */
+    for (end = 0; end < num_read; ++end) {
+	if (*(tmp_line + end) == '\n')
+	    break;
+	if (*(tmp_line + end) == '#')
+	    break;
+    }
+    /* trim any trailing spaces */
+    while (end > 0) {
+	if (*(tmp_line + end -1) != ' ') {
+	    break;
+	}
+	*(tmp_line + end -1) = '\0';
+	end--;
+    }
+    *line = malloc(end + 1);
+    memcpy(*line, tmp_line, end);
+    (*line)[end] = '\0';
+    free(tmp_line);
+    return 0;
+}
+
+void handle_precision(char *expected_result, int *precision)
+{
+    int i;
+    int result_len = strlen(expected_result);
+    *precision = 0;
+    for (i = result_len - 1; i >= 0; --i) {
+	if (expected_result[i] == ':') {
+	    expected_result[i] = '\0';
+	    *precision = atoi(&(expected_result[i + 1]));
+	    break;
+	}
+    }
+}
+
+struct test_data *read_one_case(const char *filepath)
+{
+    int num_results;
+    int i;
+    size_t len;
+    ssize_t num_read;
+    char *tmp;
+    FILE *f;
+
+    f = fopen(filepath, "r");
+    
+    struct test_data* data;
+    data = malloc(sizeof(struct test_data));
+    get_clean_line(f, &(data->test_case_name));
+    get_clean_line(f, &(data->database_name));
+    get_clean_line(f, &(data->sql_statement));
+    get_clean_line(f, &(tmp));
+    data->expected_rows = atoi(tmp);
+    free(tmp);
+    get_clean_line(f, &(tmp));
+    data->expected_columns = atoi(tmp);
+    free(tmp);
+    num_results = (data->expected_rows + 1) * data->expected_columns;
+    data->expected_results = malloc(num_results * sizeof(char*));
+    data->expected_precision = malloc(num_results * sizeof(int));
+    for (i = 0; i < num_results; ++i) {
+	get_clean_line(f, &(data->expected_results[i]));
+	handle_precision(data->expected_results[i], &(data->expected_precision[i]));
+    }
+    fclose(f);
+    return data;
+}
+
+void cleanup_test_data(struct test_data *data)
+{
+    int i;
+    int num_results = (data->expected_rows + 1) * (data->expected_columns);
+
+    for (i = 0; i < num_results; ++i) {
+	free(data->expected_results[i]);
+    }
+    free(data->expected_results);
+    free(data->expected_precision);
+    free(data->test_case_name);
+    free(data->database_name);
+    free(data->sql_statement);
+    free(data);
+}
+
+int test_case_filter(const struct dirent *entry)
+{
+    int ret = 0;
+    return (fnmatch("*.testcase", entry->d_name, FNM_PERIOD) == 0);
+}
+
+int main (int argc, char *argv[])
+{
+    struct dirent **namelist;
+    int n;
+    int i;
+    int result = 0;
+
+    spatialite_init (0);
+
+    n = scandir("sql_stmt_tests", &namelist, test_case_filter, alphasort);
+    if (n < 0) {
+	perror("scandir");
+	return -1;
+    } else {
+	for (i = 0; i < n; ++i) {
+	    struct test_data *data;
+	    char *path;
+	    if (asprintf(&path, "sql_stmt_tests/%s", namelist[i]->d_name) < 0) {
+		result = -1;
+		break;
+	    }
+	    data = read_one_case(path);
+	    free(path);
+	    
+	    result = do_one_case(data);
+	    
+	    cleanup_test_data(data);
+	    if (result != 0) {
+		break;
+	    }
+	    free(namelist[i]);
+	}
+	free(namelist);
+    }
+
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+
+    return result;
+}
diff --git a/libspatialite/test/check_version.c b/libspatialite/test/check_version.c
new file mode 100644
index 0000000..9731b7a
--- /dev/null
+++ b/libspatialite/test/check_version.c
@@ -0,0 +1,60 @@
+/*
+
+ check_version.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    if (strcmp(spatialite_version(), VERSION) != 0) {
+	fprintf(stderr, "SpatiaLite version mismatch: %s and %s\n",
+		VERSION, spatialite_version());
+	return -1;
+    }
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_virtualtable1.c b/libspatialite/test/check_virtualtable1.c
new file mode 100644
index 0000000..1ffbb2e
--- /dev/null
+++ b/libspatialite/test/check_virtualtable1.c
@@ -0,0 +1,160 @@
+/*
+
+ check_virtualtable1.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE places USING VirtualText(\"testcase1.csv\", UTF-8, 0, POINT, DOUBLEQUOTE);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualText error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+    
+    asprintf(&sql_statement, "select col003, col005, col006, col008 from places WHERE col003 = \"Canal Creek\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 2) || (columns != 4)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "COL003") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[4], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name4() bad result: %s.\n", results[4]);
+	return  -13;
+    }
+    if (strncmp(results[5], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lat1() bad result: %s.\n", results[5]);
+	return  -14;
+    }
+    if (strncmp(results[6], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lon2() bad result: %s.\n", results[6]);
+	return  -15;
+    }
+    if (strcmp(results[8], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name8() bad result: %s.\n", results[8]);
+	return  -16;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM places WHERE col015 > 100000;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+ 
+    ret = sqlite3_get_table (db_handle, "SELECT col003, col015 FROM places WHERE col015 > 100000", &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -23;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result2: %i/%i.\n", rows, columns);
+	return  -24;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE places;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -25;
+    }
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_virtualtable2.c b/libspatialite/test/check_virtualtable2.c
new file mode 100644
index 0000000..7af2a21
--- /dev/null
+++ b/libspatialite/test/check_virtualtable2.c
@@ -0,0 +1,595 @@
+/*
+
+ check_virtualtable2.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape(\"shapetest1\", UTF-8, 4326);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 < 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -4;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -5;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -6;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -7;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -8;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 <= 19;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -13;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -14;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -15;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 = 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -16;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -17;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -18;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -19;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer2() bad result: %s.\n", results[4]);
+	return  -20;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -21;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 > 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -23;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -24;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees2 bad result: %s.\n", results[3]);
+	return  -25;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer4() bad result: %s.\n", results[4]);
+	return  -26;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -27;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 >= 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -28;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -29;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -30;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees3 bad result: %s.\n", results[3]);
+	return  -31;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer5() bad result: %s.\n", results[4]);
+	return  -32;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -33;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 < \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -35;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -36;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -37;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -38;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -39;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 <= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -40;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -41;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -42;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -43;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -44;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -45;
+    }
+    sqlite3_free_table (results);
+
+    
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 > \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -49;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -50;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -51;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -52;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -53;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM shapetest WHERE testcase2 = 2;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+    sqlite3_free (err_msg);
+    
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -47;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 >= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -57;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -58;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -59;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 = \"windward\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -57;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -58;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -59;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID = 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -60;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -61;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -62;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -63;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -64;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -65;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID < 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -66;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -67;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -68;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -69;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -70;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -71;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID <= 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -72;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -73;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -74;
+    }
+    if (strcmp(results[3], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
+	return  -75;
+    }
+    if (strcmp(results[4], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -76;
+    }
+    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -77;
+    }
+    sqlite3_free_table (results);
+    
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID > 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -78;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -79;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -80;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -81;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -82;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -83;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID >= 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -84;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -85;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -86;
+    }
+    if (strcmp(results[3], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
+	return  -87;
+    }
+    if (strcmp(results[4], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
+	return  -88;
+    }
+    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
+	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
+	return  -89;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select PKUID, testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 LIKE \"wind\%\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -90;
+    }
+    if ((rows != 1) || (columns != 4)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -91;
+    }
+    if (strcmp(results[0], "PKUID") != 0) {
+	fprintf (stderr, "Unexpected error: header uid bad result: %s.\n", results[0]);
+	return  -92;
+    }
+    if (strcmp(results[1], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header bad result: %s.\n", results[1]);
+	return  -93;
+    }
+    if (strcmp(results[4], "1") != 0) {
+	fprintf (stderr, "Unexpected error: windward PK bad result: %s.\n", results[4]);
+	return  -93;
+    }
+    if (strcmp(results[5], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[5]);
+	return  -94;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -49;
+    }
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_virtualtable3.c b/libspatialite/test/check_virtualtable3.c
new file mode 100644
index 0000000..b6bb8b2
--- /dev/null
+++ b/libspatialite/test/check_virtualtable3.c
@@ -0,0 +1,580 @@
+/*
+
+ check_virtualtable3.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF(shapetest1.dbf, UTF-8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 < 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -4;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -5;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -6;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -7;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 <= 19;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -13;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -14;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 = 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -16;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -17;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -18;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -19;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer2() bad result: %s.\n", results[3]);
+	return  -20;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 > 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -23;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -24;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees2 bad result: %s.\n", results[2]);
+	return  -25;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer4() bad result: %s.\n", results[3]);
+	return  -26;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase2 >= 20;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -28;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -29;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -30;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees3 bad result: %s.\n", results[2]);
+	return  -31;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer5() bad result: %s.\n", results[3]);
+	return  -32;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 < \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -34;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -35;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -36;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -37;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -38;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 <= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -40;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -41;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -42;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -43;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -44;
+    }
+    sqlite3_free_table (results);
+    
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 > \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -49;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -50;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -51;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -52;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM dbftest WHERE testcase2 = 2;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -47;
+    }
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 >= \"p\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -57;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -58;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where testcase1 = \"windward\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -54;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -55;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -56;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -57;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -58;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID = 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -60;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -61;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -62;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -63;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -64;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID < 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -66;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -67;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -68;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -69;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -70;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID <= 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -72;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -73;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -74;
+    }
+    if (strcmp(results[2], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[2]);
+	return  -75;
+    }
+    if (strcmp(results[3], "2") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -76;
+    }
+    sqlite3_free_table (results);
+    
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID > 1;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -78;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -79;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -80;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -81;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -82;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select testcase1, testcase2 from dbftest where PKUID >= 2;");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -84;
+    }
+    if ((rows != 1) || (columns != 2)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -85;
+    }
+    if (strcmp(results[0], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -86;
+    }
+    if (strcmp(results[2], "orde lees") != 0) {
+	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[2]);
+	return  -87;
+    }
+    if (strcmp(results[3], "20") != 0) {
+	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[3]);
+	return  -88;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select PKUID, testcase1, testcase2 from dbftest where testcase1 LIKE \"wind\%\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -90;
+    }
+    if ((rows != 1) || (columns != 3)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -91;
+    }
+    if (strcmp(results[0], "PKUID") != 0) {
+	fprintf (stderr, "Unexpected error: header uid bad result: %s.\n", results[0]);
+	return  -92;
+    }
+    if (strcmp(results[1], "testcase1") != 0) {
+	fprintf (stderr, "Unexpected error: header bad result: %s.\n", results[1]);
+	return  -93;
+    }
+    if (strcmp(results[3], "1") != 0) {
+	fprintf (stderr, "Unexpected error: windward PK bad result: %s.\n", results[3]);
+	return  -93;
+    }
+    if (strcmp(results[4], "windward") != 0) {
+	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[4]);
+	return  -94;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -49;
+    }
+
+    /* error cases */
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toofewargs USING VirtualDBF(\"shapetest1.dbf\");", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualDBF unexpected result: %i\n", ret);
+	return -95;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toomanyargs USING VirtualDBF(\"shapetest1.dbf\", UTF-8, 1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualDBF unexpected result: %i\n", ret);
+	return -96;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchfile USING VirtualDBF(\"not_a_file.dbf\", UTF-8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -97;
+    }
+    ret = sqlite3_get_table (db_handle, "SELECT * from nosuchfile;", &results, &rows, &columns, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -98;
+    }
+    if ((rows != 0) || (columns != 0)) {
+	fprintf (stderr, "Unexpected error: select columns no suchfile: %i/%i.\n", rows, columns);
+	return  -99;
+    }
+    sqlite3_free_table (results);
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchfile;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -100;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE onesidedquote USING VirtualDBF('shapetest1.dbf, UTF-8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualDBF unexpected result: %i\n", ret);
+	return -101;
+    }
+    sqlite3_free (err_msg);
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_virtualtable4.c b/libspatialite/test/check_virtualtable4.c
new file mode 100644
index 0000000..64df37e
--- /dev/null
+++ b/libspatialite/test/check_virtualtable4.c
@@ -0,0 +1,342 @@
+/*
+
+ check_virtualtable4.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_step
+{
+    const char *sql;
+    const int num_rows;
+};
+
+#define NUMSTEPS 36
+
+struct test_step steps[NUMSTEPS] = {
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 > \"Canary Creek\";", 9 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 < \"Canary Creek\";", 7 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 >= \"Canary Creek\";", 10 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 <= \"Canary Creek\";", 8 },
+    { "select col_2, col_4, col_5, col_7 from xltest WHERE col_2 = 3;", 0 }, 
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 > 100000;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 < 100000;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 < 100000 AND col_14 > 0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 = 895;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 = 895.0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 <= 895;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 >= 895;", 2 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 > 100000.0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 < 100000.0;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 = 895.0;", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 <= 895.0;", 16 },
+    { "SELECT col_2, col_14 FROM xltest WHERE col_14 >= 895.0;", 2 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no = 4", 1 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no < 4", 3 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no <= 4", 4 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no >= 4", 14 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no > 4", 13 },
+    { "SELECT col_2, col_14 FROM xltest WHERE row_no = 4.00", 0 },
+    { "select col_2, col_4, col_5 from xltest where col_4 < -30.0;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 > -30.0;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_4 <= -30.0;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 >= -30.0;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_5 = 149.1;", 1 },
+    { "select col_2, col_4, col_5 from xltest where col_4 < -30;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 > -30;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_4 <= -30;", 8 },
+    { "select col_2, col_4, col_5 from xltest where col_4 >= -30;", 9 },
+    { "select col_2, col_4, col_5 from xltest where col_4 = -30;", 0 },
+    { "SELECT row_no, col_4, col_5 from xltest", 17 },
+    { "select rowid, col_4, col_5 from xltest where col_4 = -26.0;", 1 },
+    { "select rowid, col_4, col_5 from xltest where col_4 = -26;", 1 },
+};
+
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE xltest USING VirtualXL(\"testcase1.xls\");", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    asprintf(&sql_statement, "select col_2, col_4, col_5, col_7, rowid from xltest WHERE col_2 = \"Canal Creek\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -10;
+    }
+    if ((rows != 2) || (columns != 5)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -11;
+    }
+    if (strcmp(results[0], "col_2") != 0) {
+	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
+	return  -12;
+    }
+    if (strcmp(results[5], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name5() bad result: %s.\n", results[5]);
+	return  -13;
+    }
+    if (strncmp(results[6], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lat1() bad result: %s.\n", results[6]);
+	return  -14;
+    }
+    if (strncmp(results[7], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: lon2() bad result: %s.\n", results[7]);
+	return  -15;
+    }
+    if (strcmp(results[10], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: name10() bad result: %s.\n", results[10]);
+	return  -16;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "BEGIN error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+
+    ret = sqlite3_exec (db_handle, "DELETE FROM xltest WHERE col_14 > 100000;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_READONLY) {
+	fprintf (stderr, "UPDATE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -21;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -22;
+    }
+ 
+    for (i = 0; i < NUMSTEPS; ++i) {
+	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
+	if (ret != SQLITE_OK) {
+	    fprintf (stderr, "Error: %s\n", err_msg);
+	    sqlite3_free (err_msg);
+	    return -23;
+	}
+	if (rows != steps[i].num_rows) {
+	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
+	    return  -24;
+	}
+	sqlite3_free_table (results);
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE xltest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -25;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchworksheet USING VirtualXL(\"testcase1.xls\", 3);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -26;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchworksheet;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -27;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchfile USING VirtualXL(\"not_a_file.xls\", 3);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -28;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchfile;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -29;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE sheet2 USING VirtualXL(\"testcase1.xls\", 1, 1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -30;
+    }
+    asprintf(&sql_statement, "select row_no, place, lat, lon, rowid from sheet2 WHERE place = \"Canal Creek\";");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -31;
+    }
+    if ((rows != 4) || (columns != 5)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -32;
+    }
+    if (strcmp(results[0], "row_no") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result: %s.\n", results[0]);
+	return  -33;
+    }
+    if (strcmp(results[6], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result place: %s.\n", results[6]);
+	return  -34;
+    }
+    if (strncmp(results[7], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lat: %s.\n", results[7]);
+	return  -35;
+    }
+    if (strncmp(results[8], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lon: %s.\n", results[8]);
+	return  -36;
+    }
+    if (strcmp(results[11], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result place2: %s.\n", results[11]);
+	return  -37;
+    }
+    sqlite3_free_table (results);
+
+    asprintf(&sql_statement, "select row_no, place, lat, lon, rowid from sheet2 WHERE row_no = 16");
+    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
+    free(sql_statement);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "Error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -38;
+    }
+    if ((rows != 1) || (columns != 5)) {
+	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
+	return  -39;
+    }
+    if (strcmp(results[0], "row_no") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result: %s.\n", results[0]);
+	return  -40;
+    }
+    if (strcmp(results[6], "Canal Creek") != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result place: %s.\n", results[6]);
+	return  -41;
+    }
+    if (strncmp(results[7], "-27.86667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lat: %s.\n", results[7]);
+	return  -42;
+    }
+    if (strncmp(results[8], "151.51667", 9) != 0) {
+	fprintf (stderr, "Unexpected error: sheet2() bad result lon: %s.\n", results[8]);
+	return  -43;
+    }
+    sqlite3_free_table (results);
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE sheet2;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -44;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE noquote USING VirtualXL(testcase1.xls);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -45;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE noquote;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -46;
+    }
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE noheader USING VirtualXL(\"testcase1.xls\", 0, 0);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualXL error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -47;
+    }
+    ret = sqlite3_exec (db_handle, "DROP TABLE noheader;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -48;
+    }
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nofile USING VirtualXL();", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualXL unexpected result: %i\n", ret);
+	return -49;
+    }
+    sqlite3_free (err_msg);
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_virtualtable5.c b/libspatialite/test/check_virtualtable5.c
new file mode 100644
index 0000000..63c8e5c
--- /dev/null
+++ b/libspatialite/test/check_virtualtable5.c
@@ -0,0 +1,170 @@
+/*
+
+ check_virtualtable5.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_step
+{
+    const char *sql;
+    const int num_rows;
+};
+
+struct test_step steps[] = {
+    { "select DATUM from dbftest WHERE DATUM = 2450514.5;", 18 },
+    { "select DATUM from dbftest WHERE DATUM < 2450514.5;", 0 },
+    { "select DATUM from dbftest WHERE DATUM > 2450514.5;", 0 },
+    { "select DATUM from dbftest WHERE DATUM >= 2450514.5;", 18 },
+    { "select DATUM from dbftest WHERE DATUM <= 2450514.5;", 18 },
+    { "select DATUM from dbftest WHERE DATUM = 2450514.5;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 0.0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 1.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE != 0.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE Length > 0.0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE Length >= 0.0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE Length <= 0.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE Length > 1.0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE Length > 0.1;", 10 },
+    { "select Length, HOEHE from dbftest WHERE Length < 0.1;", 8 },
+    { "select Length, HOEHE from dbftest WHERE Length >= 0.1;", 10 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE >= 0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE <= 0;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE > 0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE < 0;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE = 1;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE <= 1;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE >= 1;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE < 1;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE > -1;", 18 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE < -1;", 0 },
+    { "select Length, HOEHE from dbftest WHERE HOEHE <= -1;", 0 },
+    { NULL, 0 }
+};
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF(\"shp/merano-3d/roads.dbf\", 'CP1252');", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF('shp/merano-3d/roads.dbf', \"CP1252\");", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -4;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF('shp/merano-3d/roads.dbf', CP1252);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -6;
+    }
+    
+    for (i = 0; steps[i].sql; ++i) {
+	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
+	if (ret != SQLITE_OK) {
+	    fprintf (stderr, "Error: %s\n", err_msg);
+	    sqlite3_free (err_msg);
+	    return -7;
+	}
+	if (rows != steps[i].num_rows) {
+	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
+	    return  -8;
+	}
+	sqlite3_free_table (results);
+    }
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -9;
+    }
+
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_virtualtable6.c b/libspatialite/test/check_virtualtable6.c
new file mode 100644
index 0000000..eed08b4
--- /dev/null
+++ b/libspatialite/test/check_virtualtable6.c
@@ -0,0 +1,214 @@
+/*
+
+ check_virtualtable6.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+struct test_step
+{
+    const char *sql;
+    const int num_rows;
+};
+
+struct test_step steps[] = {
+    { "select DATUM, Geometry from shapetest WHERE DATUM = 2450514.5;", 18 },
+    { "select DATUM from shapetest WHERE DATUM < 2450514.5;", 0 },
+    { "select DATUM from shapetest WHERE DATUM > 2450514.5;", 0 },
+    { "select DATUM from shapetest WHERE DATUM >= 2450514.5;", 18 },
+    { "select DATUM from shapetest WHERE DATUM <= 2450514.5;", 18 },
+    { "select DATUM from shapetest WHERE DATUM = 2450514.5;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 0.0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 1.0;", 0 },
+    { "select Length, HOEHE, Geometry from shapetest WHERE HOEHE != 0.0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE Length > 0.0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE Length >= 0.0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE Length <= 0.0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE Length > 1.0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE Length > 0.1;", 10 },
+    { "select Length, HOEHE from shapetest WHERE Length < 0.1;", 8 },
+    { "select Length, HOEHE from shapetest WHERE Length >= 0.1;", 10 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE >= 0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE <= 0;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE > 0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE < 0;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE = 1;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE <= 1;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE >= 1;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE < 1;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE > -1;", 18 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE < -1;", 0 },
+    { "select Length, HOEHE from shapetest WHERE HOEHE <= -1;", 0 },
+    { "select * from shapetest LIMIT 5 OFFSET 2;", 5 },
+    { NULL, 0 }
+};
+int main (int argc, char *argv[])
+{
+    sqlite3 *db_handle = NULL;
+    char *sql_statement;
+    int ret;
+    char *err_msg = NULL;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+    const char *sql;
+
+    spatialite_init (0);
+
+    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
+	sqlite3_close (db_handle);
+	db_handle = NULL;
+	return -1;
+    }
+    
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape('shp/merano-3d/roads', CP1252, 25832);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -2;
+    }
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -3;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape(\"shp/merano-3d/roads\", 'CP1252', -1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -4;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -5;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE unquoted USING VirtualShape(shapetest1, UTF8, -1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -6;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE unquoted;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -7;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape('shp/merano-3d/roads', \"CP1252\", 25832);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -8;
+    }
+
+    for (i = 0; steps[i].sql; ++i) {
+	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
+	if (ret != SQLITE_OK) {
+	    fprintf (stderr, "Error: %s\n", err_msg);
+	    sqlite3_free (err_msg);
+	    return -9;
+	}
+	if (rows != steps[i].num_rows) {
+	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
+	    return  -10;
+	}
+	sqlite3_free_table (results);
+    }
+
+    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -11;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchfile USING VirtualShape(nosuchfile, UTF8, -1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -12;
+    }
+    
+    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchfile;", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
+	sqlite3_free (err_msg);
+	return -13;
+    }
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toofewargs USING VirtualShape(\"shapetest1\", UTF8);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualShape unexpected result: %i\n", ret);
+	return -14;
+    }
+    sqlite3_free (err_msg);
+
+    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toomanyargs USING VirtualShape(\"shapetest1\", UTF8, 4386, 1);", NULL, NULL, &err_msg);
+    if (ret != SQLITE_ERROR) {
+	fprintf (stderr, "VirtualShape unexpected result: %i\n", ret);
+	return -15;
+    }
+    sqlite3_free (err_msg);
+    
+    sqlite3_close (db_handle);
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/check_xls_load.c b/libspatialite/test/check_xls_load.c
new file mode 100644
index 0000000..2b2c460
--- /dev/null
+++ b/libspatialite/test/check_xls_load.c
@@ -0,0 +1,125 @@
+/*
+
+ check_xls_load.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+
+    ret = load_XL (handle, "./testcase1.xls", "test1", 0, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_XL() error: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 17) {
+	fprintf (stderr, "load_XL() unexpected row count: %u\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_XL (handle, "./testcase1.xls", "test2", 1, 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_XL() error sheet 2: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 19) {
+	fprintf (stderr, "load_XL() unexpected row count sheet 2: %u\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    check_duplicated_rows (handle, "test1", &row_count);
+    if (row_count != 0) {
+	fprintf (stderr, "check_duplicated_rows() unexpected duplicate count: %d\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    check_duplicated_rows (handle, "test2", &row_count);
+    if (row_count != 2) {
+	fprintf (stderr, "check_duplicated_rows() unexpected duplicate count sheet 2: %d\n", row_count);
+	sqlite3_close(handle);
+	return -10;
+    }
+
+    remove_duplicated_rows (handle, "test1");
+
+    remove_duplicated_rows (handle, "test2");
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -11;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/test/shape_3d.c b/libspatialite/test/shape_3d.c
new file mode 100644
index 0000000..489a5f4
--- /dev/null
+++ b/libspatialite/test/shape_3d.c
@@ -0,0 +1,181 @@
+/*
+
+ shape_3d.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+void cleanup_shapefile(const char *filename)
+{
+    char nam[1000];
+    
+    if (!filename) {
+	return;
+    }
+    
+    snprintf(nam, 1000, "%s.dbf", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.prj", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shp", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shx", filename);
+    unlink(nam);
+}
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *dumpname = __FILE__"dump";
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/merano-3d/points", "points", "CP1252", 25832, 
+			  "col1", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/merano-3d/points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 20) {
+	fprintf (stderr, "unexpected row count for shp/merano-3d/points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/merano-3d/polygons", "polygons", "CP1252", 25832, 
+			  "col1", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/merano-3d/polygons: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for shp/merano-3d/polygons: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/merano-3d/roads", "roads", "CP1252", 25832, 
+			  "col1", 0, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/merano-3d/roads: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 18) {
+	fprintf (stderr, "unexpected row count for shp/merano-3d/roads: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = dump_shapefile (handle, "roads", "col1", dumpname, "CP1252", "LINESTRING", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for 3d roads: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -9;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 18) {
+	fprintf (stderr, "unexpected row count for 3d roads: %i\n", row_count);
+	sqlite3_close(handle);
+	return -10;
+    }
+
+    ret = dump_shapefile (handle, "polygons", "col1", dumpname, "CP1252", "POLYGON", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for 3d polygons: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -11;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for 3d polygons: %i\n", row_count);
+	sqlite3_close(handle);
+	return -12;
+    }
+
+    ret = dump_shapefile (handle, "points", "col1", dumpname, "CP1252", "POINT", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for 3d points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -13;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 20) {
+	fprintf (stderr, "unexpected row count for 3d points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -14;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -15;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    
+    return 0;
+}
diff --git a/libspatialite/test/shape_cp1252.c b/libspatialite/test/shape_cp1252.c
new file mode 100644
index 0000000..6e32f25
--- /dev/null
+++ b/libspatialite/test/shape_cp1252.c
@@ -0,0 +1,131 @@
+/*
+
+ shape_cp1252.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *dbfname = __FILE__"test.dbf";
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/new-caledonia/points", "points", "CP1252", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/new-caledonia/points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for shp/new-caledonia/points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/new-caledonia/railways", "railways", "CP1252", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/new-caledonia/railways: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 13) {
+	fprintf (stderr, "unexpected row count for shp/new-caledonia/points: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/new-caledonia/buildings", "buildings", "CP1252", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/new-caledonia/buildings: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 10) {
+	fprintf (stderr, "unexpected row count for shp/new-caledonia/buildings: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = dump_dbf (handle, "points", dbfname, "CP1252", err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_dbf() error for points: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -9;
+    }
+    unlink(dbfname);
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -9;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/test/shape_utf8_1.c b/libspatialite/test/shape_utf8_1.c
new file mode 100644
index 0000000..4abed27
--- /dev/null
+++ b/libspatialite/test/shape_utf8_1.c
@@ -0,0 +1,168 @@
+/*
+
+ shape_utf8_1.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+void cleanup_shapefile(const char *filename)
+{
+    char nam[1000];
+    
+    if (!filename) {
+	return;
+    }
+    
+    snprintf(nam, 1000, "%s.dbf", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.prj", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shp", filename);
+    unlink(nam);
+    snprintf(nam, 1000, "%s.shx", filename);
+    unlink(nam);
+}
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *dumpname = __FILE__"dump";
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/gaza/barrier", "barrier", "UTF-8", 4326, 
+			  NULL, 1, 0, 1, 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/gaza/barrier: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 5) {
+	fprintf (stderr, "unexpected row count for shp/gaza/barrier: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/gaza/aeroway", "aeroway", "UTF-8", 4326, 
+			  "col1", 1, 0, 0, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/gaza/aeroway: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 1) {
+	fprintf (stderr, "unexpected row count for shp/gaza/aeroway: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/gaza/route", "route", "UTF-8", 4326, 
+			  NULL, 1, 0, 1, 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/gaza/route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 2) {
+	fprintf (stderr, "unexpected row count for shp/gaza/route: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    ret = dump_shapefile (handle, "route", "Geometry", dumpname, "UTF-8", "", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for UTF-8_1 route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -9;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 2) {
+	fprintf (stderr, "unexpected dump row count for UTF-8_1 route: %i\n", row_count);
+	sqlite3_close(handle);
+	return -10;
+    }
+
+    ret = dump_shapefile (handle, "route", "Geometry", dumpname, "UTF-8", "LINESTRING", 1, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "dump_shapefile() error for UTF-8_1 route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -13;
+    }
+    cleanup_shapefile(dumpname);
+    if (row_count != 2) {
+	fprintf (stderr, "unexpected dump row count for UTF-8_1 route LINESTRING: %i\n", row_count);
+	sqlite3_close(handle);
+	return -14;
+    }
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -15;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/test/shape_utf8_2.c b/libspatialite/test/shape_utf8_2.c
new file mode 100644
index 0000000..4229f61
--- /dev/null
+++ b/libspatialite/test/shape_utf8_2.c
@@ -0,0 +1,150 @@
+/*
+
+ shape_utf8_2.c -- SpatiaLite Test Case
+
+ Author: Brad Hards <bradh at frogmouth.net>
+
+ ------------------------------------------------------------------------------
+ 
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ 
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+ 
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the SpatiaLite library
+
+The Initial Developer of the Original Code is Alessandro Furieri
+ 
+Portions created by the Initial Developer are Copyright (C) 2011
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+Brad Hards <bradh at frogmouth.net>
+Ahmadou Dicko <dicko.ahmadou at gmail.com>
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+ 
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "sqlite3.h"
+#include "spatialite.h"
+
+int main (int argc, char *argv[])
+{
+    int ret;
+    sqlite3 *handle;
+    char *kmlname = __FILE__"test.kml";
+    char *geojsonname = __FILE__"test.geojson"; 
+    char *err_msg = NULL;
+    int row_count;
+
+    spatialite_init (0);
+    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
+    if (ret != SQLITE_OK) {
+	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
+	sqlite3_close(handle);
+	return -1;
+    }
+    
+    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK) {
+	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
+	sqlite3_free(err_msg);
+	sqlite3_close(handle);
+	return -2;
+    }
+    
+    ret = load_shapefile (handle, "./shp/taiwan/hystoric", "hystoric", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/taiwan/hystoric: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -3;
+    }
+    if (row_count != 15) {
+	fprintf (stderr, "unexpected row count for shp/taiwan/hystoric: %i\n", row_count);
+	sqlite3_close(handle);
+	return -4;
+    }
+
+    ret = load_shapefile (handle, "./shp/taiwan/leisure", "leisure", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/taiwan/leisure: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -5;
+    }
+    if (row_count != 5) {
+	fprintf (stderr, "unexpected row count for shp/taiwan/leisure: %i\n", row_count);
+	sqlite3_close(handle);
+	return -6;
+    }
+
+    ret = load_shapefile (handle, "./shp/taiwan/route", "route", "UTF-8", 4326, 
+			  "col1", 1, 0, 1, 0, &row_count, err_msg);
+    if (!ret) {
+        fprintf (stderr, "load_shapefile() error for shp/taiwan/route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -7;
+    }
+    if (row_count != 4) {
+	fprintf (stderr, "unexpected row count for shp/taiwan/route: %i\n", row_count);
+	sqlite3_close(handle);
+	return -8;
+    }
+
+    if (is_kml_constant (handle, "route", "name")) {
+	fprintf(stderr, "unexpected result for is_kml_constant (1)\n");
+	return -9;
+    }
+    if (! is_kml_constant (handle, "route", "foo")) {
+	fprintf(stderr, "unexpected result for is_kml_constant (2)\n");
+	return -10;
+    }
+    
+    ret = dump_kml (handle, "route", "col1", kmlname, NULL, NULL, 10);
+    if (!ret) {
+        fprintf (stderr, "dump_kml() error for shp/taiwan/route: %s\n", err_msg);
+	sqlite3_close(handle);
+	return -11;
+    }
+    unlink(kmlname);
+
+    ret = dump_geojson(handle, "route", "col1", geojsonname, 10, 5);
+    if (!ret) {
+        fprintf (stderr, "dump_geojson() error for shp/taiwan/route: %s\n", err_msg);
+       sqlite3_close(handle);
+       return -12;
+    }
+    unlink(geojsonname);
+
+    ret = sqlite3_close (handle);
+    if (ret != SQLITE_OK) {
+        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
+	return -13;
+    }
+    
+    spatialite_cleanup();
+    sqlite3_reset_auto_extension();
+    return 0;
+}
diff --git a/libspatialite/test/shapetest1.dbf b/libspatialite/test/shapetest1.dbf
new file mode 100644
index 0000000..8d914b1
Binary files /dev/null and b/libspatialite/test/shapetest1.dbf differ
diff --git a/libspatialite/test/shapetest1.prj b/libspatialite/test/shapetest1.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/libspatialite/test/shapetest1.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/libspatialite/test/shapetest1.qpj b/libspatialite/test/shapetest1.qpj
new file mode 100644
index 0000000..edb0142
--- /dev/null
+++ b/libspatialite/test/shapetest1.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shapetest1.shp b/libspatialite/test/shapetest1.shp
new file mode 100644
index 0000000..6c1d7ff
Binary files /dev/null and b/libspatialite/test/shapetest1.shp differ
diff --git a/libspatialite/test/shapetest1.shx b/libspatialite/test/shapetest1.shx
new file mode 100644
index 0000000..5124cfd
Binary files /dev/null and b/libspatialite/test/shapetest1.shx differ
diff --git a/libspatialite/test/shp/foggia/local_councils.dbf b/libspatialite/test/shp/foggia/local_councils.dbf
new file mode 100644
index 0000000..4d5e819
Binary files /dev/null and b/libspatialite/test/shp/foggia/local_councils.dbf differ
diff --git a/libspatialite/test/shp/foggia/local_councils.prj b/libspatialite/test/shp/foggia/local_councils.prj
new file mode 100644
index 0000000..152d9d7
--- /dev/null
+++ b/libspatialite/test/shp/foggia/local_councils.prj
@@ -0,0 +1 @@
+PROJCS["ED50 / UTM zone 32N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/test/shp/foggia/local_councils.shp b/libspatialite/test/shp/foggia/local_councils.shp
new file mode 100644
index 0000000..ba18fff
Binary files /dev/null and b/libspatialite/test/shp/foggia/local_councils.shp differ
diff --git a/libspatialite/test/shp/foggia/local_councils.shx b/libspatialite/test/shp/foggia/local_councils.shx
new file mode 100644
index 0000000..5ee7429
Binary files /dev/null and b/libspatialite/test/shp/foggia/local_councils.shx differ
diff --git a/libspatialite/test/shp/gaza/aeroway.dbf b/libspatialite/test/shp/gaza/aeroway.dbf
new file mode 100644
index 0000000..f72da79
Binary files /dev/null and b/libspatialite/test/shp/gaza/aeroway.dbf differ
diff --git a/libspatialite/test/shp/gaza/aeroway.prj b/libspatialite/test/shp/gaza/aeroway.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/gaza/aeroway.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/gaza/aeroway.shp b/libspatialite/test/shp/gaza/aeroway.shp
new file mode 100644
index 0000000..0ddc32c
Binary files /dev/null and b/libspatialite/test/shp/gaza/aeroway.shp differ
diff --git a/libspatialite/test/shp/gaza/aeroway.shx b/libspatialite/test/shp/gaza/aeroway.shx
new file mode 100644
index 0000000..63a857e
Binary files /dev/null and b/libspatialite/test/shp/gaza/aeroway.shx differ
diff --git a/libspatialite/test/shp/gaza/barrier.dbf b/libspatialite/test/shp/gaza/barrier.dbf
new file mode 100644
index 0000000..c515011
Binary files /dev/null and b/libspatialite/test/shp/gaza/barrier.dbf differ
diff --git a/libspatialite/test/shp/gaza/barrier.prj b/libspatialite/test/shp/gaza/barrier.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/gaza/barrier.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/gaza/barrier.shp b/libspatialite/test/shp/gaza/barrier.shp
new file mode 100644
index 0000000..92e061b
Binary files /dev/null and b/libspatialite/test/shp/gaza/barrier.shp differ
diff --git a/libspatialite/test/shp/gaza/barrier.shx b/libspatialite/test/shp/gaza/barrier.shx
new file mode 100644
index 0000000..2029cff
Binary files /dev/null and b/libspatialite/test/shp/gaza/barrier.shx differ
diff --git a/libspatialite/test/shp/gaza/route.dbf b/libspatialite/test/shp/gaza/route.dbf
new file mode 100644
index 0000000..2bdc31c
Binary files /dev/null and b/libspatialite/test/shp/gaza/route.dbf differ
diff --git a/libspatialite/test/shp/gaza/route.prj b/libspatialite/test/shp/gaza/route.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/gaza/route.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/gaza/route.shp b/libspatialite/test/shp/gaza/route.shp
new file mode 100644
index 0000000..d7d72a3
Binary files /dev/null and b/libspatialite/test/shp/gaza/route.shp differ
diff --git a/libspatialite/test/shp/gaza/route.shx b/libspatialite/test/shp/gaza/route.shx
new file mode 100644
index 0000000..1c6578d
Binary files /dev/null and b/libspatialite/test/shp/gaza/route.shx differ
diff --git a/libspatialite/test/shp/merano-3d/points.dbf b/libspatialite/test/shp/merano-3d/points.dbf
new file mode 100644
index 0000000..49b67a4
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/points.dbf differ
diff --git a/libspatialite/test/shp/merano-3d/points.prj b/libspatialite/test/shp/merano-3d/points.prj
new file mode 100644
index 0000000..9ff5cda
--- /dev/null
+++ b/libspatialite/test/shp/merano-3d/points.prj
@@ -0,0 +1 @@
+PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/test/shp/merano-3d/points.shp b/libspatialite/test/shp/merano-3d/points.shp
new file mode 100644
index 0000000..511ba4c
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/points.shp differ
diff --git a/libspatialite/test/shp/merano-3d/points.shx b/libspatialite/test/shp/merano-3d/points.shx
new file mode 100644
index 0000000..9b86b63
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/points.shx differ
diff --git a/libspatialite/test/shp/merano-3d/polygons.dbf b/libspatialite/test/shp/merano-3d/polygons.dbf
new file mode 100644
index 0000000..64f2715
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/polygons.dbf differ
diff --git a/libspatialite/test/shp/merano-3d/polygons.prj b/libspatialite/test/shp/merano-3d/polygons.prj
new file mode 100644
index 0000000..9ff5cda
--- /dev/null
+++ b/libspatialite/test/shp/merano-3d/polygons.prj
@@ -0,0 +1 @@
+PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/test/shp/merano-3d/polygons.shp b/libspatialite/test/shp/merano-3d/polygons.shp
new file mode 100644
index 0000000..d3c7a5a
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/polygons.shp differ
diff --git a/libspatialite/test/shp/merano-3d/polygons.shx b/libspatialite/test/shp/merano-3d/polygons.shx
new file mode 100644
index 0000000..d87cedb
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/polygons.shx differ
diff --git a/libspatialite/test/shp/merano-3d/roads.dbf b/libspatialite/test/shp/merano-3d/roads.dbf
new file mode 100644
index 0000000..7324026
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/roads.dbf differ
diff --git a/libspatialite/test/shp/merano-3d/roads.prj b/libspatialite/test/shp/merano-3d/roads.prj
new file mode 100644
index 0000000..9ff5cda
--- /dev/null
+++ b/libspatialite/test/shp/merano-3d/roads.prj
@@ -0,0 +1 @@
+PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
diff --git a/libspatialite/test/shp/merano-3d/roads.shp b/libspatialite/test/shp/merano-3d/roads.shp
new file mode 100644
index 0000000..70573d9
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/roads.shp differ
diff --git a/libspatialite/test/shp/merano-3d/roads.shx b/libspatialite/test/shp/merano-3d/roads.shx
new file mode 100644
index 0000000..72032ee
Binary files /dev/null and b/libspatialite/test/shp/merano-3d/roads.shx differ
diff --git a/libspatialite/test/shp/new-caledonia/buildings.dbf b/libspatialite/test/shp/new-caledonia/buildings.dbf
new file mode 100644
index 0000000..02bb2a3
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/buildings.dbf differ
diff --git a/libspatialite/test/shp/new-caledonia/buildings.prj b/libspatialite/test/shp/new-caledonia/buildings.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/new-caledonia/buildings.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/new-caledonia/buildings.shp b/libspatialite/test/shp/new-caledonia/buildings.shp
new file mode 100644
index 0000000..fb965a7
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/buildings.shp differ
diff --git a/libspatialite/test/shp/new-caledonia/buildings.shx b/libspatialite/test/shp/new-caledonia/buildings.shx
new file mode 100644
index 0000000..3f8bd9b
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/buildings.shx differ
diff --git a/libspatialite/test/shp/new-caledonia/points.dbf b/libspatialite/test/shp/new-caledonia/points.dbf
new file mode 100644
index 0000000..1d6da57
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/points.dbf differ
diff --git a/libspatialite/test/shp/new-caledonia/points.prj b/libspatialite/test/shp/new-caledonia/points.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/new-caledonia/points.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/new-caledonia/points.shp b/libspatialite/test/shp/new-caledonia/points.shp
new file mode 100644
index 0000000..592b275
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/points.shp differ
diff --git a/libspatialite/test/shp/new-caledonia/points.shx b/libspatialite/test/shp/new-caledonia/points.shx
new file mode 100644
index 0000000..68fcc36
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/points.shx differ
diff --git a/libspatialite/test/shp/new-caledonia/railways.dbf b/libspatialite/test/shp/new-caledonia/railways.dbf
new file mode 100644
index 0000000..2c6c35f
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/railways.dbf differ
diff --git a/libspatialite/test/shp/new-caledonia/railways.shp b/libspatialite/test/shp/new-caledonia/railways.shp
new file mode 100644
index 0000000..85db7ba
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/railways.shp differ
diff --git a/libspatialite/test/shp/new-caledonia/railways.shx b/libspatialite/test/shp/new-caledonia/railways.shx
new file mode 100644
index 0000000..8bc271d
Binary files /dev/null and b/libspatialite/test/shp/new-caledonia/railways.shx differ
diff --git a/libspatialite/test/shp/taiwan/hystoric.dbf b/libspatialite/test/shp/taiwan/hystoric.dbf
new file mode 100644
index 0000000..67de617
Binary files /dev/null and b/libspatialite/test/shp/taiwan/hystoric.dbf differ
diff --git a/libspatialite/test/shp/taiwan/hystoric.prj b/libspatialite/test/shp/taiwan/hystoric.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/taiwan/hystoric.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/taiwan/hystoric.shp b/libspatialite/test/shp/taiwan/hystoric.shp
new file mode 100644
index 0000000..75bb113
Binary files /dev/null and b/libspatialite/test/shp/taiwan/hystoric.shp differ
diff --git a/libspatialite/test/shp/taiwan/hystoric.shx b/libspatialite/test/shp/taiwan/hystoric.shx
new file mode 100644
index 0000000..3cde1b8
Binary files /dev/null and b/libspatialite/test/shp/taiwan/hystoric.shx differ
diff --git a/libspatialite/test/shp/taiwan/leisure.dbf b/libspatialite/test/shp/taiwan/leisure.dbf
new file mode 100644
index 0000000..07bbebb
Binary files /dev/null and b/libspatialite/test/shp/taiwan/leisure.dbf differ
diff --git a/libspatialite/test/shp/taiwan/leisure.prj b/libspatialite/test/shp/taiwan/leisure.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/taiwan/leisure.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/taiwan/leisure.shp b/libspatialite/test/shp/taiwan/leisure.shp
new file mode 100644
index 0000000..a871613
Binary files /dev/null and b/libspatialite/test/shp/taiwan/leisure.shp differ
diff --git a/libspatialite/test/shp/taiwan/leisure.shx b/libspatialite/test/shp/taiwan/leisure.shx
new file mode 100644
index 0000000..bd0a93e
Binary files /dev/null and b/libspatialite/test/shp/taiwan/leisure.shx differ
diff --git a/libspatialite/test/shp/taiwan/route.dbf b/libspatialite/test/shp/taiwan/route.dbf
new file mode 100644
index 0000000..d749b0a
Binary files /dev/null and b/libspatialite/test/shp/taiwan/route.dbf differ
diff --git a/libspatialite/test/shp/taiwan/route.prj b/libspatialite/test/shp/taiwan/route.prj
new file mode 100644
index 0000000..58af98c
--- /dev/null
+++ b/libspatialite/test/shp/taiwan/route.prj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/libspatialite/test/shp/taiwan/route.shp b/libspatialite/test/shp/taiwan/route.shp
new file mode 100644
index 0000000..812ba13
Binary files /dev/null and b/libspatialite/test/shp/taiwan/route.shp differ
diff --git a/libspatialite/test/shp/taiwan/route.shx b/libspatialite/test/shp/taiwan/route.shx
new file mode 100644
index 0000000..1bcc91d
Binary files /dev/null and b/libspatialite/test/shp/taiwan/route.shx differ
diff --git a/libspatialite/test/sql_stmt_tests/NumPoints.testcase b/libspatialite/test/sql_stmt_tests/NumPoints.testcase
new file mode 100644
index 0000000..6fcec7f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/NumPoints.testcase
@@ -0,0 +1,7 @@
+NumPoints - bad blob (error)
+:memory: #use in-memory database
+SELECT NumPoints(zeroblob(12));
+1 # rows (not including the header row)
+1 # column
+NumPoints(zeroblob(12))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/NumPoints2.testcase b/libspatialite/test/sql_stmt_tests/NumPoints2.testcase
new file mode 100644
index 0000000..c3c30df
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/NumPoints2.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRING(0 0, 1 2)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRING(0 0, 1 2)"))
+2
diff --git a/libspatialite/test/sql_stmt_tests/NumPoints3.testcase b/libspatialite/test/sql_stmt_tests/NumPoints3.testcase
new file mode 100644
index 0000000..487ab10
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/NumPoints3.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line Z
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRINGZ(0 0 0, 1 2 1)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRINGZ(0 0 0, 1 2 1)"))
+2
diff --git a/libspatialite/test/sql_stmt_tests/NumPoints4.testcase b/libspatialite/test/sql_stmt_tests/NumPoints4.testcase
new file mode 100644
index 0000000..076b536
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/NumPoints4.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line M
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRINGM(0 0 0, 1 2 1)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRINGM(0 0 0, 1 2 1)"))
+2
diff --git a/libspatialite/test/sql_stmt_tests/NumPoints5.testcase b/libspatialite/test/sql_stmt_tests/NumPoints5.testcase
new file mode 100644
index 0000000..955a824
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/NumPoints5.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line ZM
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("LINESTRINGZM(0 0 0 1, 1 2 1 2)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("LINESTRINGZM(0 0 0 1, 1 2 1 2)"))
+2
diff --git a/libspatialite/test/sql_stmt_tests/NumPoints6.testcase b/libspatialite/test/sql_stmt_tests/NumPoints6.testcase
new file mode 100644
index 0000000..5c0b337
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/NumPoints6.testcase
@@ -0,0 +1,7 @@
+NumPoints - text (error)
+:memory: #use in-memory database
+SELECT NumPoints("hello");
+1 # rows (not including the header row)
+1 # column
+NumPoints("hello")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/NumPoints7.testcase b/libspatialite/test/sql_stmt_tests/NumPoints7.testcase
new file mode 100644
index 0000000..cc2b0a3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/NumPoints7.testcase
@@ -0,0 +1,7 @@
+NumPoints - Simple line Z
+:memory: #use in-memory database
+SELECT NumPoints(GeomFromText("POINT(0 0)"));
+1 # rows (not including the header row)
+1 # column
+NumPoints(GeomFromText("POINT(0 0)"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/acos-text.testcase b/libspatialite/test/sql_stmt_tests/acos-text.testcase
new file mode 100644
index 0000000..10c6848
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/acos-text.testcase
@@ -0,0 +1,7 @@
+acos-text # check of text argument to acos()
+:memory: #use in-memory database
+SELECT acos("test");
+1 # rows (not including the header row)
+1 # columns
+acos("test") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/acos.testcase b/libspatialite/test/sql_stmt_tests/acos.testcase
new file mode 100644
index 0000000..d9847ef
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/acos.testcase
@@ -0,0 +1,7 @@
+acos(1)
+:memory: #use in-memory database
+SELECT acos(1);
+1 # rows (not including the header row)
+1 # columns
+acos(1) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/acos10.testcase b/libspatialite/test/sql_stmt_tests/acos10.testcase
new file mode 100644
index 0000000..fbaf4b4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/acos10.testcase
@@ -0,0 +1,7 @@
+acos(1.0)
+:memory: #use in-memory database
+SELECT acos(1.0);
+1 # rows (not including the header row)
+1 # columns
+acos(1.0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/acos2.testcase b/libspatialite/test/sql_stmt_tests/acos2.testcase
new file mode 100644
index 0000000..a1604ad
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/acos2.testcase
@@ -0,0 +1,7 @@
+acos(2)
+:memory: #use in-memory database
+SELECT acos(2);
+1 # rows (not including the header row)
+1 # columns
+acos(2) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/acos20.testcase b/libspatialite/test/sql_stmt_tests/acos20.testcase
new file mode 100644
index 0000000..0c61a1a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/acos20.testcase
@@ -0,0 +1,7 @@
+acos(2.0)
+:memory: #use in-memory database
+SELECT acos(2.0);
+1 # rows (not including the header row)
+1 # columns
+acos(2.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/asgeojson1.testcase b/libspatialite/test/sql_stmt_tests/asgeojson1.testcase
new file mode 100644
index 0000000..d1bb649
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgeojson1.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (broken blob, 2 arg)
+:memory: #use in-memory database
+SELECT asgeojson(zeroblob(20), 4);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(zeroblob(20), 4)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgeojson2.testcase b/libspatialite/test/sql_stmt_tests/asgeojson2.testcase
new file mode 100644
index 0000000..54ae340
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgeojson2.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (non-blob, 2 arg)
+:memory: #use in-memory database
+SELECT asgeojson("hello", 4);
+1 # rows (not including the header row)
+1 # columns
+asgeojson("hello", 4)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgeojson3.testcase b/libspatialite/test/sql_stmt_tests/asgeojson3.testcase
new file mode 100644
index 0000000..0f6597c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgeojson3.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (2 arg, bad precision)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4.2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4.2)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgeojson4.testcase b/libspatialite/test/sql_stmt_tests/asgeojson4.testcase
new file mode 100644
index 0000000..d7381e1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgeojson4.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, bad precision)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4.2, 2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4.2, 2)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgeojson5.testcase b/libspatialite/test/sql_stmt_tests/asgeojson5.testcase
new file mode 100644
index 0000000..3b229e2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgeojson5.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, bad option type)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4, 2.2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4, 2.2)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgeojson6.testcase b/libspatialite/test/sql_stmt_tests/asgeojson6.testcase
new file mode 100644
index 0000000..9411a26
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgeojson6.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, non-blob type)
+:memory: #use in-memory database
+SELECT asgeojson("hello", 4, 2);
+1 # rows (not including the header row)
+1 # columns
+asgeojson("hello", 4, 2)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgeojson7.testcase b/libspatialite/test/sql_stmt_tests/asgeojson7.testcase
new file mode 100644
index 0000000..7834e23
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgeojson7.testcase
@@ -0,0 +1,7 @@
+asgeojson - bad args (3 arg, out of range option)
+:memory: #use in-memory database
+SELECT asgeojson(GeomFromText("Point(1 2)", 4326), 4, 22);
+1 # rows (not including the header row)
+1 # columns
+asgeojson(GeomFromText("Point(1 2)", 4326), 4, 22)
+{"type":"Point","coordinates":[1,2]}:0
diff --git a/libspatialite/test/sql_stmt_tests/asgml1.testcase b/libspatialite/test/sql_stmt_tests/asgml1.testcase
new file mode 100644
index 0000000..c31adaa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml1.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (broken blob)
+:memory: #use in-memory database
+SELECT asgml(zeroblob(20));
+1 # rows (not including the header row)
+1 # columns
+asgml(zeroblob(20))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml10.testcase b/libspatialite/test/sql_stmt_tests/asgml10.testcase
new file mode 100644
index 0000000..9081492
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml10.testcase
@@ -0,0 +1,7 @@
+asgml - 2 arg
+:memory: #use in-memory database
+SELECT asgml(GeomFromText("Point(1 2)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+asgml(GeomFromText("Point(1 2)", 4326), 4)
+<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>:0
diff --git a/libspatialite/test/sql_stmt_tests/asgml11.testcase b/libspatialite/test/sql_stmt_tests/asgml11.testcase
new file mode 100644
index 0000000..3dee931
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml11.testcase
@@ -0,0 +1,7 @@
+asgml - 2 arg
+:memory: #use in-memory database
+SELECT asgml(2, "hello");
+1 # rows (not including the header row)
+1 # columns
+asgml(2, "hello")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml2.testcase b/libspatialite/test/sql_stmt_tests/asgml2.testcase
new file mode 100644
index 0000000..7fd77de
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml2.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (broken blob, 2 arg)
+:memory: #use in-memory database
+SELECT asgml(2, zeroblob(20));
+1 # rows (not including the header row)
+1 # columns
+asgml(2, zeroblob(20))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml3.testcase b/libspatialite/test/sql_stmt_tests/asgml3.testcase
new file mode 100644
index 0000000..aae487c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml3.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (broken blob, 3 arg)
+:memory: #use in-memory database
+SELECT asgml(2, zeroblob(20), 5);
+1 # rows (not including the header row)
+1 # columns
+asgml(2, zeroblob(20), 5)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml4.testcase b/libspatialite/test/sql_stmt_tests/asgml4.testcase
new file mode 100644
index 0000000..cffeaf9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml4.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-blob, 3 arg)
+:memory: #use in-memory database
+SELECT asgml(2, "hello", 5);
+1 # rows (not including the header row)
+1 # columns
+asgml(2, "hello", 5)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml5.testcase b/libspatialite/test/sql_stmt_tests/asgml5.testcase
new file mode 100644
index 0000000..cffeaf9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml5.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-blob, 3 arg)
+:memory: #use in-memory database
+SELECT asgml(2, "hello", 5);
+1 # rows (not including the header row)
+1 # columns
+asgml(2, "hello", 5)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml6.testcase b/libspatialite/test/sql_stmt_tests/asgml6.testcase
new file mode 100644
index 0000000..af45329
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml6.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int, 2 arg)
+:memory: #use in-memory database
+SELECT asgml("hello", GeomFromText("Point(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+asgml("hello", GeomFromText("Point(1 2)"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml7.testcase b/libspatialite/test/sql_stmt_tests/asgml7.testcase
new file mode 100644
index 0000000..d433188
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml7.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int, 3 arg)
+:memory: #use in-memory database
+SELECT asgml("hello", GeomFromText("Point(1 2)"), 4);
+1 # rows (not including the header row)
+1 # columns
+asgml("hello", GeomFromText("Point(1 2)"), 4)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml8.testcase b/libspatialite/test/sql_stmt_tests/asgml8.testcase
new file mode 100644
index 0000000..301dcaa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml8.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int 3rd arg)
+:memory: #use in-memory database
+SELECT asgml(3, GeomFromText("Point(1 2)"), "four");
+1 # rows (not including the header row)
+1 # columns
+asgml(3, GeomFromText("Point(1 2)"), "four")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asgml9.testcase b/libspatialite/test/sql_stmt_tests/asgml9.testcase
new file mode 100644
index 0000000..c086797
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asgml9.testcase
@@ -0,0 +1,7 @@
+asgml - bad args (non-int 2nd arg)
+:memory: #use in-memory database
+SELECT asgml(GeomFromText("Point(1 2)"), "four");
+1 # rows (not including the header row)
+1 # columns
+asgml(GeomFromText("Point(1 2)"), "four")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/asin-text.testcase b/libspatialite/test/sql_stmt_tests/asin-text.testcase
new file mode 100644
index 0000000..0cce86d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asin-text.testcase
@@ -0,0 +1,7 @@
+asin-text # check of text argument to asin()
+:memory: #use in-memory database
+SELECT asin("test");
+1 # rows (not including the header row)
+1 # columns
+asin("test") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/asin1.testcase b/libspatialite/test/sql_stmt_tests/asin1.testcase
new file mode 100644
index 0000000..bb00f60
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asin1.testcase
@@ -0,0 +1,7 @@
+asin(1)
+:memory: #use in-memory database
+SELECT asin(1);
+1 # rows (not including the header row)
+1 # columns
+asin(1) # header
+1.570796326794:14 #result
diff --git a/libspatialite/test/sql_stmt_tests/asin10.testcase b/libspatialite/test/sql_stmt_tests/asin10.testcase
new file mode 100644
index 0000000..a9f752b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asin10.testcase
@@ -0,0 +1,7 @@
+asin(1.0)
+:memory: #use in-memory database
+SELECT asin(1.0);
+1 # rows (not including the header row)
+1 # columns
+asin(1.0) # header
+1.570796326794:14 #result
diff --git a/libspatialite/test/sql_stmt_tests/asin2.testcase b/libspatialite/test/sql_stmt_tests/asin2.testcase
new file mode 100644
index 0000000..8ed485d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asin2.testcase
@@ -0,0 +1,7 @@
+asin(2)
+:memory: #use in-memory database
+SELECT asin(2);
+1 # rows (not including the header row)
+1 # columns
+asin(2) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/asin20.testcase b/libspatialite/test/sql_stmt_tests/asin20.testcase
new file mode 100644
index 0000000..a437a45
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/asin20.testcase
@@ -0,0 +1,7 @@
+asin(2.0)
+:memory: #use in-memory database
+SELECT asin(2.0);
+1 # rows (not including the header row)
+1 # columns
+asin(2.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/askml1.testcase b/libspatialite/test/sql_stmt_tests/askml1.testcase
new file mode 100644
index 0000000..2197d26
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml1.testcase
@@ -0,0 +1,7 @@
+askml - 2 arg bad precision (error)
+:memory: #use in-memory database
+SELECT askml(GeomFromText("Point(1 2)", 4326), "hello")
+1 # rows (not including the header row)
+1 # columns
+askml(GeomFromText("Point(1 2)", 4326), "hello")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/askml2.testcase b/libspatialite/test/sql_stmt_tests/askml2.testcase
new file mode 100644
index 0000000..7a59fb9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml2.testcase
@@ -0,0 +1,7 @@
+askml - 2 arg weird SRID (error)
+:memory: #use in-memory database
+SELECT askml(GeomFromText("Point(1 2)", 9999989), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(GeomFromText("Point(1 2)", 9999989), 4)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/askml3.testcase b/libspatialite/test/sql_stmt_tests/askml3.testcase
new file mode 100644
index 0000000..7184d3f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml3.testcase
@@ -0,0 +1,7 @@
+askml - 4 arg int descriptions
+:memory: #use in-memory database
+SELECT askml(2, 3, GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(2, 3, GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>2</name><description>3</description><Point><coordinates>1,2</coordinates></Point></Placemark>
diff --git a/libspatialite/test/sql_stmt_tests/askml4.testcase b/libspatialite/test/sql_stmt_tests/askml4.testcase
new file mode 100644
index 0000000..dd5d254
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml4.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg float descriptions
+:memory: #use in-memory database
+SELECT askml(2.5, 3.2, GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(2.5, 3.2, GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>2.500000</name><description>3.200000</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/test/sql_stmt_tests/askml5.testcase b/libspatialite/test/sql_stmt_tests/askml5.testcase
new file mode 100644
index 0000000..fd48289
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml5.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>BLOB</name><description>BLOB</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/test/sql_stmt_tests/askml6.testcase b/libspatialite/test/sql_stmt_tests/askml6.testcase
new file mode 100644
index 0000000..6ba20e8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml6.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions, bad precision (error)
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4.2)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4326), 4.2)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/askml7.testcase b/libspatialite/test/sql_stmt_tests/askml7.testcase
new file mode 100644
index 0000000..b4b9ec9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml7.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions, weird SRID (error)
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 9999989), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 9999989), 4)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/askml8.testcase b/libspatialite/test/sql_stmt_tests/askml8.testcase
new file mode 100644
index 0000000..b53d017
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml8.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg blob descriptions, GDA94
+:memory: #use in-memory database
+SELECT askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4283), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(zeroblob(10), zeroblob(12), GeomFromText("Point(1 2)", 4283), 4)
+<Placemark><name>BLOB</name><description>BLOB</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/test/sql_stmt_tests/askml9.testcase b/libspatialite/test/sql_stmt_tests/askml9.testcase
new file mode 100644
index 0000000..811da35
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/askml9.testcase
@@ -0,0 +1,8 @@
+askml - 4 arg null descriptions
+:memory: #use in-memory database
+SELECT askml(null, null, GeomFromText("Point(1 2)", 4326), 4)
+1 # rows (not including the header row)
+1 # columns
+askml(null, null, GeomFromText("Point(1 2)", 4326), 4)
+<Placemark><name>NULL</name><description>NULL</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+
diff --git a/libspatialite/test/sql_stmt_tests/aswkt-text.testcase b/libspatialite/test/sql_stmt_tests/aswkt-text.testcase
new file mode 100644
index 0000000..cb46865
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/aswkt-text.testcase
@@ -0,0 +1,7 @@
+aswkt-text
+:memory: #use in-memory database
+SELECT AsWkt("not a blob", 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt("not a blob", 4)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/atan-text.testcase b/libspatialite/test/sql_stmt_tests/atan-text.testcase
new file mode 100644
index 0000000..f3e0a9d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/atan-text.testcase
@@ -0,0 +1,8 @@
+atan-text
+:memory: # use in-memory database
+SELECT atan('test');
+1 # rows (not including the header row)
+1 # columns
+atan('test') # header
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/atan0.testcase b/libspatialite/test/sql_stmt_tests/atan0.testcase
new file mode 100644
index 0000000..ee53585
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/atan0.testcase
@@ -0,0 +1,7 @@
+atan(0)
+:memory: #use in-memory database
+SELECT atan(0);
+1 # rows (not including the header row)
+1 # columns
+atan(0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/atan00.testcase b/libspatialite/test/sql_stmt_tests/atan00.testcase
new file mode 100644
index 0000000..82962a4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/atan00.testcase
@@ -0,0 +1,7 @@
+atan(0.0)
+:memory: # use in-memory database
+SELECT atan(0.0);
+1 # rows (not including the header row)
+1 # columns
+atan(0.0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/buffer1.testcase b/libspatialite/test/sql_stmt_tests/buffer1.testcase
new file mode 100644
index 0000000..4db5c82
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/buffer1.testcase
@@ -0,0 +1,8 @@
+buffer1
+:memory: #use in-memory database
+SELECT AsText(Buffer(GeomFromText("LINESTRING(0 0, 1 0)"), 0.2));
+1 # rows (not including the header row)
+1 # columns
+AsText(Buffer(GeomFromText("LINESTRING(0 0, 1 0)"), 0.2))
+POLYGON((1 0.2, 1.010467 0.199726, 1.020906 0.198904, 1.031287 0.197538, 1.041582 0.19563, 1.051764 0.193185, 1.061803 0.190211, 1.071674 0.186716, 1.081347 0.182709, 1.090798 0.178201, 1.1 0.173205, 1.108928 0.167734, 1.117557 0.161803, 1.125864 0.155429, 1.133826 0.148629, 1.141421 0.141421, 1.148629 0.133826, 1.155429 0.125864, 1.161803 0.117557, 1.167734 0.108928, 1.173205 0.1, 1.178201 0.090798, 1.182709 0.081347, 1.186716 0.071674, 1.190211 0.061803, 1.193185 0.051764, 1.19563 0.041582, 1.197538 0.031287, 1.198904 0.020906, 1.199726 0.010467, 1.2 0, 1.199726 -0.010467, 1.198904 -0.020906, 1.197538 -0.031287, 1.19563 -0.041582, 1.193185 -0.051764, 1.190211 -0.061803, 1.186716 -0.071674, 1.182709 -0.081347, 1.178201 -0.090798, 1.173205 -0.1, 1.167734 -0.108928, 1.161803 -0.117557, 1.155429 -0.125864, 1.148629 -0.133826, 1.141421 -0.141421, 1.133826 -0.148629, 1.125864 -0.155429, 1.117557 -0.161803, 1.108928 -0.167734, 1.1 -0.173205, 1.090798 -0.178201, 1.081347 -0.182709, 1.071674 -0.186716, 1.061803 -0.190211, 1.051764 -0.193185, 1.041582 -0.19563, 1.031287 -0.197538, 1.020906 -0.198904, 1.010467 -0.199726, 1 -0.2, 0 -0.2, -0.010467 -0.199726, -0.020906 -0.198904, -0.031287 -0.197538, -0.041582 -0.19563, -0.051764 -0.193185, -0.061803 -0.190211, -0.071674 -0.186716, -0.081347 -0.182709, -0.090798 -0.178201, -0.1 -0.173205, -0.108928 -0.167734, -0.117557 -0.161803, -0.125864 -0.155429, -0.133826 -0.148629, -0.141421 -0.141421, -0.148629 -0.133826, -0.155429 -0.125864, -0.161803 -0.117557, -0.167734 -0.108928, -0.173205 -0.1, -0.178201 -0.090798, -0.182709 -0.081347, -0.186716 -0.071674, -0.190211 -0.061803, -0.193185 -0.051764, -0.19563 -0.041582, -0.197538 -0.031287, -0.198904 -0.020906, -0.199726 -0.010467, -0.2 -0, -0.199726 0.010467, -0.198904 0.020906, -0.197538 0.031287, -0.19563 0.041582, -0.193185 0.051764, -0.190211 0.061803, -0.186716 0.071674, -0.182709 0.081347, -0.178201 0.090798, -0.173205 0.1, -0.167734 0.108928, -0.161803 0.117557, -0.155429 0.125864, -0.148629 0.133826, -0.141421 0.141421, -0.133826 0.148629, -0.125864 0.155429, -0.117557 0.161803, -0.108928 0.167734, -0.1 0.173205, -0.090798 0.178201, -0.081347 0.182709, -0.071674 0.186716, -0.061803 0.190211, -0.051764 0.193185, -0.041582 0.19563, -0.031287 0.197538, -0.020906 0.198904, -0.010467 0.199726, -0 0.2, 1 0.2))
+
diff --git a/libspatialite/test/sql_stmt_tests/buffer2.testcase b/libspatialite/test/sql_stmt_tests/buffer2.testcase
new file mode 100644
index 0000000..e718dad
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/buffer2.testcase
@@ -0,0 +1,8 @@
+buffer2
+:memory: #use in-memory database
+SELECT AsText(Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), 1))
+POLYGON((100 1, 100.052336 0.99863, 100.104528 0.994522, 100.156434 0.987688, 100.207912 0.978148, 100.258819 0.965926, 100.309017 0.951057, 100.358368 0.93358, 100.406737 0.913545, 100.45399 0.891007, 100.5 0.866025, 100.544639 0.838671, 100.587785 0.809017, 100.62932 0.777146, 100.669131 0.743145, 100.707107 0.707107, 100.743145 0.669131, 100.777146 0.62932, 100.809017 0.587785, 100.838671 0.544639, 100.866025 0.5, 100.891007 0.45399, 100.913545 0.406737, 100.93358 0.358368, 100.951057 0.309017, 100.965926 0.258819, 100.978148 0.207912, 100.987688 0.156434, 100.994522 0.104528, 100.99863 0.052336, 101 0, 100.99863 -0.052336, 100.994522 -0.104528, 100.987688 -0.156434, 100.978148 -0.207912, 100.965926 -0.258819, 100.951057 -0.309017, 100.93358 -0.358368, 100.913545 -0.406737, 100.891007 -0.45399, 100.866025 -0.5, 100.838671 -0.544639, 100.809017 -0.587785, 100.777146 -0.62932, 100.743145 -0.669131, 100.707107 -0.707107, 100.669131 -0.743145, 100.62932 -0.777146, 100.587785 -0.809017, 100.544639 -0.838671, 100.5 -0.866025, 100.45399 -0.891007, 100.406737 -0.913545, 100.358368 -0.93358, 100.309017 -0.951057, 100.258819 -0.965926, 100.207912 -0.978148, 100.156434 -0.987688, 100.104528 -0.994522, 100.052336 -0.99863, 100 -1, 0 -1, -0.052336 -0.99863, -0.104528 -0.994522, -0.156434 -0.987688, -0.207912 -0.978148, -0.258819 -0.965926, -0.309017 -0.951057, -0.358368 -0.93358, -0.406737 -0.913545, -0.45399 -0.891007, -0.5 -0.866025, -0.544639 -0.838671, -0.587785 -0.809017, -0.62932 -0.777146, -0.669131 -0.743145, -0.707107 -0.707107, -0.743145 -0.669131, -0.777146 -0.62932, -0.809017 -0.587785, -0.838671 -0.544639, -0.866025 -0.5, -0.891007 -0.45399, -0.913545 -0.406737, -0.93358 -0.358368, -0.951057 -0.309017, -0.965926 -0.258819, -0.978148 -0.207912, -0.987688 -0.156434, -0.994522 -0.104528, -0.99863 -0.052336, -1 -0, -0.99863 0.052336, -0.994522 0.104528, -0.987688 0.156434, -0.978148 0.207912, -0.965926 0.258819, -0.951057 0.309017, -0.93358 0.358368, -0.913545 0.406737, -0.891007 0.45399, -0.866025 0.5, -0.838671 0.544639, -0.809017 0.587785, -0.777146 0.62932, -0.743145 0.669131, -0.707107 0.707107, -0.669131 0.743145, -0.62932 0.777146, -0.587785 0.809017, -0.544639 0.838671, -0.5 0.866025, -0.45399 0.891007, -0.406737 0.913545, -0.358368 0.93358, -0.309017 0.951057, -0.258819 0.965926, -0.207912 0.978148, -0.156434 0.987688, -0.104528 0.994522, -0.052336 0.99863, -0 1, 100 1))
+
diff --git a/libspatialite/test/sql_stmt_tests/buffer3.testcase b/libspatialite/test/sql_stmt_tests/buffer3.testcase
new file mode 100644
index 0000000..110281f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/buffer3.testcase
@@ -0,0 +1,7 @@
+buffer3
+:memory: #use in-memory database
+SELECT Buffer("foo", 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer("foo", 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/buffer4.testcase b/libspatialite/test/sql_stmt_tests/buffer4.testcase
new file mode 100644
index 0000000..92abc64
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/buffer4.testcase
@@ -0,0 +1,7 @@
+buffer4
+:memory: #use in-memory database
+SELECT Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), "foo");
+1 # rows (not including the header row)
+1 # columns
+Buffer(GeomFromText("LINESTRING(0 0, 100 0)"), "foo")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/buffer5.testcase b/libspatialite/test/sql_stmt_tests/buffer5.testcase
new file mode 100644
index 0000000..c5029e2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/buffer5.testcase
@@ -0,0 +1,7 @@
+buffer5
+:memory: #use in-memory database
+SELECT Buffer(zeroblob(40), 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer(zeroblob(40), 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/buffer6.testcase b/libspatialite/test/sql_stmt_tests/buffer6.testcase
new file mode 100644
index 0000000..01ab4b6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/buffer6.testcase
@@ -0,0 +1,7 @@
+buffer6
+:memory: #use in-memory database
+SELECT Buffer(GeomFromText("LINESTRING()"), 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer(GeomFromText("LINESTRING()"), 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/buffer7.testcase b/libspatialite/test/sql_stmt_tests/buffer7.testcase
new file mode 100644
index 0000000..84fa38c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/buffer7.testcase
@@ -0,0 +1,7 @@
+buffer7
+:memory: #use in-memory database
+SELECT Buffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1);
+1 # rows (not including the header row)
+1 # columns
+Buffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ceil-int.testcase b/libspatialite/test/sql_stmt_tests/ceil-int.testcase
new file mode 100644
index 0000000..819cbf3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ceil-int.testcase
@@ -0,0 +1,7 @@
+ceil(integer) # integer input - this is just the name remember
+:memory:
+SELECT ceil(3); # the SQL to run
+1 # rows
+1 # column
+ceil(3) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/test/sql_stmt_tests/ceilfloat.testcase b/libspatialite/test/sql_stmt_tests/ceilfloat.testcase
new file mode 100644
index 0000000..22d5d2d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ceilfloat.testcase
@@ -0,0 +1,7 @@
+ceil-float
+:memory:
+SELECT ceil(3.0); # the SQL to run
+1 # rows
+1 # column
+ceil(3.0) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/test/sql_stmt_tests/ceilfloat2.testcase b/libspatialite/test/sql_stmt_tests/ceilfloat2.testcase
new file mode 100644
index 0000000..338b171
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ceilfloat2.testcase
@@ -0,0 +1,7 @@
+ceil-float2
+:memory:
+SELECT ceil(3.1); # the SQL to run
+1 # rows
+1 # column
+ceil(3.1) # this is the header row
+4.0 # this is really the result
diff --git a/libspatialite/test/sql_stmt_tests/ceilnull.testcase b/libspatialite/test/sql_stmt_tests/ceilnull.testcase
new file mode 100644
index 0000000..99bb1ac
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ceilnull.testcase
@@ -0,0 +1,7 @@
+ceil(null) # text input, expecting null output
+:memory:
+SELECT ceil("some text"); # the SQL to run
+1 # rows
+1 # columns
+ceil("some text") # this is the header row
+(NULL) # this is really the result
diff --git a/libspatialite/test/sql_stmt_tests/ch_m.testcase b/libspatialite/test/sql_stmt_tests/ch_m.testcase
new file mode 100644
index 0000000..8cbbed2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ch_m.testcase
@@ -0,0 +1,7 @@
+chains to metres
+:memory: #use in-memory database
+SELECT CvtFromCh(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromCh(100);
+2011.68
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/checkspatialmetadata1.testcase b/libspatialite/test/sql_stmt_tests/checkspatialmetadata1.testcase
new file mode 100644
index 0000000..05a499d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/checkspatialmetadata1.testcase
@@ -0,0 +1,7 @@
+checkspatialmetadata
+:memory: #use in-memory database
+SELECT CheckSpatialMetaData()
+1 # rows (not including the header row)
+1 # columns
+CheckSpatialMetaData()
+1
diff --git a/libspatialite/test/sql_stmt_tests/checkspatialmetadata2.testcase b/libspatialite/test/sql_stmt_tests/checkspatialmetadata2.testcase
new file mode 100644
index 0000000..fdffee1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/checkspatialmetadata2.testcase
@@ -0,0 +1,7 @@
+checkspatialmetadata - pure sqlite3
+sql_stmt_tests/trivial.sqlite_RO #use special test database, read only
+SELECT CheckSpatialMetaData()
+1 # rows (not including the header row)
+1 # columns
+CheckSpatialMetaData()
+0
diff --git a/libspatialite/test/sql_stmt_tests/checkspatialmetadata3.testcase b/libspatialite/test/sql_stmt_tests/checkspatialmetadata3.testcase
new file mode 100644
index 0000000..922dafb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/checkspatialmetadata3.testcase
@@ -0,0 +1,7 @@
+checkspatialmetadata - FDO
+sql_stmt_tests/fdo-wkb.sqlite_RO #use special test database, read only
+SELECT CheckSpatialMetaData()
+1 # rows (not including the header row)
+1 # columns
+CheckSpatialMetaData()
+2
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint1.testcase b/libspatialite/test/sql_stmt_tests/closestpoint1.testcase
new file mode 100644
index 0000000..9b3480f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint1.testcase
@@ -0,0 +1,8 @@
+Closest Point - two points
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(MakePoint(1, 2), MakePoint(4, 6)));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(MakePoint(1, 2), MakePoint(4, 6)))
+POINT(1 2)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint10.testcase b/libspatialite/test/sql_stmt_tests/closestpoint10.testcase
new file mode 100644
index 0000000..06e4ada
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint10.testcase
@@ -0,0 +1,8 @@
+Closest Point - Point and line
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), MakePoint(4, 6)));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), MakePoint(4, 6)))
+POINT(0 6)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint11.testcase b/libspatialite/test/sql_stmt_tests/closestpoint11.testcase
new file mode 100644
index 0000000..b2d4da6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint11.testcase
@@ -0,0 +1,8 @@
+Closest Point - Point and lineZ
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)"), MakePoint(4, 6)));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)"), MakePoint(4, 6)))
+POINT Z(0 6 3)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint12.testcase b/libspatialite/test/sql_stmt_tests/closestpoint12.testcase
new file mode 100644
index 0000000..c814ef8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint12.testcase
@@ -0,0 +1,8 @@
+Closest Point - PointZ and line
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), GeomFromText("POINTZ(4 6 4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("LINESTRING(0 0, 0 10)"), GeomFromText("POINTZ(4 6 4)")))
+POINT(0 6)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint13.testcase b/libspatialite/test/sql_stmt_tests/closestpoint13.testcase
new file mode 100644
index 0000000..d4fe2fe
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint13.testcase
@@ -0,0 +1,8 @@
+Closest Point - lineZ and Point
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(MakePoint(4, 6), GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(MakePoint(4, 6), GeomFromText("LINESTRINGZ(0 0 0, 0 10 5)")))
+POINT(4 6)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint14.testcase b/libspatialite/test/sql_stmt_tests/closestpoint14.testcase
new file mode 100644
index 0000000..8e401e2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint14.testcase
@@ -0,0 +1,8 @@
+Closest Point - LINE AND PointZ
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTZ(4 6 4)"), GeomFromText("LINESTRING(0 0, 0 10)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTZ(4 6 4)"), GeomFromText("LINESTRING(0 0, 0 10)")))
+POINT Z(4 6 4)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint15.testcase b/libspatialite/test/sql_stmt_tests/closestpoint15.testcase
new file mode 100644
index 0000000..bfefd70
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint15.testcase
@@ -0,0 +1,8 @@
+Closest Point - toxic geom
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), MakePoint(130, -35)))
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), MakePoint(130, -35)))
+POINT(135.2 -34.5)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint16.testcase b/libspatialite/test/sql_stmt_tests/closestpoint16.testcase
new file mode 100644
index 0000000..36deea9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint16.testcase
@@ -0,0 +1,8 @@
+Closest Point - toxic geom + line
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), GeomFromText("LINESTRING(130 -35, 0 0)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), GeomFromText("LINESTRING(130 -35, 0 0)")))
+POINT(135.2 -34.5)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint2.testcase b/libspatialite/test/sql_stmt_tests/closestpoint2.testcase
new file mode 100644
index 0000000..0c023e9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint2.testcase
@@ -0,0 +1,8 @@
+Closest Point - coincident points
+:memory: #use in-memory database
+SELECT ClosestPoint(MakePoint(1, 2), MakePoint(1, 2));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(MakePoint(1, 2), MakePoint(1, 2))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint3.testcase b/libspatialite/test/sql_stmt_tests/closestpoint3.testcase
new file mode 100644
index 0000000..a1d8a63
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint3.testcase
@@ -0,0 +1,8 @@
+Closest Point - bad first geom
+:memory: #use in-memory database
+SELECT ClosestPoint(zeroblob(67), MakePoint(1, 2));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(zeroblob(67), MakePoint(1, 2))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint4.testcase b/libspatialite/test/sql_stmt_tests/closestpoint4.testcase
new file mode 100644
index 0000000..75d18dd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint4.testcase
@@ -0,0 +1,8 @@
+Closest Point - bad second blob
+:memory: #use in-memory database
+SELECT ClosestPoint(MakePoint(1, 2), zeroblob(25));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(MakePoint(1, 2), zeroblob(25))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint5.testcase b/libspatialite/test/sql_stmt_tests/closestpoint5.testcase
new file mode 100644
index 0000000..8c4be8a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint5.testcase
@@ -0,0 +1,8 @@
+Closest Point - text first geom
+:memory: #use in-memory database
+SELECT ClosestPoint("world", MakePoint(1, 2));
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint("world", MakePoint(1, 2))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint6.testcase b/libspatialite/test/sql_stmt_tests/closestpoint6.testcase
new file mode 100644
index 0000000..d341fb6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint6.testcase
@@ -0,0 +1,8 @@
+Closest Point - text second blob
+:memory: #use in-memory database
+SELECT ClosestPoint(MakePoint(1, 2), "hello");
+1 # rows (not including the header row)
+1 # columns
+ClosestPoint(MakePoint(1, 2), "hello")
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint7.testcase b/libspatialite/test/sql_stmt_tests/closestpoint7.testcase
new file mode 100644
index 0000000..f07738a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint7.testcase
@@ -0,0 +1,8 @@
+Closest Point - two pointZs
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTZ(1 2 3)"), GeomFromText("POINTZ(4 6 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTZ(1 2 3)"), GeomFromText("POINTZ(4 6 0)")))
+POINT Z(1 2 3)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint8.testcase b/libspatialite/test/sql_stmt_tests/closestpoint8.testcase
new file mode 100644
index 0000000..dd5addd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint8.testcase
@@ -0,0 +1,8 @@
+Closest Point - two pointMs
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTM(1 2 4)"), GeomFromText("POINTM(4 6 5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTM(1 2 4)"), GeomFromText("POINTM(4 6 5)")))
+POINT M(1 2 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/closestpoint9.testcase b/libspatialite/test/sql_stmt_tests/closestpoint9.testcase
new file mode 100644
index 0000000..a717cb0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/closestpoint9.testcase
@@ -0,0 +1,8 @@
+Closest Point - two pointZMs
+:memory: #use in-memory database
+SELECT AsText(ClosestPoint(GeomFromText("POINTZM(1 2 0 4)"), GeomFromText("POINTZM(4 6 1 5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ClosestPoint(GeomFromText("POINTZM(1 2 0 4)"), GeomFromText("POINTZM(4 6 1 5)")))
+POINT ZM(1 2 0 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/cm_m.testcase b/libspatialite/test/sql_stmt_tests/cm_m.testcase
new file mode 100644
index 0000000..e3b9758
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cm_m.testcase
@@ -0,0 +1,7 @@
+centimetres to metres
+:memory: #use in-memory database
+SELECT CvtFromCm(-2100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromCm(-2100);
+-21.0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/collectextract1.testcase b/libspatialite/test/sql_stmt_tests/collectextract1.testcase
new file mode 100644
index 0000000..40af387
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract1.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 1))
+MULTIPOINT(1 2)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract2.testcase b/libspatialite/test/sql_stmt_tests/collectextract2.testcase
new file mode 100644
index 0000000..19a2369
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract2.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point (NULL)
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 2))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract3.testcase b/libspatialite/test/sql_stmt_tests/collectextract3.testcase
new file mode 100644
index 0000000..051532e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract3.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point (NULL)
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 3));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 3))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract4.testcase b/libspatialite/test/sql_stmt_tests/collectextract4.testcase
new file mode 100644
index 0000000..213e0aa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract4.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point invalid type
+:memory: #use in-memory database
+SELECT AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 4));
+1 # rows (not including the header row)
+1 # columns
+AsText(CollectionExtract(GeomFromText("POINT(1 2)"), 4))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract5.testcase b/libspatialite/test/sql_stmt_tests/collectextract5.testcase
new file mode 100644
index 0000000..49bbdb3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract5.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point invalid type 0
+:memory: #use in-memory database
+SELECT CollectionExtract(GeomFromText("POINT(1 2)"), 0);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(GeomFromText("POINT(1 2)"), 0)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract6.testcase b/libspatialite/test/sql_stmt_tests/collectextract6.testcase
new file mode 100644
index 0000000..38a5753
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract6.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Bad blob
+:memory: #use in-memory database
+SELECT CollectionExtract(zeroblob(4), 0);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(zeroblob(4), 0)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract7.testcase b/libspatialite/test/sql_stmt_tests/collectextract7.testcase
new file mode 100644
index 0000000..6f83e87
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract7.testcase
@@ -0,0 +1,8 @@
+Collection Extract - text arg
+:memory: #use in-memory database
+SELECT CollectionExtract("text", 1);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract("text", 1)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract8.testcase b/libspatialite/test/sql_stmt_tests/collectextract8.testcase
new file mode 100644
index 0000000..578cc9f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract8.testcase
@@ -0,0 +1,8 @@
+Collection Extract - Point Float idx (NULL)
+:memory: #use in-memory database
+SELECT CollectionExtract(GeomFromText("POINT(1 2)"), 3.2);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(GeomFromText("POINT(1 2)"), 3.2)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/collectextract9.testcase b/libspatialite/test/sql_stmt_tests/collectextract9.testcase
new file mode 100644
index 0000000..5a6677d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/collectextract9.testcase
@@ -0,0 +1,8 @@
+Collection Extract - bad blob (NULL)
+:memory: #use in-memory database
+SELECT CollectionExtract(zeroblob(40), 3);
+1 # rows (not including the header row)
+1 # columns
+CollectionExtract(zeroblob(40), 3)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/cos-text.testcase b/libspatialite/test/sql_stmt_tests/cos-text.testcase
new file mode 100644
index 0000000..e105038
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cos-text.testcase
@@ -0,0 +1,7 @@
+cos-text
+:memory: #use in-memory database
+SELECT cos('test');
+1 # rows (not including the header row)
+1 # columns
+cos('test') # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/cos0.testcase b/libspatialite/test/sql_stmt_tests/cos0.testcase
new file mode 100644
index 0000000..7831518
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cos0.testcase
@@ -0,0 +1,7 @@
+cos(0)
+:memory: #use in-memory database
+SELECT cos(0);
+1 # rows (not including the header row)
+1 # columns
+cos(0) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/cos00.testcase b/libspatialite/test/sql_stmt_tests/cos00.testcase
new file mode 100644
index 0000000..c3d2a60
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cos00.testcase
@@ -0,0 +1,7 @@
+cos(0.0)
+:memory: #use in-memory database
+SELECT cos(0.0);
+1 # rows (not including the header row)
+1 # columns
+cos(0.0) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/cot-text.testcase b/libspatialite/test/sql_stmt_tests/cot-text.testcase
new file mode 100644
index 0000000..08eff3b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cot-text.testcase
@@ -0,0 +1,7 @@
+cot(text)
+:memory: #use in-memory database
+SELECT cot("text");
+1 # rows (not including the header row)
+1 # columns
+cot("text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/cot0.testcase b/libspatialite/test/sql_stmt_tests/cot0.testcase
new file mode 100644
index 0000000..540f43b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cot0.testcase
@@ -0,0 +1,7 @@
+cot(0)
+:memory: #use in-memory database
+SELECT cot(0);
+1 # rows (not including the header row)
+1 # columns
+cot(0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/cot00.testcase b/libspatialite/test/sql_stmt_tests/cot00.testcase
new file mode 100644
index 0000000..cfb0659
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cot00.testcase
@@ -0,0 +1,7 @@
+cot(0.0)
+:memory: #use in-memory database
+SELECT cot(0.0);
+1 # rows (not including the header row)
+1 # columns
+cot(0.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/cotpi2.testcase b/libspatialite/test/sql_stmt_tests/cotpi2.testcase
new file mode 100644
index 0000000..6e49225
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/cotpi2.testcase
@@ -0,0 +1,7 @@
+cot(pi2)
+:memory: #use in-memory database
+SELECT (1 + cot(pi()/2));
+1 # rows (not including the header row)
+1 # columns
+(1 + cot(pi()/2)) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/createtopo1.testcase b/libspatialite/test/sql_stmt_tests/createtopo1.testcase
new file mode 100644
index 0000000..920de0b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo1.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 2D
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, "XY");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, "XY")
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo10.testcase b/libspatialite/test/sql_stmt_tests/createtopo10.testcase
new file mode 100644
index 0000000..55cad2c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo10.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, integer prefix (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables(3, 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(3, 4326, 3)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo11.testcase b/libspatialite/test/sql_stmt_tests/createtopo11.testcase
new file mode 100644
index 0000000..fffd330
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo11.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, float dim (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("hello_world", 4326, 3.3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("hello_world", 4326, 3.3)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo12.testcase b/libspatialite/test/sql_stmt_tests/createtopo12.testcase
new file mode 100644
index 0000000..8b12dfc
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo12.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, spaces in prefix
+:memory: #use in-memory database
+SELECT CreateTopologyTables("hello world", 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("hello world", 4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo13.testcase b/libspatialite/test/sql_stmt_tests/createtopo13.testcase
new file mode 100644
index 0000000..068d863
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo13.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, quote in prefix
+:memory: #use in-memory database
+SELECT CreateTopologyTables("hello'_world", 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("hello'_world", 4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo14.testcase b/libspatialite/test/sql_stmt_tests/createtopo14.testcase
new file mode 100644
index 0000000..a155ed5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo14.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 2D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 2);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 2)
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo15.testcase b/libspatialite/test/sql_stmt_tests/createtopo15.testcase
new file mode 100644
index 0000000..92c20c8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo15.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 3D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo16.testcase b/libspatialite/test/sql_stmt_tests/createtopo16.testcase
new file mode 100644
index 0000000..a32e31e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo16.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 4D int (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 4);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 4)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo17.testcase b/libspatialite/test/sql_stmt_tests/createtopo17.testcase
new file mode 100644
index 0000000..c2e9c50
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo17.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, text SRID (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("4326", 2);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("4326", 2)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo18.testcase b/libspatialite/test/sql_stmt_tests/createtopo18.testcase
new file mode 100644
index 0000000..8ea52ed
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo18.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, float dims (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, 2.0);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, 2.0)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo2.testcase b/libspatialite/test/sql_stmt_tests/createtopo2.testcase
new file mode 100644
index 0000000..64f2b61
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo2.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 2 arguments, 3D
+:memory: #use in-memory database
+SELECT CreateTopologyTables(4326, "XYZ");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables(4326, "XYZ")
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo3.testcase b/libspatialite/test/sql_stmt_tests/createtopo3.testcase
new file mode 100644
index 0000000..586f181
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo3.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 2D
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, "XY");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, "XY")
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo4.testcase b/libspatialite/test/sql_stmt_tests/createtopo4.testcase
new file mode 100644
index 0000000..3e75e6b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo4.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 3D
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, "XYZ");
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, "XYZ")
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo5.testcase b/libspatialite/test/sql_stmt_tests/createtopo5.testcase
new file mode 100644
index 0000000..0a1b86d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo5.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 3D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, 3)
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo6.testcase b/libspatialite/test/sql_stmt_tests/createtopo6.testcase
new file mode 100644
index 0000000..ae3429c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo6.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 2D int
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, 2);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, 2)
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo7.testcase b/libspatialite/test/sql_stmt_tests/createtopo7.testcase
new file mode 100644
index 0000000..bffbf4e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo7.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 4D (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 4326, 4);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 4326, 4)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo8.testcase b/libspatialite/test/sql_stmt_tests/createtopo8.testcase
new file mode 100644
index 0000000..fbb59d8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo8.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, text SRID (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", "WGS-84", 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", "WGS-84", 3)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/createtopo9.testcase b/libspatialite/test/sql_stmt_tests/createtopo9.testcase
new file mode 100644
index 0000000..b01f8b2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/createtopo9.testcase
@@ -0,0 +1,7 @@
+CreateTopology - 3 arguments, 0 SRID (error)
+:memory: #use in-memory database
+SELECT CreateTopologyTables("my_prefix", 0, 3);
+1 # rows (not including the header row)
+1 # columns
+CreateTopologyTables("my_prefix", 0, 3)
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/degrees.testcase b/libspatialite/test/sql_stmt_tests/degrees.testcase
new file mode 100644
index 0000000..ccd59c1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/degrees.testcase
@@ -0,0 +1,7 @@
+degrees(0)
+:memory: #use in-memory database
+SELECT degrees(0);
+1 # rows (not including the header row)
+1 # columns
+degrees(0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/degrees45.testcase b/libspatialite/test/sql_stmt_tests/degrees45.testcase
new file mode 100644
index 0000000..7b89773
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/degrees45.testcase
@@ -0,0 +1,7 @@
+degrees45
+:memory: #use in-memory database
+SELECT degrees(pi()/4);
+1 # rows (not including the header row)
+1 # columns
+degrees(pi()/4) # header
+45.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/degreestext.testcase b/libspatialite/test/sql_stmt_tests/degreestext.testcase
new file mode 100644
index 0000000..fa6cf49
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/degreestext.testcase
@@ -0,0 +1,7 @@
+degrees-text
+:memory: #use in-memory database
+SELECT degrees("foo");
+1 # rows (not including the header row)
+1 # columns
+degrees("foo") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/dimension1.testcase b/libspatialite/test/sql_stmt_tests/dimension1.testcase
new file mode 100644
index 0000000..5eabe4e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension1.testcase
@@ -0,0 +1,7 @@
+dimension1 - POINT
+:memory: #use in-memory database
+SELECT Dimension(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"));
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"))
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dimension2.testcase b/libspatialite/test/sql_stmt_tests/dimension2.testcase
new file mode 100644
index 0000000..7196838
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension2.testcase
@@ -0,0 +1,7 @@
+dimension 2 - float (error)
+:memory: #use in-memory database
+SELECT Dimension(3.14);
+1 # rows (not including the header row)
+1 # columns
+Dimension(3.14)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dimension3.testcase b/libspatialite/test/sql_stmt_tests/dimension3.testcase
new file mode 100644
index 0000000..6a589ac
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension3.testcase
@@ -0,0 +1,7 @@
+dimension3 - linestring
+:memory: #use in-memory database
+SELECT Dimension(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"))
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"))
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dimension4.testcase b/libspatialite/test/sql_stmt_tests/dimension4.testcase
new file mode 100644
index 0000000..d52f6a4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension4.testcase
@@ -0,0 +1,7 @@
+dimension4 - bad blob
+:memory: #use in-memory database
+SELECT Dimension(zeroblob(20))
+1 # rows (not including the header row)
+1 # columns
+Dimension(zeroblob(20))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dimension5.testcase b/libspatialite/test/sql_stmt_tests/dimension5.testcase
new file mode 100644
index 0000000..61f68c3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension5.testcase
@@ -0,0 +1,7 @@
+dimension5 - GeometryCollection
+:memory: #use in-memory database
+SELECT Dimension(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dimension6.testcase b/libspatialite/test/sql_stmt_tests/dimension6.testcase
new file mode 100644
index 0000000..0b72b27
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension6.testcase
@@ -0,0 +1,7 @@
+dimension6 - POLYGON
+:memory: #use in-memory database
+SELECT Dimension(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326));
+1 # rows (not including the header row)
+1 # columns
+Dimension(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326))
+2
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dimension7.testcase b/libspatialite/test/sql_stmt_tests/dimension7.testcase
new file mode 100644
index 0000000..c0a7422
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension7.testcase
@@ -0,0 +1,7 @@
+dimension7 - MPOLYGON
+:memory: #use in-memory database
+SELECT Dimension(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+1 # rows (not including the header row)
+1 # columns
+Dimension(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+2
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dimension8.testcase b/libspatialite/test/sql_stmt_tests/dimension8.testcase
new file mode 100644
index 0000000..ef6eb69
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dimension8.testcase
@@ -0,0 +1,7 @@
+dimension5 - GeometryCollection
+:memory: #use in-memory database
+SELECT Dimension(GeometryFromText("POINT EMPTY"))
+1 # rows (not including the header row)
+1 # columns
+Dimension(GeometryFromText("POINT EMPTY"))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/dm_m.testcase b/libspatialite/test/sql_stmt_tests/dm_m.testcase
new file mode 100644
index 0000000..d64d5c8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/dm_m.testcase
@@ -0,0 +1,7 @@
+decimetres to metres
+:memory: #use in-memory database
+SELECT CvtFromDm(2.4);
+1 # rows (not including the header row)
+1 # columns
+CvtFromDm(2.4);
+0.24
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/endpoint1.testcase b/libspatialite/test/sql_stmt_tests/endpoint1.testcase
new file mode 100644
index 0000000..89614d0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/endpoint1.testcase
@@ -0,0 +1,7 @@
+endpoint - regular LINESTRING
+:memory: #use in-memory database
+SELECT AsText(EndPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(EndPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")))
+POINT(8 4)
diff --git a/libspatialite/test/sql_stmt_tests/exp0.testcase b/libspatialite/test/sql_stmt_tests/exp0.testcase
new file mode 100644
index 0000000..c5c7a69
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/exp0.testcase
@@ -0,0 +1,8 @@
+exp(0) # test of exp() function, with argument 0
+:memory: #use in-memory database
+SELECT exp(0);
+1 # rows (not including the header row)
+1 # columns
+exp(0)# header
+1.0#result
+
diff --git a/libspatialite/test/sql_stmt_tests/exp00.testcase b/libspatialite/test/sql_stmt_tests/exp00.testcase
new file mode 100644
index 0000000..a66071d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/exp00.testcase
@@ -0,0 +1,8 @@
+exp(0.0) # test of exp() function, with argument 0 (i.e. a float)
+:memory: #use in-memory database
+SELECT exp(0.0);
+1 # rows (not including the header row)
+1 # columns
+exp(0.0)# header
+1.0#result
+
diff --git a/libspatialite/test/sql_stmt_tests/exp1.testcase b/libspatialite/test/sql_stmt_tests/exp1.testcase
new file mode 100644
index 0000000..aec7953
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/exp1.testcase
@@ -0,0 +1,8 @@
+exp(1) # test of exp() function, with argument 1
+:memory: #use in-memory database
+SELECT exp(1);
+1 # rows (not including the header row)
+1 # columns
+exp(1)# header
+2.71828182845905:8#result, with limited precision comparision
+
diff --git a/libspatialite/test/sql_stmt_tests/exp10.testcase b/libspatialite/test/sql_stmt_tests/exp10.testcase
new file mode 100644
index 0000000..b5c3e05
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/exp10.testcase
@@ -0,0 +1,8 @@
+exp(1.0) # test of exp() function, with argument 1.0
+:memory: #use in-memory database
+SELECT exp(1.0);
+1 # rows (not including the header row)
+1 # columns
+exp(1.0)# header
+2.71828182845905:8#result, with limited precision comparision
+
diff --git a/libspatialite/test/sql_stmt_tests/expneg.testcase b/libspatialite/test/sql_stmt_tests/expneg.testcase
new file mode 100644
index 0000000..6983762
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/expneg.testcase
@@ -0,0 +1,7 @@
+exp-neg # test of exp() function, with negative
+:memory: #use in-memory database
+SELECT exp(-1.0);
+1 # rows (not including the header row)
+1 # columns
+exp(-1.0)# header
+0.36787944:8
diff --git a/libspatialite/test/sql_stmt_tests/exptext.testcase b/libspatialite/test/sql_stmt_tests/exptext.testcase
new file mode 100644
index 0000000..64290d1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/exptext.testcase
@@ -0,0 +1,8 @@
+exp-text # test of exp() function, with text argument
+:memory: #use in-memory database
+SELECT exp("hello world");
+1 # rows (not including the header row)
+1 # columns
+exp("hello world") # header
+(NULL)  #result
+
diff --git a/libspatialite/test/sql_stmt_tests/fath_m.testcase b/libspatialite/test/sql_stmt_tests/fath_m.testcase
new file mode 100644
index 0000000..93d8e3f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/fath_m.testcase
@@ -0,0 +1,7 @@
+fathoms to metres
+:memory: #use in-memory database
+SELECT CvtFromFath(546.806650);
+1 # rows (not including the header row)
+1 # columns
+CvtFromFath(546.806650)
+1000.0:6
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/fdo-wkb.sqlite_RO b/libspatialite/test/sql_stmt_tests/fdo-wkb.sqlite_RO
new file mode 100644
index 0000000..22428f7
Binary files /dev/null and b/libspatialite/test/sql_stmt_tests/fdo-wkb.sqlite_RO differ
diff --git a/libspatialite/test/sql_stmt_tests/fdo_ogr1.testcase b/libspatialite/test/sql_stmt_tests/fdo_ogr1.testcase
new file mode 100644
index 0000000..cc77d47
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/fdo_ogr1.testcase
@@ -0,0 +1,7 @@
+FDO_OGR1
+:memory: #use in-memory database
+SELECT AutoFDOStart()
+1 # rows (not including the header row)
+1 # columns
+AutoFDOStart()
+0
diff --git a/libspatialite/test/sql_stmt_tests/fdo_ogr2.testcase b/libspatialite/test/sql_stmt_tests/fdo_ogr2.testcase
new file mode 100644
index 0000000..4d68927
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/fdo_ogr2.testcase
@@ -0,0 +1,7 @@
+FDO_OGR2
+:memory: #use in-memory database
+SELECT AutoFDOStop()
+1 # rows (not including the header row)
+1 # columns
+AutoFDOStop()
+0
diff --git a/libspatialite/test/sql_stmt_tests/floor32.testcase b/libspatialite/test/sql_stmt_tests/floor32.testcase
new file mode 100644
index 0000000..6c48125
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/floor32.testcase
@@ -0,0 +1,7 @@
+floor(3.2) # you can use the SQL if you're not feeling imaginative.
+:memory:
+SELECT floor(3.2);
+1 # rows
+1 # columns
+floor(3.2) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/test/sql_stmt_tests/floorint.testcase b/libspatialite/test/sql_stmt_tests/floorint.testcase
new file mode 100644
index 0000000..b841b1a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/floorint.testcase
@@ -0,0 +1,7 @@
+floor(integer) # integer input - this is just the name remember
+:memory:
+SELECT floor(3); # the SQL to run
+1 # rows
+1 # columns
+floor(3) # this is the header row
+3.0 # this is really the result
diff --git a/libspatialite/test/sql_stmt_tests/floornull.testcase b/libspatialite/test/sql_stmt_tests/floornull.testcase
new file mode 100644
index 0000000..0591ce7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/floornull.testcase
@@ -0,0 +1,7 @@
+floor(null) # text input, expecting null output
+:memory:
+SELECT floor("some text"); # the SQL to run
+1 # rows
+1 # columns
+floor("some text") # this is the header row
+(NULL) # this is really the result
diff --git a/libspatialite/test/sql_stmt_tests/ft_m.testcase b/libspatialite/test/sql_stmt_tests/ft_m.testcase
new file mode 100644
index 0000000..7dfc497
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ft_m.testcase
@@ -0,0 +1,7 @@
+feet to metres
+:memory: #use in-memory database
+SELECT CvtFromFt(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromFt(10);
+3.048
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomcollfromtext1.testcase b/libspatialite/test/sql_stmt_tests/geomcollfromtext1.testcase
new file mode 100644
index 0000000..6a9f61b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomcollfromtext1.testcase
@@ -0,0 +1,7 @@
+geometrycollectionfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))", 4326))
+GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomcollfromtext2.testcase b/libspatialite/test/sql_stmt_tests/geomcollfromtext2.testcase
new file mode 100644
index 0000000..c4a9977
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomcollfromtext2.testcase
@@ -0,0 +1,7 @@
+geometrycollectionfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeometryCollectionFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))"))
+GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints1.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints1.testcase
new file mode 100644
index 0000000..861ad41
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints1.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, null
+:memory: #use in-memory database
+SELECT GeometryConstraints(null, "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(null, "POINT", 4326)
+1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints10.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints10.testcase
new file mode 100644
index 0000000..fa0da3a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints10.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, zeroblob 4
+:memory: #use in-memory database
+SELECT GeometryConstraints(zeroblob(4), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(zeroblob(4), "POINT", 4326, "XYM")
+-1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints11.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints11.testcase
new file mode 100644
index 0000000..7178220
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints11.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, zeroblob 20
+:memory: #use in-memory database
+SELECT GeometryConstraints(zeroblob(20), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(zeroblob(20), "POINT", 4326, "XYM")
+-1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints12.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints12.testcase
new file mode 100644
index 0000000..d18f466
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints12.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, zeroblob 50
+:memory: #use in-memory database
+SELECT GeometryConstraints(zeroblob(50), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(zeroblob(50), "POINT", 4326, "XYM")
+-1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints13.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints13.testcase
new file mode 100644
index 0000000..af24b9b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints13.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, int arg 2
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("POINT(1 2)", 4326), 40, 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("POINT(1 2)", 4326), 40, 4326)
+-1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints14.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints14.testcase
new file mode 100644
index 0000000..193a6dc
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints14.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, text arg 3
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("POINT(1 2)", 4326), "POINT", "hello", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("POINT(1 2)", 4326), "POINT", "hello", 4326)
+-1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints2.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints2.testcase
new file mode 100644
index 0000000..46906fb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints2.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, blob
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326)
+1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints3.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints3.testcase
new file mode 100644
index 0000000..ffe0d38
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints3.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, POINT / LINESTRING
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "LINESTRING", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "LINESTRING", 4326)
+0
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints4.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints4.testcase
new file mode 100644
index 0000000..0a090b6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints4.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, POINT / MULTIPOINT
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "MULTIPOINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "MULTIPOINT", 4326)
+0
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints5.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints5.testcase
new file mode 100644
index 0000000..3b4492b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints5.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, POINT bad SRID
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4386), "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4386), "POINT", 4326)
+0
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints6.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints6.testcase
new file mode 100644
index 0000000..0bd8047
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints6.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, POINT
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XY")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XY")
+1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints7.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints7.testcase
new file mode 100644
index 0000000..ec00e9b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints7.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, POINT vs XYZ
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYZ")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYZ")
+0
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints8.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints8.testcase
new file mode 100644
index 0000000..d05a4f7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints8.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 3 arg, text
+:memory: #use in-memory database
+SELECT GeometryConstraints("hello", "POINT", 4326)
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints("hello", "POINT", 4326)
+-1
+
diff --git a/libspatialite/test/sql_stmt_tests/geomconstraints9.testcase b/libspatialite/test/sql_stmt_tests/geomconstraints9.testcase
new file mode 100644
index 0000000..33ddd6c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomconstraints9.testcase
@@ -0,0 +1,8 @@
+geometry constraints - 4 arg, POINT vs XYM
+:memory: #use in-memory database
+SELECT GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYM")
+1 # rows (not including the header row)
+1 # columns
+GeometryConstraints(GeomFromText("Point(1 2)", 4326), "POINT", 4326, "XYM")
+0
+
diff --git a/libspatialite/test/sql_stmt_tests/geometryn.testcase b/libspatialite/test/sql_stmt_tests/geometryn.testcase
new file mode 100644
index 0000000..fc9b6f7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geometryn.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 1))
+POINT(1 2)
diff --git a/libspatialite/test/sql_stmt_tests/geometryn1.testcase b/libspatialite/test/sql_stmt_tests/geometryn1.testcase
new file mode 100644
index 0000000..aca6bf1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geometryn1.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint - out of range 0
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/geometryn2.testcase b/libspatialite/test/sql_stmt_tests/geometryn2.testcase
new file mode 100644
index 0000000..ac9dd66
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geometryn2.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint - out of range 2
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 2))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/geometryn3.testcase b/libspatialite/test/sql_stmt_tests/geometryn3.testcase
new file mode 100644
index 0000000..34c41f5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geometryn3.testcase
@@ -0,0 +1,7 @@
+Geometry N - text input (error)
+:memory: #use in-memory database
+SELECT GeometryN("text", 2);
+1 # rows (not including the header row)
+1 # columns
+GeometryN("text", 2)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/geometryn4.testcase b/libspatialite/test/sql_stmt_tests/geometryn4.testcase
new file mode 100644
index 0000000..42f355f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geometryn4.testcase
@@ -0,0 +1,7 @@
+Geometry N - bad blob input (error)
+:memory: #use in-memory database
+SELECT GeometryN(zeroblob(2), 1);
+1 # rows (not including the header row)
+1 # columns
+GeometryN(zeroblob(2), 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/geometryn5.testcase b/libspatialite/test/sql_stmt_tests/geometryn5.testcase
new file mode 100644
index 0000000..132e633
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geometryn5.testcase
@@ -0,0 +1,8 @@
+Geometry N - toxic blob
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1))
+POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))
+
diff --git a/libspatialite/test/sql_stmt_tests/geometryn6.testcase b/libspatialite/test/sql_stmt_tests/geometryn6.testcase
new file mode 100644
index 0000000..ddf9b31
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geometryn6.testcase
@@ -0,0 +1,7 @@
+Geometry N - multipoint - float index
+:memory: #use in-memory database
+SELECT AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0.2));
+1 # rows (not including the header row)
+1 # columns
+AsText(GeometryN(GeomFromText("MULTIPOINT(1 2)"), 0.2))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext1.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext1.testcase
new file mode 100644
index 0000000..89ac942
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext1.testcase
@@ -0,0 +1,7 @@
+geomfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)"), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext2.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext2.testcase
new file mode 100644
index 0000000..ff998df
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext2.testcase
@@ -0,0 +1,7 @@
+geomfromtext2
+:memory: #use in-memory database
+SELECT GeomFromText(3.14);
+1 # rows (not including the header row)
+1 # columns
+GeomFromText(3.14)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext3.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext3.testcase
new file mode 100644
index 0000000..0c39740
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext3.testcase
@@ -0,0 +1,7 @@
+geomfromtext3
+:memory: #use in-memory database
+SELECT AsWkt(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 4)
+LINESTRING(4 0,4 4,8 4)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext4.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext4.testcase
new file mode 100644
index 0000000..182ba56
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext4.testcase
@@ -0,0 +1,7 @@
+geomfromtext4
+:memory: #use in-memory database
+SELECT GeomFromText("POINT(0 1 2 3)");
+1 # rows (not including the header row)
+1 # columns
+GeomFromText("POINT(0 1 2 3)")
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext5.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext5.testcase
new file mode 100644
index 0000000..0b3e136
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext5.testcase
@@ -0,0 +1,7 @@
+geomfromtext5
+:memory: #use in-memory database
+SELECT AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext6.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext6.testcase
new file mode 100644
index 0000000..822bb41
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext6.testcase
@@ -0,0 +1,7 @@
+geomfromtext6
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", 4326))
+SRID=4326;POINT(-71.1043443253471 42.315067601582903)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext7.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext7.testcase
new file mode 100644
index 0000000..423956f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext7.testcase
@@ -0,0 +1,7 @@
+geomfromtext7
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", "WGS-84"));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900)", "WGS-84"))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext8.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext8.testcase
new file mode 100644
index 0000000..976eef9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext8.testcase
@@ -0,0 +1,7 @@
+geomfromtext8
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText(3.14, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText(3.14, 4326))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomfromtext9.testcase b/libspatialite/test/sql_stmt_tests/geomfromtext9.testcase
new file mode 100644
index 0000000..da410f2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomfromtext9.testcase
@@ -0,0 +1,7 @@
+geomfromtext9
+:memory: #use in-memory database
+SELECT AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900 45)", 4326));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(GeomFromText("POINT(-71.1043443253471 42.315067601582900 45)", 4326))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype1.testcase b/libspatialite/test/sql_stmt_tests/geomtype1.testcase
new file mode 100644
index 0000000..747454b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype1.testcase
@@ -0,0 +1,9 @@
+geometrytype1 - POINT
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINT(-71.1043443253471 42.315067601582900)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT
+XY
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype10.testcase b/libspatialite/test/sql_stmt_tests/geomtype10.testcase
new file mode 100644
index 0000000..51569e5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype10.testcase
@@ -0,0 +1,9 @@
+geometrytype - LINESTRING ZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRINGZM(4 0 4 1, 4 4 4 2, 8 4 2 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype11.testcase b/libspatialite/test/sql_stmt_tests/geomtype11.testcase
new file mode 100644
index 0000000..1f6bb3a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype11.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTION
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION
+XY
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype12.testcase b/libspatialite/test/sql_stmt_tests/geomtype12.testcase
new file mode 100644
index 0000000..76be6ac
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype12.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINT
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINT (10 40, 40 30, 20 20, 30 10)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT
+XY
+MULTIPOINT
diff --git a/libspatialite/test/sql_stmt_tests/geomtype13.testcase b/libspatialite/test/sql_stmt_tests/geomtype13.testcase
new file mode 100644
index 0000000..9d6e355
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype13.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGON
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON
+XY
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype14.testcase b/libspatialite/test/sql_stmt_tests/geomtype14.testcase
new file mode 100644
index 0000000..c214893
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype14.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOLYGONZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOLYGONZ(((30 20 1, 10 40 1, 45 40 1, 30 20 1)),((15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2)))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOLYGON Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype15.testcase b/libspatialite/test/sql_stmt_tests/geomtype15.testcase
new file mode 100644
index 0000000..ead0611
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype15.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOLYGONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOLYGONM(((30 20 1, 10 40 1, 45 40 1, 30 20 1)),((15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2)))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOLYGON M
+XYM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype16.testcase b/libspatialite/test/sql_stmt_tests/geomtype16.testcase
new file mode 100644
index 0000000..ec70367
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype16.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOLYGONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOLYGONZM(((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2)),((15 5 2 3, 40 10 2 3, 10 20 2 3, 5 10 2 3, 15 5 2 3)))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOLYGON ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype17.testcase b/libspatialite/test/sql_stmt_tests/geomtype17.testcase
new file mode 100644
index 0000000..fc9a53a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype17.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTILINESTRING
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTILINESTRING ((30 20, 10 40, 45 40, 30 20),(15 5, 40 10, 10 20, 5 10, 15 5))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTILINESTRING
+XY
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype18.testcase b/libspatialite/test/sql_stmt_tests/geomtype18.testcase
new file mode 100644
index 0000000..a972d9f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype18.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTILINESTRINGZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTILINESTRINGZ((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTILINESTRING Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype19.testcase b/libspatialite/test/sql_stmt_tests/geomtype19.testcase
new file mode 100644
index 0000000..9229034
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype19.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTILINESTRINGZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTILINESTRINGZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2),(15 5 2 3, 40 10 2 3, 10 20 2 3, 5 10 2 3, 15 5 2 3))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTILINESTRING ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype2.testcase b/libspatialite/test/sql_stmt_tests/geomtype2.testcase
new file mode 100644
index 0000000..c8e00a8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype2.testcase
@@ -0,0 +1,9 @@
+geometrytype2 - POINTZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINTZ(-71.1043443253471 42.315067601582900 26.2)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype20.testcase b/libspatialite/test/sql_stmt_tests/geomtype20.testcase
new file mode 100644
index 0000000..30cc09e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype20.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGM((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING M
+XYM
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype21.testcase b/libspatialite/test/sql_stmt_tests/geomtype21.testcase
new file mode 100644
index 0000000..b0651dc
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype21.testcase
@@ -0,0 +1,11 @@
+geometrytype - POLYGON
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("POLYGON ((30 20, 10 40, 45 40, 30 20),(15 5, 40 10, 10 20, 5 10, 15 5))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+POLYGON
+XY
+POLYGON
diff --git a/libspatialite/test/sql_stmt_tests/geomtype22.testcase b/libspatialite/test/sql_stmt_tests/geomtype22.testcase
new file mode 100644
index 0000000..e782cec
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype22.testcase
@@ -0,0 +1,9 @@
+geometrytype - POLYGONZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POLYGONZ((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POLYGON Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype23.testcase b/libspatialite/test/sql_stmt_tests/geomtype23.testcase
new file mode 100644
index 0000000..a2ce734
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype23.testcase
@@ -0,0 +1,11 @@
+geometrytype - POLYGONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("POLYGONM((30 20 1, 10 40 1, 45 40 1, 30 20 1),(15 5 2, 40 10 2, 10 20 2, 5 10 2, 15 5 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+POLYGON M
+XYM
+POLYGON
diff --git a/libspatialite/test/sql_stmt_tests/geomtype24.testcase b/libspatialite/test/sql_stmt_tests/geomtype24.testcase
new file mode 100644
index 0000000..a142b2f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype24.testcase
@@ -0,0 +1,9 @@
+geometrytype - POLYGONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POLYGONZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2),(15 5 2 3, 40 10 2 3, 10 20 2 3, 5 10 2 3, 15 5 2 3))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POLYGON ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype25.testcase b/libspatialite/test/sql_stmt_tests/geomtype25.testcase
new file mode 100644
index 0000000..d6f8874
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype25.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTZM(-71 42 26.2 3)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT ZM
+XYZM
+MULTIPOINT
diff --git a/libspatialite/test/sql_stmt_tests/geomtype26.testcase b/libspatialite/test/sql_stmt_tests/geomtype26.testcase
new file mode 100644
index 0000000..b4b30d6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype26.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINTZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINTZ(-71 42 26.2)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype27.testcase b/libspatialite/test/sql_stmt_tests/geomtype27.testcase
new file mode 100644
index 0000000..90cab18
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype27.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINTM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINTM(-71 42 26.2)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT M
+XYM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype28.testcase b/libspatialite/test/sql_stmt_tests/geomtype28.testcase
new file mode 100644
index 0000000..4d11150
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype28.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINT
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINT(-71 42, 4 22)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT
+XY
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype29.testcase b/libspatialite/test/sql_stmt_tests/geomtype29.testcase
new file mode 100644
index 0000000..0454716
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype29.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTIONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(4 6 4 1), POINTZM(3 3 29 1), LINESTRINGZM(4 6 0 0,7 10 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype3.testcase b/libspatialite/test/sql_stmt_tests/geomtype3.testcase
new file mode 100644
index 0000000..75ba452
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype3.testcase
@@ -0,0 +1,9 @@
+geometrytype3 - POINTZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINTZM(-71.1043443253471 42.315067601582900 26.2 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype30.testcase b/libspatialite/test/sql_stmt_tests/geomtype30.testcase
new file mode 100644
index 0000000..8d65be3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype30.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(4 6 4), POINTZ(3 3 29), LINESTRINGZ(4 6 0,7 10 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype31.testcase b/libspatialite/test/sql_stmt_tests/geomtype31.testcase
new file mode 100644
index 0000000..2ecab79
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype31.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(4 6 4), POINTM(3 3 29), LINESTRINGM(4 6 0,7 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype32.testcase b/libspatialite/test/sql_stmt_tests/geomtype32.testcase
new file mode 100644
index 0000000..d71ab98
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype32.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTIONM only linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(LINESTRINGM(4 6 0,7 10 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION M
+XYM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype33.testcase b/libspatialite/test/sql_stmt_tests/geomtype33.testcase
new file mode 100644
index 0000000..8cc509c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype33.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ only linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(LINESTRINGZ(4 6 0, 10 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype34.testcase b/libspatialite/test/sql_stmt_tests/geomtype34.testcase
new file mode 100644
index 0000000..718cf36
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype34.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTIONZM only Linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(LINESTRINGZM(4 6 0 0,7 10 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype35.testcase b/libspatialite/test/sql_stmt_tests/geomtype35.testcase
new file mode 100644
index 0000000..711bd82
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype35.testcase
@@ -0,0 +1,9 @@
+geometrytype - GEOMETRYCOLLECTION only linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(LINESTRING(4 6, 10 0))") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GEOMETRYCOLLECTION
+XY
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype36.testcase b/libspatialite/test/sql_stmt_tests/geomtype36.testcase
new file mode 100644
index 0000000..0897680
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype36.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(LINESTRINGZ(4 6 0, 10 0 0), LINESTRINGZ(2 3 0, 5 1 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype37.testcase b/libspatialite/test/sql_stmt_tests/geomtype37.testcase
new file mode 100644
index 0000000..1c72ea8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype37.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(LINESTRINGM(4 6 0, 10 0 0), LINESTRINGM(2 3 0, 5 1 0))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype38.testcase b/libspatialite/test/sql_stmt_tests/geomtype38.testcase
new file mode 100644
index 0000000..56a0ec5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype38.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(4 6 4), POINTM(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype39.testcase b/libspatialite/test/sql_stmt_tests/geomtype39.testcase
new file mode 100644
index 0000000..b6fb06f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype39.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype4.testcase b/libspatialite/test/sql_stmt_tests/geomtype4.testcase
new file mode 100644
index 0000000..d40a67e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype4.testcase
@@ -0,0 +1,9 @@
+geometrytype4 - POINTM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("POINTM(-71.1043443253471 42.315067601582900 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+POINT M
+XYM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype40.testcase b/libspatialite/test/sql_stmt_tests/geomtype40.testcase
new file mode 100644
index 0000000..af18c73
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype40.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POLYGONZ((4 6 0,7 10 0, 12 3 1, 4 6 0)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype41.testcase b/libspatialite/test/sql_stmt_tests/geomtype41.testcase
new file mode 100644
index 0000000..4fa4796
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype41.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POLYGONZ((4 6 0,7 10 0, 12 3 1, 4 6 0)),POLYGONZ((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype42.testcase b/libspatialite/test/sql_stmt_tests/geomtype42.testcase
new file mode 100644
index 0000000..b77da32
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype42.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGM - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGM((30 20 1, 10 40 1, 45 40 1, 30 20 1))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING M
+XYM
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype43.testcase b/libspatialite/test/sql_stmt_tests/geomtype43.testcase
new file mode 100644
index 0000000..9aac294
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype43.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGONZM - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGONZM(((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON ZM
+XYZM
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype44.testcase b/libspatialite/test/sql_stmt_tests/geomtype44.testcase
new file mode 100644
index 0000000..114d995
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype44.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - linestring and polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(LINESTRINGZ(4 6 0,7 10 0, 12 3 1),POLYGONZ((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype45.testcase b/libspatialite/test/sql_stmt_tests/geomtype45.testcase
new file mode 100644
index 0000000..d8a7bb0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype45.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - point and polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(4 6 0),POLYGONZ((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype46.testcase b/libspatialite/test/sql_stmt_tests/geomtype46.testcase
new file mode 100644
index 0000000..1df4fff
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype46.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - point and polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POINTM(4 6 0),POLYGONM((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype47.testcase b/libspatialite/test/sql_stmt_tests/geomtype47.testcase
new file mode 100644
index 0000000..885b87f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype47.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGONZ - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGONZ(((30 20 1, 10 40 1, 45 40 1, 30 20 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON Z
+XYZ
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype48.testcase b/libspatialite/test/sql_stmt_tests/geomtype48.testcase
new file mode 100644
index 0000000..9151c28
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype48.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOLYGONM - one polygon
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOLYGONM(((30 20 1, 10 40 1, 45 40 1, 30 20 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOLYGON M
+XYM
+MULTIPOLYGON
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype49.testcase b/libspatialite/test/sql_stmt_tests/geomtype49.testcase
new file mode 100644
index 0000000..a925176
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype49.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - one POLYGONM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POLYGONM((30 20 1, 10 40 1, 45 40 1, 30 20 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype5.testcase b/libspatialite/test/sql_stmt_tests/geomtype5.testcase
new file mode 100644
index 0000000..0197691
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype5.testcase
@@ -0,0 +1,11 @@
+geometrytype5 - zeroblob
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT zeroblob(20) as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype50.testcase b/libspatialite/test/sql_stmt_tests/geomtype50.testcase
new file mode 100644
index 0000000..4a26351
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype50.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - one POLYGONZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POLYGONZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype51.testcase b/libspatialite/test/sql_stmt_tests/geomtype51.testcase
new file mode 100644
index 0000000..17df0c3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype51.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - one POLYGON
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POLYGON((30 20, 10 40, 45 40, 30 20)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype52.testcase b/libspatialite/test/sql_stmt_tests/geomtype52.testcase
new file mode 100644
index 0000000..1e25f9a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype52.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(LINESTRINGZM(4 6 0 1,7 10 0 1, 12 3 1 1),LINESTRINGZM(1 2 3 4,5 4 3 4, 12 3 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype53.testcase b/libspatialite/test/sql_stmt_tests/geomtype53.testcase
new file mode 100644
index 0000000..ec089f3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype53.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - two linestring
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(LINESTRING(4 6,7 10, 12 3),LINESTRING(1 2, 3 4))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype54.testcase b/libspatialite/test/sql_stmt_tests/geomtype54.testcase
new file mode 100644
index 0000000..7d9e12d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype54.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONM - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONM(POLYGONM((4 6 0,7 10 0, 12 3 1, 4 6 0)),POLYGONM((4 6 1,7 10 1, 12 3 2, 4 6 1)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION M
+XYM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype55.testcase b/libspatialite/test/sql_stmt_tests/geomtype55.testcase
new file mode 100644
index 0000000..6807d5e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype55.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION ZM - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POLYGONZM((4 6 0 1,7 10 0 1, 12 3 1 1, 4 6 0 1)),POLYGONZM((4 6 1 2,7 10 1 2, 12 3 2 2, 4 6 1 2)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype56.testcase b/libspatialite/test/sql_stmt_tests/geomtype56.testcase
new file mode 100644
index 0000000..1b75bbd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype56.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - two polygons
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POLYGON((4 6,7 10, 12 3, 4 6)),POLYGON((4 6,7 10, 12 3, 4 6)))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype57.testcase b/libspatialite/test/sql_stmt_tests/geomtype57.testcase
new file mode 100644
index 0000000..1f16fdd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype57.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(4 6 4), POINTZ(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype58.testcase b/libspatialite/test/sql_stmt_tests/geomtype58.testcase
new file mode 100644
index 0000000..5a672f8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype58.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(4 6 4 1), POINTZM(3 3 29 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype59.testcase b/libspatialite/test/sql_stmt_tests/geomtype59.testcase
new file mode 100644
index 0000000..269cff0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype59.testcase
@@ -0,0 +1,9 @@
+geometrytype - MULTIPOINT - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("MULTIPOINT(-71 42)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+MULTIPOINT
+XY
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype6.testcase b/libspatialite/test/sql_stmt_tests/geomtype6.testcase
new file mode 100644
index 0000000..d0ccb52
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype6.testcase
@@ -0,0 +1,9 @@
+geometrytype6 - LINESTRING
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRING(4 0, 4 4, 8 4)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING
+XY
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype60.testcase b/libspatialite/test/sql_stmt_tests/geomtype60.testcase
new file mode 100644
index 0000000..630fdec
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype60.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZ - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(3 3 29))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION Z
+XYZ
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype61.testcase b/libspatialite/test/sql_stmt_tests/geomtype61.testcase
new file mode 100644
index 0000000..da09c4f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype61.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTIONZM - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(3 3 29 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION ZM
+XYZM
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype62.testcase b/libspatialite/test/sql_stmt_tests/geomtype62.testcase
new file mode 100644
index 0000000..554c1d4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype62.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - one point
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POINT(3 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype63.testcase b/libspatialite/test/sql_stmt_tests/geomtype63.testcase
new file mode 100644
index 0000000..d885f3b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype63.testcase
@@ -0,0 +1,11 @@
+geometrytype - GEOMETRYCOLLECTION - two points
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("GEOMETRYCOLLECTION(POINT(3 2), POINT(1 4))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+GEOMETRYCOLLECTION
+XY
+GEOMETRYCOLLECTION
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype64.testcase b/libspatialite/test/sql_stmt_tests/geomtype64.testcase
new file mode 100644
index 0000000..06e9437
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype64.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTZ (10 40 10, 40 30 15, 20 20 20, 30 10 9)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT Z
+XYZ
+MULTIPOINT
diff --git a/libspatialite/test/sql_stmt_tests/geomtype65.testcase b/libspatialite/test/sql_stmt_tests/geomtype65.testcase
new file mode 100644
index 0000000..50d8f26
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype65.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTM (10 40 10, 40 30 15, 20 20 20, 30 10 9)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT M
+XYM
+MULTIPOINT
diff --git a/libspatialite/test/sql_stmt_tests/geomtype66.testcase b/libspatialite/test/sql_stmt_tests/geomtype66.testcase
new file mode 100644
index 0000000..683b5fe
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype66.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTIPOINTZM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTIPOINTZM (10 40 10 1, 40 30 15 2, 20 20 20 2, 30 10 9 1)") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTIPOINT ZM
+XYZM
+MULTIPOINT
diff --git a/libspatialite/test/sql_stmt_tests/geomtype67.testcase b/libspatialite/test/sql_stmt_tests/geomtype67.testcase
new file mode 100644
index 0000000..40abe33
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype67.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGZ - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGZ((30 20 1, 10 40 1, 45 40 1, 30 20 1))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING Z
+XYZ
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype68.testcase b/libspatialite/test/sql_stmt_tests/geomtype68.testcase
new file mode 100644
index 0000000..4894a00
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype68.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRINGZM - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRINGZM((30 20 1 2, 10 40 1 2, 45 40 1 2, 30 20 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING ZM
+XYZM
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype69.testcase b/libspatialite/test/sql_stmt_tests/geomtype69.testcase
new file mode 100644
index 0000000..2631c0d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype69.testcase
@@ -0,0 +1,11 @@
+geometrytype - MULTILINESTRING - one line
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT GeomFromText("MULTILINESTRING((30 20, 10 40, 45 40, 30 20))") as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+MULTILINESTRING
+XY
+MULTILINESTRING
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype7.testcase b/libspatialite/test/sql_stmt_tests/geomtype7.testcase
new file mode 100644
index 0000000..14e25a1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype7.testcase
@@ -0,0 +1,11 @@
+geometrytype - 3 + 2
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom), GeometryAliasType(geom) from (SELECT 3 + 2 as geom) dummy;
+1 # rows (not including the header row)
+3 # columns
+GeometryType(geom)
+CoordDimension(geom)
+GeometryAliasType(geom)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype8.testcase b/libspatialite/test/sql_stmt_tests/geomtype8.testcase
new file mode 100644
index 0000000..1024539
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype8.testcase
@@ -0,0 +1,9 @@
+geometrytype - LINESTRINGZ
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRINGZ(4 0 1, 4 4 2, 8 4 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING Z
+XYZ
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/geomtype9.testcase b/libspatialite/test/sql_stmt_tests/geomtype9.testcase
new file mode 100644
index 0000000..564ff88
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/geomtype9.testcase
@@ -0,0 +1,9 @@
+geometrytype - LINESTRINGM
+:memory: #use in-memory database
+SELECT GeometryType(geom), CoordDimension(geom) from (SELECT GeomFromText("LINESTRINGM(4 0 1, 4 4 2, 8 4 3)") as geom) dummy;
+1 # rows (not including the header row)
+2 # columns
+GeometryType(geom)
+CoordDimension(geom)
+LINESTRING M
+XYM
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/greatcircle-badblob.testcase b/libspatialite/test/sql_stmt_tests/greatcircle-badblob.testcase
new file mode 100644
index 0000000..1a00767
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/greatcircle-badblob.testcase
@@ -0,0 +1,7 @@
+great circle distance - bad blob
+:memory:
+SELECT GreatCircleLength(zeroblob(34));
+1 # rows
+1 # column
+GreatCircleLength(zeroblob(34))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/greatcircle-poly.testcase b/libspatialite/test/sql_stmt_tests/greatcircle-poly.testcase
new file mode 100644
index 0000000..0cce87e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/greatcircle-poly.testcase
@@ -0,0 +1,7 @@
+great circle distance polygon
+:memory:
+SELECT GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0))", 4326));
+1 # rows
+1 # column
+GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0))", 4326))
+222390.15:9
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/greatcircle-poly2.testcase b/libspatialite/test/sql_stmt_tests/greatcircle-poly2.testcase
new file mode 100644
index 0000000..771d59f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/greatcircle-poly2.testcase
@@ -0,0 +1,7 @@
+great circle distance polygon
+:memory:
+SELECT GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0),(0 0, 0 0, 0 0, 0 0))", 4326));
+1 # rows
+1 # column
+GreatCircleLength(GeomFromText("POLYGON((0 0, 1 0, 0 0, 0 0),(0 0, 0 0, 0 0, 0 0))", 4326))
+222390.15:9
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/greatcircle-text.testcase b/libspatialite/test/sql_stmt_tests/greatcircle-text.testcase
new file mode 100644
index 0000000..6d3806b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/greatcircle-text.testcase
@@ -0,0 +1,7 @@
+great circle distance - text
+:memory:
+SELECT GreatCircleLength("Hello");
+1 # rows
+1 # column
+GreatCircleLength("Hello")
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/greatcircle.testcase b/libspatialite/test/sql_stmt_tests/greatcircle.testcase
new file mode 100644
index 0000000..d97d608
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/greatcircle.testcase
@@ -0,0 +1,7 @@
+great circle distance
+:memory:
+SELECT GreatCircleLength(GeomFromText("LINESTRING(0 0, 1 0)", 4326));
+1 # rows
+1 # column
+GreatCircleLength(GeomFromText("LINESTRING(0 0, 1 0)", 4326))
+111195.07:9
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/in_m.testcase b/libspatialite/test/sql_stmt_tests/in_m.testcase
new file mode 100644
index 0000000..71b225c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/in_m.testcase
@@ -0,0 +1,7 @@
+inches to metres
+:memory: #use in-memory database
+SELECT CvtFromIn(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIn(100);
+2.54
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/ind_ch_m.testcase b/libspatialite/test/sql_stmt_tests/ind_ch_m.testcase
new file mode 100644
index 0000000..fdf4d9b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ind_ch_m.testcase
@@ -0,0 +1,7 @@
+Indian chains to metres
+:memory: #use in-memory database
+SELECT CvtFromIndCh(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIndCh(100);
+2011.6695:9
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/ind_ft_m.testcase b/libspatialite/test/sql_stmt_tests/ind_ft_m.testcase
new file mode 100644
index 0000000..7e9c52e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ind_ft_m.testcase
@@ -0,0 +1,7 @@
+ind_feet to metres
+:memory: #use in-memory database
+SELECT CvtFromIndFt(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIndFt(10);
+3.047984:8
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/ind_yd_m.testcase b/libspatialite/test/sql_stmt_tests/ind_yd_m.testcase
new file mode 100644
index 0000000..3d302bb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ind_yd_m.testcase
@@ -0,0 +1,7 @@
+Indian yards to metres
+:memory: #use in-memory database
+SELECT CvtFromIndYd(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromIndYd(10);
+9.14395:7
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/isclosed1.testcase b/libspatialite/test/sql_stmt_tests/isclosed1.testcase
new file mode 100644
index 0000000..79ca1a4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isclosed1.testcase
@@ -0,0 +1,7 @@
+isclosed1
+:memory: #use in-memory database
+SELECT IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"))
+1
diff --git a/libspatialite/test/sql_stmt_tests/isclosed2.testcase b/libspatialite/test/sql_stmt_tests/isclosed2.testcase
new file mode 100644
index 0000000..f9b28f5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isclosed2.testcase
@@ -0,0 +1,8 @@
+isclosed2
+:memory: #use in-memory database
+SELECT IsClosed(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
+
diff --git a/libspatialite/test/sql_stmt_tests/isclosed3.testcase b/libspatialite/test/sql_stmt_tests/isclosed3.testcase
new file mode 100644
index 0000000..9e6ebaa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isclosed3.testcase
@@ -0,0 +1,7 @@
+isclosed3
+:memory: #use in-memory database
+SELECT IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)"));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)"))
+0
diff --git a/libspatialite/test/sql_stmt_tests/isclosed4.testcase b/libspatialite/test/sql_stmt_tests/isclosed4.testcase
new file mode 100644
index 0000000..8373258
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isclosed4.testcase
@@ -0,0 +1,7 @@
+isclosed4
+:memory: #use in-memory database
+SELECT IsClosed(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsClosed(zeroblob(10))
+-1
diff --git a/libspatialite/test/sql_stmt_tests/isclosed5.testcase b/libspatialite/test/sql_stmt_tests/isclosed5.testcase
new file mode 100644
index 0000000..964755f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isclosed5.testcase
@@ -0,0 +1,7 @@
+isclosed5
+:memory: #use in-memory database
+SELECT IsClosed(3);
+1 # rows (not including the header row)
+1 # columns
+IsClosed(3)
+-1
diff --git a/libspatialite/test/sql_stmt_tests/isring1.testcase b/libspatialite/test/sql_stmt_tests/isring1.testcase
new file mode 100644
index 0000000..f321ac4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isring1.testcase
@@ -0,0 +1,7 @@
+isring1
+:memory: #use in-memory database
+SELECT IsRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"));
+1 # rows (not including the header row)
+1 # columns
+IsRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"))
+1
diff --git a/libspatialite/test/sql_stmt_tests/isring2.testcase b/libspatialite/test/sql_stmt_tests/isring2.testcase
new file mode 100644
index 0000000..b124da9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isring2.testcase
@@ -0,0 +1,8 @@
+isring2
+:memory: #use in-memory database
+SELECT IsRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+-1
+
diff --git a/libspatialite/test/sql_stmt_tests/isring3.testcase b/libspatialite/test/sql_stmt_tests/isring3.testcase
new file mode 100644
index 0000000..dfc61bd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isring3.testcase
@@ -0,0 +1,7 @@
+isring3
+:memory: #use in-memory database
+SELECT IsRing("hello");
+1 # rows (not including the header row)
+1 # columns
+IsRing("hello")
+-1
diff --git a/libspatialite/test/sql_stmt_tests/isring4.testcase b/libspatialite/test/sql_stmt_tests/isring4.testcase
new file mode 100644
index 0000000..4c87475
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isring4.testcase
@@ -0,0 +1,7 @@
+isring4
+:memory: #use in-memory database
+SELECT IsRing(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsRing(zeroblob(10))
+-1
diff --git a/libspatialite/test/sql_stmt_tests/issimple1.testcase b/libspatialite/test/sql_stmt_tests/issimple1.testcase
new file mode 100644
index 0000000..a61bff3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/issimple1.testcase
@@ -0,0 +1,7 @@
+issimple1
+:memory: #use in-memory database
+SELECT IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"))
+1
diff --git a/libspatialite/test/sql_stmt_tests/issimple2.testcase b/libspatialite/test/sql_stmt_tests/issimple2.testcase
new file mode 100644
index 0000000..4552786
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/issimple2.testcase
@@ -0,0 +1,8 @@
+issimple2
+:memory: #use in-memory database
+SELECT IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
+
diff --git a/libspatialite/test/sql_stmt_tests/issimple3.testcase b/libspatialite/test/sql_stmt_tests/issimple3.testcase
new file mode 100644
index 0000000..14ccb64
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/issimple3.testcase
@@ -0,0 +1,7 @@
+issimple3
+:memory: #use in-memory database
+SELECT IsSimple(GeomFromText("POLYGON()"));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(GeomFromText("POLYGON()"))
+-1
diff --git a/libspatialite/test/sql_stmt_tests/issimple4.testcase b/libspatialite/test/sql_stmt_tests/issimple4.testcase
new file mode 100644
index 0000000..22a1f9f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/issimple4.testcase
@@ -0,0 +1,7 @@
+issimple4
+:memory: #use in-memory database
+SELECT IsSimple(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsSimple(zeroblob(10))
+-1
diff --git a/libspatialite/test/sql_stmt_tests/issimple5.testcase b/libspatialite/test/sql_stmt_tests/issimple5.testcase
new file mode 100644
index 0000000..c331ee0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/issimple5.testcase
@@ -0,0 +1,7 @@
+issimple5
+:memory: #use in-memory database
+SELECT IsSimple("hello");
+1 # rows (not including the header row)
+1 # columns
+IsSimple("hello")
+-1
diff --git a/libspatialite/test/sql_stmt_tests/isvalid1.testcase b/libspatialite/test/sql_stmt_tests/isvalid1.testcase
new file mode 100644
index 0000000..beaf998
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isvalid1.testcase
@@ -0,0 +1,7 @@
+isvalid1
+:memory: #use in-memory database
+SELECT IsValid(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+IsValid(zeroblob(10))
+-1
diff --git a/libspatialite/test/sql_stmt_tests/isvalid2.testcase b/libspatialite/test/sql_stmt_tests/isvalid2.testcase
new file mode 100644
index 0000000..27c34fe
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isvalid2.testcase
@@ -0,0 +1,7 @@
+isvalid2
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+1
diff --git a/libspatialite/test/sql_stmt_tests/isvalid3.testcase b/libspatialite/test/sql_stmt_tests/isvalid3.testcase
new file mode 100644
index 0000000..98249aa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isvalid3.testcase
@@ -0,0 +1,7 @@
+isvalid3
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"))
+1
diff --git a/libspatialite/test/sql_stmt_tests/isvalid4.testcase b/libspatialite/test/sql_stmt_tests/isvalid4.testcase
new file mode 100644
index 0000000..39381e1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isvalid4.testcase
@@ -0,0 +1,7 @@
+isvalid4
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
diff --git a/libspatialite/test/sql_stmt_tests/isvalid5.testcase b/libspatialite/test/sql_stmt_tests/isvalid5.testcase
new file mode 100644
index 0000000..7fec46b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isvalid5.testcase
@@ -0,0 +1,7 @@
+isvalid5
+:memory: #use in-memory database
+SELECT IsValid("hello");
+1 # rows (not including the header row)
+1 # columns
+IsValid("hello")
+-1
diff --git a/libspatialite/test/sql_stmt_tests/isvalid6.testcase b/libspatialite/test/sql_stmt_tests/isvalid6.testcase
new file mode 100644
index 0000000..89733ad
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/isvalid6.testcase
@@ -0,0 +1,7 @@
+isvalid6
+:memory: #use in-memory database
+SELECT IsValid(GeomFromText("POLYGON()"));
+1 # rows (not including the header row)
+1 # columns
+IsValid(GeomFromText("POLYGON()"))
+-1
diff --git a/libspatialite/test/sql_stmt_tests/km_m.testcase b/libspatialite/test/sql_stmt_tests/km_m.testcase
new file mode 100644
index 0000000..5f55cb4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/km_m.testcase
@@ -0,0 +1,7 @@
+kilometres to metres
+:memory: #use in-memory database
+SELECT CvtFromKm(6.76);
+1 # rows (not including the header row)
+1 # columns
+CvtFromKm(6.76);
+6760.0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/linefromtext1.testcase b/libspatialite/test/sql_stmt_tests/linefromtext1.testcase
new file mode 100644
index 0000000..58bae86
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linefromtext1.testcase
@@ -0,0 +1,7 @@
+linefromtext1
+:memory: #use in-memory database
+SELECT AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)"), 4)
+LINESTRING(-71.1043 42.3151,-71 42)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/linefromtext2.testcase b/libspatialite/test/sql_stmt_tests/linefromtext2.testcase
new file mode 100644
index 0000000..babbe7b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linefromtext2.testcase
@@ -0,0 +1,7 @@
+linefromtext2
+:memory: #use in-memory database
+SELECT AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(LineFromText("LINESTRING(-71.1043443253471 42.315067601582900, -71 42)", 4326), 4)
+LINESTRING(-71.1043 42.3151,-71 42)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/linemerge1.testcase b/libspatialite/test/sql_stmt_tests/linemerge1.testcase
new file mode 100644
index 0000000..c98c289
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge1.testcase
@@ -0,0 +1,8 @@
+linemerge - bad blob
+:memory: #use in-memory database
+SELECT LineMerge(zeroblob(44))
+1 # rows (not including the header row)
+1 # columns
+LineMerge(zeroblob(44))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge10.testcase b/libspatialite/test/sql_stmt_tests/linemerge10.testcase
new file mode 100644
index 0000000..239f95c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge10.testcase
@@ -0,0 +1,9 @@
+linemerge - weird linestring
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)")))
+LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge2.testcase b/libspatialite/test/sql_stmt_tests/linemerge2.testcase
new file mode 100644
index 0000000..10d4fa6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge2.testcase
@@ -0,0 +1,8 @@
+linemerge - non-blob
+:memory: #use in-memory database
+SELECT LineMerge(44)
+1 # rows (not including the header row)
+1 # columns
+LineMerge(44)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge3.testcase b/libspatialite/test/sql_stmt_tests/linemerge3.testcase
new file mode 100644
index 0000000..5dfc403
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge3.testcase
@@ -0,0 +1,8 @@
+linemerge - single line
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("LINESTRING(0 0, 2 3)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("LINESTRING(0 0, 2 3)")))
+LINESTRING(0 0, 2 3)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge4.testcase b/libspatialite/test/sql_stmt_tests/linemerge4.testcase
new file mode 100644
index 0000000..1c5e1a2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge4.testcase
@@ -0,0 +1,8 @@
+linemerge - single line Z
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("LINESTRINGZ(0 0 1, 2 3 3)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("LINESTRINGZ(0 0 1, 2 3 3)")))
+LINESTRING Z(0 0 1, 2 3 3)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge5.testcase b/libspatialite/test/sql_stmt_tests/linemerge5.testcase
new file mode 100644
index 0000000..9d5907a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge5.testcase
@@ -0,0 +1,8 @@
+linemerge - POINT
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("POINT(3 3)")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("POINT(3 3)")))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge6.testcase b/libspatialite/test/sql_stmt_tests/linemerge6.testcase
new file mode 100644
index 0000000..b941fcf
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge6.testcase
@@ -0,0 +1,8 @@
+linemerge - GEOMETRY COLLECTION
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("GeometryCollection(LINESTRING(0 1, 1 2),LINESTRING(1 2, 3 4))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("GeometryCollection(LINESTRING(0 1, 1 2),LINESTRING(1 2, 3 4))")))
+LINESTRING(0 1, 1 2, 3 4)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge7.testcase b/libspatialite/test/sql_stmt_tests/linemerge7.testcase
new file mode 100644
index 0000000..b1e8d65
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge7.testcase
@@ -0,0 +1,8 @@
+linemerge - GEOMETRY COLLECTION M
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("GeometryCollectionM(LINESTRINGM(0 1 0, 1 2 0),LINESTRINGM(1 2 0, 3 4 0))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("GeometryCollectionM(LINESTRINGM(0 1 0, 1 2 0),LINESTRINGM(1 2 0, 3 4 0))")))
+LINESTRING M(0 1 0, 1 2 0, 3 4 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge8.testcase b/libspatialite/test/sql_stmt_tests/linemerge8.testcase
new file mode 100644
index 0000000..324609e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge8.testcase
@@ -0,0 +1,8 @@
+linemerge - GEOMETRY COLLECTION ZM
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("GeometryCollectionZM(LINESTRINGZM(0 1 1 0, 1 2 1 0),LINESTRINGZM(1 2 1 0, 3 4 1 0))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("GeometryCollectionZM(LINESTRINGZM(0 1 1 0, 1 2 1 0),LINESTRINGZM(1 2 1 0, 3 4 1 0))")))
+LINESTRING ZM(0 1 1 0, 1 2 1 0, 3 4 1 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linemerge9.testcase b/libspatialite/test/sql_stmt_tests/linemerge9.testcase
new file mode 100644
index 0000000..5c61128
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linemerge9.testcase
@@ -0,0 +1,9 @@
+linemerge - toxic blob
+:memory: #use in-memory database
+SELECT AsText(LineMerge(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(LineMerge(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")))
+(NULL)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesfromrings1.testcase b/libspatialite/test/sql_stmt_tests/linesfromrings1.testcase
new file mode 100644
index 0000000..79f55ac
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesfromrings1.testcase
@@ -0,0 +1,8 @@
+LinesFromRings - Simple polygon, no multi
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 0))
+LINESTRING(0 0, 1 1, 0 2, -1 1, 0 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesfromrings2.testcase b/libspatialite/test/sql_stmt_tests/linesfromrings2.testcase
new file mode 100644
index 0000000..8c9c625
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesfromrings2.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - Simple polygon, default
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))")))
+MULTILINESTRING((0 0, 1 1, 0 2, -1 1, 0 0))
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesfromrings3.testcase b/libspatialite/test/sql_stmt_tests/linesfromrings3.testcase
new file mode 100644
index 0000000..b9f8899
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesfromrings3.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - Simple polygon, explicit multi
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), 1))
+MULTILINESTRING((0 0, 1 1, 0 2, -1 1, 0 0))
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesfromrings4.testcase b/libspatialite/test/sql_stmt_tests/linesfromrings4.testcase
new file mode 100644
index 0000000..9717319
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesfromrings4.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - bad blob
+:memory: #use in-memory database
+SELECT LinesFromRings(zeroblob(4), 1);
+1 # rows (not including the header row)
+1 # columns
+LinesFromRings(zeroblob(4), 1)
+(NULL)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesfromrings5.testcase b/libspatialite/test/sql_stmt_tests/linesfromrings5.testcase
new file mode 100644
index 0000000..e93f057
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesfromrings5.testcase
@@ -0,0 +1,9 @@
+LinesFromRings - text input
+:memory: #use in-memory database
+SELECT LinesFromRings("hello", 1);
+1 # rows (not including the header row)
+1 # columns
+LinesFromRings("hello", 1)
+(NULL)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesfromrings6.testcase b/libspatialite/test/sql_stmt_tests/linesfromrings6.testcase
new file mode 100644
index 0000000..624debb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesfromrings6.testcase
@@ -0,0 +1,8 @@
+LinesFromRings - Simple polygon, non-int select
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), "hello"));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))"), "hello"))
+MULTILINESTRING((0 0, 1 1, 0 2, -1 1, 0 0))
+
diff --git a/libspatialite/test/sql_stmt_tests/linesfromrings7.testcase b/libspatialite/test/sql_stmt_tests/linesfromrings7.testcase
new file mode 100644
index 0000000..e46255e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesfromrings7.testcase
@@ -0,0 +1,8 @@
+LinesFromRings - Toxic polygon
+:memory: #use in-memory database
+SELECT AsText(LinesFromRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(LinesFromRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1))
+MULTILINESTRING((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring1.testcase b/libspatialite/test/sql_stmt_tests/linesubstring1.testcase
new file mode 100644
index 0000000..cd3aecb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring1.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 10, 10 0 10)"), 0, 0.4))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 10, 10 0 10)"), 0, 0.4))
+LINESTRING Z(0 0 10, 4 0 10)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring10.testcase b/libspatialite/test/sql_stmt_tests/linesubstring10.testcase
new file mode 100644
index 0000000..089b170
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring10.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - line
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 1 2))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 1 2))"), 0.2, 0.6))
+LINESTRING(0.2 0.4, 0.6 1.2)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring11.testcase b/libspatialite/test/sql_stmt_tests/linesubstring11.testcase
new file mode 100644
index 0000000..87ace1e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring11.testcase
@@ -0,0 +1,8 @@
+linesubstring - bad blob
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(zeroblob(10), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(zeroblob(10), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring12.testcase b/libspatialite/test/sql_stmt_tests/linesubstring12.testcase
new file mode 100644
index 0000000..fc70b13
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring12.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - point
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(POINT(1 2))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(POINT(1 2))"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring13.testcase b/libspatialite/test/sql_stmt_tests/linesubstring13.testcase
new file mode 100644
index 0000000..2f70ce4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring13.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - polygon
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring14.testcase b/libspatialite/test/sql_stmt_tests/linesubstring14.testcase
new file mode 100644
index 0000000..161d41d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring14.testcase
@@ -0,0 +1,8 @@
+linesubstring - geometry collection - polygon and linestring
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 10 0),POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("GeometryCollection(LINESTRING(0 0, 10 0),POLYGON((0 0, 1 0, 1 2, 0 2, 0 0)))"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring15.testcase b/libspatialite/test/sql_stmt_tests/linesubstring15.testcase
new file mode 100644
index 0000000..bd030c5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring15.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic vary Z
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 0, 10 0 5)"), 0.2, 0.7))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZ(0 0 0, 10 0 5)"), 0.2, 0.7))
+LINESTRING Z(2 0 1, 7 0 3.5)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring16.testcase b/libspatialite/test/sql_stmt_tests/linesubstring16.testcase
new file mode 100644
index 0000000..8b62cb7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring16.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic vary M
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 5)"), 0.2, 0.7))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 5)"), 0.2, 0.7))
+LINESTRING M(2 0 0, 7 0 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring17.testcase b/libspatialite/test/sql_stmt_tests/linesubstring17.testcase
new file mode 100644
index 0000000..ff58bca
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring17.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic vary ZM
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 10 5, 10 0 5 0)"), 0.2, 0.7))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 10 5, 10 0 5 0)"), 0.2, 0.7))
+LINESTRING ZM(2 0 9 0, 7 0 6.5 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring18.testcase b/libspatialite/test/sql_stmt_tests/linesubstring18.testcase
new file mode 100644
index 0000000..d2b5656
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring18.testcase
@@ -0,0 +1,8 @@
+linesubstring - ignoring second segment
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0, 0.2))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0, 0.2))
+LINESTRING(0 0, 4 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring19.testcase b/libspatialite/test/sql_stmt_tests/linesubstring19.testcase
new file mode 100644
index 0000000..abcdb9d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring19.testcase
@@ -0,0 +1,8 @@
+linesubstring - using second segment
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.6, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.6, 0.8))
+LINESTRING(10 2, 10 6)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring2.testcase b/libspatialite/test/sql_stmt_tests/linesubstring2.testcase
new file mode 100644
index 0000000..14dfe09
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring2.testcase
@@ -0,0 +1,8 @@
+linesubstring - basic
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0.2, 0.6))
+LINESTRING(2 0, 6 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring20.testcase b/libspatialite/test/sql_stmt_tests/linesubstring20.testcase
new file mode 100644
index 0000000..02d0307
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring20.testcase
@@ -0,0 +1,8 @@
+linesubstring - using both segments
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.2, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0, 10 10)"), 0.2, 0.8))
+LINESTRING(4 0, 10 0, 10 6)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring21.testcase b/libspatialite/test/sql_stmt_tests/linesubstring21.testcase
new file mode 100644
index 0000000..ac758c6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring21.testcase
@@ -0,0 +1,8 @@
+linesubstring - using both segments M
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 0, 10 10 0)"), 0.2, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGM(0 0 0, 10 0 0, 10 10 0)"), 0.2, 0.8))
+LINESTRING M(4 0 0, 10 0 0, 10 6 0) # yeah, it would have been m = 0.0 anyway.
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring22.testcase b/libspatialite/test/sql_stmt_tests/linesubstring22.testcase
new file mode 100644
index 0000000..fa22b98
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring22.testcase
@@ -0,0 +1,8 @@
+linesubstring - using both segments ZM
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0.2, 0.8))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0.2, 0.8))
+LINESTRING ZM(4 0 1 0, 10 0 1 0, 10 6 1 0) # yeah, it would have been m = 0.0 anyway.
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring23.testcase b/libspatialite/test/sql_stmt_tests/linesubstring23.testcase
new file mode 100644
index 0000000..fb25cee
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring23.testcase
@@ -0,0 +1,8 @@
+linesubstring - using no segments ZM
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 10 0 1 0, 10 10 1 0)"), 0, 0))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring24.testcase b/libspatialite/test/sql_stmt_tests/linesubstring24.testcase
new file mode 100644
index 0000000..3c89399
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring24.testcase
@@ -0,0 +1,8 @@
+linesubstring - zero length
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 0 0 2 2, 0 0 3 4)"), 0, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRINGZM(0 0 1 0, 0 0 2 2, 0 0 3 4)"), 0, 1))
+LINESTRING ZM(0 0 1 0, 0 0 1 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring25.testcase b/libspatialite/test/sql_stmt_tests/linesubstring25.testcase
new file mode 100644
index 0000000..6b84643
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring25.testcase
@@ -0,0 +1,8 @@
+linesubstring - zero length 2d
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(1 1, 1 1)"), 0, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(1 1, 1 1)"), 0, 1))
+LINESTRING(1 1, 1 1)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring3.testcase b/libspatialite/test/sql_stmt_tests/linesubstring3.testcase
new file mode 100644
index 0000000..fb12e0c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring3.testcase
@@ -0,0 +1,8 @@
+linesubstring - int limits
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, 1))
+LINESTRING(0 0, 10 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring4.testcase b/libspatialite/test/sql_stmt_tests/linesubstring4.testcase
new file mode 100644
index 0000000..8b854de
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring4.testcase
@@ -0,0 +1,9 @@
+linesubstring - out-of-range limits
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), -1, 2))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), -1, 2))
+LINESTRING(0 0, 10 0)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring5.testcase b/libspatialite/test/sql_stmt_tests/linesubstring5.testcase
new file mode 100644
index 0000000..e829fbf
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring5.testcase
@@ -0,0 +1,8 @@
+linesubstring - bad geom
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("POINT(0 0"), 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("POINT(0 0"), 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring6.testcase b/libspatialite/test/sql_stmt_tests/linesubstring6.testcase
new file mode 100644
index 0000000..5d9a5a3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring6.testcase
@@ -0,0 +1,8 @@
+linesubstring - bad arg
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(null, 0.2, 0.6))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(null, 0.2, 0.6))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring7.testcase b/libspatialite/test/sql_stmt_tests/linesubstring7.testcase
new file mode 100644
index 0000000..183bd42
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring7.testcase
@@ -0,0 +1,9 @@
+linesubstring - out-of-range limits 2
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 2, -0.5))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 2, -0.5))
+(NULL)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring8.testcase b/libspatialite/test/sql_stmt_tests/linesubstring8.testcase
new file mode 100644
index 0000000..81f7840
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring8.testcase
@@ -0,0 +1,9 @@
+linesubstring - wrong type of limits 1
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), "hello", null))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), "hello", null))
+(NULL)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/linesubstring9.testcase b/libspatialite/test/sql_stmt_tests/linesubstring9.testcase
new file mode 100644
index 0000000..d113c82
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/linesubstring9.testcase
@@ -0,0 +1,9 @@
+linesubstring - wrong type of limits 2
+:memory: #use in-memory database
+SELECT AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, null))
+1 # rows (not including the header row)
+1 # columns
+AsText(Line_Substring(GeomFromText("LINESTRING(0 0, 10 0)"), 0, null))
+(NULL)
+
+
diff --git a/libspatialite/test/sql_stmt_tests/link_m.testcase b/libspatialite/test/sql_stmt_tests/link_m.testcase
new file mode 100644
index 0000000..299a881
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/link_m.testcase
@@ -0,0 +1,7 @@
+links to metres
+:memory: #use in-memory database
+SELECT CvtFromLink(4971);
+1 # rows (not including the header row)
+1 # columns
+CvtFromLink(4971)
+1000:4
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/log10-0.0.testcase b/libspatialite/test/sql_stmt_tests/log10-0.0.testcase
new file mode 100644
index 0000000..e80eb3d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log10-0.0.testcase
@@ -0,0 +1,7 @@
+log10(0.0)
+:memory: #use in-memory database
+SELECT log10(0.0);
+1 # rows (not including the header row)
+1 # columns
+log10(0.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/log10-100.0.testcase b/libspatialite/test/sql_stmt_tests/log10-100.0.testcase
new file mode 100644
index 0000000..b01b50c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log10-100.0.testcase
@@ -0,0 +1,7 @@
+log10(100.0)
+:memory: #use in-memory database
+SELECT log10(100.0);
+1 # rows (not including the header row)
+1 # columns
+log10(100.0) # header
+2.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/log10-100.testcase b/libspatialite/test/sql_stmt_tests/log10-100.testcase
new file mode 100644
index 0000000..703abb0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log10-100.testcase
@@ -0,0 +1,7 @@
+log10(100)
+:memory: #use in-memory database
+SELECT log10(100);
+1 # rows (not including the header row)
+1 # columns
+log10(100) # header
+2.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/log10-text.testcase b/libspatialite/test/sql_stmt_tests/log10-text.testcase
new file mode 100644
index 0000000..f437a08
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log10-text.testcase
@@ -0,0 +1,7 @@
+log10(text)
+:memory: #use in-memory database
+SELECT log10("text");
+1 # rows (not including the header row)
+1 # columns
+log10("text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/log2-0.0.testcase b/libspatialite/test/sql_stmt_tests/log2-0.0.testcase
new file mode 100644
index 0000000..84f4d57
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log2-0.0.testcase
@@ -0,0 +1,7 @@
+log2(0.0)
+:memory: #use in-memory database
+SELECT log2(0.0);
+1 # rows (not including the header row)
+1 # columns
+log2(0.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/log2-0.testcase b/libspatialite/test/sql_stmt_tests/log2-0.testcase
new file mode 100644
index 0000000..d063948
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log2-0.testcase
@@ -0,0 +1,7 @@
+log2(0)
+:memory: #use in-memory database
+SELECT log2(0);
+1 # rows (not including the header row)
+1 # columns
+log2(0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/log2-4.0.testcase b/libspatialite/test/sql_stmt_tests/log2-4.0.testcase
new file mode 100644
index 0000000..c4e9e1b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log2-4.0.testcase
@@ -0,0 +1,7 @@
+log2(4.0)
+:memory: #use in-memory database
+SELECT log2(4.0);
+1 # rows (not including the header row)
+1 # columns
+log2(4.0) # header
+2.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/log2-4.testcase b/libspatialite/test/sql_stmt_tests/log2-4.testcase
new file mode 100644
index 0000000..e2c82b0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log2-4.testcase
@@ -0,0 +1,7 @@
+log2(4)
+:memory: #use in-memory database
+SELECT log2(4);
+1 # rows (not including the header row)
+1 # columns
+log2(4) # header
+2.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/log2-text.testcase b/libspatialite/test/sql_stmt_tests/log2-text.testcase
new file mode 100644
index 0000000..fb342de
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/log2-text.testcase
@@ -0,0 +1,7 @@
+log2(text)
+:memory: #use in-memory database
+SELECT log2("text");
+1 # rows (not including the header row)
+1 # columns
+log2("text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn-text.testcase b/libspatialite/test/sql_stmt_tests/logn-text.testcase
new file mode 100644
index 0000000..8d7382e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn-text.testcase
@@ -0,0 +1,7 @@
+logn(text)
+:memory: #use in-memory database
+SELECT log("text");
+1 # rows (not including the header row)
+1 # columns
+log("text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn0.testcase b/libspatialite/test/sql_stmt_tests/logn0.testcase
new file mode 100644
index 0000000..77256ae
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn0.testcase
@@ -0,0 +1,7 @@
+log(0)
+:memory: #use in-memory database
+SELECT log(0);
+1 # rows (not including the header row)
+1 # columns
+log(0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn00.testcase b/libspatialite/test/sql_stmt_tests/logn00.testcase
new file mode 100644
index 0000000..037fc80
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn00.testcase
@@ -0,0 +1,7 @@
+log(0.0)
+:memory: #use in-memory database
+SELECT log(0.0);
+1 # rows (not including the header row)
+1 # columns
+log(0.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn1.testcase b/libspatialite/test/sql_stmt_tests/logn1.testcase
new file mode 100644
index 0000000..f01e8bd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn1.testcase
@@ -0,0 +1,7 @@
+logn(1)
+:memory: #use in-memory database
+SELECT log(1);
+1 # rows (not including the header row)
+1 # columns
+log(1) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/logn10.testcase b/libspatialite/test/sql_stmt_tests/logn10.testcase
new file mode 100644
index 0000000..805e7ec
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn10.testcase
@@ -0,0 +1,7 @@
+logn(1.0)
+:memory: #use in-memory database
+SELECT log(1.0);
+1 # rows (not including the header row)
+1 # columns
+log(1.0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-01.testcase b/libspatialite/test/sql_stmt_tests/logn2-01.testcase
new file mode 100644
index 0000000..944c56a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-01.testcase
@@ -0,0 +1,7 @@
+logn(-0.1, 2)
+:memory: #use in-memory database
+SELECT log(-0.1, 2);
+1 # rows (not including the header row)
+1 # columns
+log(-0.1, 2) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-02.testcase b/libspatialite/test/sql_stmt_tests/logn2-02.testcase
new file mode 100644
index 0000000..5906ab6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-02.testcase
@@ -0,0 +1,7 @@
+logn(1.0, 1.0)
+:memory: #use in-memory database
+SELECT log(1.0, 1.0);
+1 # rows (not including the header row)
+1 # columns
+log(1.0, 1.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-2.2.testcase b/libspatialite/test/sql_stmt_tests/logn2-2.2.testcase
new file mode 100644
index 0000000..55f3014
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-2.2.testcase
@@ -0,0 +1,7 @@
+logn(2.0, 2.0)
+:memory: #use in-memory database
+SELECT log(2.0, 2.0);
+1 # rows (not including the header row)
+1 # columns
+log(2.0, 2.0) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-4.2.testcase b/libspatialite/test/sql_stmt_tests/logn2-4.2.testcase
new file mode 100644
index 0000000..6b81202
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-4.2.testcase
@@ -0,0 +1,7 @@
+logn(4.0, 2.0)
+:memory: #use in-memory database
+SELECT log(4.0, 2.0);
+1 # rows (not including the header row)
+1 # columns
+log(4.0, 2.0) # header
+2.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-4.2int.testcase b/libspatialite/test/sql_stmt_tests/logn2-4.2int.testcase
new file mode 100644
index 0000000..1c13a40
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-4.2int.testcase
@@ -0,0 +1,7 @@
+logn(4, 2)
+:memory: #use in-memory database
+SELECT log(4, 2);
+1 # rows (not including the header row)
+1 # columns
+log(4, 2) # header
+2.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-text.testcase b/libspatialite/test/sql_stmt_tests/logn2-text.testcase
new file mode 100644
index 0000000..27420d9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-text.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log("text", 0.0);
+1 # rows (not including the header row)
+1 # columns
+log("text", 0.0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-text2.testcase b/libspatialite/test/sql_stmt_tests/logn2-text2.testcase
new file mode 100644
index 0000000..c9b7d21
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-text2.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log("text", 0);
+1 # rows (not including the header row)
+1 # columns
+log("text", 0) # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-text3.testcase b/libspatialite/test/sql_stmt_tests/logn2-text3.testcase
new file mode 100644
index 0000000..4576048
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-text3.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log(1, "text");
+1 # rows (not including the header row)
+1 # columns
+log(1, "text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/logn2-text4.testcase b/libspatialite/test/sql_stmt_tests/logn2-text4.testcase
new file mode 100644
index 0000000..b4b102b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/logn2-text4.testcase
@@ -0,0 +1,7 @@
+logn(text, double)
+:memory: #use in-memory database
+SELECT log(1.0, "text");
+1 # rows (not including the header row)
+1 # columns
+log(1.0, "text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/m_ch.testcase b/libspatialite/test/sql_stmt_tests/m_ch.testcase
new file mode 100644
index 0000000..39a2110
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_ch.testcase
@@ -0,0 +1,7 @@
+metres to chains
+:memory: #use in-memory database
+SELECT CvtToCh(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToCh(1000)
+49.7096954:9
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_cm.testcase b/libspatialite/test/sql_stmt_tests/m_cm.testcase
new file mode 100644
index 0000000..fe3d278
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_cm.testcase
@@ -0,0 +1,7 @@
+metres to centimetres
+:memory: #use in-memory database
+SELECT CvtToCm(21.00);
+1 # rows (not including the header row)
+1 # columns
+CvtToCm(21.00);
+2100.0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_dm.testcase b/libspatialite/test/sql_stmt_tests/m_dm.testcase
new file mode 100644
index 0000000..c4691e1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_dm.testcase
@@ -0,0 +1,7 @@
+metres to decimetres
+:memory: #use in-memory database
+SELECT CvtToDm(21.50);
+1 # rows (not including the header row)
+1 # columns
+CvtToDm(21.50);
+215.0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_fath.testcase b/libspatialite/test/sql_stmt_tests/m_fath.testcase
new file mode 100644
index 0000000..22ad445
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_fath.testcase
@@ -0,0 +1,7 @@
+metres to fathoms
+:memory: #use in-memory database
+SELECT CvtToFath(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToFath(1000)
+546.806649:10
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_ft-text.testcase b/libspatialite/test/sql_stmt_tests/m_ft-text.testcase
new file mode 100644
index 0000000..8bbd319
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_ft-text.testcase
@@ -0,0 +1,7 @@
+metres to feet text
+:memory: #use in-memory database
+SELECT CvtToFt("one");
+1 # rows (not including the header row)
+1 # columns
+CvtToFt("one");
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_ft.testcase b/libspatialite/test/sql_stmt_tests/m_ft.testcase
new file mode 100644
index 0000000..7952bc0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_ft.testcase
@@ -0,0 +1,7 @@
+metres to feet
+:memory: #use in-memory database
+SELECT CvtToFt(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToFt(1.0);
+3.28083989:10
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_in.testcase b/libspatialite/test/sql_stmt_tests/m_in.testcase
new file mode 100644
index 0000000..1e185c1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_in.testcase
@@ -0,0 +1,7 @@
+metres to inches
+:memory: #use in-memory database
+SELECT CvtToIn(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToIn(1.0);
+39.37007:8
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_in_us.testcase b/libspatialite/test/sql_stmt_tests/m_in_us.testcase
new file mode 100644
index 0000000..c8c2e83
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_in_us.testcase
@@ -0,0 +1,7 @@
+metres to US inches
+:memory: #use in-memory database
+SELECT CvtToUsIn(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsIn(1.0);
+39.37:5
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_ind_ch.testcase b/libspatialite/test/sql_stmt_tests/m_ind_ch.testcase
new file mode 100644
index 0000000..e329e82
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_ind_ch.testcase
@@ -0,0 +1,7 @@
+metres to Indian chains
+:memory: #use in-memory database
+SELECT CvtToIndCh(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToIndCh(1000)
+49.70995:8
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_ind_ft.testcase b/libspatialite/test/sql_stmt_tests/m_ind_ft.testcase
new file mode 100644
index 0000000..f907575
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_ind_ft.testcase
@@ -0,0 +1,7 @@
+metres to Indian feet
+:memory: #use in-memory database
+SELECT CvtToIndFt(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToIndFt(1.0);
+3.2808570:9
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_ind_yd.testcase b/libspatialite/test/sql_stmt_tests/m_ind_yd.testcase
new file mode 100644
index 0000000..01ab952
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_ind_yd.testcase
@@ -0,0 +1,7 @@
+metres to Indian yards
+:memory: #use in-memory database
+SELECT CvtToIndYd(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToIndYd(1.0);
+1.0936190:8
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_km.testcase b/libspatialite/test/sql_stmt_tests/m_km.testcase
new file mode 100644
index 0000000..216b857
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_km.testcase
@@ -0,0 +1,7 @@
+metres to kilometres
+:memory: #use in-memory database
+SELECT CvtToKm(2100);
+1 # rows (not including the header row)
+1 # columns
+CvtToKm(2100);
+2.1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_ln.testcase b/libspatialite/test/sql_stmt_tests/m_ln.testcase
new file mode 100644
index 0000000..1977183
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_ln.testcase
@@ -0,0 +1,7 @@
+metres to links
+:memory: #use in-memory database
+SELECT CvtToLink(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToLink(1000)
+4970.96954:9
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_mi.testcase b/libspatialite/test/sql_stmt_tests/m_mi.testcase
new file mode 100644
index 0000000..5210469
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_mi.testcase
@@ -0,0 +1,7 @@
+metres to miles
+:memory: #use in-memory database
+SELECT CvtToMi(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToMi(1000);
+0.6213:6
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_mm.testcase b/libspatialite/test/sql_stmt_tests/m_mm.testcase
new file mode 100644
index 0000000..3b4e456
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_mm.testcase
@@ -0,0 +1,7 @@
+metres to millimetres
+:memory: #use in-memory database
+SELECT CvtToMm(2.51);
+1 # rows (not including the header row)
+1 # columns
+CvtToMm(2.51);
+2510.0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_nm.testcase b/libspatialite/test/sql_stmt_tests/m_nm.testcase
new file mode 100644
index 0000000..8fa4223
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_nm.testcase
@@ -0,0 +1,7 @@
+metres to nautical miles
+:memory: #use in-memory database
+SELECT CvtToKmi(2000.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToKmi(2000.0)
+1.07991361:7
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_us_ch.testcase b/libspatialite/test/sql_stmt_tests/m_us_ch.testcase
new file mode 100644
index 0000000..591e34f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_us_ch.testcase
@@ -0,0 +1,7 @@
+metres to US chains
+:memory: #use in-memory database
+SELECT CvtToUsCh(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsCh(1000)
+49.709:6
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_us_ft.testcase b/libspatialite/test/sql_stmt_tests/m_us_ft.testcase
new file mode 100644
index 0000000..48e872a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_us_ft.testcase
@@ -0,0 +1,7 @@
+metres to US feet
+:memory: #use in-memory database
+SELECT CvtToUsFt(100.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsFt(100.0);
+328.08:6
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_usmi.testcase b/libspatialite/test/sql_stmt_tests/m_usmi.testcase
new file mode 100644
index 0000000..82d05b0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_usmi.testcase
@@ -0,0 +1,7 @@
+metres to US miles
+:memory: #use in-memory database
+SELECT CvtToUsMi(1000);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsMi(1000);
+0.6213:6
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_yd.testcase b/libspatialite/test/sql_stmt_tests/m_yd.testcase
new file mode 100644
index 0000000..c791203
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_yd.testcase
@@ -0,0 +1,7 @@
+metres to yards
+:memory: #use in-memory database
+SELECT CvtToYd(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToYd(1.0);
+1.0936133:8
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/m_yd_us.testcase b/libspatialite/test/sql_stmt_tests/m_yd_us.testcase
new file mode 100644
index 0000000..97c953a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/m_yd_us.testcase
@@ -0,0 +1,7 @@
+metres to US yards
+:memory: #use in-memory database
+SELECT CvtToUsYd(100.0);
+1 # rows (not including the header row)
+1 # columns
+CvtToUsYd(100.0);
+109.36:6
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/makeline.testcase b/libspatialite/test/sql_stmt_tests/makeline.testcase
new file mode 100644
index 0000000..33954a6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline.testcase
@@ -0,0 +1,8 @@
+makeline1
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT(1 2)")))
+LINESTRING(0 0, 1 2)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline10.testcase b/libspatialite/test/sql_stmt_tests/makeline10.testcase
new file mode 100644
index 0000000..63938ae
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline10.testcase
@@ -0,0 +1,8 @@
+makeline10
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTM(0 0 38.5)"), GeomFromText("POINTM(1 2 38.64)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTM(0 0 38.5)"), GeomFromText("POINTM(1 2 38.64)")))
+LINESTRING M(0 0 38.5, 1 2 38.64)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline11.testcase b/libspatialite/test/sql_stmt_tests/makeline11.testcase
new file mode 100644
index 0000000..4b499fd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline11.testcase
@@ -0,0 +1,8 @@
+makeline11
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZM(0 0 1.3 38.5)"), GeomFromText("POINTM(1 2 38.64)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZM(0 0 1.3 38.5)"), GeomFromText("POINTM(1 2 38.64)")))
+LINESTRING ZM(0 0 1.3 38.5, 1 2 0 38.64)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline12.testcase b/libspatialite/test/sql_stmt_tests/makeline12.testcase
new file mode 100644
index 0000000..e638f5f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline12.testcase
@@ -0,0 +1,8 @@
+makeline12
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTM(1 2 38.64)"), GeomFromText("POINTZM(0 0 1.3 38.5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTM(1 2 38.64)"), GeomFromText("POINTZM(0 0 1.3 38.5)")))
+LINESTRING ZM(1 2 0 38.64, 0 0 1.3 38.5)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline13.testcase b/libspatialite/test/sql_stmt_tests/makeline13.testcase
new file mode 100644
index 0000000..a725410
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline13.testcase
@@ -0,0 +1,8 @@
+makeline13
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(1 2)"), GeomFromText("POINTZM(0 0 1.3 38.5)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(1 2)"), GeomFromText("POINTZM(0 0 1.3 38.5)")))
+LINESTRING ZM(1 2 0 0, 0 0 1.3 38.5)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline14.testcase b/libspatialite/test/sql_stmt_tests/makeline14.testcase
new file mode 100644
index 0000000..ed5e6e7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline14.testcase
@@ -0,0 +1,8 @@
+makeline14
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT M(1 2 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINT M(1 2 0)")))
+LINESTRING M(0 0 0, 1 2 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline15.testcase b/libspatialite/test/sql_stmt_tests/makeline15.testcase
new file mode 100644
index 0000000..1180ec5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline15.testcase
@@ -0,0 +1,8 @@
+makeline15
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZ(0 0 4)"), GeomFromText("POINTM(1 2 0.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZ(0 0 4)"), GeomFromText("POINTM(1 2 0.4)")))
+LINESTRING ZM(0 0 4 0, 1 2 0 0.4)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline16.testcase b/libspatialite/test/sql_stmt_tests/makeline16.testcase
new file mode 100644
index 0000000..c80fc19
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline16.testcase
@@ -0,0 +1,8 @@
+makeline16
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTM(0 0 4.1)"), GeomFromText("POINTZ(1 2 2.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTM(0 0 4.1)"), GeomFromText("POINTZ(1 2 2.4)")))
+LINESTRING ZM(0 0 0 4.1, 1 2 2.4 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline17.testcase b/libspatialite/test/sql_stmt_tests/makeline17.testcase
new file mode 100644
index 0000000..ff1d299
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline17.testcase
@@ -0,0 +1,8 @@
+makeline17
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTZ(1 2 2.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTZ(1 2 2.4)")))
+LINESTRING Z(0 0 0, 1 2 2.4)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline18.testcase b/libspatialite/test/sql_stmt_tests/makeline18.testcase
new file mode 100644
index 0000000..20eac24
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline18.testcase
@@ -0,0 +1,8 @@
+makeline18
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTM(1 2 12.4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), GeomFromText("POINTM(1 2 12.4)")))
+LINESTRING M(0 0 0, 1 2 12.4)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline2.testcase b/libspatialite/test/sql_stmt_tests/makeline2.testcase
new file mode 100644
index 0000000..5bb6a5e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline2.testcase
@@ -0,0 +1,8 @@
+makeline2
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)")))
+LINESTRING(0 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline3.testcase b/libspatialite/test/sql_stmt_tests/makeline3.testcase
new file mode 100644
index 0000000..1f3637a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline3.testcase
@@ -0,0 +1,8 @@
+makeline3
+:memory: #use in-memory database
+SELECT MakeLine("text");
+1 # rows (not including the header row)
+1 # columns
+MakeLine("text")
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline4.testcase b/libspatialite/test/sql_stmt_tests/makeline4.testcase
new file mode 100644
index 0000000..5e670fd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline4.testcase
@@ -0,0 +1,8 @@
+makeline4
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINT(0 0)"), zeroblob(10)));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINT(0 0)"), zeroblob(10)))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline5.testcase b/libspatialite/test/sql_stmt_tests/makeline5.testcase
new file mode 100644
index 0000000..139abbb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline5.testcase
@@ -0,0 +1,8 @@
+makeline5
+:memory: #use in-memory database
+SELECT AsText(MakeLine(zeroblob(10), GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(zeroblob(10), GeomFromText("POINT(1 2)")))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline6.testcase b/libspatialite/test/sql_stmt_tests/makeline6.testcase
new file mode 100644
index 0000000..c514a44
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline6.testcase
@@ -0,0 +1,8 @@
+makeline6
+:memory: #use in-memory database
+SELECT MakeLine("hello", GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MakeLine("hello", GeomFromText("POINT(1 2)"))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline7.testcase b/libspatialite/test/sql_stmt_tests/makeline7.testcase
new file mode 100644
index 0000000..b05115b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline7.testcase
@@ -0,0 +1,8 @@
+makeline7
+:memory: #use in-memory database
+SELECT MakeLine(GeomFromText("POINT(0 0)"), "world");
+1 # rows (not including the header row)
+1 # columns
+MakeLine(GeomFromText("POINT(0 0)"), "world")
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline8.testcase b/libspatialite/test/sql_stmt_tests/makeline8.testcase
new file mode 100644
index 0000000..7266120
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline8.testcase
@@ -0,0 +1,8 @@
+makeline8
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZ(0 0 0)"), GeomFromText("POINTZ(1 2 0.2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZ(0 0 0)"), GeomFromText("POINTZ(1 2 0.2)")))
+LINESTRING Z(0 0 0, 1 2 0.2)
+
diff --git a/libspatialite/test/sql_stmt_tests/makeline9.testcase b/libspatialite/test/sql_stmt_tests/makeline9.testcase
new file mode 100644
index 0000000..499e8d5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makeline9.testcase
@@ -0,0 +1,8 @@
+makeline9
+:memory: #use in-memory database
+SELECT AsText(MakeLine(GeomFromText("POINTZ(0 0 0.2)"), GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakeLine(GeomFromText("POINTZ(0 0 0.2)"), GeomFromText("POINT(1 2)")))
+LINESTRING Z(0 0 0.2, 1 2 0)
+
diff --git a/libspatialite/test/sql_stmt_tests/makepoint-null1.testcase b/libspatialite/test/sql_stmt_tests/makepoint-null1.testcase
new file mode 100644
index 0000000..28cd977
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint-null1.testcase
@@ -0,0 +1,7 @@
+makepoint-null1
+:memory: #use in-memory database
+SELECT AsText(MakePoint("hello", 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint("hello", 42.3150676015829))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint-null2.testcase b/libspatialite/test/sql_stmt_tests/makepoint-null2.testcase
new file mode 100644
index 0000000..52fcc14
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint-null2.testcase
@@ -0,0 +1,7 @@
+makepoint-null2
+:memory: #use in-memory database
+SELECT AsText(MakePoint(26.0, "world"));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(26.0, "world"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint-null3.testcase b/libspatialite/test/sql_stmt_tests/makepoint-null3.testcase
new file mode 100644
index 0000000..d2d2081
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint-null3.testcase
@@ -0,0 +1,7 @@
+makepoint-null3
+:memory: #use in-memory database
+SELECT AsText(MakePoint(26.0, "world", 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(26.0, "world", 4326))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint-null4.testcase b/libspatialite/test/sql_stmt_tests/makepoint-null4.testcase
new file mode 100644
index 0000000..e314a4b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint-null4.testcase
@@ -0,0 +1,7 @@
+makepoint-null4
+:memory: #use in-memory database
+SELECT AsText(MakePoint("hello", 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint("hello", 42.3150676015829, 4326))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint-null5.testcase b/libspatialite/test/sql_stmt_tests/makepoint-null5.testcase
new file mode 100644
index 0000000..4f15494
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint-null5.testcase
@@ -0,0 +1,7 @@
+makepoint-null5
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-26.0, 42.3150676015829, 4326.0));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-26.0, 42.3150676015829, 4326.0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint-null6.testcase b/libspatialite/test/sql_stmt_tests/makepoint-null6.testcase
new file mode 100644
index 0000000..84399e5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint-null6.testcase
@@ -0,0 +1,7 @@
+makepoint-null5
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-26.0, 42.3150676015829, "WGS84"));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-26.0, 42.3150676015829, "WGS84"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint-null7.testcase b/libspatialite/test/sql_stmt_tests/makepoint-null7.testcase
new file mode 100644
index 0000000..4330591
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint-null7.testcase
@@ -0,0 +1,7 @@
+makepoint-null7
+:memory: #use in-memory database
+SELECT AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4.1);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4.1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint1.testcase b/libspatialite/test/sql_stmt_tests/makepoint1.testcase
new file mode 100644
index 0000000..f1edced
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint1.testcase
@@ -0,0 +1,7 @@
+makepoint1
+:memory: #use in-memory database
+SELECT AsText(MakePoint(136, -35));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(136, -35))
+POINT(136 -35)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint2.testcase b/libspatialite/test/sql_stmt_tests/makepoint2.testcase
new file mode 100644
index 0000000..c21733b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint2.testcase
@@ -0,0 +1,7 @@
+makepoint2
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+POINT(-71.104344 42.315068)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint3.testcase b/libspatialite/test/sql_stmt_tests/makepoint3.testcase
new file mode 100644
index 0000000..f798e40
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint3.testcase
@@ -0,0 +1,7 @@
+makepoint3
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-71.1043443253471, 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-71.1043443253471, 42.3150676015829))
+POINT(-71.104344 42.315068)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint4.testcase b/libspatialite/test/sql_stmt_tests/makepoint4.testcase
new file mode 100644
index 0000000..8092f94
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint4.testcase
@@ -0,0 +1,7 @@
+makepoint4
+:memory: #use in-memory database
+SELECT AsText(MakePoint(-71, 42, 4326));
+1 # rows (not including the header row)
+1 # columns
+AsText(MakePoint(-71, 42, 4326))
+POINT(-71 42)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint5.testcase b/libspatialite/test/sql_stmt_tests/makepoint5.testcase
new file mode 100644
index 0000000..4d7a97d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint5.testcase
@@ -0,0 +1,7 @@
+makepoint5
+:memory: #use in-memory database
+SELECT AsWkt(MakePoint(-71.1043443253471, 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MakePoint(-71.1043443253471, 42.3150676015829))
+POINT(-71.1043443253471 42.315067601582903)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint6.testcase b/libspatialite/test/sql_stmt_tests/makepoint6.testcase
new file mode 100644
index 0000000..64d0e70
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint6.testcase
@@ -0,0 +1,7 @@
+makepoint6
+:memory: #use in-memory database
+SELECT AsEWkt(MakePoint(-71.1043443253471, 42.3150676015829));
+1 # rows (not including the header row)
+1 # columns
+AsEWkt(MakePoint(-71.1043443253471, 42.3150676015829))
+SRID=-1;POINT(-71.1043443253471 42.315067601582903)
diff --git a/libspatialite/test/sql_stmt_tests/makepoint7.testcase b/libspatialite/test/sql_stmt_tests/makepoint7.testcase
new file mode 100644
index 0000000..91952b6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/makepoint7.testcase
@@ -0,0 +1,7 @@
+makepoint7
+:memory: #use in-memory database
+SELECT AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MakePoint(-71.1043443253471, 42.3150676015829), 4)
+POINT(-71.1043 42.3151)
diff --git a/libspatialite/test/sql_stmt_tests/mbr1.testcase b/libspatialite/test/sql_stmt_tests/mbr1.testcase
new file mode 100644
index 0000000..dbc8c56
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr1.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + Point
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr10.testcase b/libspatialite/test/sql_stmt_tests/mbr10.testcase
new file mode 100644
index 0000000..7cb0927
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr10.testcase
@@ -0,0 +1,7 @@
+MbrIntersects - Line + Point inside
+:memory: #use in-memory database
+SELECT MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr11.testcase b/libspatialite/test/sql_stmt_tests/mbr11.testcase
new file mode 100644
index 0000000..b456b45
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr11.testcase
@@ -0,0 +1,7 @@
+MbrIntersects - Line + Point outside
+:memory: #use in-memory database
+SELECT MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr12.testcase b/libspatialite/test/sql_stmt_tests/mbr12.testcase
new file mode 100644
index 0000000..bc1f590
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr12.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Point on
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr13.testcase b/libspatialite/test/sql_stmt_tests/mbr13.testcase
new file mode 100644
index 0000000..c08e8de
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr13.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Line
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(1 0, 0 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(1 0, 0 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr14.testcase b/libspatialite/test/sql_stmt_tests/mbr14.testcase
new file mode 100644
index 0000000..1d079a0
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr14.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + same Line
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr15.testcase b/libspatialite/test/sql_stmt_tests/mbr15.testcase
new file mode 100644
index 0000000..c9a884d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr15.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Polygon
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"))
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr16.testcase b/libspatialite/test/sql_stmt_tests/mbr16.testcase
new file mode 100644
index 0000000..988c72c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr16.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Different Polygon
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 -2, 1 -2, 1 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 -2, 1 -2, 1 0, 0 0))"))
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr17.testcase b/libspatialite/test/sql_stmt_tests/mbr17.testcase
new file mode 100644
index 0000000..3b88e6f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr17.testcase
@@ -0,0 +1,7 @@
+MbrEqual - Line + Toxic Polygon
+:memory: #use in-memory database
+SELECT MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+MbrEqual(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr18.testcase b/libspatialite/test/sql_stmt_tests/mbr18.testcase
new file mode 100644
index 0000000..f2ec8e9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr18.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Polygon
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))"))
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr19.testcase b/libspatialite/test/sql_stmt_tests/mbr19.testcase
new file mode 100644
index 0000000..2f24321
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr19.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + same Line
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(0 0, 1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr2.testcase b/libspatialite/test/sql_stmt_tests/mbr2.testcase
new file mode 100644
index 0000000..73cab73
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr2.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + Point 
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr20.testcase b/libspatialite/test/sql_stmt_tests/mbr20.testcase
new file mode 100644
index 0000000..4f0fb64
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr20.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Point outside
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr21.testcase b/libspatialite/test/sql_stmt_tests/mbr21.testcase
new file mode 100644
index 0000000..4f0fb64
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr21.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Point outside
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr22.testcase b/libspatialite/test/sql_stmt_tests/mbr22.testcase
new file mode 100644
index 0000000..9df3579
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr22.testcase
@@ -0,0 +1,7 @@
+MbrOverlaps - Line + Point on
+:memory: #use in-memory database
+SELECT MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrOverlaps(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr23.testcase b/libspatialite/test/sql_stmt_tests/mbr23.testcase
new file mode 100644
index 0000000..ca87acd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr23.testcase
@@ -0,0 +1,7 @@
+MbrTouches - Line + Point on
+:memory: #use in-memory database
+SELECT MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr24.testcase b/libspatialite/test/sql_stmt_tests/mbr24.testcase
new file mode 100644
index 0000000..073a057
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr24.testcase
@@ -0,0 +1,7 @@
+MbrTouches - Line + Point inside
+:memory: #use in-memory database
+SELECT MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrTouches(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr25.testcase b/libspatialite/test/sql_stmt_tests/mbr25.testcase
new file mode 100644
index 0000000..28391e3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr25.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point inside
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 1)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr26.testcase b/libspatialite/test/sql_stmt_tests/mbr26.testcase
new file mode 100644
index 0000000..beddfc8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr26.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point outside 
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr27.testcase b/libspatialite/test/sql_stmt_tests/mbr27.testcase
new file mode 100644
index 0000000..ebeb491
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr27.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point up
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 6)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 6)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr28.testcase b/libspatialite/test/sql_stmt_tests/mbr28.testcase
new file mode 100644
index 0000000..24856bb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr28.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point down
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 -2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 -2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr29.testcase b/libspatialite/test/sql_stmt_tests/mbr29.testcase
new file mode 100644
index 0000000..54b3a14
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr29.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point down
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 -2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(0.5 -2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr3.testcase b/libspatialite/test/sql_stmt_tests/mbr3.testcase
new file mode 100644
index 0000000..a48bdac
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr3.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + Point 
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(2 1)")) # header
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr30.testcase b/libspatialite/test/sql_stmt_tests/mbr30.testcase
new file mode 100644
index 0000000..d7609d2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr30.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point left
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(-0.5 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr31.testcase b/libspatialite/test/sql_stmt_tests/mbr31.testcase
new file mode 100644
index 0000000..7ebb23c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr31.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Point right
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(3 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(3 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr32.testcase b/libspatialite/test/sql_stmt_tests/mbr32.testcase
new file mode 100644
index 0000000..7f853ad
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr32.testcase
@@ -0,0 +1,7 @@
+MbrDisjoint - Line + Line right
+:memory: #use in-memory database
+SELECT MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(3 1, 4 0)"));
+1 # rows (not including the header row)
+1 # columns
+MbrDisjoint(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("LINESTRING(3 1, 4 0)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr4.testcase b/libspatialite/test/sql_stmt_tests/mbr4.testcase
new file mode 100644
index 0000000..76fa078
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr4.testcase
@@ -0,0 +1,7 @@
+MbrContains - Text + Point (error)
+:memory: #use in-memory database
+SELECT MbrContains("hello", GeomFromText("POINT(2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains("hello", GeomFromText("POINT(2 1)")) # header
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr5.testcase b/libspatialite/test/sql_stmt_tests/mbr5.testcase
new file mode 100644
index 0000000..5ec1fa1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr5.testcase
@@ -0,0 +1,7 @@
+MbrContains - Point + Text (error)
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("POINT(2 1)"), "hello");
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("POINT(2 1)"), "hello")
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr6.testcase b/libspatialite/test/sql_stmt_tests/mbr6.testcase
new file mode 100644
index 0000000..a2c0cc8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr6.testcase
@@ -0,0 +1,7 @@
+MbrContains - Point + bad blob (error)
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("POINT(2 1)"), zeroblob(49));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("POINT(2 1)"), zeroblob(49))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr7.testcase b/libspatialite/test/sql_stmt_tests/mbr7.testcase
new file mode 100644
index 0000000..1f8c241
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr7.testcase
@@ -0,0 +1,7 @@
+MbrContains - bad blob (error) + Point
+:memory: #use in-memory database
+SELECT MbrContains(zeroblob(49), GeomFromText("POINT(2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(zeroblob(49), GeomFromText("POINT(2 1)"))
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr8.testcase b/libspatialite/test/sql_stmt_tests/mbr8.testcase
new file mode 100644
index 0000000..9c5daa2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr8.testcase
@@ -0,0 +1,7 @@
+MbrContains - Line + PointZ
+:memory: #use in-memory database
+SELECT MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINTZ(1 2 1)"));
+1 # rows (not including the header row)
+1 # columns
+MbrContains(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINTZ(1 2 1)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mbr9.testcase b/libspatialite/test/sql_stmt_tests/mbr9.testcase
new file mode 100644
index 0000000..556a8f4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mbr9.testcase
@@ -0,0 +1,7 @@
+MbrIntersects - Line + Point on
+:memory: #use in-memory database
+SELECT MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)"));
+1 # rows (not including the header row)
+1 # columns
+MbrIntersects(GeomFromText("LINESTRING(0 0, 1 2)"), GeomFromText("POINT(1 2)")) # header
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mi_m.testcase b/libspatialite/test/sql_stmt_tests/mi_m.testcase
new file mode 100644
index 0000000..c8f43d5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mi_m.testcase
@@ -0,0 +1,7 @@
+miles to metres
+:memory: #use in-memory database
+SELECT CvtFromMi(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtFromMi(1.0);
+1609.344
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mlinefromtext1.testcase b/libspatialite/test/sql_stmt_tests/mlinefromtext1.testcase
new file mode 100644
index 0000000..cccad12
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mlinefromtext1.testcase
@@ -0,0 +1,7 @@
+multilinefromtext1
+:memory: #use in-memory database
+SELECT AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))", 4326))
+MULTILINESTRING((10 10,20 20,10 40),(40 40,30 30,40 20,30 10))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mlinefromtext2.testcase b/libspatialite/test/sql_stmt_tests/mlinefromtext2.testcase
new file mode 100644
index 0000000..6f7f7af
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mlinefromtext2.testcase
@@ -0,0 +1,7 @@
+multilinefromtext2
+:memory: #use in-memory database
+SELECT AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MLineFromText("MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))"))
+MULTILINESTRING((10 10,20 20,10 40),(40 40,30 30,40 20,30 10))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mm_m.testcase b/libspatialite/test/sql_stmt_tests/mm_m.testcase
new file mode 100644
index 0000000..9ffce78
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mm_m.testcase
@@ -0,0 +1,7 @@
+millimetres to metres
+:memory: #use in-memory database
+SELECT CvtFromMm(2100.4);
+1 # rows (not including the header row)
+1 # columns
+CvtFromMm(2100.4);
+2.1004
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mpointfromtext1.testcase b/libspatialite/test/sql_stmt_tests/mpointfromtext1.testcase
new file mode 100644
index 0000000..11223d5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mpointfromtext1.testcase
@@ -0,0 +1,7 @@
+multipointfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)"))
+MULTIPOINT(-71 42,-70 41,-70 42,-70 42,-71 42)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mpointfromtext2.testcase b/libspatialite/test/sql_stmt_tests/mpointfromtext2.testcase
new file mode 100644
index 0000000..f23c525
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mpointfromtext2.testcase
@@ -0,0 +1,7 @@
+multipointfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPointFromText("MULTIPOINT(-71 42, -70 41, -70 42, -70 42, -71 42)", 4326))
+MULTIPOINT(-71 42,-70 41,-70 42,-70 42,-71 42)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mpolygonfromtext1.testcase b/libspatialite/test/sql_stmt_tests/mpolygonfromtext1.testcase
new file mode 100644
index 0000000..3185895
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mpolygonfromtext1.testcase
@@ -0,0 +1,7 @@
+multipolygonfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))"))
+MULTIPOLYGON(((30 20,10 40,45 40,30 20)),((15 5,40 10,10 20,5 10,15 5)))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/mpolygonfromtext2.testcase b/libspatialite/test/sql_stmt_tests/mpolygonfromtext2.testcase
new file mode 100644
index 0000000..1ecc310
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/mpolygonfromtext2.testcase
@@ -0,0 +1,7 @@
+multipolygonfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))", 4326))
+1 # rows (not including the header row)
+1 # columns
+AsWkt(MPolyFromText("MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))", 4326))
+MULTIPOLYGON(((30 20,10 40,45 40,30 20)),((15 5,40 10,10 20,5 10,15 5)))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/nm_m.testcase b/libspatialite/test/sql_stmt_tests/nm_m.testcase
new file mode 100644
index 0000000..ac7f637
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/nm_m.testcase
@@ -0,0 +1,7 @@
+nautical miles to metres
+:memory: #use in-memory database
+SELECT CvtFromKmi(1);
+1 # rows (not including the header row)
+1 # columns
+CvtFromKmi(1);
+1852.0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/output1.testcase b/libspatialite/test/sql_stmt_tests/output1.testcase
new file mode 100644
index 0000000..9f4abd9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/output1.testcase
@@ -0,0 +1,18 @@
+Output format tests - POLYGON, WGS-84
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT GeomFromEWkt("SRID=4326;POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+6 # columns
+AsText(geom)
+AsKML(geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))
+<Polygon><outerBoundaryIs><LinearRing><coordinates>0,0 1,1 0,2 -1,1 0,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
+<gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,0 1,1 0,2 -1,1 0,0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>:0
+{"type":"Polygon","coordinates":[[[0,0],[1,1],[0,2],[-1,1],[0,0]]]}:0
+POLYGON((0 0,1 1,0 2,-1 1,0 0))
+SRID=4326;POLYGON((0 0,1 1,0 2,-1 1,0 0))
+
diff --git a/libspatialite/test/sql_stmt_tests/output2.testcase b/libspatialite/test/sql_stmt_tests/output2.testcase
new file mode 100644
index 0000000..65a9b29
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/output2.testcase
@@ -0,0 +1,20 @@
+Output format tests - POLYGON, no SRID
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT GeomFromText("POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+POLYGON((0 0,1 1,0 2,-1 1,0 0))
+SRID=-1;POLYGON((0 0,1 1,0 2,-1 1,0 0))
+
diff --git a/libspatialite/test/sql_stmt_tests/output3.testcase b/libspatialite/test/sql_stmt_tests/output3.testcase
new file mode 100644
index 0000000..6203fbe
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/output3.testcase
@@ -0,0 +1,20 @@
+Output format tests - bad blob input
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT zeroblob(40) as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/output4.testcase b/libspatialite/test/sql_stmt_tests/output4.testcase
new file mode 100644
index 0000000..0600668
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/output4.testcase
@@ -0,0 +1,20 @@
+Output format tests - text input
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT "hello" as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/output5.testcase b/libspatialite/test/sql_stmt_tests/output5.testcase
new file mode 100644
index 0000000..c011e84
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/output5.testcase
@@ -0,0 +1,20 @@
+Output format tests - POINT input, no SRID
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT MakePoint(1,2) as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POINT(1 2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
+POINT(1 2)
+SRID=-1;POINT(1 2)
+
diff --git a/libspatialite/test/sql_stmt_tests/output6.testcase b/libspatialite/test/sql_stmt_tests/output6.testcase
new file mode 100644
index 0000000..3c0fa55
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/output6.testcase
@@ -0,0 +1,20 @@
+Output format tests - POINT input, WGS-84
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom), AsKML("myname", "mydesc", geom), AsGML(geom), AsGeoJSON(geom), AsWkt(geom), AsEWkt(geom) FROM (SELECT MakePoint(1, 2, 4326) as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom)
+AsKML("myname", "mydesc", geom)
+AsGML(geom)
+AsGeoJSON(geom)
+AsWkt(geom)
+AsEWkt(geom)
+POINT(1 2)
+<Point><coordinates>1,2</coordinates></Point>
+<Placemark><name>myname</name><description>mydesc</description><Point><coordinates>1,2</coordinates></Point></Placemark>
+<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>:0
+{"type":"Point","coordinates":[1,2]}:0
+POINT(1 2)
+SRID=4326;POINT(1 2)
+
diff --git a/libspatialite/test/sql_stmt_tests/output7.testcase b/libspatialite/test/sql_stmt_tests/output7.testcase
new file mode 100644
index 0000000..208018e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/output7.testcase
@@ -0,0 +1,19 @@
+Output format tests - Linestring, NAD83
+:memory: #use in-memory database
+SELECT AsText(geom), AsKML(geom, 6), AsGML(2, geom, 7), AsGML(3, geom, 8), AsGeoJSON(geom, 6), AsGeoJSON(geom, 5, 4), AsWkt(geom, 5) FROM (SELECT GeomFromEwkt("SRID=3636;LINESTRING(1065407.0674 116445.5897, 2968193.5686 805860.5650)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(geom)
+AsKML(geom, 6)
+AsGML(2, geom, 7)
+AsGML(3, geom, 8)
+AsGeoJSON(geom, 6)
+AsGeoJSON(geom, 5, 4)
+AsWkt(geom, 5)
+LINESTRING(1065407.0674 116445.5897, 2968193.5686 805860.565)
+<LineString><coordinates>-104.05,45.93 -96.430658,47.805216</coordinates></LineString>
+<gml:LineString srsName="EPSG:3636"><gml:coordinates>1065407.0674,116445.5897 2968193.5686,805860.565</gml:coordinates></gml:LineString>:0
+<gml:Curve srsName="EPSG:3636"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">1065407.0674 116445.5897 2968193.5686 805860.565</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>:0
+{"type":"LineString","coordinates":[[1065407.0674,116445.5897],[2968193.5686,805860.565]]}:0
+{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG:3636"}},"coordinates":[[1065407.0674,116445.5897],[2968193.5686,805860.565]]}:0
+LINESTRING(1065407.0674 116445.5897,2968193.5686 805860.565)
diff --git a/libspatialite/test/sql_stmt_tests/pi.testcase b/libspatialite/test/sql_stmt_tests/pi.testcase
new file mode 100644
index 0000000..db27b22
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pi.testcase
@@ -0,0 +1,7 @@
+pi
+:memory: # use in-memory database
+SELECT pi();
+1 # rows (not including the header row)
+1 # columns
+pi() # header
+3.141592653589:14 # result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/pointfromtext1.testcase b/libspatialite/test/sql_stmt_tests/pointfromtext1.testcase
new file mode 100644
index 0000000..27f39bd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointfromtext1.testcase
@@ -0,0 +1,7 @@
+pointfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)"), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/pointfromtext2.testcase b/libspatialite/test/sql_stmt_tests/pointfromtext2.testcase
new file mode 100644
index 0000000..2ada024
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointfromtext2.testcase
@@ -0,0 +1,7 @@
+pointfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PointFromText("POINT(-71.1043443253471 42.315067601582900)", 4326), 4)
+POINT(-71.1043 42.3151)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/pointn1.testcase b/libspatialite/test/sql_stmt_tests/pointn1.testcase
new file mode 100644
index 0000000..0eecabc
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn1.testcase
@@ -0,0 +1,7 @@
+pointn - text input (error)
+:memory: #use in-memory database
+SELECT PointN("hello world", 0);
+1 # rows (not including the header row)
+1 # columns
+PointN("hello world", 0)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/pointn10.testcase b/libspatialite/test/sql_stmt_tests/pointn10.testcase
new file mode 100644
index 0000000..ed8e012
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn10.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGM (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGM(4 0 9, 4 4 8, 8 4 7)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGM(4 0 9, 4 4 8, 8 4 7)"), -1))
+POINT M(8 4 7)
diff --git a/libspatialite/test/sql_stmt_tests/pointn11.testcase b/libspatialite/test/sql_stmt_tests/pointn11.testcase
new file mode 100644
index 0000000..8ebfc25
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn11.testcase
@@ -0,0 +1,7 @@
+pointN - nasty geometry
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 1))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/pointn12.testcase b/libspatialite/test/sql_stmt_tests/pointn12.testcase
new file mode 100644
index 0000000..3972635
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn12.testcase
@@ -0,0 +1,7 @@
+pointN - point input
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("POINT(136 -35)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("POINT(136 -35)"), 1))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/pointn13.testcase b/libspatialite/test/sql_stmt_tests/pointn13.testcase
new file mode 100644
index 0000000..49e19d4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn13.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGZ out of range (error)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), 4));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), 4))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/pointn14.testcase b/libspatialite/test/sql_stmt_tests/pointn14.testcase
new file mode 100644
index 0000000..5a8ec2a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn14.testcase
@@ -0,0 +1,7 @@
+pointN - empty LINESTRINGZ (error)
+:memory: #use in-memory database
+SELECT PointN(GeomFromText("LINESTRINGZ()"), 0);
+1 # rows (not including the header row)
+1 # columns
+PointN(GeomFromText("LINESTRINGZ()"), 0)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/pointn2.testcase b/libspatialite/test/sql_stmt_tests/pointn2.testcase
new file mode 100644
index 0000000..196ce62
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn2.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (first point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 1))
+POINT(4 0)
diff --git a/libspatialite/test/sql_stmt_tests/pointn3.testcase b/libspatialite/test/sql_stmt_tests/pointn3.testcase
new file mode 100644
index 0000000..3e1b63d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn3.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (second point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 2))
+POINT(4 4)
diff --git a/libspatialite/test/sql_stmt_tests/pointn4.testcase b/libspatialite/test/sql_stmt_tests/pointn4.testcase
new file mode 100644
index 0000000..d1bba49
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn4.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (third point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 3));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), 3))
+POINT(8 4)
diff --git a/libspatialite/test/sql_stmt_tests/pointn5.testcase b/libspatialite/test/sql_stmt_tests/pointn5.testcase
new file mode 100644
index 0000000..ed66d33
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn5.testcase
@@ -0,0 +1,7 @@
+pointN - text index (error)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), "three"));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), "three"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/pointn6.testcase b/libspatialite/test/sql_stmt_tests/pointn6.testcase
new file mode 100644
index 0000000..5069b15
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn6.testcase
@@ -0,0 +1,7 @@
+pointN - text arg (error)
+:memory: #use in-memory database
+SELECT PointN("hello", 1);
+1 # rows (not including the header row)
+1 # columns
+PointN("hello", 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/pointn7.testcase b/libspatialite/test/sql_stmt_tests/pointn7.testcase
new file mode 100644
index 0000000..5da1b7a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn7.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRING (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRING(4 0, 4 4, 8 4)"), -1))
+POINT(8 4)
diff --git a/libspatialite/test/sql_stmt_tests/pointn8.testcase b/libspatialite/test/sql_stmt_tests/pointn8.testcase
new file mode 100644
index 0000000..a92d516
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn8.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGZ (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGZ(4 0 4.4, 4 4 2.2, 8 4 3.3)"), -1))
+POINT Z(8 4 3.3)
diff --git a/libspatialite/test/sql_stmt_tests/pointn9.testcase b/libspatialite/test/sql_stmt_tests/pointn9.testcase
new file mode 100644
index 0000000..cafc9e5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pointn9.testcase
@@ -0,0 +1,7 @@
+pointN - regular LINESTRINGZM (last point)
+:memory: #use in-memory database
+SELECT AsText(PointN(GeomFromText("LINESTRINGZM(4 0 4.4 9, 4 4 2.2 8, 8 4 3.3 7)"), -1));
+1 # rows (not including the header row)
+1 # columns
+AsText(PointN(GeomFromText("LINESTRINGZM(4 0 4.4 9, 4 4 2.2 8, 8 4 3.3 7)"), -1))
+POINT ZM(8 4 3.3 7)
diff --git a/libspatialite/test/sql_stmt_tests/polygonfromtext1.testcase b/libspatialite/test/sql_stmt_tests/polygonfromtext1.testcase
new file mode 100644
index 0000000..7d76c36
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/polygonfromtext1.testcase
@@ -0,0 +1,7 @@
+polygonfromtext1
+:memory: #use in-memory database
+SELECT AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))"), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))"), 4)
+POLYGON((-71 42,-70 41,-70 42,-70 42,-71 42))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/polygonfromtext2.testcase b/libspatialite/test/sql_stmt_tests/polygonfromtext2.testcase
new file mode 100644
index 0000000..7af86e5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/polygonfromtext2.testcase
@@ -0,0 +1,7 @@
+polygonfromtext2
+:memory: #use in-memory database
+SELECT AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326), 4);
+1 # rows (not including the header row)
+1 # columns
+AsWkt(PolygonFromText("POLYGON((-71 42, -70 41, -70 42, -70 42, -71 42))", 4326), 4)
+POLYGON((-71 42,-70 41,-70 42,-70 42,-71 42))
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/polygonize1.testcase b/libspatialite/test/sql_stmt_tests/polygonize1.testcase
new file mode 100644
index 0000000..6229f6c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/polygonize1.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - simple polygon
+:memory: #use in-memory database
+SELECT AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1, 0 0)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1, 0 0)")))
+POLYGON((0 0, 1 1, 0 2, -1 1, 0 0))
+
+
+
diff --git a/libspatialite/test/sql_stmt_tests/polygonize2.testcase b/libspatialite/test/sql_stmt_tests/polygonize2.testcase
new file mode 100644
index 0000000..a8196d8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/polygonize2.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - not ring
+:memory: #use in-memory database
+SELECT AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(Polygonize(GeomFromText("LINESTRING(0 0, 1 1, 0 2, -1 1)")))
+(NULL)
+
+
+
diff --git a/libspatialite/test/sql_stmt_tests/polygonize3.testcase b/libspatialite/test/sql_stmt_tests/polygonize3.testcase
new file mode 100644
index 0000000..1349c12
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/polygonize3.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - bad blob
+:memory: #use in-memory database
+SELECT Polygonize(zeroblob(9));
+1 # rows (not including the header row)
+1 # columns
+Polygonize(zeroblob(9))
+(NULL)
+
+
+
diff --git a/libspatialite/test/sql_stmt_tests/polygonize4.testcase b/libspatialite/test/sql_stmt_tests/polygonize4.testcase
new file mode 100644
index 0000000..462703f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/polygonize4.testcase
@@ -0,0 +1,10 @@
+POLYGONIZE - text
+:memory: #use in-memory database
+SELECT Polygonize("hello world");
+1 # rows (not including the header row)
+1 # columns
+Polygonize("hello world")
+(NULL)
+
+
+
diff --git a/libspatialite/test/sql_stmt_tests/pow-badarg1.testcase b/libspatialite/test/sql_stmt_tests/pow-badarg1.testcase
new file mode 100644
index 0000000..919ff56
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow-badarg1.testcase
@@ -0,0 +1,7 @@
+pow(0.0, "test") # test of pow() function with bad arguments
+:memory: #use in-memory database
+SELECT pow(0.0, "test");
+1 # rows (not including the header row)
+1 # columns
+pow(0.0, "test") # header
+(NULL) # result
diff --git a/libspatialite/test/sql_stmt_tests/pow-badarg2.testcase b/libspatialite/test/sql_stmt_tests/pow-badarg2.testcase
new file mode 100644
index 0000000..fcfbc8d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow-badarg2.testcase
@@ -0,0 +1,7 @@
+pow("test", 1) # test of pow() function with bad arguments
+:memory: #use in-memory database
+SELECT pow("test", 1);
+1 # rows (not including the header row)
+1 # columns
+pow("test", 1) # header
+(NULL) # result
diff --git a/libspatialite/test/sql_stmt_tests/pow-edom.testcase b/libspatialite/test/sql_stmt_tests/pow-edom.testcase
new file mode 100644
index 0000000..0a0e3c7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow-edom.testcase
@@ -0,0 +1,7 @@
+pow(-2.1, 3.6) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(-2.1, 3.6);
+1 # rows (not including the header row)
+1 # columns
+pow(-2.1, 3.6) # header
+(NULL) # result
diff --git a/libspatialite/test/sql_stmt_tests/pow-fp.testcase b/libspatialite/test/sql_stmt_tests/pow-fp.testcase
new file mode 100644
index 0000000..b0c3e4c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow-fp.testcase
@@ -0,0 +1,7 @@
+pow(0, -3.6) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0, -3.6);
+1 # rows (not including the header row)
+1 # columns
+pow(0, -3.6) # header
+Inf # result - its basically division by zero.
diff --git a/libspatialite/test/sql_stmt_tests/pow00-1.testcase b/libspatialite/test/sql_stmt_tests/pow00-1.testcase
new file mode 100644
index 0000000..24ade7c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow00-1.testcase
@@ -0,0 +1,7 @@
+pow(0.0, 0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0.0, 0);
+1 # rows (not including the header row)
+1 # columns
+pow(0.0, 0) # header
+1.0 # result
diff --git a/libspatialite/test/sql_stmt_tests/pow00-2.testcase b/libspatialite/test/sql_stmt_tests/pow00-2.testcase
new file mode 100644
index 0000000..b7ee8f7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow00-2.testcase
@@ -0,0 +1,7 @@
+pow(0, 0.0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0, 0.0);
+1 # rows (not including the header row)
+1 # columns
+pow(0, 0.0) # header
+1.0 # result
diff --git a/libspatialite/test/sql_stmt_tests/pow00.testcase b/libspatialite/test/sql_stmt_tests/pow00.testcase
new file mode 100644
index 0000000..e535008
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow00.testcase
@@ -0,0 +1,7 @@
+pow(0, 0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0, 0);
+1 # rows (not including the header row)
+1 # columns
+pow(0, 0) # header
+1.0 # result
diff --git a/libspatialite/test/sql_stmt_tests/pow00double.testcase b/libspatialite/test/sql_stmt_tests/pow00double.testcase
new file mode 100644
index 0000000..d7eadc6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/pow00double.testcase
@@ -0,0 +1,7 @@
+pow(0.0, 0.0) # test of pow() function
+:memory: #use in-memory database
+SELECT pow(0.0, 0.0);
+1 # rows (not including the header row)
+1 # columns
+pow(0.0, 0.0) # header
+1.0 # result
diff --git a/libspatialite/test/sql_stmt_tests/rad-text.testcase b/libspatialite/test/sql_stmt_tests/rad-text.testcase
new file mode 100644
index 0000000..e71b308
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rad-text.testcase
@@ -0,0 +1,7 @@
+radians(text) # test of radians() 
+:memory: #use in-memory database
+SELECT radians("text");
+1 # rows (not including the header row)
+1 # columns
+radians("text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/rad0.testcase b/libspatialite/test/sql_stmt_tests/rad0.testcase
new file mode 100644
index 0000000..ec08505
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rad0.testcase
@@ -0,0 +1,7 @@
+radians(0) # test of radians() 
+:memory: #use in-memory database
+SELECT radians(0);
+1 # rows (not including the header row)
+1 # columns
+radians(0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/radpi.testcase b/libspatialite/test/sql_stmt_tests/radpi.testcase
new file mode 100644
index 0000000..ee265a4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/radpi.testcase
@@ -0,0 +1,7 @@
+radians(pi()) # test of radians() 
+:memory: #use in-memory database
+SELECT radians(180.0);
+1 # rows (not including the header row)
+1 # columns
+radians(180.0) # header
+3.1415:6 #result
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords1.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords1.testcase
new file mode 100644
index 0000000..01884e8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords1.testcase
@@ -0,0 +1,7 @@
+reflectcoords1
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 0))
+POINT(-1 2)
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords2.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords2.testcase
new file mode 100644
index 0000000..01cc29b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords2.testcase
@@ -0,0 +1,7 @@
+reflectcoords2
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, 1))
+POINT(-1 -2)
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords3.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords3.testcase
new file mode 100644
index 0000000..32f54ed
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords3.testcase
@@ -0,0 +1,7 @@
+reflectcoords3
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 0, 1))
+POINT(1 -2)
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords4.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords4.testcase
new file mode 100644
index 0000000..6c7610d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords4.testcase
@@ -0,0 +1,7 @@
+reflectcoords4
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(zeroblob(20), 0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(zeroblob(20), 0, 1))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords5.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords5.testcase
new file mode 100644
index 0000000..21a1e83
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords5.testcase
@@ -0,0 +1,7 @@
+reflectcoords5
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords("hello", 0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords("hello", 0, 1))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords6.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords6.testcase
new file mode 100644
index 0000000..bdcd0e7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords6.testcase
@@ -0,0 +1,7 @@
+reflectcoords6
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1.0, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1.0, 1))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords7.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords7.testcase
new file mode 100644
index 0000000..39432a1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords7.testcase
@@ -0,0 +1,7 @@
+reflectcoords7
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, -23.3));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("POINT(1 2)"), 1, -23.3))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/reflectcoords8.testcase b/libspatialite/test/sql_stmt_tests/reflectcoords8.testcase
new file mode 100644
index 0000000..d1cf601
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/reflectcoords8.testcase
@@ -0,0 +1,7 @@
+reflectcoords8
+:memory: #use in-memory database
+SELECT AsText(ReflectCoords(GeomFromText("LINESTRING(-1 -1, 1 0, 0 1)"), 1, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(ReflectCoords(GeomFromText("LINESTRING(-1 -1, 1 0, 0 1)"), 1, 1))
+LINESTRING(1 1, -1 -0, -0 -1) # TODO: check these -0 values...
diff --git a/libspatialite/test/sql_stmt_tests/relations1.testcase b/libspatialite/test/sql_stmt_tests/relations1.testcase
new file mode 100644
index 0000000..241c539
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/relations1.testcase
@@ -0,0 +1,21 @@
+Relationship tests - POINTs identical
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(1 2)") as geom1, GeomFromText("POINT(1 2)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+1
+1
+0
+0
+0
+0
+1
+1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/relations2.testcase b/libspatialite/test/sql_stmt_tests/relations2.testcase
new file mode 100644
index 0000000..6438754
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/relations2.testcase
@@ -0,0 +1,21 @@
+Relationship tests - POINTs different
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(1 2)") as geom1, GeomFromText("POINT(3 4)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+0
+0
+1
+0
+0
+0
+0
+0
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/relations3.testcase b/libspatialite/test/sql_stmt_tests/relations3.testcase
new file mode 100644
index 0000000..eda1fa7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/relations3.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad first blob
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT zeroblob(10) as geom1, GeomFromText("POINT(3 4)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
diff --git a/libspatialite/test/sql_stmt_tests/relations4.testcase b/libspatialite/test/sql_stmt_tests/relations4.testcase
new file mode 100644
index 0000000..2e5310a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/relations4.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad second blob
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(3 4)") as geom1, zeroblob(10) as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
diff --git a/libspatialite/test/sql_stmt_tests/relations5.testcase b/libspatialite/test/sql_stmt_tests/relations5.testcase
new file mode 100644
index 0000000..9830665
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/relations5.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad second arg
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT GeomFromText("POINT(3 4)") as geom1, "hello" as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/relations6.testcase b/libspatialite/test/sql_stmt_tests/relations6.testcase
new file mode 100644
index 0000000..a645dc6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/relations6.testcase
@@ -0,0 +1,21 @@
+Relationship tests - bad first arg
+:memory: #use in-memory database
+SELECT Equals(geom1, geom2), Intersects(geom1, geom2), Disjoint(geom1, geom2), Overlaps(geom1, geom2), Crosses(geom1, geom2), Touches(geom1, geom2), Within(geom1, geom2), Contains(geom1, geom2) FROM (SELECT "hello" as geom1, GeomFromText("POINT(3 4)") as geom2) dummy;
+1 # rows (not including the header row)
+8 # columns
+Equals(geom1, geom2)
+Intersects(geom1, geom2)
+Disjoint(geom1, geom2)
+Overlaps(geom1, geom2)
+Crosses(geom1, geom2)
+Touches(geom1, geom2)
+Within(geom1, geom2)
+Contains(geom1, geom2)
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/ring1.testcase b/libspatialite/test/sql_stmt_tests/ring1.testcase
new file mode 100644
index 0000000..6a84c62
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring1.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Linestring (error)
+:memory: #use in-memory database
+SELECT ExteriorRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"));
+1 # rows (not including the header row)
+1 # columns
+ExteriorRing(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring10.testcase b/libspatialite/test/sql_stmt_tests/ring10.testcase
new file mode 100644
index 0000000..c47a099
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring10.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Simple Polygon
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))"))
+0
diff --git a/libspatialite/test/sql_stmt_tests/ring11.testcase b/libspatialite/test/sql_stmt_tests/ring11.testcase
new file mode 100644
index 0000000..689854d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring11.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Polygon with 1 interior
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"))
+1
diff --git a/libspatialite/test/sql_stmt_tests/ring12.testcase b/libspatialite/test/sql_stmt_tests/ring12.testcase
new file mode 100644
index 0000000..b756ae2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring12.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Polygon with 2 interior
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"))
+2
diff --git a/libspatialite/test/sql_stmt_tests/ring13.testcase b/libspatialite/test/sql_stmt_tests/ring13.testcase
new file mode 100644
index 0000000..428d227
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring13.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - float input (error)
+:memory: #use in-memory database
+SELECT NumInteriorRings(3.14);
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(3.14)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring14.testcase b/libspatialite/test/sql_stmt_tests/ring14.testcase
new file mode 100644
index 0000000..73a1d67
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring14.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - bad blob (error)
+:memory: #use in-memory database
+SELECT NumInteriorRings(zeroblob(12));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(zeroblob(12))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring15.testcase b/libspatialite/test/sql_stmt_tests/ring15.testcase
new file mode 100644
index 0000000..7297586
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring15.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - bad blob (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(zeroblob(12), 1);
+1 # rows (not including the header row)
+1 # column
+InteriorRingN(zeroblob(12), 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring16.testcase b/libspatialite/test/sql_stmt_tests/ring16.testcase
new file mode 100644
index 0000000..9678bd9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring16.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - text input (error)
+:memory: #use in-memory database
+SELECT InteriorRingN("hello", 1);
+1 # rows (not including the header row)
+1 # column
+InteriorRingN("hello", 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring17.testcase b/libspatialite/test/sql_stmt_tests/ring17.testcase
new file mode 100644
index 0000000..69184aa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring17.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2))
+LINESTRING(2 2, 2 3, 3 3, 3 2, 2 2)
diff --git a/libspatialite/test/sql_stmt_tests/ring18.testcase b/libspatialite/test/sql_stmt_tests/ring18.testcase
new file mode 100644
index 0000000..5535c27
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring18.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - first interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 1))
+LINESTRING(1 1, 1 3, 3 3, 3 1, 1 1)
diff --git a/libspatialite/test/sql_stmt_tests/ring19.testcase b/libspatialite/test/sql_stmt_tests/ring19.testcase
new file mode 100644
index 0000000..6acee8a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring19.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - out-of-range interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 3);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 3)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring2.testcase b/libspatialite/test/sql_stmt_tests/ring2.testcase
new file mode 100644
index 0000000..151754d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring2.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35))")))
+LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35)
diff --git a/libspatialite/test/sql_stmt_tests/ring20.testcase b/libspatialite/test/sql_stmt_tests/ring20.testcase
new file mode 100644
index 0000000..242df4b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring20.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - float interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2.3);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1),(2 2, 2 3, 3 3, 3 2, 2 2))"), 2.3)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring21.testcase b/libspatialite/test/sql_stmt_tests/ring21.testcase
new file mode 100644
index 0000000..15107d5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring21.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POINT (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POINT(1 2)"), 1);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POINT(1 2)"), 1)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring22.testcase b/libspatialite/test/sql_stmt_tests/ring22.testcase
new file mode 100644
index 0000000..af2238f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring22.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON Z second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2))
+LINESTRING Z(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1)
diff --git a/libspatialite/test/sql_stmt_tests/ring23.testcase b/libspatialite/test/sql_stmt_tests/ring23.testcase
new file mode 100644
index 0000000..1b0de03
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring23.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON M second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONM((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONM((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 2))
+LINESTRING M(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1)
diff --git a/libspatialite/test/sql_stmt_tests/ring24.testcase b/libspatialite/test/sql_stmt_tests/ring24.testcase
new file mode 100644
index 0000000..188d3ca
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring24.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON ZM second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONZM((0 0 0 1, 0 4 1 1, 4 4 2 1, 4 0 3 1, 0 0 0 1),(1 1 2 2, 1 3 2 2, 3 3 2 2, 3 1 2 2, 1 1 2 2),(2 2 1 3, 2 3 1 3, 3 3 1 3, 3 2 1 3, 2 2 1 3))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONZM((0 0 0 1, 0 4 1 1, 4 4 2 1, 4 0 3 1, 0 0 0 1),(1 1 2 2, 1 3 2 2, 3 3 2 2, 3 1 2 2, 1 1 2 2),(2 2 1 3, 2 3 1 3, 3 3 1 3, 3 2 1 3, 2 2 1 3))"), 2))
+LINESTRING ZM(2 2 1 3, 2 3 1 3, 3 3 1 3, 3 2 1 3, 2 2 1 3)
diff --git a/libspatialite/test/sql_stmt_tests/ring25.testcase b/libspatialite/test/sql_stmt_tests/ring25.testcase
new file mode 100644
index 0000000..e9f9901
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring25.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON Z third interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 3);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 3)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring26.testcase b/libspatialite/test/sql_stmt_tests/ring26.testcase
new file mode 100644
index 0000000..5f9b781
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring26.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - POLGON Z zeroth interior (error)
+:memory: #use in-memory database
+SELECT InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 0);
+1 # rows (not including the header row)
+1 # columns
+InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 1))"), 0)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring27.testcase b/libspatialite/test/sql_stmt_tests/ring27.testcase
new file mode 100644
index 0000000..bfea875
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring27.testcase
@@ -0,0 +1,7 @@
+InteriorRingN - broken second interior
+:memory: #use in-memory database
+SELECT AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 2))"), 2));
+1 # rows (not including the header row)
+1 # columns
+AsText(InteriorRingN(GeomFromText("POLYGONZ((0 0 0, 0 4 1, 4 4 2, 4 0 3, 0 0 0),(1 1 2, 1 3 2, 3 3 2, 3 1 2, 1 1 2),(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 2))"), 2))
+LINESTRING Z(2 2 1, 2 3 1, 3 3 1, 3 2 1, 2 2 2)
diff --git a/libspatialite/test/sql_stmt_tests/ring3.testcase b/libspatialite/test/sql_stmt_tests/ring3.testcase
new file mode 100644
index 0000000..ddc5b51
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring3.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon Z
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGONZ((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGONZ((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+LINESTRING Z(136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4)
diff --git a/libspatialite/test/sql_stmt_tests/ring4.testcase b/libspatialite/test/sql_stmt_tests/ring4.testcase
new file mode 100644
index 0000000..752fae3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring4.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon M
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGONM((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGONM((136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4))")));
+LINESTRING M(136 -35 4, 135.2 -34.5 6.5, 136 -35.2 9.4, 136 -35 4)
diff --git a/libspatialite/test/sql_stmt_tests/ring5.testcase b/libspatialite/test/sql_stmt_tests/ring5.testcase
new file mode 100644
index 0000000..270c02d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring5.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Bad blob (error)
+:memory: #use in-memory database
+SELECT ExteriorRing(zeroblob(27));
+1 # rows (not including the header row)
+1 # columns
+ExteriorRing(zeroblob(27))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring6.testcase b/libspatialite/test/sql_stmt_tests/ring6.testcase
new file mode 100644
index 0000000..de4c1f8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring6.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - float input (error)
+:memory: #use in-memory database
+SELECT ExteriorRing(3.14);
+1 # rows (not including the header row)
+1 # columns
+ExteriorRing(3.14)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/ring7.testcase b/libspatialite/test/sql_stmt_tests/ring7.testcase
new file mode 100644
index 0000000..740855d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring7.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Simple Polygon ZM
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGONZM((136 -35 4 0, 135.2 -34.5 6.5 1, 136 -35.2 9.4 2, 136 -35 4 0))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGONZM((136 -35 4 0, 135.2 -34.5 6.5 1, 136 -35.2 9.4 2, 136 -35 4 0))")))
+LINESTRING ZM(136 -35 4 0, 135.2 -34.5 6.5 1, 136 -35.2 9.4 2, 136 -35 4 0)
diff --git a/libspatialite/test/sql_stmt_tests/ring8.testcase b/libspatialite/test/sql_stmt_tests/ring8.testcase
new file mode 100644
index 0000000..8fcc474
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring8.testcase
@@ -0,0 +1,7 @@
+ExteriorRing - Toxic polygon
+:memory: #use in-memory database
+SELECT AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")));
+1 # rows (not including the header row)
+1 # columns
+AsText(ExteriorRing(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))")))
+LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5)
diff --git a/libspatialite/test/sql_stmt_tests/ring9.testcase b/libspatialite/test/sql_stmt_tests/ring9.testcase
new file mode 100644
index 0000000..682d46c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/ring9.testcase
@@ -0,0 +1,7 @@
+NumInteriorRings - Toxic polygon
+:memory: #use in-memory database
+SELECT NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"));
+1 # rows (not including the header row)
+1 # columns
+NumInteriorRings(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+0
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords1.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords1.testcase
new file mode 100644
index 0000000..f4956d1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords1.testcase
@@ -0,0 +1,19 @@
+rotate coords - Point
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POINT(1 2)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POINT(1 2)
+POINT(2 -1)
+POINT(-1 -2)
+POINT(-2 1)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords10.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords10.testcase
new file mode 100644
index 0000000..8eecc0d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords10.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygonzm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZM((0 0 1 5, 1 1 2 6, 1 2 3 7, -1 1 4 8, 0 0 1 5))") as geom) dummy; 
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON ZM((0 0 1 5, 1 1 2 6, 1 2 3 7, -1 1 4 8, 0 0 1 5))
+POLYGON ZM((0 0 1 5, 1 -1 2 6, 2 -1 3 7, 1 1 4 8, 0 0 1 5))
+POLYGON ZM((0 -0 1 5, -1 -1 2 6, -1 -2 3 7, 1 -1 4 8, 0 -0 1 5))
+POLYGON ZM((0 0 1 5, -1 1 2 6, -2 1 3 7, -1 -1 4 8, 0 0 1 5))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords11.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords11.testcase
new file mode 100644
index 0000000..22dcff8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords11.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygon
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGON((0 0, 2 2, 2 4, -2 2, 0 0),(0 0, 1 1, 1 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON((0 0, 2 2, 2 4, -2 2, 0 0), (0 0, 1 1, 1 2, -1 1, 0 0))
+POLYGON((0 0, 2 -2, 4 -2, 2 2, 0 0), (0 0, 1 -1, 2 -1, 1 1, 0 0))
+POLYGON((0 -0, -2 -2, -2 -4, 2 -2, 0 -0), (0 -0, -1 -1, -1 -2, 1 -1, 0 -0))
+POLYGON((0 0, -2 2, -4 2, -2 -2, 0 0), (0 0, -1 1, -2 1, -1 -1, 0 0))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords12.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords12.testcase
new file mode 100644
index 0000000..98ac741
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords12.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygonz
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZ((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1),(0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON Z((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1), (0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))
+POLYGON Z((0 0 1, 2 -2 2, 4 -2 3, 2 2 4, 0 0 1), (0 0 5, 1 -1 6, 2 -1 7, 1 1 8, 0 0 5))
+POLYGON Z((0 -0 1, -2 -2 2, -2 -4 3, 2 -2 4, 0 -0 1), (0 -0 5, -1 -1 6, -1 -2 7, 1 -1 8, 0 -0 5))
+POLYGON Z((0 0 1, -2 2 2, -4 2 3, -2 -2 4, 0 0 1), (0 0 5, -1 1 6, -2 1 7, -1 -1 8, 0 0 5))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords13.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords13.testcase
new file mode 100644
index 0000000..c7b2a4e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords13.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygonm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONM((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1),(0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON M((0 0 1, 2 2 2, 2 4 3, -2 2 4, 0 0 1), (0 0 5, 1 1 6, 1 2 7, -1 1 8, 0 0 5))
+POLYGON M((0 0 1, 2 -2 2, 4 -2 3, 2 2 4, 0 0 1), (0 0 5, 1 -1 6, 2 -1 7, 1 1 8, 0 0 5))
+POLYGON M((0 -0 1, -2 -2 2, -2 -4 3, 2 -2 4, 0 -0 1), (0 -0 5, -1 -1 6, -1 -2 7, 1 -1 8, 0 -0 5))
+POLYGON M((0 0 1, -2 2 2, -4 2 3, -2 -2 4, 0 0 1), (0 0 5, -1 1 6, -2 1 7, -1 -1 8, 0 0 5))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords14.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords14.testcase
new file mode 100644
index 0000000..f3c44dc
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords14.testcase
@@ -0,0 +1,19 @@
+rotate coords - Two ring polygonzm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZM((0 0 1 1, 2 2 2 2, 2 4 3 3, -2 2 4 4, 0 0 1 1),(0 0 5 0, 1 1 6 1, 1 2 7 2, -1 1 8 3, 0 0 5 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON ZM((0 0 1 1, 2 2 2 2, 2 4 3 3, -2 2 4 4, 0 0 1 1), (0 0 5 0, 1 1 6 1, 1 2 7 2, -1 1 8 3, 0 0 5 0))
+POLYGON ZM((0 0 1 1, 2 -2 2 2, 4 -2 3 3, 2 2 4 4, 0 0 1 1), (0 0 5 0, 1 -1 6 1, 2 -1 7 2, 1 1 8 3, 0 0 5 0))
+POLYGON ZM((0 -0 1 1, -2 -2 2 2, -2 -4 3 3, 2 -2 4 4, 0 -0 1 1), (0 -0 5 0, -1 -1 6 1, -1 -2 7 2, 1 -1 8 3, 0 -0 5 0))
+POLYGON ZM((0 0 1 1, -2 2 2 2, -4 2 3 3, -2 -2 4 4, 0 0 1 1), (0 0 5 0, -1 1 6 1, -2 1 7 2, -1 -1 8 3, 0 0 5 0))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords2.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords2.testcase
new file mode 100644
index 0000000..6e63c63
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords2.testcase
@@ -0,0 +1,19 @@
+rotate coords - PointZ
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POINTZ(1 2 1.5)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POINT Z(1 2 1.5)
+POINT Z(2 -1 1.5)
+POINT Z(-1 -2 1.5)
+POINT Z(-2 1 1.5)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords3.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords3.testcase
new file mode 100644
index 0000000..82a7848
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords3.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRING(0 0, 1 1)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING(0 0, 1 1)
+LINESTRING(0 0, 1 -1)
+LINESTRING(0 -0, -1 -1)
+LINESTRING(0 0, -1 1)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords4.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords4.testcase
new file mode 100644
index 0000000..8f52126
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords4.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING Z
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRINGZ(0 0 2, 1 1 3)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING Z(0 0 2, 1 1 3)
+LINESTRING Z(0 0 2, 1 -1 3)
+LINESTRING Z(0 -0 2, -1 -1 3)
+LINESTRING Z(0 0 2, -1 1 3)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords5.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords5.testcase
new file mode 100644
index 0000000..855a6a6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords5.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING M
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRINGM(0 0 2, 1 1 3)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING M(0 0 2, 1 1 3)
+LINESTRING M(0 0 2, 1 -1 3)
+LINESTRING M(0 -0 2, -1 -1 3)
+LINESTRING M(0 0 2, -1 1 3)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords6.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords6.testcase
new file mode 100644
index 0000000..50c1133
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords6.testcase
@@ -0,0 +1,19 @@
+rotate coords - LINESTRING ZM
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("LINESTRINGZM(0 0 2 4, 1 1 3 5)") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+LINESTRING ZM(0 0 2 4, 1 1 3 5)
+LINESTRING ZM(0 0 2 4, 1 -1 3 5)
+LINESTRING ZM(0 -0 2 4, -1 -1 3 5)
+LINESTRING ZM(0 0 2 4, -1 1 3 5)
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords7.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords7.testcase
new file mode 100644
index 0000000..468c11d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords7.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygon
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGON((0 0, 1 1, 1 2, -1 1, 0 0))") as geom) dummy;
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON((0 0, 1 1, 1 2, -1 1, 0 0))
+POLYGON((0 0, 1 -1, 2 -1, 1 1, 0 0))
+POLYGON((0 -0, -1 -1, -1 -2, 1 -1, 0 -0))
+POLYGON((0 0, -1 1, -2 1, -1 -1, 0 0))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords8.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords8.testcase
new file mode 100644
index 0000000..1344a76
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords8.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygonz
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONZ((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))") as geom) dummy; 
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON Z((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))
+POLYGON Z((0 0 1, 1 -1 2, 2 -1 3, 1 1 4, 0 0 1))
+POLYGON Z((0 -0 1, -1 -1 2, -1 -2 3, 1 -1 4, 0 -0 1))
+POLYGON Z((0 0 1, -1 1 2, -2 1 3, -1 -1 4, 0 0 1))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/rotatecoords9.testcase b/libspatialite/test/sql_stmt_tests/rotatecoords9.testcase
new file mode 100644
index 0000000..33755b1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/rotatecoords9.testcase
@@ -0,0 +1,19 @@
+rotate coords - Simple polygonm
+:memory: #use in-memory database
+SELECT AsText(RotateCoords(geom, 0)), AsText(RotateCoords(geom, 90.0)), AsText(RotateCoords(geom, 180.0)), AsText(RotateCoords(geom, -90)), RotateCoords(zeroblob(20), 10), RotateCoords(geom, "hello"), RotateCoords("foo", 30) FROM (SELECT GeomFromText("POLYGONM((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))") as geom) dummy; 
+1 # rows (not including the header row)
+7 # columns
+AsText(RotateCoords(geom, 0))
+AsText(RotateCoords(geom, 90.0))
+AsText(RotateCoords(geom, 180.0))
+AsText(RotateCoords(geom, -90))
+RotateCoords(zeroblob(20), 10)
+RotateCoords(geom, "hello")
+RotateCoords("foo", 30)
+POLYGON M((0 0 1, 1 1 2, 1 2 3, -1 1 4, 0 0 1))
+POLYGON M((0 0 1, 1 -1 2, 2 -1 3, 1 1 4, 0 0 1))
+POLYGON M((0 -0 1, -1 -1 2, -1 -2 3, 1 -1 4, 0 -0 1))
+POLYGON M((0 0 1, -1 1 2, -2 1 3, -1 -1 4, 0 0 1))
+(NULL)
+(NULL)
+(NULL)
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round-29.testcase b/libspatialite/test/sql_stmt_tests/round-29.testcase
new file mode 100644
index 0000000..bfdd3be
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round-29.testcase
@@ -0,0 +1,7 @@
+round(-2.9)
+:memory:
+SELECT round(-2.9); # the SQL to run
+1 # rows
+1 # column
+round(-2.9) # this is the header row
+-3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round-31.testcase b/libspatialite/test/sql_stmt_tests/round-31.testcase
new file mode 100644
index 0000000..9960065
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round-31.testcase
@@ -0,0 +1,7 @@
+round(-3.1)
+:memory:
+SELECT round(-3.1); # the SQL to run
+1 # rows
+1 # column
+round(-3.1) # this is the header row
+-3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round-text.testcase b/libspatialite/test/sql_stmt_tests/round-text.testcase
new file mode 100644
index 0000000..9962b01
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round-text.testcase
@@ -0,0 +1,7 @@
+round(text)
+:memory:
+SELECT round("text"); # the SQL to run
+1 # rows
+1 # column
+round("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round0.testcase b/libspatialite/test/sql_stmt_tests/round0.testcase
new file mode 100644
index 0000000..bfe58db
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round0.testcase
@@ -0,0 +1,7 @@
+round(0)
+:memory:
+SELECT round(0); # the SQL to run
+1 # rows
+1 # column
+round(0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round29.testcase b/libspatialite/test/sql_stmt_tests/round29.testcase
new file mode 100644
index 0000000..8c060bb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round29.testcase
@@ -0,0 +1,7 @@
+round(2.9)
+:memory:
+SELECT round(2.9); # the SQL to run
+1 # rows
+1 # column
+round(2.9) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round3.testcase b/libspatialite/test/sql_stmt_tests/round3.testcase
new file mode 100644
index 0000000..f6e8eb5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round3.testcase
@@ -0,0 +1,7 @@
+round(3)
+:memory:
+SELECT round(3); # the SQL to run
+1 # rows
+1 # column
+round(3) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round30.testcase b/libspatialite/test/sql_stmt_tests/round30.testcase
new file mode 100644
index 0000000..2bdad47
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round30.testcase
@@ -0,0 +1,7 @@
+round(3.0)
+:memory:
+SELECT round(3.0); # the SQL to run
+1 # rows
+1 # column
+round(3.0) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/round31.testcase b/libspatialite/test/sql_stmt_tests/round31.testcase
new file mode 100644
index 0000000..561d151
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/round31.testcase
@@ -0,0 +1,7 @@
+round(3.1)
+:memory:
+SELECT round(3.1); # the SQL to run
+1 # rows
+1 # column
+round(3.1) # this is the header row
+3.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords1.testcase b/libspatialite/test/sql_stmt_tests/scalecoords1.testcase
new file mode 100644
index 0000000..c4e3693
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords1.testcase
@@ -0,0 +1,21 @@
+scale coords - Point
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POINT(1 2)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POINT(0 0)
+POINT(0 0)
+POINT(2 6)
+POINT(1 -2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords10.testcase b/libspatialite/test/sql_stmt_tests/scalecoords10.testcase
new file mode 100644
index 0000000..62bc203
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords10.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGON with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 2, 1 3, 2 3, 2 2, 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0), (0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0), (0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((0 0, 0 12, 8 12, 8 0, 0 0), (2 6, 2 9, 4 9, 4 6, 2 6))
+POLYGON((0 -0, 0 -4, 4 -4, 4 -0, 0 -0), (1 -2, 1 -3, 2 -3, 2 -2, 1 -2))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords11.testcase b/libspatialite/test/sql_stmt_tests/scalecoords11.testcase
new file mode 100644
index 0000000..efd55bf
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords11.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZ with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZ((0 0 1, 0 4 1, 4 4 1, 4 0 1, 0 0 1),(1 2 1, 1 3 1, 2 3 1, 2 2 1, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON Z((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON Z((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON Z((0 0 1, 0 12 1, 8 12 1, 8 0 1, 0 0 1), (2 6 1, 2 9 1, 4 9 1, 4 6 1, 2 6 1))
+POLYGON Z((0 -0 1, 0 -4 1, 4 -4 1, 4 -0 1, 0 -0 1), (1 -2 1, 1 -3 1, 2 -3 1, 2 -2 1, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords12.testcase b/libspatialite/test/sql_stmt_tests/scalecoords12.testcase
new file mode 100644
index 0000000..5ccf77c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords12.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONM with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONM((0 0 1, 0 4 1, 4 4 1, 4 0 1, 0 0 1),(1 2 1, 1 3 1, 2 3 1, 2 2 1, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON M((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON M((0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1), (0 0 1, 0 0 1, 0 0 1, 0 0 1, 0 0 1))
+POLYGON M((0 0 1, 0 12 1, 8 12 1, 8 0 1, 0 0 1), (2 6 1, 2 9 1, 4 9 1, 4 6 1, 2 6 1))
+POLYGON M((0 -0 1, 0 -4 1, 4 -4 1, 4 -0 1, 0 -0 1), (1 -2 1, 1 -3 1, 2 -3 1, 2 -2 1, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords13.testcase b/libspatialite/test/sql_stmt_tests/scalecoords13.testcase
new file mode 100644
index 0000000..8721298
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords13.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZM with inner ring
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZM((0 0 1 2, 0 4 1 2, 4 4 1 2, 4 0 1 2, 0 0 1 2),(1 2 1 2, 1 3 1 2, 2 3 1 2, 2 2 1 2, 1 2 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON ZM((0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2), (0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2))
+POLYGON ZM((0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2), (0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2, 0 0 1 2))
+POLYGON ZM((0 0 1 2, 0 12 1 2, 8 12 1 2, 8 0 1 2, 0 0 1 2), (2 6 1 2, 2 9 1 2, 4 9 1 2, 4 6 1 2, 2 6 1 2))
+POLYGON ZM((0 -0 1 2, 0 -4 1 2, 4 -4 1 2, 4 -0 1 2, 0 -0 1 2), (1 -2 1 2, 1 -3 1 2, 2 -3 1 2, 2 -2 1 2, 1 -2 1 2))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords2.testcase b/libspatialite/test/sql_stmt_tests/scalecoords2.testcase
new file mode 100644
index 0000000..0fcfc82
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords2.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRING
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRING(1 2, 4 5)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING(0 0, 0 0)
+LINESTRING(0 0, 0 0)
+LINESTRING(2 6, 8 15)
+LINESTRING(1 -2, 4 -5)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords3.testcase b/libspatialite/test/sql_stmt_tests/scalecoords3.testcase
new file mode 100644
index 0000000..7215e0a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords3.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRINGZ
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRINGZ(1 2 1, 4 5 2)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING Z(0 0 1, 0 0 2)
+LINESTRING Z(0 0 1, 0 0 2)
+LINESTRING Z(2 6 1, 8 15 2)
+LINESTRING Z(1 -2 1, 4 -5 2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords4.testcase b/libspatialite/test/sql_stmt_tests/scalecoords4.testcase
new file mode 100644
index 0000000..8261024
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords4.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRINGM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRINGM(1 2 1, 4 5 2)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING M(0 0 1, 0 0 2)
+LINESTRING M(0 0 1, 0 0 2)
+LINESTRING M(2 6 1, 8 15 2)
+LINESTRING M(1 -2 1, 4 -5 2)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords5.testcase b/libspatialite/test/sql_stmt_tests/scalecoords5.testcase
new file mode 100644
index 0000000..7e97cd6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords5.testcase
@@ -0,0 +1,21 @@
+scale coords - LINESTRINGZM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("LINESTRINGZM(1 2 1 3, 4 5 2 4)") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+LINESTRING ZM(0 0 1 3, 0 0 2 4)
+LINESTRING ZM(0 0 1 3, 0 0 2 4)
+LINESTRING ZM(2 6 1 3, 8 15 2 4)
+LINESTRING ZM(1 -2 1 3, 4 -5 2 4)
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords6.testcase b/libspatialite/test/sql_stmt_tests/scalecoords6.testcase
new file mode 100644
index 0000000..f31ce9e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords6.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGON
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGON((1 2, 1 3, 2 3, 2 2, 1 2))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))
+POLYGON((2 6, 2 9, 4 9, 4 6, 2 6))
+POLYGON((1 -2, 1 -3, 2 -3, 2 -2, 1 -2))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords7.testcase b/libspatialite/test/sql_stmt_tests/scalecoords7.testcase
new file mode 100644
index 0000000..baada04
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords7.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZ
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZ((1 2 1, 1 3 1, 2 3 2, 2 2 2, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON Z((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON Z((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON Z((2 6 1, 2 9 1, 4 9 2, 4 6 2, 2 6 1))
+POLYGON Z((1 -2 1, 1 -3 1, 2 -3 2, 2 -2 2, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords8.testcase b/libspatialite/test/sql_stmt_tests/scalecoords8.testcase
new file mode 100644
index 0000000..a3e03c1
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords8.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONM((1 2 1, 1 3 1, 2 3 2, 2 2 2, 1 2 1))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON M((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON M((0 0 1, 0 0 1, 0 0 2, 0 0 2, 0 0 1))
+POLYGON M((2 6 1, 2 9 1, 4 9 2, 4 6 2, 2 6 1))
+POLYGON M((1 -2 1, 1 -3 1, 2 -3 2, 2 -2 2, 1 -2 1))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/scalecoords9.testcase b/libspatialite/test/sql_stmt_tests/scalecoords9.testcase
new file mode 100644
index 0000000..dcc62de
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/scalecoords9.testcase
@@ -0,0 +1,21 @@
+scale coords - POLYGONZM
+:memory: #use in-memory database
+SELECT AsText(ScaleCoords(geom, 0)), AsText(ScaleCoords(geom, 0.0)), AsText(ScaleCoords(geom, 2, 3.0)), AsText(ScaleCoords(geom, 1.0, -1)), ScaleCoords(zeroblob(20), 10), ScaleCoords(geom, "hello"), ScaleCoords(geom, 1, "hello"), ScaleCoords("foo", 2) FROM (SELECT GeomFromText("POLYGONZM((1 2 1 0 , 1 3 1 2, 2 3 2 4, 2 2 2 6, 1 2 1 0))") as geom) dummy;
+1 # rows (not including the header row)
+8 # columns
+AsText(ScaleCoords(geom, 0))
+AsText(ScaleCoords(geom, 0.0))
+AsText(ScaleCoords(geom, 2, 3.0))
+AsText(ScaleCoords(geom, 1.0, -1))
+ScaleCoords(zeroblob(20), 10)
+ScaleCoords(geom, "hello")
+ScaleCoords(geom, 1, "hello")
+ScaleCoords("foo", 2)
+POLYGON ZM((0 0 1 0, 0 0 1 2, 0 0 2 4, 0 0 2 6, 0 0 1 0))
+POLYGON ZM((0 0 1 0, 0 0 1 2, 0 0 2 4, 0 0 2 6, 0 0 1 0))
+POLYGON ZM((2 6 1 0, 2 9 1 2, 4 9 2 4, 4 6 2 6, 2 6 1 0))
+POLYGON ZM((1 -2 1 0, 1 -3 1 2, 2 -3 2 4, 2 -2 2 6, 1 -2 1 0))
+(NULL)
+(NULL)
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/shiftcoords1.testcase b/libspatialite/test/sql_stmt_tests/shiftcoords1.testcase
new file mode 100644
index 0000000..31cd6d6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/shiftcoords1.testcase
@@ -0,0 +1,7 @@
+shiftcoords1
+:memory: #use in-memory database
+SELECT AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1, 3));
+1 # rows (not including the header row)
+1 # columns
+AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1, 3))
+POINT(2 5)
diff --git a/libspatialite/test/sql_stmt_tests/shiftcoords2.testcase b/libspatialite/test/sql_stmt_tests/shiftcoords2.testcase
new file mode 100644
index 0000000..23d4c76
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/shiftcoords2.testcase
@@ -0,0 +1,7 @@
+shiftcoords2
+:memory: #use in-memory database
+SELECT AsText(ShiftCoords(GeomFromText("POINT(1 2)"), -1, -3));
+1 # rows (not including the header row)
+1 # columns
+AsText(ShiftCoords(GeomFromText("POINT(1 2)"), -1, -3))
+POINT(0 -1)
diff --git a/libspatialite/test/sql_stmt_tests/shiftcoords3.testcase b/libspatialite/test/sql_stmt_tests/shiftcoords3.testcase
new file mode 100644
index 0000000..6e21650
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/shiftcoords3.testcase
@@ -0,0 +1,7 @@
+shiftcoords - bad blob (null)
+:memory: #use in-memory database
+SELECT ShiftCoords(zeroblob(4), -1, -3);
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords(zeroblob(4), -1, -3)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/shiftcoords4.testcase b/libspatialite/test/sql_stmt_tests/shiftcoords4.testcase
new file mode 100644
index 0000000..24dca2e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/shiftcoords4.testcase
@@ -0,0 +1,7 @@
+shiftcoords - text input (null)
+:memory: #use in-memory database
+SELECT ShiftCoords("shift", -1, -3);
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords("shift", -1, -3)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/shiftcoords5.testcase b/libspatialite/test/sql_stmt_tests/shiftcoords5.testcase
new file mode 100644
index 0000000..873491a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/shiftcoords5.testcase
@@ -0,0 +1,10 @@
+shiftcoords - text shift (error)
+:memory: #use in-memory database
+SELECT ShiftCoords(GeomFromText("POINT(1 2)"), 1, "three");
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords(GeomFromText("POINT(1 2)"), 1, "three")
+(NULL)
+
+
+
diff --git a/libspatialite/test/sql_stmt_tests/shiftcoords6.testcase b/libspatialite/test/sql_stmt_tests/shiftcoords6.testcase
new file mode 100644
index 0000000..67340a8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/shiftcoords6.testcase
@@ -0,0 +1,7 @@
+shiftcoords - text shift both (error)
+:memory: #use in-memory database
+SELECT ShiftCoords(GeomFromText("POINT(1 2)"), "text", "three");
+1 # rows (not including the header row)
+1 # columns
+ShiftCoords(GeomFromText("POINT(1 2)"), "text", "three")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/shiftcoords7.testcase b/libspatialite/test/sql_stmt_tests/shiftcoords7.testcase
new file mode 100644
index 0000000..9076ea7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/shiftcoords7.testcase
@@ -0,0 +1,7 @@
+shiftcoords - float shift
+:memory: #use in-memory database
+SELECT AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1.4, 3.9));
+1 # rows (not including the header row)
+1 # columns
+AsText(ShiftCoords(GeomFromText("POINT(1 2)"), 1.4, 3.9))
+POINT(2.4 5.9)
diff --git a/libspatialite/test/sql_stmt_tests/sign0.testcase b/libspatialite/test/sql_stmt_tests/sign0.testcase
new file mode 100644
index 0000000..4603047
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sign0.testcase
@@ -0,0 +1,7 @@
+sign0
+:memory:
+SELECT sign(0); # the SQL to run
+1 # rows
+1 # column
+sign(0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sign00.testcase b/libspatialite/test/sql_stmt_tests/sign00.testcase
new file mode 100644
index 0000000..6916676
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sign00.testcase
@@ -0,0 +1,7 @@
+sign00
+:memory:
+SELECT sign(0.0); # the SQL to run
+1 # rows
+1 # column
+sign(0.0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sign01.testcase b/libspatialite/test/sql_stmt_tests/sign01.testcase
new file mode 100644
index 0000000..c371cb3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sign01.testcase
@@ -0,0 +1,7 @@
+sign01
+:memory:
+SELECT sign(0.1); # the SQL to run
+1 # rows
+1 # column
+sign(0.1) # this is the header row
+1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sign10.testcase b/libspatialite/test/sql_stmt_tests/sign10.testcase
new file mode 100644
index 0000000..78a4c48
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sign10.testcase
@@ -0,0 +1,7 @@
+sign10
+:memory:
+SELECT sign(1.0); # the SQL to run
+1 # rows
+1 # column
+sign(1.0) # this is the header row
+1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/signeg.testcase b/libspatialite/test/sql_stmt_tests/signeg.testcase
new file mode 100644
index 0000000..8f7d982
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/signeg.testcase
@@ -0,0 +1,7 @@
+sign-neg
+:memory:
+SELECT sign(-1.0); # the SQL to run
+1 # rows
+1 # column
+sign(-1.0) # this is the header row
+-1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/signeg2.testcase b/libspatialite/test/sql_stmt_tests/signeg2.testcase
new file mode 100644
index 0000000..a41b35f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/signeg2.testcase
@@ -0,0 +1,7 @@
+sign-neg2
+:memory:
+SELECT sign(-2.0); # the SQL to run
+1 # rows
+1 # column
+sign(-2.0) # this is the header row
+-1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/signeg2int.testcase b/libspatialite/test/sql_stmt_tests/signeg2int.testcase
new file mode 100644
index 0000000..f644772
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/signeg2int.testcase
@@ -0,0 +1,7 @@
+sign-neg2int
+:memory:
+SELECT sign(-2); # the SQL to run
+1 # rows
+1 # column
+sign(-2) # this is the header row
+-1.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/signtext.testcase b/libspatialite/test/sql_stmt_tests/signtext.testcase
new file mode 100644
index 0000000..0668d73
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/signtext.testcase
@@ -0,0 +1,7 @@
+sign-text
+:memory:
+SELECT sign("text"); # the SQL to run
+1 # rows
+1 # column
+sign("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sin-pi.testcase b/libspatialite/test/sql_stmt_tests/sin-pi.testcase
new file mode 100644
index 0000000..27784a8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sin-pi.testcase
@@ -0,0 +1,7 @@
+sin(-pi)
+:memory: #use in-memory database
+SELECT 1 + sin(-pi());
+1 # rows (not including the header row)
+1 # columns
+1 + sin(-pi()) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/sin-pi2.testcase b/libspatialite/test/sql_stmt_tests/sin-pi2.testcase
new file mode 100644
index 0000000..310ef51
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sin-pi2.testcase
@@ -0,0 +1,7 @@
+sin(-pi/2)
+:memory: #use in-memory database
+SELECT sin(-pi()/2);
+1 # rows (not including the header row)
+1 # columns
+sin(-pi()/2) # header
+-1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/sin-text.testcase b/libspatialite/test/sql_stmt_tests/sin-text.testcase
new file mode 100644
index 0000000..12b274b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sin-text.testcase
@@ -0,0 +1,7 @@
+sin(text)
+:memory: #use in-memory database
+SELECT sin("text");
+1 # rows (not including the header row)
+1 # columns
+sin("text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/sin0.testcase b/libspatialite/test/sql_stmt_tests/sin0.testcase
new file mode 100644
index 0000000..5fc40f4
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sin0.testcase
@@ -0,0 +1,7 @@
+sin(0)
+:memory: #use in-memory database
+SELECT sin(0);
+1 # rows (not including the header row)
+1 # columns
+sin(0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/sin00.testcase b/libspatialite/test/sql_stmt_tests/sin00.testcase
new file mode 100644
index 0000000..1c00940
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sin00.testcase
@@ -0,0 +1,7 @@
+sin(0.0)
+:memory: #use in-memory database
+SELECT sin(0.0);
+1 # rows (not including the header row)
+1 # columns
+sin(0.0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer1.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer1.testcase
new file mode 100644
index 0000000..2c710df
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer1.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - bad args (point, left side)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("Point(1 2)", 4326), 3, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("Point(1 2)", 4326), 3, 1))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer11.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer11.testcase
new file mode 100644
index 0000000..438d13b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer11.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - closed LINESTRING, int radius, left side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20, 1 20, 1 0, 0 0)"), 3, 1))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20, 1 20, 1 0, 0 0)"), 3, 1))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer12.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer12.testcase
new file mode 100644
index 0000000..97418a9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer12.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - POLYGON, int radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer13.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer13.testcase
new file mode 100644
index 0000000..97418a9
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer13.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - POLYGON, int radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("POLYGON((0 0, 0 20, 1 20, 1 0, 0 0))"), 3, 0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer14.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer14.testcase
new file mode 100644
index 0000000..353b420
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer14.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - toxic blob
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 3, 0))
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"), 3, 0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer2.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer2.testcase
new file mode 100644
index 0000000..a35f3b3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer2.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, int radius, left side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 1));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 1))
+POLYGON((0 20, 0 0, -3 0, -3 20, 0 20))
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer3.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer3.testcase
new file mode 100644
index 0000000..3be0d22
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer3.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, int radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 0))
+POLYGON((0 0, 0 20, 3 20, 3 0, 0 0))
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer4.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer4.testcase
new file mode 100644
index 0000000..5579388
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer4.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, float radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3.5, 0))
+POLYGON((0 0, 0 20, 3.5 20, 3.5 0, 0 0))
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer5.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer5.testcase
new file mode 100644
index 0000000..0c04149
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer5.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - text arg, float radius, right side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer("hello", 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer("hello", 3.5, 0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer6.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer6.testcase
new file mode 100644
index 0000000..07b4828
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer6.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - bad blob, float radius, right side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(zeroblob(20), 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(zeroblob(20), 3.5, 0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer7.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer7.testcase
new file mode 100644
index 0000000..299a96b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer7.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING -X, float radius, right side
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 20, 0 0)"), 3.5, 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 20, 0 0)"), 3.5, 0))
+POLYGON((0 20, 0 0, -3.5 0, -3.5 20, 0 20))
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer8.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer8.testcase
new file mode 100644
index 0000000..1b57f29
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer8.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, bad radius, right side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), "foo", 0));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), "foo", 0))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/singlesidedbuffer9.testcase b/libspatialite/test/sql_stmt_tests/singlesidedbuffer9.testcase
new file mode 100644
index 0000000..397d2f6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/singlesidedbuffer9.testcase
@@ -0,0 +1,7 @@
+singlesidedbuffer - LINESTRING X, int radius, bad side (error)
+:memory: #use in-memory database
+SELECT AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 3.5));
+1 # rows (not including the header row)
+1 # columns
+AsText(SingleSidedBuffer(GeomFromText("LINESTRING(0 0, 0 20)"), 3, 3.5))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/sinpi.testcase b/libspatialite/test/sql_stmt_tests/sinpi.testcase
new file mode 100644
index 0000000..9b8f8c3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sinpi.testcase
@@ -0,0 +1,7 @@
+sin(pi)
+:memory: #use in-memory database
+SELECT 1 + sin(pi());
+1 # rows (not including the header row)
+1 # columns
+1 + sin(pi()) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/sinpi2.testcase b/libspatialite/test/sql_stmt_tests/sinpi2.testcase
new file mode 100644
index 0000000..b11de6f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sinpi2.testcase
@@ -0,0 +1,7 @@
+sin(pi/2)
+:memory: #use in-memory database
+SELECT sin(pi()/2);
+1 # rows (not including the header row)
+1 # columns
+sin(pi()/2) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/sqrt-1.testcase b/libspatialite/test/sql_stmt_tests/sqrt-1.testcase
new file mode 100644
index 0000000..547f894
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sqrt-1.testcase
@@ -0,0 +1,7 @@
+sqrt(-1)
+:memory:
+SELECT sqrt(-1); # the SQL to run
+1 # rows
+1 # column
+sqrt(-1) # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sqrt-10.testcase b/libspatialite/test/sql_stmt_tests/sqrt-10.testcase
new file mode 100644
index 0000000..6308f3f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sqrt-10.testcase
@@ -0,0 +1,7 @@
+sqrt(-1.0)
+:memory:
+SELECT sqrt(-1.0); # the SQL to run
+1 # rows
+1 # column
+sqrt(-1.0) # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sqrt-64.testcase b/libspatialite/test/sql_stmt_tests/sqrt-64.testcase
new file mode 100644
index 0000000..9497eed
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sqrt-64.testcase
@@ -0,0 +1,7 @@
+sqrt(64)
+:memory:
+SELECT sqrt(64); # the SQL to run
+1 # rows
+1 # column
+sqrt(64) # this is the header row
+8.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sqrt-640.testcase b/libspatialite/test/sql_stmt_tests/sqrt-640.testcase
new file mode 100644
index 0000000..ad69f51
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sqrt-640.testcase
@@ -0,0 +1,7 @@
+sqrt(64.0)
+:memory:
+SELECT sqrt(64.0); # the SQL to run
+1 # rows
+1 # column
+sqrt(64.0) # this is the header row
+8.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sqrt-text.testcase b/libspatialite/test/sql_stmt_tests/sqrt-text.testcase
new file mode 100644
index 0000000..23d7beb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sqrt-text.testcase
@@ -0,0 +1,7 @@
+sqrt(text)
+:memory:
+SELECT sqrt("text"); # the SQL to run
+1 # rows
+1 # column
+sqrt("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sqrt0.testcase b/libspatialite/test/sql_stmt_tests/sqrt0.testcase
new file mode 100644
index 0000000..23d7beb
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sqrt0.testcase
@@ -0,0 +1,7 @@
+sqrt(text)
+:memory:
+SELECT sqrt("text"); # the SQL to run
+1 # rows
+1 # column
+sqrt("text") # this is the header row
+(NULL) # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/sqrt00.testcase b/libspatialite/test/sql_stmt_tests/sqrt00.testcase
new file mode 100644
index 0000000..9f9dbc5
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/sqrt00.testcase
@@ -0,0 +1,7 @@
+sqrt(0)
+:memory:
+SELECT sqrt(0); # the SQL to run
+1 # rows
+1 # column
+sqrt(0) # this is the header row
+0.0 # this is really the result
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/st_area1.testcase b/libspatialite/test/sql_stmt_tests/st_area1.testcase
new file mode 100644
index 0000000..db47265
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area1.testcase
@@ -0,0 +1,7 @@
+ST_Area - Polygon with 1 interior
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"))
+12.0 # 16.0 for the exterior, 4.0 for the interior
diff --git a/libspatialite/test/sql_stmt_tests/st_area2.testcase b/libspatialite/test/sql_stmt_tests/st_area2.testcase
new file mode 100644
index 0000000..dc297ea
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area2.testcase
@@ -0,0 +1,7 @@
+ST_Area - Simple Polygon
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"))
+16.0
diff --git a/libspatialite/test/sql_stmt_tests/st_area3.testcase b/libspatialite/test/sql_stmt_tests/st_area3.testcase
new file mode 100644
index 0000000..194d9fd
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area3.testcase
@@ -0,0 +1,7 @@
+ST_Area - Linestring
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"))
+0.0
diff --git a/libspatialite/test/sql_stmt_tests/st_area4.testcase b/libspatialite/test/sql_stmt_tests/st_area4.testcase
new file mode 100644
index 0000000..755bbfa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area4.testcase
@@ -0,0 +1,7 @@
+ST_Area - Linestring not closed
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"))
+0.0
diff --git a/libspatialite/test/sql_stmt_tests/st_area5.testcase b/libspatialite/test/sql_stmt_tests/st_area5.testcase
new file mode 100644
index 0000000..aa0737e
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area5.testcase
@@ -0,0 +1,7 @@
+ST_Area - Point
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("POINT(0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("POINT(0 0)"))
+0.0
diff --git a/libspatialite/test/sql_stmt_tests/st_area6.testcase b/libspatialite/test/sql_stmt_tests/st_area6.testcase
new file mode 100644
index 0000000..9e3c3f2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area6.testcase
@@ -0,0 +1,7 @@
+ST_Area - bad blob (error)
+:memory: #use in-memory database
+SELECT ST_Area(zeroblob(4));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(zeroblob(4))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_area7.testcase b/libspatialite/test/sql_stmt_tests/st_area7.testcase
new file mode 100644
index 0000000..b9fc315
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area7.testcase
@@ -0,0 +1,7 @@
+ST_Area - Empty linestring
+:memory: #use in-memory database
+SELECT ST_Area(GeomFromText("LINESTRING()"));
+1 # rows (not including the header row)
+1 # columns
+ST_Area(GeomFromText("LINESTRING()"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_area8.testcase b/libspatialite/test/sql_stmt_tests/st_area8.testcase
new file mode 100644
index 0000000..76c6605
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_area8.testcase
@@ -0,0 +1,7 @@
+ST_Area - text (error)
+:memory: #use in-memory database
+SELECT ST_Area("hello");
+1 # rows (not including the header row)
+1 # columns
+ST_Area("hello")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_length1.testcase b/libspatialite/test/sql_stmt_tests/st_length1.testcase
new file mode 100644
index 0000000..82f2301
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_length1.testcase
@@ -0,0 +1,7 @@
+ST_Length - Polygon with 1 interior
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))"))
+24.0
diff --git a/libspatialite/test/sql_stmt_tests/st_length2.testcase b/libspatialite/test/sql_stmt_tests/st_length2.testcase
new file mode 100644
index 0000000..b7333ca
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_length2.testcase
@@ -0,0 +1,7 @@
+ST_Length - Simple Polygon
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))"))
+16.0
diff --git a/libspatialite/test/sql_stmt_tests/st_length3.testcase b/libspatialite/test/sql_stmt_tests/st_length3.testcase
new file mode 100644
index 0000000..44ae959
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_length3.testcase
@@ -0,0 +1,7 @@
+ST_Length - Linestring
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0, 0 0)"))
+16.0
diff --git a/libspatialite/test/sql_stmt_tests/st_length4.testcase b/libspatialite/test/sql_stmt_tests/st_length4.testcase
new file mode 100644
index 0000000..ae27c54
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_length4.testcase
@@ -0,0 +1,7 @@
+ST_Length - Linestring not closed
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("LINESTRING(0 0, 0 4, 4 4, 4 0)"))
+12.0
diff --git a/libspatialite/test/sql_stmt_tests/st_length5.testcase b/libspatialite/test/sql_stmt_tests/st_length5.testcase
new file mode 100644
index 0000000..8e551b7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_length5.testcase
@@ -0,0 +1,7 @@
+ST_Length - Point
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("POINT(0 0)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("POINT(0 0)"))
+0.0
diff --git a/libspatialite/test/sql_stmt_tests/st_length6.testcase b/libspatialite/test/sql_stmt_tests/st_length6.testcase
new file mode 100644
index 0000000..e72696b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_length6.testcase
@@ -0,0 +1,7 @@
+ST_Length - bad blob (error)
+:memory: #use in-memory database
+SELECT ST_Length(zeroblob(4));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(zeroblob(4))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_length7.testcase b/libspatialite/test/sql_stmt_tests/st_length7.testcase
new file mode 100644
index 0000000..56fa9ed
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_length7.testcase
@@ -0,0 +1,7 @@
+ST_Length - Empty linestring
+:memory: #use in-memory database
+SELECT ST_Length(GeomFromText("LINESTRING()"));
+1 # rows (not including the header row)
+1 # columns
+ST_Length(GeomFromText("LINESTRING()"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_m1.testcase b/libspatialite/test/sql_stmt_tests/st_m1.testcase
new file mode 100644
index 0000000..81dddfc
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_m1.testcase
@@ -0,0 +1,7 @@
+ST_M1
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("POINTZM(136 -35 635.2 10.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("POINTZM(136 -35 635.2 10.2)"))
+10.2
diff --git a/libspatialite/test/sql_stmt_tests/st_m2.testcase b/libspatialite/test/sql_stmt_tests/st_m2.testcase
new file mode 100644
index 0000000..ae2f751
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_m2.testcase
@@ -0,0 +1,8 @@
+ST_M2
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("POINTZ(136 -35 635.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("POINTZ(136 -35 635.2)"))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_m3.testcase b/libspatialite/test/sql_stmt_tests/st_m3.testcase
new file mode 100644
index 0000000..3d7a832
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_m3.testcase
@@ -0,0 +1,7 @@
+ST_M3
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("POINTM(136 -35 -8.6)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("POINTM(136 -35 -8.6)"))
+-8.6
diff --git a/libspatialite/test/sql_stmt_tests/st_m4.testcase b/libspatialite/test/sql_stmt_tests/st_m4.testcase
new file mode 100644
index 0000000..9a189a2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_m4.testcase
@@ -0,0 +1,7 @@
+ST_M - text
+:memory: #use in-memory database
+SELECT M("hello world");
+1 # rows (not including the header row)
+1 # columns
+M("hello world")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_m5.testcase b/libspatialite/test/sql_stmt_tests/st_m5.testcase
new file mode 100644
index 0000000..3acc145
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_m5.testcase
@@ -0,0 +1,8 @@
+ST_M5
+:memory: #use in-memory database
+SELECT ST_M(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_M(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_m6.testcase b/libspatialite/test/sql_stmt_tests/st_m6.testcase
new file mode 100644
index 0000000..e8aaf50
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_m6.testcase
@@ -0,0 +1,8 @@
+ST_M6
+:memory: #use in-memory database
+SELECT ST_M(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_M(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_x1.testcase b/libspatialite/test/sql_stmt_tests/st_x1.testcase
new file mode 100644
index 0000000..2b961a2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_x1.testcase
@@ -0,0 +1,7 @@
+ST_X1
+:memory: #use in-memory database
+SELECT ST_X(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+ST_X(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+-71.1043443253471
diff --git a/libspatialite/test/sql_stmt_tests/st_x2.testcase b/libspatialite/test/sql_stmt_tests/st_x2.testcase
new file mode 100644
index 0000000..fc41755
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_x2.testcase
@@ -0,0 +1,7 @@
+ST_X2
+:memory: #use in-memory database
+SELECT X(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+X(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+-71.1043443253471
diff --git a/libspatialite/test/sql_stmt_tests/st_x3.testcase b/libspatialite/test/sql_stmt_tests/st_x3.testcase
new file mode 100644
index 0000000..8f2a6e2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_x3.testcase
@@ -0,0 +1,7 @@
+ST_X - text
+:memory: #use in-memory database
+SELECT X("hello world");
+1 # rows (not including the header row)
+1 # columns
+X("hello world")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_x4.testcase b/libspatialite/test/sql_stmt_tests/st_x4.testcase
new file mode 100644
index 0000000..19eeebf
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_x4.testcase
@@ -0,0 +1,7 @@
+ST_X4
+:memory: #use in-memory database
+SELECT ST_X(GeomFromText("POINTM(136 -35 -8.6)"));
+1 # rows (not including the header row)
+1 # columns
+ST_X(GeomFromText("POINTM(136 -35 -8.6)"))
+136.0
diff --git a/libspatialite/test/sql_stmt_tests/st_x5.testcase b/libspatialite/test/sql_stmt_tests/st_x5.testcase
new file mode 100644
index 0000000..4eaa131
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_x5.testcase
@@ -0,0 +1,8 @@
+ST_X5
+:memory: #use in-memory database
+SELECT ST_X(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_X(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_x6.testcase b/libspatialite/test/sql_stmt_tests/st_x6.testcase
new file mode 100644
index 0000000..32a65b8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_x6.testcase
@@ -0,0 +1,8 @@
+ST_X6
+:memory: #use in-memory database
+SELECT ST_X(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_X(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_y1.testcase b/libspatialite/test/sql_stmt_tests/st_y1.testcase
new file mode 100644
index 0000000..12d1e57
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_y1.testcase
@@ -0,0 +1,7 @@
+ST_Y1
+:memory: #use in-memory database
+SELECT ST_Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+ST_Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+42.3150676015829
diff --git a/libspatialite/test/sql_stmt_tests/st_y2.testcase b/libspatialite/test/sql_stmt_tests/st_y2.testcase
new file mode 100644
index 0000000..8f265ff
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_y2.testcase
@@ -0,0 +1,7 @@
+ST_Y2
+:memory: #use in-memory database
+SELECT Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+Y(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+42.3150676015829
diff --git a/libspatialite/test/sql_stmt_tests/st_y3.testcase b/libspatialite/test/sql_stmt_tests/st_y3.testcase
new file mode 100644
index 0000000..6058e69
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_y3.testcase
@@ -0,0 +1,7 @@
+ST_Y - text
+:memory: #use in-memory database
+SELECT Y("hello world");
+1 # rows (not including the header row)
+1 # columns
+Y("hello world")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_y4.testcase b/libspatialite/test/sql_stmt_tests/st_y4.testcase
new file mode 100644
index 0000000..63bb14d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_y4.testcase
@@ -0,0 +1,8 @@
+ST_Y4
+:memory: #use in-memory database
+SELECT ST_Y(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Y(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_y5.testcase b/libspatialite/test/sql_stmt_tests/st_y5.testcase
new file mode 100644
index 0000000..eba94e7
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_y5.testcase
@@ -0,0 +1,8 @@
+ST_Y5
+:memory: #use in-memory database
+SELECT ST_Y(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_Y(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_z1.testcase b/libspatialite/test/sql_stmt_tests/st_z1.testcase
new file mode 100644
index 0000000..f442d02
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_z1.testcase
@@ -0,0 +1,7 @@
+ST_Z1
+:memory: #use in-memory database
+SELECT ST_Z(GeomFromText("POINTZ(136 -35 635.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(GeomFromText("POINTZ(136 -35 635.2)"))
+635.2
diff --git a/libspatialite/test/sql_stmt_tests/st_z2.testcase b/libspatialite/test/sql_stmt_tests/st_z2.testcase
new file mode 100644
index 0000000..9a98ff3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_z2.testcase
@@ -0,0 +1,7 @@
+ST_Z2
+:memory: #use in-memory database
+SELECT Z(MakePoint(-71.1043443253471, 42.3150676015829, 4326));
+1 # rows (not including the header row)
+1 # columns
+Z(MakePoint(-71.1043443253471, 42.3150676015829, 4326))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_z3.testcase b/libspatialite/test/sql_stmt_tests/st_z3.testcase
new file mode 100644
index 0000000..b5effa6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_z3.testcase
@@ -0,0 +1,7 @@
+ST_Z - text
+:memory: #use in-memory database
+SELECT Z("hello world");
+1 # rows (not including the header row)
+1 # columns
+Z("hello world")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/st_z4.testcase b/libspatialite/test/sql_stmt_tests/st_z4.testcase
new file mode 100644
index 0000000..3f38a13
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_z4.testcase
@@ -0,0 +1,7 @@
+ST_Z4
+:memory: #use in-memory database
+SELECT ST_Z(GeomFromText("POINTZM(136 -35 635.2 10.2)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(GeomFromText("POINTZM(136 -35 635.2 10.2)"))
+635.2
diff --git a/libspatialite/test/sql_stmt_tests/st_z5.testcase b/libspatialite/test/sql_stmt_tests/st_z5.testcase
new file mode 100644
index 0000000..fdb5b85
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_z5.testcase
@@ -0,0 +1,8 @@
+ST_Z5
+:memory: #use in-memory database
+SELECT ST_Z(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(GeomFromText("LINESTRINGZ(136 -35 635.2, 135.2 -34.5 675.1)"))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/st_z6.testcase b/libspatialite/test/sql_stmt_tests/st_z6.testcase
new file mode 100644
index 0000000..f56d832
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/st_z6.testcase
@@ -0,0 +1,8 @@
+ST_Z6
+:memory: #use in-memory database
+SELECT ST_Z(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+ST_Z(zeroblob(10))
+(NULL)
+
diff --git a/libspatialite/test/sql_stmt_tests/startpoint1.testcase b/libspatialite/test/sql_stmt_tests/startpoint1.testcase
new file mode 100644
index 0000000..b15eed2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/startpoint1.testcase
@@ -0,0 +1,7 @@
+startpoint - regular LINESTRING
+:memory: #use in-memory database
+SELECT AsText(StartPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(StartPoint(GeomFromText("LINESTRING(4 0, 4 4, 8 4)")))
+POINT(4 0)
diff --git a/libspatialite/test/sql_stmt_tests/startpoint2.testcase b/libspatialite/test/sql_stmt_tests/startpoint2.testcase
new file mode 100644
index 0000000..a9a6aad
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/startpoint2.testcase
@@ -0,0 +1,7 @@
+startpoint - bad blob (error)
+:memory: #use in-memory database
+SELECT StartPoint(zeroblob(10));
+1 # rows (not including the header row)
+1 # columns
+StartPoint(zeroblob(10))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/startpoint3.testcase b/libspatialite/test/sql_stmt_tests/startpoint3.testcase
new file mode 100644
index 0000000..ef172b3
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/startpoint3.testcase
@@ -0,0 +1,7 @@
+startpoint - text input (error)
+:memory: #use in-memory database
+SELECT StartPoint("hello world");
+1 # rows (not including the header row)
+1 # columns
+StartPoint("hello world")
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/stddev.testcase b/libspatialite/test/sql_stmt_tests/stddev.testcase
new file mode 100644
index 0000000..cbaa13b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/stddev.testcase
@@ -0,0 +1,21 @@
+stddev
+sql_stmt_tests/testdb1.sqlite
+SELECT stddev_pop(a), stddev_pop(b), stddev_pop(nulls), stddev_pop(blobs), stddev_samp(a), stddev_samp(b), stddev_samp(blobs), stddev_samp(nulls) from data1;
+1 # rows (not including the header row)
+8 # columns
+stddev_pop(a)
+stddev_pop(b)
+stddev_pop(nulls)
+stddev_pop(blobs)
+stddev_samp(a)
+stddev_samp(b)
+stddev_samp(blobs)
+stddev_samp(nulls)
+10.2211654:8
+12.252709:8
+(NULL)
+(NULL)
+11.1967257:8
+13.422171:8
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/swapcoords1.testcase b/libspatialite/test/sql_stmt_tests/swapcoords1.testcase
new file mode 100644
index 0000000..717dcae
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/swapcoords1.testcase
@@ -0,0 +1,7 @@
+swapcoords1
+:memory: #use in-memory database
+SELECT AsText(SwapCoords(GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(SwapCoords(GeomFromText("POINT(1 2)")))
+POINT(2 1)
diff --git a/libspatialite/test/sql_stmt_tests/swapcoords2.testcase b/libspatialite/test/sql_stmt_tests/swapcoords2.testcase
new file mode 100644
index 0000000..8614286
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/swapcoords2.testcase
@@ -0,0 +1,7 @@
+swapcoords2
+:memory: #use in-memory database
+SELECT SwapCoords("hello");
+1 # rows (not including the header row)
+1 # columns
+SwapCoords("hello");
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/swapcoords3.testcase b/libspatialite/test/sql_stmt_tests/swapcoords3.testcase
new file mode 100644
index 0000000..b12a033
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/swapcoords3.testcase
@@ -0,0 +1,7 @@
+swapcoords3
+:memory: #use in-memory database
+SELECT SwapCoords(zeroblob(4));
+1 # rows (not including the header row)
+1 # columns
+SwapCoords(zeroblob(4));
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/swapcoords4.testcase b/libspatialite/test/sql_stmt_tests/swapcoords4.testcase
new file mode 100644
index 0000000..86e9a8c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/swapcoords4.testcase
@@ -0,0 +1,7 @@
+swapcoords4
+:memory: #use in-memory database
+SELECT AsText(SwapCoords(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(SwapCoords(GeomFromText("LINESTRING(136 -35, 135.2 -34.5, 136 -35.2, 136 -36)")));
+LINESTRING(-35 136, -34.5 135.2, -35.2 136, -36 136)
diff --git a/libspatialite/test/sql_stmt_tests/tan-pi.testcase b/libspatialite/test/sql_stmt_tests/tan-pi.testcase
new file mode 100644
index 0000000..145335b
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/tan-pi.testcase
@@ -0,0 +1,7 @@
+tan(-pi)
+:memory: #use in-memory database
+SELECT 1 + tan(-pi());
+1 # rows (not including the header row)
+1 # columns
+1 + tan(-pi()) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/tan-text.testcase b/libspatialite/test/sql_stmt_tests/tan-text.testcase
new file mode 100644
index 0000000..0c437d6
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/tan-text.testcase
@@ -0,0 +1,7 @@
+tan(text)
+:memory: #use in-memory database
+SELECT tan("text");
+1 # rows (not including the header row)
+1 # columns
+tan("text") # header
+(NULL) #result
diff --git a/libspatialite/test/sql_stmt_tests/tan0.testcase b/libspatialite/test/sql_stmt_tests/tan0.testcase
new file mode 100644
index 0000000..917a4c2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/tan0.testcase
@@ -0,0 +1,7 @@
+tan(0)
+:memory: #use in-memory database
+SELECT tan(0);
+1 # rows (not including the header row)
+1 # columns
+tan(0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/tan00.testcase b/libspatialite/test/sql_stmt_tests/tan00.testcase
new file mode 100644
index 0000000..ae17b9c
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/tan00.testcase
@@ -0,0 +1,7 @@
+tan(0.0)
+:memory: #use in-memory database
+SELECT tan(0.0);
+1 # rows (not including the header row)
+1 # columns
+tan(0.0) # header
+0.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/tanpi.testcase b/libspatialite/test/sql_stmt_tests/tanpi.testcase
new file mode 100644
index 0000000..be34bde
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/tanpi.testcase
@@ -0,0 +1,7 @@
+tan(pi)
+:memory: #use in-memory database
+SELECT 1 + tan(pi());
+1 # rows (not including the header row)
+1 # columns
+1 + tan(pi()) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/tanpi4.testcase b/libspatialite/test/sql_stmt_tests/tanpi4.testcase
new file mode 100644
index 0000000..11c98d2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/tanpi4.testcase
@@ -0,0 +1,7 @@
+tan(pi/4)
+:memory: #use in-memory database
+SELECT tan(pi()/4);
+1 # rows (not including the header row)
+1 # columns
+tan(pi()/4) # header
+1.0 #result
diff --git a/libspatialite/test/sql_stmt_tests/testdb1.sqlite b/libspatialite/test/sql_stmt_tests/testdb1.sqlite
new file mode 100644
index 0000000..cb03988
Binary files /dev/null and b/libspatialite/test/sql_stmt_tests/testdb1.sqlite differ
diff --git a/libspatialite/test/sql_stmt_tests/trivial.sqlite_RO b/libspatialite/test/sql_stmt_tests/trivial.sqlite_RO
new file mode 100644
index 0000000..85fc08f
Binary files /dev/null and b/libspatialite/test/sql_stmt_tests/trivial.sqlite_RO differ
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion1.testcase b/libspatialite/test/sql_stmt_tests/unaryunion1.testcase
new file mode 100644
index 0000000..0d914dc
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion1.testcase
@@ -0,0 +1,7 @@
+unaryunion - point
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("POINT(1 2)")));
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("POINT(1 2)")))
+POINT(1 2)
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion2.testcase b/libspatialite/test/sql_stmt_tests/unaryunion2.testcase
new file mode 100644
index 0000000..e785689
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion2.testcase
@@ -0,0 +1,7 @@
+unaryunion - points
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTION(POINT(1 2), POINT(2 3))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTION(POINT(1 2), POINT(2 3))")));
+MULTIPOINT(1 2, 2 3)
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion3.testcase b/libspatialite/test/sql_stmt_tests/unaryunion3.testcase
new file mode 100644
index 0000000..72e2b74
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion3.testcase
@@ -0,0 +1,7 @@
+unaryunion - points Z
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(1 2 3), POINTZ(2 3 4))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZ(POINTZ(1 2 3), POINTZ(2 3 4))")));
+MULTIPOINT Z(1 2 3, 2 3 4)
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion4.testcase b/libspatialite/test/sql_stmt_tests/unaryunion4.testcase
new file mode 100644
index 0000000..42631f8
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion4.testcase
@@ -0,0 +1,7 @@
+unaryunion - points M
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONM(POINTM(1 2 3), POINTM(2 3 4))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONM(POINTM(1 2 3), POINTM(2 3 4))")));
+MULTIPOINT M(1 2 0, 2 3 0)
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion5.testcase b/libspatialite/test/sql_stmt_tests/unaryunion5.testcase
new file mode 100644
index 0000000..2e6623f
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion5.testcase
@@ -0,0 +1,7 @@
+unaryunion - points ZM
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(1 2 3 1), POINTZM(2 3 4 1))")))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(GeomFromText("GEOMETRYCOLLECTIONZM(POINTZM(1 2 3 1), POINTZM(2 3 4 1))")));
+MULTIPOINT ZM(1 2 3 0, 2 3 4 0)
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion6.testcase b/libspatialite/test/sql_stmt_tests/unaryunion6.testcase
new file mode 100644
index 0000000..c25c693
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion6.testcase
@@ -0,0 +1,7 @@
+unaryunion - non-blob
+:memory: #use in-memory database
+SELECT AsText(UnaryUnion(3.14))
+1 # rows (not including the header row)
+1 # columns
+AsText(UnaryUnion(3.14))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion7.testcase b/libspatialite/test/sql_stmt_tests/unaryunion7.testcase
new file mode 100644
index 0000000..0572565
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion7.testcase
@@ -0,0 +1,7 @@
+unaryunion - bad blob
+:memory: #use in-memory database
+SELECT UnaryUnion(zeroblob(40))
+1 # rows (not including the header row)
+1 # columns
+UnaryUnion(zeroblob(40))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/unaryunion8.testcase b/libspatialite/test/sql_stmt_tests/unaryunion8.testcase
new file mode 100644
index 0000000..3698a10
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/unaryunion8.testcase
@@ -0,0 +1,7 @@
+unaryunion - toxic blob
+:memory: #use in-memory database
+SELECT UnaryUnion(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+1 # rows (not including the header row)
+1 # columns
+UnaryUnion(GeomFromText("POLYGON((136 -35, 135.2 -34.5, 136 -35.2, 136 -35, 135.2 -34.5))"))
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/us_ch_m.testcase b/libspatialite/test/sql_stmt_tests/us_ch_m.testcase
new file mode 100644
index 0000000..a12d59d
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/us_ch_m.testcase
@@ -0,0 +1,7 @@
+US chains to metres
+:memory: #use in-memory database
+SELECT CvtFromUsCh(100);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsCh(100);
+2011.684:8
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/us_ft_m.testcase b/libspatialite/test/sql_stmt_tests/us_ft_m.testcase
new file mode 100644
index 0000000..e3cdeaa
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/us_ft_m.testcase
@@ -0,0 +1,7 @@
+US feet to metres
+:memory: #use in-memory database
+SELECT CvtFromUsFt(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsFt(10);
+3.048:5
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/us_in_m.testcase b/libspatialite/test/sql_stmt_tests/us_in_m.testcase
new file mode 100644
index 0000000..883a833
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/us_in_m.testcase
@@ -0,0 +1,7 @@
+us inches to metres
+:memory: #use in-memory database
+SELECT CvtFromUsIn(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsIn(10);
+0.254:5
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/us_mi_m.testcase b/libspatialite/test/sql_stmt_tests/us_mi_m.testcase
new file mode 100644
index 0000000..549770a
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/us_mi_m.testcase
@@ -0,0 +1,7 @@
+US miles to metres
+:memory: #use in-memory database
+SELECT CvtFromUsMi(1.0);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsMi(1.0);
+1609.347:8
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/us_yd_m.testcase b/libspatialite/test/sql_stmt_tests/us_yd_m.testcase
new file mode 100644
index 0000000..5b85e59
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/us_yd_m.testcase
@@ -0,0 +1,7 @@
+US yards to metres
+:memory: #use in-memory database
+SELECT CvtFromUsYd(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromUsYd(10);
+9.144:5
\ No newline at end of file
diff --git a/libspatialite/test/sql_stmt_tests/variance.testcase b/libspatialite/test/sql_stmt_tests/variance.testcase
new file mode 100644
index 0000000..33f9ae2
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/variance.testcase
@@ -0,0 +1,21 @@
+variance
+sql_stmt_tests/testdb1.sqlite
+SELECT var_pop(a), var_pop(b), var_pop(nulls), var_pop(blobs), var_samp(a), var_samp(b), var_samp(blobs), var_samp(nulls) from data1;
+1 # rows (not including the header row)
+8 # columns
+var_pop(a)
+var_pop(b)
+var_pop(nulls)
+var_pop(blobs)
+var_samp(a)
+var_samp(b)
+var_samp(blobs)
+var_samp(nulls)
+104.472222222222:10
+150.12888888888:10
+(NULL)
+(NULL)
+125.36666666666:10
+180.15466666666:10
+(NULL)
+(NULL)
diff --git a/libspatialite/test/sql_stmt_tests/yd_m.testcase b/libspatialite/test/sql_stmt_tests/yd_m.testcase
new file mode 100644
index 0000000..f09d163
--- /dev/null
+++ b/libspatialite/test/sql_stmt_tests/yd_m.testcase
@@ -0,0 +1,7 @@
+yards to metres
+:memory: #use in-memory database
+SELECT CvtFromYd(10);
+1 # rows (not including the header row)
+1 # columns
+CvtFromYd(10);
+9.144
\ No newline at end of file
diff --git a/libspatialite/test/testcase1.csv b/libspatialite/test/testcase1.csv
new file mode 100644
index 0000000..ad474b2
--- /dev/null
+++ b/libspatialite/test/testcase1.csv
@@ -0,0 +1,17 @@
+2172515	"Candelo"	"Candelo"	"Candelo,Kandelo,Кандело"	-36.76667	149.68333	"P"	"PPL"	"AU"		2	10550			895		152	"Australia/Sydney"	"2011-08-08"
+2172516	"Canbrae"	"Canbrae"		-28.21667	149.1	"S"	"FRM"	"AU"		4	33610			0		212	"Australia/Brisbane"	"2011-06-04"
+2172517	"Canberra"	"Canberra"	"Camberra,Canberra,Gorad Kanbera,Kamberra,Kambra,Kampera,Kanapera,Kanbera,Kanbero,Kanberra,Kanberrae,Kanbérra,Kānapera,kaenbeola,kainabara,kan pei la,kanbra,kanpara,kenabera,kyanabera,kyanbera,kynbra,qnbrh,Καμπέρα,Горад Канбера,Канбера,Канберрæ,Канберра,Канбє́ра,Կանբեռա,קאנבערא,קנברה,كانبرا,کانبرا,کینبرا,कॅनबेरा,कैनबरा,ক্যানবেরা,கான்பரா,แคนเบอร์รา,ཁན་པེ་ར།,კანბერა,ካንበራ,キャンベラ,坎培拉,堪培拉,캔버라"	-35.28346	149.12807	"P"	"PPLC"	"AU"		1				327700		609	"Australia/Sydney"	"2009-08-04"
+2172518	"Canberra"	"Canberra"		-26.78333	148.43333	"S"	"FRM"	"AU"		4	34860			0		386	"Australia/Brisbane"	"2011-06-04"
+2172519	"Canbelego"	"Canbelego"		-31.56667	146.31667	"P"	"PPL"	"AU"		2	11750			0		347	"Australia/Sydney"	"2011-06-04"
+2172520	"Canaway Range"	"Canaway Range"		-26.11667	142.86667	"T"	"MTS"	"AU"		4				0		175	"Australia/Brisbane"	"1993-12-30"
+2172521	"Mount Canaway"	"Mount Canaway"		-26	143.91667	"T"	"MT"	"AU"		4				0		305	"Australia/Brisbane"	"1993-12-30"
+2172522	"Canary Island South"	"Canary Island South"		-36.05	143.86667	"P"	"PPL"	"AU"		7	23940			0		124	"Australia/Melbourne"	"2011-06-04"
+2172523	"Canary Island"	"Canary Island"		-35.98333	143.85	"P"	"PPL"	"AU"		7	23940			0		105	"Australia/Melbourne"	"2011-06-04"
+2172524	"Canary Creek"	"Canary Creek"		-24.28333	148.61667	"H"	"STM"	"AU"		4				0		221	"Australia/Brisbane"	"1993-12-30"
+2172525	"Canara Creek"	"Canara Creek"		-26.36667	144.23333	"H"	"STM"	"AU"		4				0		269	"Australia/Brisbane"	"1993-12-30"
+2172526	"Canally"	"Canally"		-34.7	143.43333	"S"	"FRM"	"AU"		2	10300			0		62	"Australia/Sydney"	"2011-06-04"
+2172527	"Canally"	"Canally"		-32.61667	144.38333	"S"	"FRM"	"AU"		2	11700			0		93	"Australia/Sydney"	"2011-06-04"
+2172528	"Canal Lagoon"	"Canal Lagoon"		-35.21667	150.55	"H"	"LGN"	"AU"		2				0		-9999	"Australia/Sydney"	"1993-12-30"
+2172529	"Canal Creek Bore"	"Canal Creek Bore"		-20.63333	140.9	"H"	"WLL"	"AU"		4				0		252	"Australia/Brisbane"	"1993-12-30"
+2172530	"Canal Creek"	"Canal Creek"		-27.86667	151.51667	"H"	"STM"	"AU"		4				0		459	"Australia/Brisbane"	"1993-12-30"
+2172531	"Canal Creek"	"Canal Creek"		-25.91667	149.48333	"H"	"STM"	"AU"		4				0		287	"Australia/Brisbane"	"1993-12-30"
diff --git a/libspatialite/test/testcase1.xls b/libspatialite/test/testcase1.xls
new file mode 100644
index 0000000..2f12b10
Binary files /dev/null and b/libspatialite/test/testcase1.xls differ
diff --git a/spatialite-tools/Makefile-static-Linux b/spatialite-tools/Makefile-static-Linux
index e5c045b..c59ccd6 100644
--- a/spatialite-tools/Makefile-static-Linux
+++ b/spatialite-tools/Makefile-static-Linux
@@ -7,10 +7,10 @@ all: ./static_bin/spatialite ./static_bin/spatialite_tool \
 	./static_bin/spatialite_network ./static_bin/shp_doctor \
 	./static_bin/exif_loader ./static_bin/spatialite_osm_net \
 	./static_bin/spatialite_osm_map ./static_bin/spatialite_gml \
-	./static_bin/spatialite_osm_raw
+	./static_bin/spatialite_osm_raw ./static_bin/spatialite_osm_filter
 
-./static_bin/spatialite: shell.o shapefiles.o
-	$(CC) shell.o shapefiles.o -o ./static_bin/spatialite \
+./static_bin/spatialite: shell.o
+	$(CC) shell.o -o ./static_bin/spatialite \
 	/usr/local/lib/libspatialite.a \
 	/usr/lib/libproj.a \
 	/usr/lib/libgeos_c.a \
@@ -21,8 +21,8 @@ all: ./static_bin/spatialite ./static_bin/spatialite_tool \
 	-lstdc++ -lm -lpthread -ldl
 	strip --strip-all ./static_bin/spatialite
 
-./static_bin/spatialite_tool: shapefiles.o spatialite_tool.o
-	$(CC) shapefiles.o spatialite_tool.o -o ./static_bin/spatialite_tool \
+./static_bin/spatialite_tool: spatialite_tool.o
+	$(CC) spatialite_tool.o -o ./static_bin/spatialite_tool \
 	/usr/local/lib/libspatialite.a \
 	/usr/lib/libproj.a \
 	/usr/lib/libgeos_c.a \
@@ -103,3 +103,13 @@ all: ./static_bin/spatialite ./static_bin/spatialite_tool \
 	/usr/lib/libexpat.a \
 	-lstdc++ -lm -lpthread -ldl
 	strip --strip-all ./static_bin/spatialite_osm_raw
+
+./static_bin/spatialite_osm_filter: spatialite_osm_filter.o
+	$(CC) spatialite_osm_filter.o -o ./static_bin/spatialite_osm_filter \
+	/usr/local/lib/libspatialite.a \
+	/usr/lib/libproj.a \
+	/usr/lib/libgeos_c.a \
+	/usr/lib/libgeos.a \
+	/usr/local/lib/libfreexl.a \
+	-lstdc++ -lm -lpthread -ldl
+	strip --strip-all ./static_bin/spatialite_osm_filter
diff --git a/spatialite-tools/Makefile-static-MacOsX b/spatialite-tools/Makefile-static-MacOsX
index bb7989c..e4f04d5 100644
--- a/spatialite-tools/Makefile-static-MacOsX
+++ b/spatialite-tools/Makefile-static-MacOsX
@@ -7,10 +7,10 @@ all: ./static_bin/spatialite ./static_bin/spatialite_tool \
 	./static_bin/spatialite_network ./static_bin/shp_doctor \
 	./static_bin/exif_loader ./static_bin/spatialite_osm_net \
 	./static_bin/spatialite_osm_map ./static_bin/spatialite_gml \
-	./static_bin/spatialite_osm_raw
+	./static_bin/spatialite_osm_raw ./static_bin/spatialite_osm_filter
 
-./static_bin/spatialite: shell.o shapefiles.o
-	$(CC) shell.o shapefiles.o -o ./static_bin/spatialite \
+./static_bin/spatialite: shell.o
+	$(CC) shell.o -o ./static_bin/spatialite \
 	/usr/local/lib/libspatialite.a \
 	/opt/local/lib/libproj.a \
 	/opt/local/lib/libgeos_c.a \
@@ -23,8 +23,8 @@ all: ./static_bin/spatialite ./static_bin/spatialite_tool \
 	-lstdc++ -lm -lpthread -ldl
 	strip ./static_bin/spatialite
 
-./static_bin/spatialite_tool: shapefiles.o spatialite_tool.o
-	$(CC) shapefiles.o spatialite_tool.o -o ./static_bin/spatialite_tool \
+./static_bin/spatialite_tool: spatialite_tool.o
+	$(CC) spatialite_tool.o -o ./static_bin/spatialite_tool \
 	/usr/local/lib/libspatialite.a \
 	/opt/local/lib/libproj.a \
 	/opt/local/lib/libgeos_c.a \
@@ -120,3 +120,15 @@ all: ./static_bin/spatialite ./static_bin/spatialite_tool \
 	/opt/local/lib/libexpat.a \
 	-lstdc++ -lm -lpthread -ldl
 	strip ./static_bin/spatialite_osm_raw
+
+./static_bin/spatialite_osm_filter: spatialite_osm_filter.o
+	$(CC) spatialite_osm_filter.o -o ./static_bin/spatialite_osm_filter \
+	/usr/local/lib/libspatialite.a \
+	/opt/local/lib/libproj.a \
+	/opt/local/lib/libgeos_c.a \
+	/opt/local/lib/libgeos.a \
+	/usr/local/lib/libfreexl.a \
+	/opt/local/lib/libiconv.a \
+	/opt/local/lib/libcharset.a \
+	-lstdc++ -lm -lpthread -ldl
+	strip ./static_bin/spatialite_osm_filter
diff --git a/spatialite-tools/Makefile-static-MinGW b/spatialite-tools/Makefile-static-MinGW
index 8ecdcda..6a98707 100644
--- a/spatialite-tools/Makefile-static-MinGW
+++ b/spatialite-tools/Makefile-static-MinGW
@@ -9,10 +9,10 @@ all: ./static_bin/spatialite.exe ./static_bin/spatialite_tool.exe \
 	./static_bin/spatialite_network.exe ./static_bin/shp_doctor.exe \
 	./static_bin/exif_loader.exe ./static_bin/spatialite_osm_net.exe \
 	./static_bin/spatialite_osm_map.exe ./static_bin/spatialite_gml.exe \
-	./static_bin/spatialite_osm_raw.exe
+	./static_bin/spatialite_osm_raw.exe ./static_bin/spatialite_osm_filter.exe
 
-./static_bin/spatialite.exe: shell.o shapefiles.o
-	$(GG) shell.o shapefiles.o -o ./static_bin/spatialite.exe \
+./static_bin/spatialite.exe: shell.o 
+	$(GG) shell.o -o ./static_bin/spatialite.exe \
 	/usr/local/lib/libspatialite.a \
 	/usr/local/lib/libproj.a \
 	/usr/local/lib/libgeos_c.a \
@@ -22,8 +22,8 @@ all: ./static_bin/spatialite.exe ./static_bin/spatialite_tool.exe \
 	-lm -static-libstdc++ -static-libgcc
 	strip --strip-all ./static_bin/spatialite.exe
 
-./static_bin/spatialite_tool.exe: shapefiles.o spatialite_tool.o
-	$(GG) shapefiles.o spatialite_tool.o -o \
+./static_bin/spatialite_tool.exe: spatialite_tool.o
+	$(GG) spatialite_tool.o -o \
 	./static_bin/spatialite_tool.exe \
 	/usr/local/lib/libspatialite.a \
 	/usr/local/lib/libproj.a \
@@ -114,12 +114,20 @@ all: ./static_bin/spatialite.exe ./static_bin/spatialite_tool.exe \
 	-lm -static-libstdc++ -static-libgcc
 	strip --strip-all ./static_bin/spatialite_osm_raw.exe
 
+./static_bin/spatialite_osm_filter.exe: spatialite_osm_filter.o
+	$(GG) spatialite_osm_filter.o -o ./static_bin/spatialite_osm_filter.exe \
+	/usr/local/lib/libspatialite.a \
+	/usr/local/lib/libproj.a \
+	/usr/local/lib/libgeos_c.a \
+	/usr/local/lib/libgeos.a \
+	/usr/local/lib/libfreexl.a \
+	/usr/local/lib/libiconv.a \
+	-lm -static-libstdc++ -static-libgcc
+	strip --strip-all ./static_bin/spatialite_osm_filter.exe
+
 shell.o: 
 	$(CC) $(CFLAGS) shell.c -c
 	
-shepefiles.o: 
-	$(CC) $(CFLAGS) shapefiles.c -c
-
 spatialite_tool.o:
 	$(CC) $(CFLAGS) spatialite_tool.c -c
 
@@ -143,3 +151,6 @@ spatialite_gml.o:
 
 spatialite_osm_raw.o:
 	$(CC) $(CFLAGS) spatialite_osm_raw.c -c
+
+spatialite_osm_filter.o:
+	$(CC) $(CFLAGS) spatialite_osm_filter.c -c
diff --git a/spatialite-tools/Makefile.am b/spatialite-tools/Makefile.am
index d05e0b3..c4d3fad 100644
--- a/spatialite-tools/Makefile.am
+++ b/spatialite-tools/Makefile.am
@@ -1,7 +1,8 @@
 ACLOCAL_AMFLAGS = -I m4
 
 AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 \
-	-D_LARGEFILE_SOURCE=1 @LIBSPATIALITE_CFLAGS@
+	-D_LARGEFILE_SOURCE=1 @LIBSPATIALITE_CFLAGS@ \
+	@LIBFREEXL_CFLAGS@
 
 bin_PROGRAMS = spatialite \
 	spatialite_tool \
@@ -11,29 +12,36 @@ bin_PROGRAMS = spatialite \
 	spatialite_osm_net \
 	spatialite_osm_map \
 	spatialite_osm_raw \
+	spatialite_osm_filter \
 	spatialite_gml
 
 INCLUDES = @CFLAGS@
 
-spatialite_SOURCES = shell.c shapefiles.c
-spatialite_tool_SOURCES = spatialite_tool.c shapefiles.c
+spatialite_SOURCES = shell.c
+spatialite_tool_SOURCES = spatialite_tool.c
 spatialite_network_SOURCES = spatialite_network.c
 shp_doctor_SOURCES = shp_doctor.c
 exif_loader_SOURCES = exif_loader.c
 spatialite_osm_net_SOURCES = spatialite_osm_net.c
 spatialite_osm_map_SOURCES = spatialite_osm_map.c
 spatialite_osm_raw_SOURCES = spatialite_osm_raw.c
+spatialite_osm_filter_SOURCES = spatialite_osm_filter.c
 spatialite_gml_SOURCES = spatialite_gml.c
 
 spatialite_osm_map_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	-lexpat
 spatialite_osm_raw_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	-lexpat
 spatialite_gml_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	-lexpat 
 spatialite_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	@READLINE_LIBS@
-LDADD = @LIBSPATIALITE_LIBS@ 
+LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@
 
 EXTRA_DIST = makefile.vc nmake.opt \
 	Makefile-static-MinGW \
diff --git a/spatialite-tools/Makefile.in b/spatialite-tools/Makefile.in
index 4e70885..24c7932 100644
--- a/spatialite-tools/Makefile.in
+++ b/spatialite-tools/Makefile.in
@@ -38,7 +38,7 @@ bin_PROGRAMS = spatialite$(EXEEXT) spatialite_tool$(EXEEXT) \
 	spatialite_network$(EXEEXT) shp_doctor$(EXEEXT) \
 	exif_loader$(EXEEXT) spatialite_osm_net$(EXEEXT) \
 	spatialite_osm_map$(EXEEXT) spatialite_osm_raw$(EXEEXT) \
-	spatialite_gml$(EXEEXT)
+	spatialite_osm_filter$(EXEEXT) spatialite_gml$(EXEEXT)
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
@@ -62,7 +62,7 @@ am_shp_doctor_OBJECTS = shp_doctor.$(OBJEXT)
 shp_doctor_OBJECTS = $(am_shp_doctor_OBJECTS)
 shp_doctor_LDADD = $(LDADD)
 shp_doctor_DEPENDENCIES =
-am_spatialite_OBJECTS = shell.$(OBJEXT) shapefiles.$(OBJEXT)
+am_spatialite_OBJECTS = shell.$(OBJEXT)
 spatialite_OBJECTS = $(am_spatialite_OBJECTS)
 spatialite_DEPENDENCIES =
 am_spatialite_gml_OBJECTS = spatialite_gml.$(OBJEXT)
@@ -72,6 +72,10 @@ am_spatialite_network_OBJECTS = spatialite_network.$(OBJEXT)
 spatialite_network_OBJECTS = $(am_spatialite_network_OBJECTS)
 spatialite_network_LDADD = $(LDADD)
 spatialite_network_DEPENDENCIES =
+am_spatialite_osm_filter_OBJECTS = spatialite_osm_filter.$(OBJEXT)
+spatialite_osm_filter_OBJECTS = $(am_spatialite_osm_filter_OBJECTS)
+spatialite_osm_filter_LDADD = $(LDADD)
+spatialite_osm_filter_DEPENDENCIES =
 am_spatialite_osm_map_OBJECTS = spatialite_osm_map.$(OBJEXT)
 spatialite_osm_map_OBJECTS = $(am_spatialite_osm_map_OBJECTS)
 spatialite_osm_map_DEPENDENCIES =
@@ -82,8 +86,7 @@ spatialite_osm_net_DEPENDENCIES =
 am_spatialite_osm_raw_OBJECTS = spatialite_osm_raw.$(OBJEXT)
 spatialite_osm_raw_OBJECTS = $(am_spatialite_osm_raw_OBJECTS)
 spatialite_osm_raw_DEPENDENCIES =
-am_spatialite_tool_OBJECTS = spatialite_tool.$(OBJEXT) \
-	shapefiles.$(OBJEXT)
+am_spatialite_tool_OBJECTS = spatialite_tool.$(OBJEXT)
 spatialite_tool_OBJECTS = $(am_spatialite_tool_OBJECTS)
 spatialite_tool_LDADD = $(LDADD)
 spatialite_tool_DEPENDENCIES =
@@ -102,14 +105,14 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	$(LDFLAGS) -o $@
 SOURCES = $(exif_loader_SOURCES) $(shp_doctor_SOURCES) \
 	$(spatialite_SOURCES) $(spatialite_gml_SOURCES) \
-	$(spatialite_network_SOURCES) $(spatialite_osm_map_SOURCES) \
-	$(spatialite_osm_net_SOURCES) $(spatialite_osm_raw_SOURCES) \
-	$(spatialite_tool_SOURCES)
+	$(spatialite_network_SOURCES) $(spatialite_osm_filter_SOURCES) \
+	$(spatialite_osm_map_SOURCES) $(spatialite_osm_net_SOURCES) \
+	$(spatialite_osm_raw_SOURCES) $(spatialite_tool_SOURCES)
 DIST_SOURCES = $(exif_loader_SOURCES) $(shp_doctor_SOURCES) \
 	$(spatialite_SOURCES) $(spatialite_gml_SOURCES) \
-	$(spatialite_network_SOURCES) $(spatialite_osm_map_SOURCES) \
-	$(spatialite_osm_net_SOURCES) $(spatialite_osm_raw_SOURCES) \
-	$(spatialite_tool_SOURCES)
+	$(spatialite_network_SOURCES) $(spatialite_osm_filter_SOURCES) \
+	$(spatialite_osm_map_SOURCES) $(spatialite_osm_net_SOURCES) \
+	$(spatialite_osm_raw_SOURCES) $(spatialite_tool_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -172,6 +175,7 @@ LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -201,6 +205,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -234,7 +239,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -252,31 +256,39 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 ACLOCAL_AMFLAGS = -I m4
 AM_CFLAGS = -D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 \
-	-D_LARGEFILE_SOURCE=1 @LIBSPATIALITE_CFLAGS@
+	-D_LARGEFILE_SOURCE=1 @LIBSPATIALITE_CFLAGS@ \
+	@LIBFREEXL_CFLAGS@
 
 INCLUDES = @CFLAGS@
-spatialite_SOURCES = shell.c shapefiles.c
-spatialite_tool_SOURCES = spatialite_tool.c shapefiles.c
+spatialite_SOURCES = shell.c
+spatialite_tool_SOURCES = spatialite_tool.c
 spatialite_network_SOURCES = spatialite_network.c
 shp_doctor_SOURCES = shp_doctor.c
 exif_loader_SOURCES = exif_loader.c
 spatialite_osm_net_SOURCES = spatialite_osm_net.c
 spatialite_osm_map_SOURCES = spatialite_osm_map.c
 spatialite_osm_raw_SOURCES = spatialite_osm_raw.c
+spatialite_osm_filter_SOURCES = spatialite_osm_filter.c
 spatialite_gml_SOURCES = spatialite_gml.c
 spatialite_osm_map_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	-lexpat
 
 spatialite_osm_raw_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	-lexpat
 
 spatialite_gml_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	-lexpat 
 
 spatialite_LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@ \
 	@READLINE_LIBS@
 
-LDADD = @LIBSPATIALITE_LIBS@ 
+LDADD = @LIBSPATIALITE_LIBS@ \
+	@LIBFREEXL_LIBS@
+
 EXTRA_DIST = makefile.vc nmake.opt \
 	Makefile-static-MinGW \
 	Makefile-static-Linux \
@@ -379,6 +391,9 @@ spatialite_gml$(EXEEXT): $(spatialite_gml_OBJECTS) $(spatialite_gml_DEPENDENCIES
 spatialite_network$(EXEEXT): $(spatialite_network_OBJECTS) $(spatialite_network_DEPENDENCIES) 
 	@rm -f spatialite_network$(EXEEXT)
 	$(LINK) $(spatialite_network_OBJECTS) $(spatialite_network_LDADD) $(LIBS)
+spatialite_osm_filter$(EXEEXT): $(spatialite_osm_filter_OBJECTS) $(spatialite_osm_filter_DEPENDENCIES) 
+	@rm -f spatialite_osm_filter$(EXEEXT)
+	$(LINK) $(spatialite_osm_filter_OBJECTS) $(spatialite_osm_filter_LDADD) $(LIBS)
 spatialite_osm_map$(EXEEXT): $(spatialite_osm_map_OBJECTS) $(spatialite_osm_map_DEPENDENCIES) 
 	@rm -f spatialite_osm_map$(EXEEXT)
 	$(LINK) $(spatialite_osm_map_OBJECTS) $(spatialite_osm_map_LDADD) $(LIBS)
@@ -399,11 +414,11 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/exif_loader.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shapefiles.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shell.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shp_doctor.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spatialite_gml.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spatialite_network.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spatialite_osm_filter.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spatialite_osm_map.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spatialite_osm_net.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spatialite_osm_raw.Po at am__quote@
diff --git a/spatialite-tools/aclocal.m4 b/spatialite-tools/aclocal.m4
index 6d02ba5..4bdf0c2 100644
--- a/spatialite-tools/aclocal.m4
+++ b/spatialite-tools/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
@@ -22,7 +22,8 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -31,7 +32,8 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
 
 m4_define([_LT_COPYING], [dnl
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -58,7 +60,7 @@ m4_define([_LT_COPYING], [dnl
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 ])
 
-# serial 56 LT_INIT
+# serial 57 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -87,6 +89,7 @@ esac
 # ------------------
 AC_DEFUN([LT_INIT],
 [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
 AC_BEFORE([$0], [LT_LANG])dnl
 AC_BEFORE([$0], [LT_OUTPUT])dnl
 AC_BEFORE([$0], [LTDL_INIT])dnl
@@ -103,6 +106,8 @@ AC_REQUIRE([LTVERSION_VERSION])dnl
 AC_REQUIRE([LTOBSOLETE_VERSION])dnl
 m4_require([_LT_PROG_LTMAIN])dnl
 
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
 dnl Parse OPTIONS
 _LT_SET_OPTIONS([$0], [$1])
 
@@ -139,7 +144,7 @@ m4_defun([_LT_CC_BASENAME],
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 ])
 
 
@@ -159,6 +164,9 @@ m4_defun([_LT_FILEUTILS_DEFAULTS],
 m4_defun([_LT_SETUP],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl
@@ -181,10 +189,13 @@ _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
 dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
 m4_require([_LT_CMD_RELOAD])dnl
 m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
 m4_require([_LT_CMD_OLD_ARCHIVE])dnl
 m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
 # See if we are running on zsh, and set the options which allow our
@@ -200,7 +211,6 @@ fi
 _LT_CHECK_OBJDIR
 
 m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
 
 case $host_os in
 aix3*)
@@ -214,23 +224,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -271,6 +264,28 @@ _LT_CONFIG_COMMANDS
 ])# _LT_SETUP
 
 
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
 # _LT_PROG_LTMAIN
 # ---------------
 # Note that this code is called both from `configure', and `config.status'
@@ -423,7 +438,7 @@ m4_define([_lt_decl_all_varnames],
 # declaration there will have the same value as in `configure'.  VARNAME
 # must have a single quote delimited value for this to work.
 m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
 
 
 # _LT_CONFIG_STATUS_DECLARATIONS
@@ -433,7 +448,7 @@ m4_define([_LT_CONFIG_STATUS_DECLARE],
 # embedded single quotes properly.  In configure, this macro expands
 # each variable declared with _LT_DECL (and _LT_TAGDECL) into:
 #
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
 m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
 [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
     [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
@@ -532,12 +547,20 @@ LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -548,9 +571,9 @@ done
 # Double-quote double-evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -558,16 +581,38 @@ for var in lt_decl_all_varnames([[ \
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
 _LT_OUTPUT_LIBTOOL_INIT
 ])
 
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
 # ---------
@@ -577,20 +622,11 @@ _LT_OUTPUT_LIBTOOL_INIT
 AC_DEFUN([LT_OUTPUT],
 [: ${CONFIG_LT=./config.lt}
 AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
 
 cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
+lt_cl_silent=false
 exec AS_MESSAGE_LOG_FD>>config.log
 {
   echo
@@ -616,7 +652,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
 m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
 configured by $[0], generated by m4_PACKAGE_STRING.
 
-Copyright (C) 2008 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
@@ -661,15 +697,13 @@ chmod +x "$CONFIG_LT"
 # appending to config.log, which fails on DOS, as config.log is still kept
 # open by configure.  Here we exec the FD to /dev/null, effectively closing
 # config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
 ])# LT_OUTPUT
 
 
@@ -732,15 +766,12 @@ _LT_EOF
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
 
-  _LT_PROG_XSI_SHELLFNS
+  _LT_PROG_REPLACE_SHELLFNS
 
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 ],
@@ -846,11 +877,13 @@ AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
 AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
 AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
 AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
 dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
 dnl AC_DEFUN([AC_LIBTOOL_F77], [])
 dnl AC_DEFUN([AC_LIBTOOL_FC], [])
 dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
 
 
 # _LT_TAG_COMPILER
@@ -955,6 +988,31 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	[lt_cv_ld_exported_symbols_list=no])
 	LDFLAGS="$save_LDFLAGS"
     ])
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -982,7 +1040,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
     else
       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
     fi
-    if test "$DSYMUTIL" != ":"; then
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -1002,7 +1060,11 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
   _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -1010,7 +1072,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -1026,203 +1088,142 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   fi
 ])
 
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
 # Links a minimal program and checks the executable
 # for the system default hardcoded library path. In most cases,
 # this is /usr/lib:/lib, but when the MPI compilers are used
 # the location of the communication and MPI libs are included too.
 # If we don't find anything, use the default library path according
 # to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
 ])# _LT_SYS_MODULE_PATH_AIX
 
 
 # _LT_SHELL_INIT(ARG)
 # -------------------
 m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
 
 
 # _LT_PROG_ECHO_BACKSLASH
 # -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
 else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
 fi
 
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
 
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
 
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
 
-AC_SUBST(lt_ECHO)
-])
 _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
 ])# _LT_PROG_ECHO_BACKSLASH
 
 
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
 # _LT_ENABLE_LOCK
 # ---------------
 m4_defun([_LT_ENABLE_LOCK],
@@ -1251,7 +1252,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     if test "$lt_cv_prog_gnu_ld" = yes; then
       case `/usr/bin/file conftest.$ac_objext` in
@@ -1369,14 +1370,47 @@ need_locks="$enable_libtool_lock"
 ])# _LT_ENABLE_LOCK
 
 
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
 # _LT_CMD_OLD_ARCHIVE
 # -------------------
 m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
+[_LT_PROG_AR
 
 AC_CHECK_TOOL(STRIP, strip, :)
 test -z "$STRIP" && STRIP=:
@@ -1403,10 +1437,19 @@ if test -n "$RANLIB"; then
   esac
   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
 _LT_DECL([], [old_postinstall_cmds], [2])
 _LT_DECL([], [old_postuninstall_cmds], [2])
 _LT_TAGDECL([], [old_archive_cmds], [2],
     [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
 ])# _LT_CMD_OLD_ARCHIVE
 
 
@@ -1431,15 +1474,15 @@ AC_CACHE_CHECK([$1], [$2],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        $2=yes
@@ -1479,7 +1522,7 @@ AC_CACHE_CHECK([$1], [$2],
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          $2=yes
@@ -1542,6 +1585,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -1606,8 +1654,8 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -1658,7 +1706,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
+[#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -1699,7 +1747,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -1708,7 +1762,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -1884,16 +1942,16 @@ AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
@@ -2052,6 +2110,7 @@ m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_OBJDUMP])dnl
 m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
 	[], [
@@ -2060,16 +2119,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -2082,7 +2148,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -2102,7 +2168,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[[lt_foo]]++; }
   if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi])
@@ -2190,7 +2262,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -2221,8 +2293,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -2243,36 +2316,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -2359,6 +2479,19 @@ gnu*)
   hardcode_into_libs=yes
   ;;
 
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
 hpux9* | hpux10* | hpux11*)
   # Give a soname corresponding to the major version so that dld.sl refuses to
   # link against other versions.
@@ -2401,8 +2534,10 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[[3-9]]*)
@@ -2469,26 +2604,35 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -2500,18 +2644,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -2732,6 +2864,8 @@ _LT_DECL([], [library_names_spec], [1],
     The last name is the one that the linker finds with -lNAME]])
 _LT_DECL([], [soname_spec], [1],
     [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
 _LT_DECL([], [postinstall_cmds], [2],
     [Command to use after installation of a shared archive])
 _LT_DECL([], [postuninstall_cmds], [2],
@@ -2844,6 +2978,7 @@ AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 m4_require([_LT_DECL_SED])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
 
 AC_ARG_WITH([gnu-ld],
     [AS_HELP_STRING([--with-gnu-ld],
@@ -2965,6 +3100,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -2973,8 +3113,8 @@ case $host_os in
     fi
     ;;
 esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
 ])# _LT_CMD_RELOAD
 
 
@@ -3026,16 +3166,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -3065,6 +3207,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -3073,11 +3219,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -3103,7 +3249,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd* | netbsdelf*-gnu)
+netbsd*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
   else
@@ -3177,6 +3323,21 @@ tpf*)
   ;;
 esac
 ])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -3184,7 +3345,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 _LT_DECL([], [deplibs_check_method], [1],
     [Method to check whether dependent libraries are shared objects])
 _LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
 ])# _LT_CHECK_MAGIC_METHOD
 
 
@@ -3241,7 +3406,19 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
   AC_SUBST([DUMPBIN])
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -3254,13 +3431,13 @@ _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
 AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
   [lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
   cat conftest.out >&AS_MESSAGE_LOG_FD
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -3275,16 +3452,77 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AM_PROG_NM], [])
 dnl AC_DEFUN([AC_PROG_NM], [])
 
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
 
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
@@ -3311,7 +3549,12 @@ m4_defun([_LT_COMPILER_NO_RTTI],
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
 if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
 
   _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
     lt_cv_prog_compiler_rtti_exceptions,
@@ -3328,6 +3571,7 @@ _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
 m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
 AC_REQUIRE([LT_PATH_LD])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -3395,8 +3639,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3432,6 +3676,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -3453,7 +3698,7 @@ _LT_EOF
   if AC_TRY_EVAL(ac_compile); then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
 	mv -f "$nlist"T "$nlist"
@@ -3465,6 +3710,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -3476,7 +3733,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT@&t at _DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -3502,15 +3759,15 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
 	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
 	fi
@@ -3543,6 +3800,13 @@ else
   AC_MSG_RESULT(ok)
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
 _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
     [Take the output of nm and produce a listing of raw symbols and C names])
 _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
@@ -3553,6 +3817,8 @@ _LT_DECL([global_symbol_to_c_name_address],
 _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
     [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
 
 
@@ -3564,7 +3830,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
 _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
-AC_MSG_CHECKING([for $compiler option to produce PIC])
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -3615,6 +3880,11 @@ m4_if([$1], [CXX], [
       # DJGPP does not support shared libraries at all
       _LT_TAGVAR(lt_prog_compiler_pic, $1)=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
     interix[[3-9]]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -3664,6 +3934,12 @@ m4_if([$1], [CXX], [
 	  ;;
 	esac
 	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
       dgux*)
 	case $cc_basename in
 	  ec++*)
@@ -3753,8 +4029,8 @@ m4_if([$1], [CXX], [
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
@@ -3784,7 +4060,7 @@ m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
 	;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -3816,7 +4092,7 @@ m4_if([$1], [CXX], [
 	;;
       solaris*)
 	case $cc_basename in
-	  CC*)
+	  CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
@@ -3920,6 +4196,12 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -3962,6 +4244,13 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -4025,7 +4314,13 @@ m4_if([$1], [CXX], [
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
@@ -4037,25 +4332,25 @@ m4_if([$1], [CXX], [
         # All Alpha code is PIC.
         _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	*Sun\ C*)
+	  # Sun C 5.9
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	  ;;
 	esac
 	;;
@@ -4087,7 +4382,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
       *)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
@@ -4144,9 +4439,11 @@ case $host_os in
     _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
     ;;
 esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
 
 #
 # Check to make sure the PIC flag actually works.
@@ -4165,6 +4462,8 @@ fi
 _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
 	[Additional compiler flags for building library objects])
 
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
 #
 # Check to make sure the static flag actually works.
 #
@@ -4185,6 +4484,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
 m4_defun([_LT_LINKER_SHLIBS],
 [AC_REQUIRE([LT_PATH_LD])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -4193,30 +4493,35 @@ m4_require([_LT_TAG_COMPILER])dnl
 AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 m4_if([$1], [CXX], [
   _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   case $host_os in
   aix[[4-9]]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-  ;;
+    case $cc_basename in
+    cl*) ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
 ], [
   runpath_var=
   _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -4276,13 +4581,36 @@ dnl Note also adjust exclude_expsyms for C++ above.
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -4316,11 +4644,12 @@ dnl Note also adjust exclude_expsyms for C++ above.
 	_LT_TAGVAR(ld_shlibs, $1)=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -4356,10 +4685,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -4377,6 +4708,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
     interix[[3-9]]*)
       _LT_TAGVAR(hardcode_direct, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4402,15 +4738,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -4421,13 +4758,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
 	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -4443,17 +4784,17 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
 	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -4462,13 +4803,13 @@ _LT_EOF
       fi
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -4486,8 +4827,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4533,8 +4874,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4574,8 +4915,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -4637,7 +4980,6 @@ _LT_EOF
 	if test "$aix_use_runtimelinking" = yes; then
 	  shared_flag="$shared_flag "'${wl}-G'
 	fi
-	_LT_TAGVAR(link_all_deplibs, $1)=no
       else
 	# not using gcc
 	if test "$host_cpu" = ia64; then
@@ -4663,9 +5005,9 @@ _LT_EOF
 	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _LT_SYS_MODULE_PATH_AIX([$1])
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -4674,14 +5016,19 @@ _LT_EOF
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
+	 _LT_SYS_MODULE_PATH_AIX([$1])
 	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
 	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -4713,20 +5060,63 @@ _LT_EOF
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -4764,7 +5154,7 @@ _LT_EOF
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4772,7 +5162,7 @@ _LT_EOF
 
     hpux9*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -4787,8 +5177,8 @@ _LT_EOF
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -4806,16 +5196,16 @@ _LT_EOF
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -4827,7 +5217,14 @@ _LT_EOF
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
 	  ;;
 	esac
       fi
@@ -4855,19 +5252,34 @@ _LT_EOF
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4876,7 +5288,7 @@ _LT_EOF
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -4929,17 +5341,17 @@ _LT_EOF
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4949,13 +5361,13 @@ _LT_EOF
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -4968,9 +5380,9 @@ _LT_EOF
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -5146,36 +5558,38 @@ x|xyes)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
       ;;
     esac
   fi
@@ -5240,8 +5654,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
     to runtime path list])
 _LT_TAGDECL([], [link_all_deplibs], [0],
     [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
 _LT_TAGDECL([], [always_export_symbols], [0],
     [Set to "yes" if exported symbols are required])
 _LT_TAGDECL([], [export_symbols_cmds], [2],
@@ -5252,6 +5664,8 @@ _LT_TAGDECL([], [include_expsyms], [1],
     [Symbols that must always be exported])
 _LT_TAGDECL([], [prelink_cmds], [2],
     [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
 _LT_TAGDECL([], [file_list_spec], [1],
     [Specify filename containing input files])
 dnl FIXME: Not yet implemented
@@ -5341,37 +5755,22 @@ CC="$lt_save_CC"
 ])# _LT_LANG_C_CONFIG
 
 
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
 # _LT_LANG_CXX_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a C++ compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
 # the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
 
 AC_LANG_PUSH(C++)
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
@@ -5393,6 +5792,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -5424,6 +5825,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -5441,6 +5843,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -5462,8 +5865,8 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5495,7 +5898,7 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -5604,10 +6007,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          _LT_SYS_MODULE_PATH_AIX
+          _LT_SYS_MODULE_PATH_AIX([$1])
           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -5616,14 +6019,19 @@ if test "$_lt_caught_CXX_error" != yes; then
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
+	    _LT_SYS_MODULE_PATH_AIX([$1])
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
 	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	    # This is similar to how AIX traditionally builds its shared
 	    # libraries.
@@ -5653,28 +6061,75 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
       darwin* | rhapsody*)
         _LT_DARWIN_LINKER_FEATURES($1)
 	;;
@@ -5716,6 +6171,11 @@ if test "$_lt_caught_CXX_error" != yes; then
       gnu*)
         ;;
 
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
       hpux9*)
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
@@ -5740,11 +6200,11 @@ if test "$_lt_caught_CXX_error" != yes; then
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5805,7 +6265,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
 	    if test "$GXX" = yes; then
@@ -5815,10 +6275,10 @@ if test "$_lt_caught_CXX_error" != yes; then
 	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -5848,7 +6308,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -5859,9 +6319,9 @@ if test "$_lt_caught_CXX_error" != yes; then
           *)
 	    if test "$GXX" = yes; then
 	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
 	      fi
 	    fi
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
@@ -5890,7 +6350,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5927,26 +6387,26 @@ if test "$_lt_caught_CXX_error" != yes; then
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
 	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
 		$RANLIB $oldlib'
 	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
-	    *) # Version 6 will use weak symbols
+	    *) # Version 6 and above use weak symbols
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
@@ -5954,7 +6414,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
@@ -5973,9 +6433,9 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
-	  xl*)
+	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5995,13 +6455,13 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	      _LT_TAGVAR(compiler_needs_object, $1)=yes
 
 	      # Not sure whether something based on
 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
 	      # would be better.
-	      output_verbose_link_cmd='echo'
+	      output_verbose_link_cmd='func_echo_all'
 
 	      # Archives containing C++ object files must be created using
 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6070,7 +6530,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 	  fi
-	  output_verbose_link_cmd=echo
+	  output_verbose_link_cmd=func_echo_all
 	else
 	  _LT_TAGVAR(ld_shlibs, $1)=no
 	fi
@@ -6105,15 +6565,15 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    case $host in
 	      osf3*)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 		;;
 	      *)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
 	          $RM $lib.exp'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 		;;
@@ -6129,17 +6589,17 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 	      case $host in
 	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	      esac
 
@@ -6149,7 +6609,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      # Commands to make compiler produce verbose output that lists
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
 	    else
 	      # FIXME: insert proper C++ library support
@@ -6185,7 +6645,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
 	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -6206,7 +6666,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    esac
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
 
-	    output_verbose_link_cmd='echo'
+	    output_verbose_link_cmd='func_echo_all'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6226,14 +6686,14 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
 	        # platform.
@@ -6244,7 +6704,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
@@ -6298,6 +6758,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           CC*)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
 	    ;;
 	  *)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -6353,6 +6817,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -6367,6 +6832,29 @@ AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
 
 
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
 # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
 # ---------------------------------
 # Figure out "hidden" library dependencies from verbose
@@ -6375,6 +6863,7 @@ AC_LANG_POP
 # objects, libraries and library flags.
 m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
 # Dependencies to place before and after the object being linked:
 _LT_TAGVAR(predep_objects, $1)=
 _LT_TAGVAR(postdep_objects, $1)=
@@ -6425,6 +6914,13 @@ public class foo {
 };
 _LT_EOF
 ])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
 dnl Parse the compiler output and extract the necessary
 dnl objects, libraries and library flags.
 if AC_TRY_EVAL(ac_compile); then
@@ -6436,7 +6932,7 @@ if AC_TRY_EVAL(ac_compile); then
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -6445,13 +6941,22 @@ if AC_TRY_EVAL(ac_compile); then
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -6471,8 +6976,10 @@ if AC_TRY_EVAL(ac_compile); then
 	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -6508,6 +7015,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 m4_if([$1], [CXX],
@@ -6544,7 +7052,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -6588,32 +7096,16 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1],
 ])# _LT_SYS_HIDDEN_LIBDEPS
 
 
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
 # _LT_LANG_F77_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a Fortran 77 compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6632,6 +7124,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6671,7 +7165,9 @@ if test "$_lt_disable_F77" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -6725,38 +7221,24 @@ if test "$_lt_disable_F77" != yes; then
 
   GCC=$lt_save_GCC
   CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
 fi # test "$_lt_disable_F77" != yes
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
 
 
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
 # _LT_LANG_FC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for a Fortran compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6775,6 +7257,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6814,7 +7298,9 @@ if test "$_lt_disable_FC" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
   compiler=$CC
   GCC=$ac_cv_fc_compiler_gnu
 
@@ -6870,7 +7356,8 @@ if test "$_lt_disable_FC" != yes; then
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
 fi # test "$_lt_disable_FC" != yes
 
 AC_LANG_POP
@@ -6907,10 +7394,12 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=yes
 CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_TAGVAR(LD, $1)="$LD"
@@ -6920,6 +7409,8 @@ _LT_CC_BASENAME([$compiler])
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 
 if test -n "$compiler"; then
   _LT_COMPILER_NO_RTTI($1)
@@ -6935,7 +7426,8 @@ fi
 AC_LANG_RESTORE
 
 GCC=$lt_save_GCC
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
@@ -6970,9 +7462,11 @@ _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
 lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
 CC=${RC-"windres"}
+CFLAGS=
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_CC_BASENAME([$compiler])
@@ -6985,7 +7479,8 @@ fi
 
 GCC=$lt_save_GCC
 AC_LANG_RESTORE
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_RC_CONFIG
 
 
@@ -7044,6 +7539,15 @@ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
 AC_SUBST([OBJDUMP])
 ])
 
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
 
 # _LT_DECL_SED
 # ------------
@@ -7135,8 +7639,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -7175,222 +7679,177 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
 
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
 
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
 
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
 
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
 
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
 
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
 
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
 
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
 
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
 
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
 
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
     ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
     ;;
-  esac
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
 ])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
 
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 6 ltoptions.m4
+# serial 7 ltoptions.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
@@ -7505,7 +7964,7 @@ LT_OPTION_DEFINE([LT_INIT], [win32-dll],
 [enable_win32_dll=yes
 
 case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
   AC_CHECK_TOOL(AS, as, false)
   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
   AC_CHECK_TOOL(OBJDUMP, objdump, false)
@@ -7513,13 +7972,13 @@ case $host in
 esac
 
 test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
 
 test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
 
 test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
 ])# win32-dll
 
 AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
@@ -7877,31 +8336,31 @@ m4_define([lt_dict_filter],
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# Generated from ltversion.in.
+# @configure_input@
 
-# serial 3017 ltversion.m4
+# serial 3293 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
+m4_define([LT_PACKAGE_VERSION], [2.4])
+m4_define([LT_PACKAGE_REVISION], [1.3293])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
+[macro_version='2.4'
+macro_revision='1.3293'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
 
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 4 lt~obsolete.m4
+# serial 5 lt~obsolete.m4
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
@@ -7971,7 +8430,6 @@ m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
 m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
 m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
 m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
 m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
 m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
 m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
@@ -7984,6 +8442,13 @@ m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
 m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
 m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
 m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
 
 # pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
 # serial 1 (pkg-config-0.24)
@@ -8122,7 +8587,7 @@ $$1_PKG_ERRORS
 Consider adjusting the PKG_CONFIG_PATH environment variable if you
 installed software in a non-standard prefix.
 
-_PKG_TEXT])[]dnl
+_PKG_TEXT])
         ])
 elif test $pkg_failed = untried; then
      	AC_MSG_RESULT([no])
@@ -8133,7 +8598,7 @@ path to pkg-config.
 
 _PKG_TEXT
 
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])
         ])
 else
 	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
diff --git a/spatialite-tools/config.guess b/spatialite-tools/config.guess
index c2246a4..dc84c68 100755
--- a/spatialite-tools/config.guess
+++ b/spatialite-tools/config.guess
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
 #   Free Software Foundation, Inc.
 
-timestamp='2009-12-30'
+timestamp='2009-11-20'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -56,9 +56,8 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
diff --git a/spatialite-tools/config.sub b/spatialite-tools/config.sub
index c2d1257..2a55a50 100755
--- a/spatialite-tools/config.sub
+++ b/spatialite-tools/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
 #   Free Software Foundation, Inc.
 
-timestamp='2010-01-22'
+timestamp='2009-11-20'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -75,9 +75,8 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -381,8 +380,7 @@ case $basic_machine in
 	| sparclite-* \
 	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile-* | tilegx-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
 	| tron-* \
 	| ubicom32-* \
 	| v850-* | v850e-* | vax-* \
@@ -1087,11 +1085,6 @@ case $basic_machine in
 		basic_machine=tic6x-unknown
 		os=-coff
 		;;
-        # This must be matched before tile*.
-        tilegx*)
-		basic_machine=tilegx-unknown
-		os=-linux-gnu
-		;;
 	tile*)
 		basic_machine=tile-unknown
 		os=-linux-gnu
@@ -1442,8 +1435,6 @@ case $os in
 	-dicos*)
 		os=-dicos
 		;;
-        -nacl*)
-	        ;;
 	-none)
 		;;
 	*)
diff --git a/spatialite-tools/configure b/spatialite-tools/configure
index 64c6b3d..f96d281 100755
--- a/spatialite-tools/configure
+++ b/spatialite-tools/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for spatialite-tools 3.0.0-beta.
+# Generated by GNU Autoconf 2.68 for spatialite-tools 3.0.0-stable.
 #
 # Report bugs to <a.furieri at lqt.it>.
 #
@@ -91,6 +91,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -173,7 +174,15 @@ test x\$exitcode = x0 || exit 1"
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
+test \$(( 1 + 1 )) = 2 || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
   if (eval "$as_required") 2>/dev/null; then :
   as_have_required=yes
 else
@@ -216,11 +225,18 @@ IFS=$as_save_IFS
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -528,155 +544,8 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 # Sed expression to map a string onto a valid variable name.
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
-
-
-# Check that we are running under the correct shell.
 SHELL=${CONFIG_SHELL-/bin/sh}
 
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-$*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "$0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
 
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
@@ -701,8 +570,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='spatialite-tools'
 PACKAGE_TARNAME='spatialite-tools'
-PACKAGE_VERSION='3.0.0-beta'
-PACKAGE_STRING='spatialite-tools 3.0.0-beta'
+PACKAGE_VERSION='3.0.0-stable'
+PACKAGE_STRING='spatialite-tools 3.0.0-stable'
 PACKAGE_BUGREPORT='a.furieri at lqt.it'
 PACKAGE_URL=''
 
@@ -760,8 +629,9 @@ OTOOL
 LIPO
 NMEDIT
 DSYMUTIL
-lt_ECHO
+MANIFEST_TOOL
 RANLIB
+ac_ct_AR
 AR
 NM
 ac_ct_DUMPBIN
@@ -881,6 +751,7 @@ enable_static
 with_pic
 enable_fast_install
 with_gnu_ld
+with_sysroot
 enable_libtool_lock
 enable_readline
 '
@@ -1308,7 +1179,7 @@ Try \`$0 --help' for more information"
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1446,7 +1317,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures spatialite-tools 3.0.0-beta to adapt to many kinds of systems.
+\`configure' configures spatialite-tools 3.0.0-stable to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1517,7 +1388,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of spatialite-tools 3.0.0-beta:";;
+     short | recursive ) echo "Configuration of spatialite-tools 3.0.0-stable:";;
    esac
   cat <<\_ACEOF
 
@@ -1542,6 +1413,8 @@ Optional Packages:
   --with-pic              try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
 
 Some influential environment variables:
   CC          C compiler command
@@ -1635,8 +1508,8 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-spatialite-tools configure 3.0.0-beta
-generated by GNU Autoconf 2.67
+spatialite-tools configure 3.0.0-stable
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1682,7 +1555,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1719,7 +1592,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1732,10 +1605,10 @@ fi
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1802,7 +1675,7 @@ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1811,7 +1684,7 @@ eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1852,7 +1725,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1866,7 +1739,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1884,7 +1757,7 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1921,7 +1794,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
@@ -1967,7 +1840,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1980,7 +1853,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2035,7 +1908,7 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -2071,7 +1944,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_cpp
@@ -2117,7 +1990,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
@@ -2131,7 +2004,7 @@ ac_fn_c_check_type ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -2172,15 +2045,15 @@ fi
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by spatialite-tools $as_me 3.0.0-beta, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+It was created by spatialite-tools $as_me 3.0.0-stable, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2438,7 +2311,7 @@ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
       || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -2583,7 +2456,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2670,11 +2543,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2760,7 +2633,7 @@ if test "$cross_compiling" != no; then
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2800,7 +2673,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2853,7 +2726,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2904,7 +2777,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2944,7 +2817,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -3002,7 +2875,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='spatialite-tools'
- VERSION='3.0.0-beta'
+ VERSION='3.0.0-stable'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3139,7 +3012,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3179,7 +3052,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3232,7 +3105,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3272,7 +3145,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3331,7 +3204,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3375,7 +3248,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3430,7 +3303,7 @@ fi
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3545,7 +3418,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -3588,7 +3461,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -3647,7 +3520,7 @@ $as_echo "$ac_try_echo"; } >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -3658,7 +3531,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3699,7 +3572,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -3709,7 +3582,7 @@ OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3746,7 +3619,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3824,7 +3697,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3923,7 +3796,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -4059,7 +3932,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -4175,7 +4048,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -4187,7 +4060,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4250,7 +4123,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4317,7 +4190,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4447,7 +4320,7 @@ done
 for ac_header in stdlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDLIB_H 1
 _ACEOF
@@ -4461,7 +4334,7 @@ done
 for ac_header in stdio.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdio_h" = x""yes; then :
+if test "x$ac_cv_header_stdio_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDIO_H 1
 _ACEOF
@@ -4475,7 +4348,7 @@ done
 for ac_header in string.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
-if test "x$ac_cv_header_string_h" = x""yes; then :
+if test "x$ac_cv_header_string_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STRING_H 1
 _ACEOF
@@ -4489,7 +4362,7 @@ done
 for ac_header in memory.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "memory.h" "ac_cv_header_memory_h" "$ac_includes_default"
-if test "x$ac_cv_header_memory_h" = x""yes; then :
+if test "x$ac_cv_header_memory_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MEMORY_H 1
 _ACEOF
@@ -4503,7 +4376,7 @@ done
 for ac_header in math.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default"
-if test "x$ac_cv_header_math_h" = x""yes; then :
+if test "x$ac_cv_header_math_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MATH_H 1
 _ACEOF
@@ -4517,7 +4390,7 @@ done
 for ac_header in float.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = x""yes; then :
+if test "x$ac_cv_header_float_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FLOAT_H 1
 _ACEOF
@@ -4531,7 +4404,7 @@ done
 for ac_header in fcntl.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
-if test "x$ac_cv_header_fcntl_h" = x""yes; then :
+if test "x$ac_cv_header_fcntl_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_FCNTL_H 1
 _ACEOF
@@ -4545,7 +4418,7 @@ done
 for ac_header in inttypes.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = x""yes; then :
+if test "x$ac_cv_header_inttypes_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_INTTYPES_H 1
 _ACEOF
@@ -4559,7 +4432,7 @@ done
 for ac_header in stddef.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
-if test "x$ac_cv_header_stddef_h" = x""yes; then :
+if test "x$ac_cv_header_stddef_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDDEF_H 1
 _ACEOF
@@ -4573,7 +4446,7 @@ done
 for ac_header in stdint.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = x""yes; then :
+if test "x$ac_cv_header_stdint_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDINT_H 1
 _ACEOF
@@ -4587,7 +4460,7 @@ done
 for ac_header in sys/time.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_time_h" = x""yes; then :
+if test "x$ac_cv_header_sys_time_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SYS_TIME_H 1
 _ACEOF
@@ -4601,7 +4474,7 @@ done
 for ac_header in unistd.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = x""yes; then :
+if test "x$ac_cv_header_unistd_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_UNISTD_H 1
 _ACEOF
@@ -4615,7 +4488,7 @@ done
 for ac_header in expat.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default"
-if test "x$ac_cv_header_expat_h" = x""yes; then :
+if test "x$ac_cv_header_expat_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_EXPAT_H 1
 _ACEOF
@@ -4644,7 +4517,7 @@ if test -z "$CXX"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -4688,7 +4561,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -4766,7 +4639,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4803,7 +4676,7 @@ ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
+if ${ac_cv_prog_cxx_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -4889,7 +4762,7 @@ depcc="$CXX"  am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -5022,7 +4895,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5062,7 +4935,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -5115,7 +4988,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5155,7 +5028,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5214,7 +5087,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -5258,7 +5131,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -5313,7 +5186,7 @@ fi
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -5342,7 +5215,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5379,7 +5252,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -5457,7 +5330,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -5556,7 +5429,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -5691,7 +5564,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -5807,7 +5680,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -5832,7 +5705,7 @@ fi
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -5865,7 +5738,7 @@ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -5881,7 +5754,7 @@ fi
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -5899,7 +5772,7 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -5914,7 +5787,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -5933,13 +5806,13 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 enable_win32_dll=yes
 
 case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
 set dummy ${ac_tool_prefix}as; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AS+set}" = set; then :
+if ${ac_cv_prog_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AS"; then
@@ -5979,7 +5852,7 @@ if test -z "$ac_cv_prog_AS"; then
 set dummy as; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AS"; then
@@ -6031,7 +5904,7 @@ fi
 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DLLTOOL"; then
@@ -6071,7 +5944,7 @@ if test -z "$ac_cv_prog_DLLTOOL"; then
 set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DLLTOOL"; then
@@ -6123,7 +5996,7 @@ fi
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -6163,7 +6036,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 set dummy objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -6241,8 +6114,8 @@ esac
 
 
 
-macro_version='2.2.6b'
-macro_revision='1.3017'
+macro_version='2.4'
+macro_revision='1.3293'
 
 
 
@@ -6258,9 +6131,78 @@ macro_revision='1.3017'
 
 ltmain="$ac_aux_dir/ltmain.sh"
 
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -6342,7 +6284,7 @@ Xsed="$SED -e 1s/^X//"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+if ${ac_cv_path_FGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -6473,7 +6415,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -6513,7 +6455,7 @@ fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -6540,7 +6482,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then :
+if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -6593,14 +6535,17 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -6638,13 +6583,13 @@ fi
 fi
 if test -z "$DUMPBIN"; then
   ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  for ac_prog in dumpbin "link -dump"
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -6693,6 +6638,15 @@ esac
   fi
 fi
 
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -6707,18 +6661,18 @@ test -z "$NM" && NM=nm
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then :
+if ${lt_cv_nm_interface+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:6715: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6718: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:6721: output\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6731,7 +6685,7 @@ $as_echo "$lt_cv_nm_interface" >&6; }
 # find the maximum length of command line arguments
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -6764,6 +6718,11 @@ else
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -6828,8 +6787,8 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -6871,8 +6830,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6;
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -6921,9 +6880,83 @@ esac
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then :
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_reload_flag='-r'
@@ -6937,6 +6970,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -6959,7 +6997,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -6999,7 +7037,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 set dummy objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -7055,7 +7093,7 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then :
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -7097,16 +7135,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -7136,6 +7176,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -7144,11 +7188,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -7174,7 +7218,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd* | netbsdelf*-gnu)
+netbsd*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
   else
@@ -7251,6 +7295,21 @@ esac
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
 $as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -7266,16 +7325,26 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
 
+
+
+
+
+
+
+
+
+
+
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7284,7 +7353,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7294,10 +7363,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -7305,17 +7374,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7324,7 +7393,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7334,17 +7403,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_AR" = x; then
-    AR="false"
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -7352,19 +7421,52 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    AR=$ac_ct_AR
+    DLLTOOL=$ac_ct_DLLTOOL
   fi
 else
-  AR="$ac_cv_prog_AR"
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
 fi
 
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
 
 
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
 
 
 
@@ -7372,15 +7474,17 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
 
 
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -7389,7 +7493,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -7399,27 +7503,196 @@ IFS=$as_save_IFS
 
 fi
 fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
+    test -n "$AR" && break
+  done
 fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_STRIP"; then
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -7475,7 +7748,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -7515,7 +7788,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -7586,6 +7859,18 @@ if test -n "$RANLIB"; then
   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 fi
 
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
 
 
 
@@ -7632,7 +7917,7 @@ compiler=$CC
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7693,8 +7978,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -7730,6 +8015,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -7755,8 +8041,8 @@ _LT_EOF
   test $ac_status = 0; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "$nlist"; then
@@ -7771,6 +8057,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -7782,7 +8080,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT_DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -7808,8 +8106,8 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
 	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
@@ -7819,8 +8117,8 @@ _LT_EOF
   test $ac_status = 0; } && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&5
 	fi
@@ -7857,6 +8155,19 @@ else
 $as_echo "ok" >&6; }
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
 
 
 
@@ -7877,6 +8188,42 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
 
 # Check whether --enable-libtool-lock was given.
 if test "${enable_libtool_lock+set}" = set; then :
@@ -7909,7 +8256,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 7912 "configure"' > conftest.$ac_ext
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -8003,7 +8350,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then :
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -8071,6 +8418,123 @@ esac
 
 need_locks="$enable_libtool_lock"
 
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
 
   case $host_os in
     rhapsody* | darwin*)
@@ -8079,7 +8543,7 @@ need_locks="$enable_libtool_lock"
 set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DSYMUTIL"; then
@@ -8119,7 +8583,7 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
 set dummy dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DSYMUTIL"; then
@@ -8171,7 +8635,7 @@ fi
 set dummy ${ac_tool_prefix}nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NMEDIT"; then
@@ -8211,7 +8675,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
 set dummy nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -8263,7 +8727,7 @@ fi
 set dummy ${ac_tool_prefix}lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -8303,7 +8767,7 @@ if test -z "$ac_cv_prog_LIPO"; then
 set dummy lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -8355,7 +8819,7 @@ fi
 set dummy ${ac_tool_prefix}otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -8395,7 +8859,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
 set dummy otool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -8447,7 +8911,7 @@ fi
 set dummy ${ac_tool_prefix}otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -8487,7 +8951,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
 set dummy otool64; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -8562,7 +9026,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
 $as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -8591,7 +9055,7 @@ fi
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_exported_symbols_list=no
@@ -8621,12 +9085,44 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-    case $host_os in
-    rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
@@ -8637,562 +9133,48 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
 	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
 	10.*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-
-for ac_header in dlfcn.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CXX"  am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CXXCPP needs to be expanded
-    for CXXCPP in "$CXX -E" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
-  CXXCPP=$ac_cv_prog_CXXCPP
-else
-  ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
 
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
 _ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
+
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
 
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-_lt_caught_CXX_error=yes; }
-fi
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-else
-  _lt_caught_CXX_error=yes
-fi
+
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
 
 
 
@@ -9348,6 +9330,7 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -9369,7 +9352,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
+if ${lt_cv_objdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -9397,19 +9380,6 @@ _ACEOF
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 case $host_os in
 aix3*)
   # AIX sometimes has problems with the GCC collect2 program.  For some
@@ -9422,23 +9392,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -9467,7 +9420,7 @@ for cc_temp in $compiler""; do
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
 # Only perform the check for file, if the check method requires it
@@ -9477,7 +9430,7 @@ file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9543,7 +9496,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
 $as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -9672,11 +9625,16 @@ if test -n "$compiler"; then
 lt_prog_compiler_no_builtin_flag=
 
 if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -9692,15 +9650,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9695: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9699: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_rtti_exceptions=yes
@@ -9729,8 +9687,6 @@ fi
 lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   if test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -9778,6 +9734,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -9820,6 +9782,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -9882,7 +9851,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	lt_prog_compiler_pic='--shared'
 	lt_prog_compiler_static='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	lt_prog_compiler_wl='-Wl,'
@@ -9894,25 +9869,25 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
         # All Alpha code is PIC.
         lt_prog_compiler_static='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	lt_prog_compiler_wl='-Wl,'
 	lt_prog_compiler_pic='-qpic'
 	lt_prog_compiler_static='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_wl=''
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	*Sun\ C*)
+	  # Sun C 5.9
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl=''
+	  lt_prog_compiler_wl='-Wl,'
 	  ;;
 	esac
 	;;
@@ -9944,7 +9919,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-KPIC'
       lt_prog_compiler_static='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	lt_prog_compiler_wl='-Qoption ld ';;
       *)
 	lt_prog_compiler_wl='-Wl,';;
@@ -10001,13 +9976,17 @@ case $host_os in
     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
 #
 # Check to make sure the PIC flag actually works.
@@ -10015,7 +9994,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
 if test -n "$lt_prog_compiler_pic"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
@@ -10031,15 +10010,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10034: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:10038: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works=yes
@@ -10068,13 +10047,18 @@ fi
 
 
 
+
+
+
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -10087,7 +10071,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works=yes
@@ -10117,7 +10101,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -10136,16 +10120,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10139: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10143: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -10172,7 +10156,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -10191,16 +10175,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10194: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10198: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -10310,13 +10294,36 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   openbsd*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs=no
-    ;;
   esac
 
   ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -10350,11 +10357,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
 	ld_shlibs=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -10390,10 +10398,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -10411,6 +10421,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
@@ -10436,15 +10451,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -10455,13 +10471,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  whole_archive_flag_spec=
 	  tmp_sharedflag='--shared' ;;
-	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  compiler_needs_object=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -10477,17 +10497,17 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
 	  hardcode_libdir_flag_spec=
 	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
-	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -10496,13 +10516,13 @@ _LT_EOF
       fi
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -10520,8 +10540,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -10567,8 +10587,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -10608,8 +10628,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -10671,7 +10693,6 @@ _LT_EOF
 	if test "$aix_use_runtimelinking" = yes; then
 	  shared_flag="$shared_flag "'${wl}-G'
 	fi
-	link_all_deplibs=no
       else
 	# not using gcc
 	if test "$host_cpu" = ia64; then
@@ -10697,7 +10718,13 @@ _LT_EOF
 	allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -10710,25 +10737,32 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
@@ -10737,7 +10771,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -10750,30 +10790,42 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
 	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  no_undefined_flag=' ${wl}-bernotok'
 	  allow_undefined_flag=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
 	  archive_cmds_need_lc=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -10805,20 +10857,63 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      allow_undefined_flag=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -10828,7 +10923,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  whole_archive_flag_spec=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec=''
+  fi
   link_all_deplibs=yes
   allow_undefined_flag="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -10836,7 +10935,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -10879,7 +10978,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
       hardcode_shlibpath_var=no
@@ -10887,7 +10986,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux9*)
       if test "$GCC" = yes; then
-	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -10902,8 +11001,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -10921,16 +11020,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -10942,7 +11041,46 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
 	  ;;
 	esac
       fi
@@ -10970,26 +11108,39 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-int foo(void) {}
+int foo (void) { return 0; }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -10998,7 +11149,7 @@ rm -f core conftest.err conftest.$ac_objext \
       link_all_deplibs=yes
       ;;
 
-    netbsd* | netbsdelf*-gnu)
+    netbsd*)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -11051,17 +11202,17 @@ rm -f core conftest.err conftest.$ac_objext \
       hardcode_libdir_flag_spec='-L$libdir'
       hardcode_minus_L=yes
       allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -11071,13 +11222,13 @@ rm -f core conftest.err conftest.$ac_objext \
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	hardcode_libdir_flag_spec='-rpath $libdir'
@@ -11090,9 +11241,9 @@ rm -f core conftest.err conftest.$ac_objext \
       no_undefined_flag=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -11280,44 +11431,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-	pic_flag=$lt_prog_compiler_pic
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag
-        allow_undefined_flag=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc=no
-        else
-	  archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
       ;;
     esac
   fi
@@ -11488,16 +11645,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -11510,7 +11674,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -11530,7 +11694,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[lt_foo]++; }
   if (lt_freq[lt_foo] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi
@@ -11618,7 +11788,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -11649,8 +11819,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -11671,36 +11842,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+    *)
+      sys_lib_search_path_spec="$LIB"
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
+        # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
       else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
       ;;
     esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -11787,6 +12005,19 @@ gnu*)
   hardcode_into_libs=yes
   ;;
 
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
 hpux9* | hpux10* | hpux11*)
   # Give a soname corresponding to the major version so that dld.sl refuses to
   # link against other versions.
@@ -11829,8 +12060,10 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
@@ -11897,12 +12130,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -11915,23 +12153,31 @@ main ()
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -11943,18 +12189,6 @@ rm -f core conftest.err conftest.$ac_objext \
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -12245,6 +12479,11 @@ fi
 
 
 
+
+
+
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
@@ -12317,7 +12556,7 @@ else
   # if libdl is installed we need to link against it
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12351,7 +12590,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
@@ -12365,12 +12604,12 @@ fi
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
+if test "x$ac_cv_func_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12404,16 +12643,16 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = x""yes; then :
+if test "x$ac_cv_func_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12447,12 +12686,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+if ${ac_cv_lib_svld_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12486,12 +12725,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -12525,7 +12764,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -12566,7 +12805,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
 $as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then :
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12575,7 +12814,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12578 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12616,7 +12855,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12625,7 +12870,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12662,7 +12911,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then :
+if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12671,7 +12920,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12674 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12712,7 +12961,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12721,7 +12976,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12878,6 +13137,145 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 CC="$lt_save_CC"
 
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
 
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -12904,6 +13302,8 @@ module_cmds_CXX=
 module_expsym_cmds_CXX=
 link_all_deplibs_CXX=unknown
 old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
 no_undefined_flag_CXX=
 whole_archive_flag_spec_CXX=
 enable_shared_with_static_runtimes_CXX=no
@@ -12959,6 +13359,7 @@ $RM -r conftest*
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -12976,6 +13377,7 @@ $RM -r conftest*
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   compiler_CXX=$CC
   for cc_temp in $compiler""; do
@@ -12986,7 +13388,7 @@ $RM -r conftest*
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
   if test -n "$compiler"; then
@@ -13049,7 +13451,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -13089,7 +13491,7 @@ fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -13115,8 +13517,8 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
         export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13148,7 +13550,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -13258,7 +13660,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
           allow_undefined_flag_CXX='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+          if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -13271,26 +13679,33 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
 	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
@@ -13299,7 +13714,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	    if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -13312,30 +13733,42 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
 	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
 	    no_undefined_flag_CXX=' ${wl}-bernotok'
 	    allow_undefined_flag_CXX=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    whole_archive_flag_spec_CXX='$convenience'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
 	    archive_cmds_need_lc_CXX=yes
 	    # This is similar to how AIX traditionally builds its shared
 	    # libraries.
@@ -13365,28 +13798,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-        # as there is no search path for DLLs.
-        hardcode_libdir_flag_spec_CXX='-L$libdir'
-        allow_undefined_flag_CXX=unsupported
-        always_export_symbols_CXX=no
-        enable_shared_with_static_runtimes_CXX=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          ld_shlibs_CXX=no
-        fi
-        ;;
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX=' '
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=yes
+	  file_list_spec_CXX='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+	  enable_shared_with_static_runtimes_CXX=yes
+	  # Don't use ranlib
+	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
+	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=no
+	  enable_shared_with_static_runtimes_CXX=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    ld_shlibs_CXX=no
+	  fi
+	  ;;
+	esac
+	;;
       darwin* | rhapsody*)
 
 
@@ -13394,7 +13874,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
   hardcode_shlibpath_var_CXX=unsupported
-  whole_archive_flag_spec_CXX=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
   link_all_deplibs_CXX=yes
   allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -13402,7 +13886,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -13455,6 +13939,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       gnu*)
         ;;
 
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
       hpux9*)
         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
         hardcode_libdir_separator_CXX=:
@@ -13479,11 +13968,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               ld_shlibs_CXX=no
@@ -13544,7 +14033,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
 	    if test "$GXX" = yes; then
@@ -13554,10 +14043,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -13587,7 +14076,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -13598,9 +14087,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           *)
 	    if test "$GXX" = yes; then
 	      if test "$with_gnu_ld" = no; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	      else
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
 	      fi
 	    fi
 	    link_all_deplibs_CXX=yes
@@ -13629,7 +14118,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13666,26 +14155,26 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
-	    *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
 	      prelink_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      old_archive_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
 		$RANLIB $oldlib'
 	      archive_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      archive_expsym_cmds_CXX='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
-	    *) # Version 6 will use weak symbols
+	    *) # Version 6 and above use weak symbols
 	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
@@ -13693,7 +14182,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
 	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
@@ -13712,9 +14201,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
-	  xl*)
+	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
 	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
 	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13734,13 +14223,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
 	      hardcode_libdir_flag_spec_CXX='-R$libdir'
-	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	      compiler_needs_object_CXX=yes
 
 	      # Not sure whether something based on
 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
 	      # would be better.
-	      output_verbose_link_cmd='echo'
+	      output_verbose_link_cmd='func_echo_all'
 
 	      # Archives containing C++ object files must be created using
 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13809,7 +14298,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    export_dynamic_flag_spec_CXX='${wl}-E'
 	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 	  fi
-	  output_verbose_link_cmd=echo
+	  output_verbose_link_cmd=func_echo_all
 	else
 	  ld_shlibs_CXX=no
 	fi
@@ -13844,15 +14333,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    case $host in
 	      osf3*)
 	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
 		;;
 	      *)
 	        allow_undefined_flag_CXX=' -expect_unresolved \*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
 	          $RM $lib.exp'
 	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
 		;;
@@ -13868,17 +14357,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
 	      case $host in
 	        osf3*)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	        *)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	      esac
 
@@ -13888,7 +14377,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	      # Commands to make compiler produce verbose output that lists
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
 	    else
 	      # FIXME: insert proper C++ library support
@@ -13924,7 +14413,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
             archive_cmds_need_lc_CXX=yes
 	    no_undefined_flag_CXX=' -zdefs'
@@ -13945,7 +14434,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    esac
 	    link_all_deplibs_CXX=yes
 
-	    output_verbose_link_cmd='echo'
+	    output_verbose_link_cmd='func_echo_all'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -13965,14 +14454,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
 	        # platform.
@@ -13983,7 +14472,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
 	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
@@ -14037,6 +14526,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           CC*)
 	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+	      '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+	      '"$reload_cmds_CXX"
 	    ;;
 	  *)
 	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -14098,6 +14591,13 @@ private:
 };
 _LT_EOF
 
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -14111,7 +14611,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -14120,13 +14620,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -14146,8 +14655,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
 	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -14183,6 +14694,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 case $host_os in
@@ -14218,7 +14730,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -14283,8 +14795,6 @@ fi
 lt_prog_compiler_pic_CXX=
 lt_prog_compiler_static_CXX=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -14334,6 +14844,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       # DJGPP does not support shared libraries at all
       lt_prog_compiler_pic_CXX=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
     interix[3-9]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -14383,6 +14898,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	  ;;
 	esac
 	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+	;;
       dgux*)
 	case $cc_basename in
 	  ec++*)
@@ -14472,8 +14992,8 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    lt_prog_compiler_pic_CXX=
 	    lt_prog_compiler_static_CXX='-non_shared'
 	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
 	    lt_prog_compiler_wl_CXX='-Wl,'
 	    lt_prog_compiler_pic_CXX='-qpic'
 	    lt_prog_compiler_static_CXX='-qstaticlink'
@@ -14503,7 +15023,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
 	;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -14535,7 +15055,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	;;
       solaris*)
 	case $cc_basename in
-	  CC*)
+	  CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
 	    lt_prog_compiler_pic_CXX='-KPIC'
 	    lt_prog_compiler_static_CXX='-Bstatic'
@@ -14600,10 +15120,17 @@ case $host_os in
     lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
 
 #
 # Check to make sure the PIC flag actually works.
@@ -14611,7 +15138,7 @@ $as_echo "$lt_prog_compiler_pic_CXX" >&6; }
 if test -n "$lt_prog_compiler_pic_CXX"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works_CXX=no
@@ -14627,15 +15154,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14630: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14634: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works_CXX=yes
@@ -14661,13 +15188,15 @@ fi
 
 
 
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_CXX=no
@@ -14680,7 +15209,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works_CXX=yes
@@ -14707,7 +15236,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14726,16 +15255,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14729: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14733: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
@@ -14759,7 +15288,7 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o_CXX=no
@@ -14778,16 +15307,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14781: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14785: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o_CXX=yes
@@ -14838,30 +15367,35 @@ fi
 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
   export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
   case $host_os in
   aix[4-9]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     export_symbols_cmds_CXX="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs_CXX=no
-  ;;
+    case $cc_basename in
+    cl*) ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
   *)
     export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
@@ -14893,44 +15427,50 @@ x|xyes)
       # to ld, don't add -lc before -lgcc.
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_CXX
-	pic_flag=$lt_prog_compiler_pic_CXX
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
-        allow_undefined_flag_CXX=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc_CXX=no
-        else
-	  archive_cmds_need_lc_CXX=yes
-        fi
-        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
       ;;
     esac
   fi
@@ -15087,7 +15627,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -15118,8 +15658,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -15140,36 +15681,82 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -15255,6 +15842,19 @@ gnu*)
   hardcode_into_libs=yes
   ;;
 
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
 hpux9* | hpux10* | hpux11*)
   # Give a soname corresponding to the major version so that dld.sl refuses to
   # link against other versions.
@@ -15297,8 +15897,10 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
@@ -15365,12 +15967,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -15383,23 +15990,31 @@ main ()
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
   if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -15411,18 +16026,6 @@ rm -f core conftest.err conftest.$ac_objext \
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -15662,6 +16265,8 @@ fi
 
 
 
+
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action_CXX=
@@ -15709,6 +16314,7 @@ fi
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -15749,7 +16355,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # Checks for typedefs, structures, and compiler characteristics.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15828,7 +16434,7 @@ $as_echo "#define const /**/" >>confdefs.h
 fi
 
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = x""yes; then :
+if test "x$ac_cv_type_off_t" = xyes; then :
 
 else
 
@@ -15839,7 +16445,7 @@ _ACEOF
 fi
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -15851,7 +16457,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if test "${ac_cv_header_time+set}" = set; then :
+if ${ac_cv_header_time+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15886,7 +16492,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if test "${ac_cv_struct_tm+set}" = set; then :
+if ${ac_cv_struct_tm+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15921,7 +16527,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
 $as_echo_n "checking for working volatile... " >&6; }
-if test "${ac_cv_c_volatile+set}" = set; then :
+if ${ac_cv_c_volatile+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15957,7 +16563,7 @@ fi
 # Checks for library functions.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
-if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then :
+if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f conftest.sym conftest.file
@@ -16019,7 +16625,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5
 $as_echo_n "checking whether lstat accepts an empty string... " >&6; }
-if test "${ac_cv_func_lstat_empty_string_bug+set}" = set; then :
+if ${ac_cv_func_lstat_empty_string_bug+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -16065,7 +16671,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
-if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then :
+if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f conftest.sym conftest.file
@@ -16127,7 +16733,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
 $as_echo_n "checking for working memcmp... " >&6; }
-if test "${ac_cv_func_memcmp_working+set}" = set; then :
+if ${ac_cv_func_memcmp_working+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -16189,7 +16795,7 @@ esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
 $as_echo_n "checking whether stat accepts an empty string... " >&6; }
-if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then :
+if ${ac_cv_func_stat_empty_string_bug+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -16236,7 +16842,7 @@ fi
 for ac_func in strftime
 do :
   ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
-if test "x$ac_cv_func_strftime" = x""yes; then :
+if test "x$ac_cv_func_strftime" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STRFTIME 1
 _ACEOF
@@ -16245,7 +16851,7 @@ else
   # strftime is in -lintl on SCO UNIX.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
 $as_echo_n "checking for strftime in -lintl... " >&6; }
-if test "${ac_cv_lib_intl_strftime+set}" = set; then :
+if ${ac_cv_lib_intl_strftime+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16279,7 +16885,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
 $as_echo "$ac_cv_lib_intl_strftime" >&6; }
-if test "x$ac_cv_lib_intl_strftime" = x""yes; then :
+if test "x$ac_cv_lib_intl_strftime" = xyes; then :
   $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
 
 LIBS="-lintl $LIBS"
@@ -16319,7 +16925,7 @@ if test x"$enable_readline" != xno ; then
   LIBS=""
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
 $as_echo_n "checking for library containing tgetent... " >&6; }
-if test "${ac_cv_search_tgetent+set}" = set; then :
+if ${ac_cv_search_tgetent+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16353,11 +16959,11 @@ for ac_lib in '' curses; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_tgetent+set}" = set; then :
+  if ${ac_cv_search_tgetent+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_tgetent+set}" = set; then :
+if ${ac_cv_search_tgetent+:} false; then :
 
 else
   ac_cv_search_tgetent=no
@@ -16375,7 +16981,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing readline" >&5
 $as_echo_n "checking for library containing readline... " >&6; }
-if test "${ac_cv_search_readline+set}" = set; then :
+if ${ac_cv_search_readline+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -16409,11 +17015,11 @@ for ac_lib in '' readline; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_readline+set}" = set; then :
+  if ${ac_cv_search_readline+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_readline+set}" = set; then :
+if ${ac_cv_search_readline+:} false; then :
 
 else
   ac_cv_search_readline=no
@@ -16434,7 +17040,7 @@ fi
   for ac_func in readline
 do :
   ac_fn_c_check_func "$LINENO" "readline" "ac_cv_func_readline"
-if test "x$ac_cv_func_readline" = x""yes; then :
+if test "x$ac_cv_func_readline" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_READLINE 1
 _ACEOF
@@ -16449,7 +17055,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML_ParserCreate in -lexpat" >&5
 $as_echo_n "checking for XML_ParserCreate in -lexpat... " >&6; }
-if test "${ac_cv_lib_expat_XML_ParserCreate+set}" = set; then :
+if ${ac_cv_lib_expat_XML_ParserCreate+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16483,7 +17089,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_expat_XML_ParserCreate" >&5
 $as_echo "$ac_cv_lib_expat_XML_ParserCreate" >&6; }
-if test "x$ac_cv_lib_expat_XML_ParserCreate" = x""yes; then :
+if test "x$ac_cv_lib_expat_XML_ParserCreate" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBEXPAT 1
 _ACEOF
@@ -16491,12 +17097,12 @@ _ACEOF
   LIBS="-lexpat $LIBS"
 
 else
-  as_fn_error $? "'expat' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'expat' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pj_init_plus in -lproj" >&5
 $as_echo_n "checking for pj_init_plus in -lproj... " >&6; }
-if test "${ac_cv_lib_proj_pj_init_plus+set}" = set; then :
+if ${ac_cv_lib_proj_pj_init_plus+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16530,7 +17136,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_proj_pj_init_plus" >&5
 $as_echo "$ac_cv_lib_proj_pj_init_plus" >&6; }
-if test "x$ac_cv_lib_proj_pj_init_plus" = x""yes; then :
+if test "x$ac_cv_lib_proj_pj_init_plus" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBPROJ 1
 _ACEOF
@@ -16538,12 +17144,12 @@ _ACEOF
   LIBS="-lproj $LIBS"
 
 else
-  as_fn_error $? "'libproj' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libproj' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GEOSTopologyPreserveSimplify in -lgeos_c" >&5
 $as_echo_n "checking for GEOSTopologyPreserveSimplify in -lgeos_c... " >&6; }
-if test "${ac_cv_lib_geos_c_GEOSTopologyPreserveSimplify+set}" = set; then :
+if ${ac_cv_lib_geos_c_GEOSTopologyPreserveSimplify+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -16577,7 +17183,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_geos_c_GEOSTopologyPreserveSimplify" >&5
 $as_echo "$ac_cv_lib_geos_c_GEOSTopologyPreserveSimplify" >&6; }
-if test "x$ac_cv_lib_geos_c_GEOSTopologyPreserveSimplify" = x""yes; then :
+if test "x$ac_cv_lib_geos_c_GEOSTopologyPreserveSimplify" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBGEOS_C 1
 _ACEOF
@@ -16585,7 +17191,7 @@ _ACEOF
   LIBS="-lgeos_c $LIBS"
 
 else
-  as_fn_error $? "'libgeos_c' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+  as_fn_error $? "'libgeos_c' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 fi
 
 
@@ -16601,7 +17207,7 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PKG_CONFIG in
@@ -16644,7 +17250,7 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
 set dummy pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ac_pt_PKG_CONFIG in
@@ -16765,11 +17371,11 @@ fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$LIBSPATIALITE_PKG_ERRORS" >&5
 
-	as_fn_error $? "'libspatialite' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+	as_fn_error $? "'libspatialite' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 elif test $pkg_failed = untried; then
      	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	as_fn_error $? "'libspatialite' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+	as_fn_error $? "'libspatialite' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 else
 	LIBSPATIALITE_CFLAGS=$pkg_cv_LIBSPATIALITE_CFLAGS
 	LIBSPATIALITE_LIBS=$pkg_cv_LIBSPATIALITE_LIBS
@@ -16778,6 +17384,8 @@ $as_echo "yes" >&6; }
 
 fi
 
+
+
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBFREEXL" >&5
 $as_echo_n "checking for LIBFREEXL... " >&6; }
@@ -16834,11 +17442,11 @@ fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$LIBFREEXL_PKG_ERRORS" >&5
 
-	as_fn_error $? "'libfreexl' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+	as_fn_error $? "'libfreexl' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 elif test $pkg_failed = untried; then
      	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	as_fn_error $? "'libfreexl' is required but it doesn't seems to be installed on this system." "$LINENO" 5
+	as_fn_error $? "'libfreexl' is required but it doesn't seem to be installed on this system." "$LINENO" 5
 else
 	LIBFREEXL_CFLAGS=$pkg_cv_LIBFREEXL_CFLAGS
 	LIBFREEXL_LIBS=$pkg_cv_LIBFREEXL_LIBS
@@ -16913,10 +17521,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -17011,12 +17630,8 @@ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -17117,6 +17732,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -17423,8 +18039,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by spatialite-tools $as_me 3.0.0-beta, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+This file was extended by spatialite-tools $as_me 3.0.0-stable, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -17480,8 +18096,8 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-spatialite-tools config.status 3.0.0-beta
-configured by $0, generated by GNU Autoconf 2.67,
+spatialite-tools config.status 3.0.0-stable
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -17598,186 +18214,212 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 sed_quote_subst='$sed_quote_subst'
 double_quote_subst='$double_quote_subst'
 delay_variable_subst='$delay_variable_subst'
-AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
-LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
 
 LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
-for var in SED \
+for var in AS \
+DLLTOOL \
+OBJDUMP \
+SHELL \
+ECHO \
+SED \
 GREP \
 EGREP \
 FGREP \
@@ -17789,8 +18431,12 @@ lt_NL2SP \
 reload_flag \
 deplibs_check_method \
 file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+sharedlib_from_linklib_cmd \
 AR \
 AR_FLAGS \
+archiver_list_spec \
 STRIP \
 RANLIB \
 CC \
@@ -17800,14 +18446,14 @@ lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
+nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
 lt_prog_compiler_pic \
+lt_prog_compiler_wl \
 lt_prog_compiler_static \
 lt_cv_prog_compiler_c_o \
 need_locks \
+MANIFEST_TOOL \
 DSYMUTIL \
 NMEDIT \
 LIPO \
@@ -17823,7 +18469,6 @@ no_undefined_flag \
 hardcode_libdir_flag_spec \
 hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
-fix_srcfile_path \
 exclude_expsyms \
 include_expsyms \
 file_list_spec \
@@ -17831,6 +18476,7 @@ variables_saved_for_relink \
 libname_spec \
 library_names_spec \
 soname_spec \
+install_override_mode \
 finish_eval \
 old_striplib \
 striplib \
@@ -17841,10 +18487,11 @@ predeps \
 postdeps \
 compiler_lib_search_path \
 LD_CXX \
+reload_flag_CXX \
 compiler_CXX \
 lt_prog_compiler_no_builtin_flag_CXX \
-lt_prog_compiler_wl_CXX \
 lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
 lt_prog_compiler_static_CXX \
 lt_cv_prog_compiler_c_o_CXX \
 export_dynamic_flag_spec_CXX \
@@ -17856,7 +18503,6 @@ no_undefined_flag_CXX \
 hardcode_libdir_flag_spec_CXX \
 hardcode_libdir_flag_spec_ld_CXX \
 hardcode_libdir_separator_CXX \
-fix_srcfile_path_CXX \
 exclude_expsyms_CXX \
 include_expsyms_CXX \
 file_list_spec_CXX \
@@ -17866,9 +18512,9 @@ postdep_objects_CXX \
 predeps_CXX \
 postdeps_CXX \
 compiler_lib_search_path_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -17890,11 +18536,13 @@ module_cmds \
 module_expsym_cmds \
 export_symbols_cmds \
 prelink_cmds \
+postlink_cmds \
 postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
 sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
 old_archive_cmds_CXX \
 old_archive_from_new_cmds_CXX \
 old_archive_from_expsyms_cmds_CXX \
@@ -17903,10 +18551,11 @@ archive_expsym_cmds_CXX \
 module_cmds_CXX \
 module_expsym_cmds_CXX \
 export_symbols_cmds_CXX \
-prelink_cmds_CXX; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -17914,12 +18563,6 @@ prelink_cmds_CXX; do
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
-  ;;
-esac
-
 ac_aux_dir='$ac_aux_dir'
 xsi_shell='$xsi_shell'
 lt_shell_append='$lt_shell_append'
@@ -17954,7 +18597,7 @@ do
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
 
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -17976,9 +18619,10 @@ fi
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -17986,12 +18630,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -18013,7 +18658,7 @@ else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -18041,7 +18686,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -18089,7 +18734,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -18121,7 +18766,7 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -18161,7 +18806,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -18180,7 +18825,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -18189,7 +18834,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -18215,8 +18860,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -18352,21 +18997,22 @@ s&@INSTALL@&$ac_INSTALL&;t t
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -18495,7 +19141,8 @@ $as_echo X"$file" |
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -18528,13 +19175,13 @@ available_tags="CXX "
 # ### BEGIN LIBTOOL CONFIG
 
 # Assembler program.
-AS=$AS
+AS=$lt_AS
 
 # DLL creation program.
-DLLTOOL=$DLLTOOL
+DLLTOOL=$lt_DLLTOOL
 
 # Object dumper program.
-OBJDUMP=$OBJDUMP
+OBJDUMP=$lt_OBJDUMP
 
 # Which release of libtool.m4 was used?
 macro_version=$macro_version
@@ -18552,6 +19199,12 @@ pic_mode=$pic_mode
 # Whether or not to optimize for fast installation.
 fast_install=$enable_fast_install
 
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -18601,20 +19254,36 @@ SP2NL=$lt_lt_SP2NL
 # turn newlines into spaces.
 NL2SP=$lt_lt_NL2SP
 
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
 # Method to check whether dependent libraries are shared objects.
 deplibs_check_method=$lt_deplibs_check_method
 
-# Command to use when deplibs_check_method == "file_magic".
+# Command to use when deplibs_check_method = "file_magic".
 file_magic_cmd=$lt_file_magic_cmd
 
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
 # The archiver.
 AR=$lt_AR
+
+# Flags to create an archive.
 AR_FLAGS=$lt_AR_FLAGS
 
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
 # A symbol stripping program.
 STRIP=$lt_STRIP
 
@@ -18623,6 +19292,9 @@ RANLIB=$lt_RANLIB
 old_postinstall_cmds=$lt_old_postinstall_cmds
 old_postuninstall_cmds=$lt_old_postuninstall_cmds
 
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
 # A C compiler.
 LTCC=$lt_CC
 
@@ -18641,14 +19313,14 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
 
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
 
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
 
 # Used to examine libraries when file_magic_cmd begins with "file".
 MAGIC_CMD=$MAGIC_CMD
@@ -18656,6 +19328,9 @@ MAGIC_CMD=$MAGIC_CMD
 # Must we lock files when doing compilation?
 need_locks=$lt_need_locks
 
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
 # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
 DSYMUTIL=$lt_DSYMUTIL
 
@@ -18712,6 +19387,9 @@ library_names_spec=$lt_library_names_spec
 # The coded name of the library, if different from the real name.
 soname_spec=$lt_soname_spec
 
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
 # Command to use after installation of a shared archive.
 postinstall_cmds=$lt_postinstall_cmds
 
@@ -18751,6 +19429,10 @@ striplib=$lt_striplib
 # The linker used to build libraries.
 LD=$lt_LD
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds
 
@@ -18763,12 +19445,12 @@ with_gcc=$GCC
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static
 
@@ -18855,9 +19537,6 @@ inherit_rpath=$inherit_rpath
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols
 
@@ -18873,6 +19552,9 @@ include_expsyms=$lt_include_expsyms
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec
 
@@ -18919,212 +19601,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 
@@ -19136,6 +19775,10 @@ _LT_EOF
 # The linker used to build libraries.
 LD=$lt_LD_CXX
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds_CXX
 
@@ -19148,12 +19791,12 @@ with_gcc=$GCC_CXX
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic_CXX
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static_CXX
 
@@ -19240,9 +19883,6 @@ inherit_rpath=$inherit_rpath_CXX
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs_CXX
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_CXX
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols_CXX
 
@@ -19258,6 +19898,9 @@ include_expsyms=$lt_include_expsyms_CXX
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds_CXX
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec_CXX
 
diff --git a/spatialite-tools/configure.ac b/spatialite-tools/configure.ac
index d4b4106..1191e4d 100644
--- a/spatialite-tools/configure.ac
+++ b/spatialite-tools/configure.ac
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.61)
-AC_INIT(spatialite-tools, 3.0.0-beta, a.furieri at lqt.it)
+AC_INIT(spatialite-tools, 3.0.0-stable, a.furieri at lqt.it)
 AC_LANG(C)
 AC_CONFIG_MACRO_DIR([m4])
 
@@ -70,13 +70,15 @@ if test x"$enable_readline" != xno ; then
 fi
 AC_SUBST(READLINE_LIBS)
 
-AC_CHECK_LIB(expat,XML_ParserCreate,,AC_MSG_ERROR(['expat' is required but it doesn't seems to be installed on this system.]))
-AC_CHECK_LIB(proj,pj_init_plus,,AC_MSG_ERROR(['libproj' is required but it doesn't seems to be installed on this system.]),-lm)
-AC_CHECK_LIB(geos_c,GEOSTopologyPreserveSimplify,,AC_MSG_ERROR(['libgeos_c' is required but it doesn't seems to be installed on this system.]),-lm -lgeos)
+AC_CHECK_LIB(expat,XML_ParserCreate,,AC_MSG_ERROR(['expat' is required but it doesn't seem to be installed on this system.]))
+AC_CHECK_LIB(proj,pj_init_plus,,AC_MSG_ERROR(['libproj' is required but it doesn't seem to be installed on this system.]),-lm)
+AC_CHECK_LIB(geos_c,GEOSTopologyPreserveSimplify,,AC_MSG_ERROR(['libgeos_c' is required but it doesn't seem to be installed on this system.]),-lm -lgeos)
 
-PKG_CHECK_MODULES([LIBSPATIALITE], [spatialite], , AC_MSG_ERROR(['libspatialite' is required but it doesn't seems to be installed on this system.]))
-PKG_CHECK_MODULES([LIBFREEXL], [freexl], , AC_MSG_ERROR(['libfreexl' is required but it doesn't seems to be installed on this system.]))
+PKG_CHECK_MODULES([LIBSPATIALITE], [spatialite], , AC_MSG_ERROR(['libspatialite' is required but it doesn't seem to be installed on this system.]))
 AC_SUBST(LIBSPATIALITE_CFLAGS)
 AC_SUBST(LIBSPATIALITE_LIBS)
+PKG_CHECK_MODULES([LIBFREEXL], [freexl], , AC_MSG_ERROR(['libfreexl' is required but it doesn't seem to be installed on this system.]))
+AC_SUBST(LIBFREEXL_CFLAGS)
+AC_SUBST(LIBFREEXL_LIBS)
 
 AC_OUTPUT
diff --git a/spatialite-tools/exif_loader.c b/spatialite-tools/exif_loader.c
index 97adceb..5c4fe50 100644
--- a/spatialite-tools/exif_loader.c
+++ b/spatialite-tools/exif_loader.c
@@ -970,7 +970,7 @@ load_file (sqlite3 * handle, const char *file_path, int gps_only, int metadata)
 	      printf ("SQL error(s): file '%s' was not loaded\n", file_path);
       }
     else
-	printf ("file '%s' succesfully loaded\n", file_path);
+	printf ("file '%s' successfully loaded\n", file_path);
     if (blob)
 	free (blob);
     if (tag_list)
@@ -1056,7 +1056,6 @@ checkExifTables (sqlite3 * handle)
     int ok_shotDateTime;
     int ok_gpsGeometry;
     int ok_gpsDirection;
-    int ok_gpsSatellites;
     int ok_gpsTimestamp;
     int ok_fromPath;
     int ok_tagId;
@@ -1114,7 +1113,6 @@ checkExifTables (sqlite3 * handle)
     ok_shotDateTime = 0;
     ok_gpsGeometry = 0;
     ok_gpsDirection = 0;
-    ok_gpsSatellites = 0;
     ok_gpsTimestamp = 0;
     ok_fromPath = 0;
     ok_photoIdPk = 0;
@@ -1424,7 +1422,7 @@ spatialite_autocreate (sqlite3 * db)
     if (count > 0)
 	return;
 
-/* all right, it's empty: proceding to initialize */
+/* all right, it's empty: proceeding to initialize */
     strcpy (sql, "SELECT InitSpatialMetadata()");
     ret = sqlite3_exec (db, sql, NULL, NULL, &err_msg);
     if (ret != SQLITE_OK)
@@ -1593,7 +1591,7 @@ main (int argc, char *argv[])
     if (!checkExifTables (handle))
       {
 	  fprintf (stderr,
-		   "An EXIF table is already defined, but has incompatibles columns\n\nSorry ...\n");
+		   "An EXIF table is already defined, but has incompatible columns\n\nSorry ...\n");
 	  sqlite3_close (handle);
 	  return -1;
       }
@@ -1607,7 +1605,7 @@ main (int argc, char *argv[])
 		 sqlite3_errmsg (handle));
     if (cnt)
 	fprintf (stderr,
-		 "\n\n***   %d EXIF photo%s succesfully inserted into the DB\n",
+		 "\n\n***   %d EXIF photo%s successfully inserted into the DB\n",
 		 cnt, (cnt > 1) ? "s where" : " was");
     return 0;
 }
diff --git a/spatialite-tools/ltmain.sh b/spatialite-tools/ltmain.sh
index d88da2c..aa5624c 100755
--- a/spatialite-tools/ltmain.sh
+++ b/spatialite-tools/ltmain.sh
@@ -1,9 +1,9 @@
-# Generated from ltmain.m4sh.
 
-# ltmain.sh (GNU libtool) 2.2.6b
+# libtool (GNU libtool) 2.4
 # Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -32,50 +32,56 @@
 #
 # Provide generalized library-building support services.
 #
-#     --config             show all configuration variables
-#     --debug              enable verbose shell tracing
-# -n, --dry-run            display commands without modifying any files
-#     --features           display basic configuration information and exit
-#     --mode=MODE          use operation mode MODE
-#     --preserve-dup-deps  don't remove duplicate dependency libraries
-#     --quiet, --silent    don't print informational messages
-#     --tag=TAG            use configuration variables from tag TAG
-# -v, --verbose            print informational messages (default)
-#     --version            print version information
-# -h, --help               print short or long help message
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
 #
 # MODE must be one of the following:
 #
-#       clean              remove files from the build directory
-#       compile            compile a source file into a libtool object
-#       execute            automatically set library path, then run a program
-#       finish             complete the installation of libtool libraries
-#       install            install libraries or executables
-#       link               create a library or an executable
-#       uninstall          remove libraries from an installed directory
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
 #
-# MODE-ARGS vary depending on the MODE.
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
 #
 # When reporting a bug, please describe a test case to reproduce it and
 # include the following information:
 #
-#       host-triplet:	$host
-#       shell:		$SHELL
-#       compiler:		$LTCC
-#       compiler flags:		$LTCFLAGS
-#       linker:		$LD (gnu? $with_gnu_ld)
-#       $progname:		(GNU libtool) 2.2.6b Debian-2.2.6b-2
-#       automake:		$automake_version
-#       autoconf:		$autoconf_version
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
 #
 # Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
-PROGRAM=ltmain.sh
+PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.2.6b Debian-2.2.6b-2"
+VERSION=2.4
 TIMESTAMP=""
-package_revision=1.3017
+package_revision=1.3293
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -91,10 +97,15 @@ fi
 BIN_SH=xpg4; export BIN_SH # for Tru64
 DUALCASE=1; export DUALCASE # for MKS sh
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
 # NLS nuisances: We save the old values to restore during execute mode.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
 lt_user_locale=
 lt_safe_locale=
 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
@@ -107,15 +118,24 @@ do
 	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
 	fi"
 done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
 
 $lt_unset CDPATH
 
 
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
 
 
 
 : ${CP="cp -f"}
-: ${ECHO="echo"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
 : ${EGREP="/bin/grep -E"}
 : ${FGREP="/bin/grep -F"}
 : ${GREP="/bin/grep"}
@@ -144,6 +164,27 @@ IFS=" 	$lt_nl"
 dirname="s,/[^/]*$,,"
 basename="s,^.*/,,"
 
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
 # func_dirname_and_basename file append nondir_replacement
 # perform func_basename and func_dirname in a single function
 # call:
@@ -158,33 +199,183 @@ basename="s,^.*/,,"
 # those functions but instead duplicate the functionality here.
 func_dirname_and_basename ()
 {
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
 }
 
-# Generated shell functions inserted here.
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
 
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
 
 # The name of this program:
-# In the unlikely event $progname began with a '-', it would play havoc with
-# func_echo (imagine progname=-n), so we prepend ./ in that case:
 func_dirname_and_basename "$progpath"
 progname=$func_basename_result
-case $progname in
-  -*) progname=./$progname ;;
-esac
 
 # Make sure we have an absolute path for reexecution:
 case $progpath in
@@ -215,6 +406,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
 # Same as above, but do not quote variable references.
 double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
 # Re-`\' parameter expansions in output of double_quote_subst that were
 # `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
 # in input to double_quote_subst, that '$' was protected from expansion.
@@ -243,7 +443,7 @@ opt_warning=:
 # name if it has been set yet.
 func_echo ()
 {
-    $ECHO "$progname${mode+: }$mode: $*"
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
 }
 
 # func_verbose arg...
@@ -258,18 +458,25 @@ func_verbose ()
     :
 }
 
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
 # func_error arg...
 # Echo program name prefixed message to standard error.
 func_error ()
 {
-    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
 }
 
 # func_warning arg...
 # Echo program name prefixed warning message to standard error.
 func_warning ()
 {
-    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
 
     # bash bug again:
     :
@@ -326,9 +533,9 @@ func_mkdir_p ()
         case $my_directory_path in */*) ;; *) break ;; esac
 
         # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
       done
-      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
 
       save_mkdir_p_IFS="$IFS"; IFS=':'
       for my_dir in $my_dir_list; do
@@ -378,7 +585,7 @@ func_mktempdir ()
         func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
     fi
 
-    $ECHO "X$my_tmpdir" | $Xsed
+    $ECHO "$my_tmpdir"
 }
 
 
@@ -392,7 +599,7 @@ func_quote_for_eval ()
 {
     case $1 in
       *[\\\`\"\$]*)
-	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
       *)
         func_quote_for_eval_unquoted_result="$1" ;;
     esac
@@ -419,7 +626,7 @@ func_quote_for_expand ()
 {
     case $1 in
       *[\\\`\"]*)
-	my_arg=`$ECHO "X$1" | $Xsed \
+	my_arg=`$ECHO "$1" | $SED \
 	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
       *)
         my_arg="$1" ;;
@@ -488,15 +695,39 @@ func_show_eval_locale ()
     fi
 }
 
-
-
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
 
 
 # func_version
 # Echo version message to standard output and exit.
 func_version ()
 {
-    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
         s/^# //
 	s/^# *$//
         s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
@@ -509,22 +740,28 @@ func_version ()
 # Echo short help message to standard output and exit.
 func_usage ()
 {
-    $SED -n '/^# Usage:/,/# -h/ {
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
         s/^# //
 	s/^# *$//
 	s/\$progname/'$progname'/
 	p
     }' < "$progpath"
-    $ECHO
+    echo
     $ECHO "run \`$progname --help | more' for full usage"
     exit $?
 }
 
-# func_help
-# Echo long help message to standard output and exit.
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
 func_help ()
 {
+    $opt_debug
+
     $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
         s/^# //
 	s/^# *$//
 	s*\$progname*'$progname'*
@@ -537,8 +774,15 @@ func_help ()
 	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
 	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
 	p
-     }' < "$progpath"
-    exit $?
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
 }
 
 # func_missing_arg argname
@@ -546,63 +790,106 @@ func_help ()
 # exit_cmd.
 func_missing_arg ()
 {
-    func_error "missing argument for $1"
+    $opt_debug
+
+    func_error "missing argument for $1."
     exit_cmd=exit
 }
 
-exit_cmd=:
 
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
 
 
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
 
 
-# Check that we have a working $ECHO.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell, and then maybe $ECHO will work.
-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
 
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit $EXIT_SUCCESS
-fi
 
 magic="%%%MAGIC variable%%%"
 magic_exe="%%%MAGIC EXE variable%%%"
 
 # Global variables.
-# $mode is unset
 nonopt=
-execute_dlfiles=
 preserve_args=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
 extracted_archives=
 extracted_serial=0
 
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
 # If this variable is set in any of the actions, the command in it
 # will be execed at the end.  This prevents here-documents from being
 # left over by shells.
 exec_cmd=
 
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
 # func_fatal_configuration arg...
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
@@ -636,16 +923,16 @@ func_config ()
 # Display the features supported by this script.
 func_features ()
 {
-    $ECHO "host: $host"
+    echo "host: $host"
     if test "$build_libtool_libs" = yes; then
-      $ECHO "enable shared libraries"
+      echo "enable shared libraries"
     else
-      $ECHO "disable shared libraries"
+      echo "disable shared libraries"
     fi
     if test "$build_old_libs" = yes; then
-      $ECHO "enable static libraries"
+      echo "enable static libraries"
     else
-      $ECHO "disable static libraries"
+      echo "disable static libraries"
     fi
 
     exit $?
@@ -692,117 +979,204 @@ func_enable_tag ()
   esac
 }
 
-# Parse options once, thoroughly.  This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
 {
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
 
-  # Shorthand for --mode=foo, only valid as the first argument
-  case $1 in
-  clean|clea|cle|cl)
-    shift; set dummy --mode clean ${1+"$@"}; shift
-    ;;
-  compile|compil|compi|comp|com|co|c)
-    shift; set dummy --mode compile ${1+"$@"}; shift
-    ;;
-  execute|execut|execu|exec|exe|ex|e)
-    shift; set dummy --mode execute ${1+"$@"}; shift
-    ;;
-  finish|finis|fini|fin|fi|f)
-    shift; set dummy --mode finish ${1+"$@"}; shift
-    ;;
-  install|instal|insta|inst|ins|in|i)
-    shift; set dummy --mode install ${1+"$@"}; shift
-    ;;
-  link|lin|li|l)
-    shift; set dummy --mode link ${1+"$@"}; shift
-    ;;
-  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-    shift; set dummy --mode uninstall ${1+"$@"}; shift
-    ;;
-  esac
 
-  # Parse non-mode specific arguments:
-  while test "$#" -gt 0; do
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
     opt="$1"
     shift
-
     case $opt in
-      --config)		func_config					;;
-
-      --debug)		preserve_args="$preserve_args $opt"
+      --debug|-x)	opt_debug='set -x'
 			func_echo "enabling shell trace mode"
-			opt_debug='set -x'
 			$opt_debug
 			;;
-
-      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			execute_dlfiles="$execute_dlfiles $1"
-			shift
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
 			;;
-
-      --dry-run | -n)	opt_dry_run=:					;;
-      --features)       func_features					;;
-      --finish)		mode="finish"					;;
-
-      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			case $1 in
-			  # Valid mode arguments:
-			  clean)	;;
-			  compile)	;;
-			  execute)	;;
-			  finish)	;;
-			  install)	;;
-			  link)		;;
-			  relink)	;;
-			  uninstall)	;;
-
-			  # Catch anything else as an error
-			  *) func_error "invalid argument for $opt"
-			     exit_cmd=exit
-			     break
-			     ;;
-		        esac
-
-			mode="$1"
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
 			shift
 			;;
-
       --preserve-dup-deps)
-			opt_duplicate_deps=:				;;
-
-      --quiet|--silent)	preserve_args="$preserve_args $opt"
-			opt_silent=:
+			opt_preserve_dup_deps=:
 			;;
-
-      --verbose| -v)	preserve_args="$preserve_args $opt"
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
 			opt_silent=false
+func_append preserve_args " $opt"
 			;;
-
-      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			preserve_args="$preserve_args $opt $1"
-			func_enable_tag "$1"	# tagname is set here
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
 			shift
 			;;
 
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
       # Separate optargs to long options:
-      -dlopen=*|--mode=*|--tag=*)
-			func_opt_split "$opt"
-			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
 			shift
 			;;
 
-      -\?|-h)		func_usage					;;
-      --help)		opt_help=:					;;
-      --version)	func_version					;;
-
-      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
-
-      *)		nonopt="$opt"
-			break
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
 			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
     esac
   done
 
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
 
   case $host in
     *cygwin* | *mingw* | *pw32* | *cegcc*)
@@ -810,82 +1184,44 @@ func_enable_tag ()
       opt_duplicate_compiler_generated_deps=:
       ;;
     *)
-      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
       ;;
   esac
 
-  # Having warned about all mis-specified options, bail out if
-  # anything was wrong.
-  $exit_cmd $EXIT_FAILURE
-}
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
 
-# func_check_version_match
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      else
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
     fi
 
-    exit $EXIT_MISMATCH
-  fi
-}
-
-
-## ----------- ##
-##    Main.    ##
-## ----------- ##
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
 
-$opt_help || {
-  # Sanity checks first:
-  func_check_version_match
-
-  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-    func_fatal_configuration "not configured to build any kind of library"
-  fi
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
 
-  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
 
 
-  # Darwin sucks
-  eval std_shrext=\"$shrext_cmds\"
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
 
 
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    func_error "unrecognized option \`-dlopen'"
-    $ECHO "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
 
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$progname --help --mode=$mode' for more information."
-}
 
+## ----------- ##
+##    Main.    ##
+## ----------- ##
 
 # func_lalib_p file
 # True iff FILE is a libtool `.la' library or `.lo' object file.
@@ -950,12 +1286,9 @@ func_ltwrapper_executable_p ()
 # temporary ltwrapper_script.
 func_ltwrapper_scriptname ()
 {
-    func_ltwrapper_scriptname_result=""
-    if func_ltwrapper_executable_p "$1"; then
-	func_dirname_and_basename "$1" "" "."
-	func_stripname '' '.exe' "$func_basename_result"
-	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-    fi
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
 }
 
 # func_ltwrapper_p file
@@ -1001,6 +1334,37 @@ func_source ()
 }
 
 
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
 # func_infer_tag arg
 # Infer tagged configuration to use if any are available and
 # if one wasn't chosen via the "--tag" command line option.
@@ -1013,13 +1377,15 @@ func_infer_tag ()
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
-        func_quote_for_eval "$arg"
-	CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	func_append_quoted CC_quoted "$arg"
       done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
       case $@ in
       # Blanks in the command may have been stripped by the calling shell,
       # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
       # Blanks at the start of $base_compile will cause this to fail
       # if we don't check for them as well.
       *)
@@ -1030,11 +1396,13 @@ func_infer_tag ()
 	    CC_quoted=
 	    for arg in $CC; do
 	      # Double-quote args containing other shell metacharacters.
-	      func_quote_for_eval "$arg"
-	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	      func_append_quoted CC_quoted "$arg"
 	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
 	    case "$@ " in
-	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
 	      # The compiler in the base compile command matches
 	      # the one in the tagged configuration.
 	      # Assume this is the tagged configuration we want.
@@ -1097,6 +1465,486 @@ EOF
     }
 }
 
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
@@ -1137,12 +1985,12 @@ func_mode_compile ()
 	  ;;
 
 	-pie | -fpie | -fPIE)
-          pie_flag="$pie_flag $arg"
+          func_append pie_flag " $arg"
 	  continue
 	  ;;
 
 	-shared | -static | -prefer-pic | -prefer-non-pic)
-	  later="$later $arg"
+	  func_append later " $arg"
 	  continue
 	  ;;
 
@@ -1163,15 +2011,14 @@ func_mode_compile ()
 	  save_ifs="$IFS"; IFS=','
 	  for arg in $args; do
 	    IFS="$save_ifs"
-	    func_quote_for_eval "$arg"
-	    lastarg="$lastarg $func_quote_for_eval_result"
+	    func_append_quoted lastarg "$arg"
 	  done
 	  IFS="$save_ifs"
 	  func_stripname ' ' '' "$lastarg"
 	  lastarg=$func_stripname_result
 
 	  # Add the arguments to base_compile.
-	  base_compile="$base_compile $lastarg"
+	  func_append base_compile " $lastarg"
 	  continue
 	  ;;
 
@@ -1187,8 +2034,7 @@ func_mode_compile ()
       esac    #  case $arg_mode
 
       # Aesthetically quote the previous argument.
-      func_quote_for_eval "$lastarg"
-      base_compile="$base_compile $func_quote_for_eval_result"
+      func_append_quoted base_compile "$lastarg"
     done # for arg
 
     case $arg_mode in
@@ -1213,7 +2059,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -1288,7 +2134,7 @@ func_mode_compile ()
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
     if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
       lockfile="$output_obj.lock"
     else
       output_obj=
@@ -1319,17 +2165,16 @@ compiler."
 	$opt_dry_run || $RM $removelist
 	exit $EXIT_FAILURE
       fi
-      removelist="$removelist $output_obj"
+      func_append removelist " $output_obj"
       $ECHO "$srcfile" > "$lockfile"
     fi
 
     $opt_dry_run || $RM $removelist
-    removelist="$removelist $lockfile"
+    func_append removelist " $lockfile"
     trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
 
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
     func_quote_for_eval "$srcfile"
     qsrcfile=$func_quote_for_eval_result
 
@@ -1349,7 +2194,7 @@ compiler."
 
       if test -z "$output_obj"; then
 	# Place PIC objects in $objdir
-	command="$command -o $lobj"
+	func_append command " -o $lobj"
       fi
 
       func_show_eval_locale "$command"	\
@@ -1396,11 +2241,11 @@ compiler."
 	command="$base_compile $qsrcfile $pic_flag"
       fi
       if test "$compiler_c_o" = yes; then
-	command="$command -o $obj"
+	func_append command " -o $obj"
       fi
 
       # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
+      func_append command "$suppress_output"
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
@@ -1445,13 +2290,13 @@ compiler."
 }
 
 $opt_help || {
-test "$mode" = compile && func_mode_compile ${1+"$@"}
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
 {
     # We need to display help for each of the modes.
-    case $mode in
+    case $opt_mode in
       "")
         # Generic help is extracted from the usage comments
         # at the start of this file.
@@ -1482,10 +2327,11 @@ This mode accepts the following additional options:
 
   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
   -no-suppress      do not suppress compiler output for multiple passes
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
   -shared           do not build a \`.o' file suitable for static linking
   -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
 
 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
 from the given SOURCEFILE.
@@ -1538,7 +2384,7 @@ either the \`install' or \`cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
-  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
 
 The rest of the components are interpreted as arguments to that command (only
 BSD-compatible install options are recognized)."
@@ -1558,6 +2404,8 @@ The following components of LINK-COMMAND are treated specially:
 
   -all-static       do not do any dynamic linking at all
   -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
@@ -1586,6 +2434,11 @@ The following components of LINK-COMMAND are treated specially:
   -version-info CURRENT[:REVISION[:AGE]]
                     specify library version info [each variable defaults to 0]
   -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
 All other options (arguments beginning with \`-') are ignored.
 
@@ -1619,18 +2472,44 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$mode'"
+        func_fatal_help "invalid operation mode \`$opt_mode'"
         ;;
     esac
 
-    $ECHO
+    echo
     $ECHO "Try \`$progname --help' for more information about other modes."
-
-    exit $?
 }
 
-  # Now that we've collected a possible --mode arg, show help if necessary
-  $opt_help && func_mode_help
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
 
 
 # func_mode_execute arg...
@@ -1643,13 +2522,16 @@ func_mode_execute ()
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
+    for file in $opt_dlopen; do
       test -f "$file" \
 	|| func_fatal_help "\`$file' is not a file"
 
       dir=
       case $file in
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$lib' is not a valid libtool archive"
@@ -1671,7 +2553,7 @@ func_mode_execute ()
 	dir="$func_dirname_result"
 
 	if test -f "$dir/$objdir/$dlname"; then
-	  dir="$dir/$objdir"
+	  func_append dir "/$objdir"
 	else
 	  if test ! -f "$dir/$dlname"; then
 	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
@@ -1712,7 +2594,7 @@ func_mode_execute ()
     for file
     do
       case $file in
-      -*) ;;
+      -* | *.la | *.lo ) ;;
       *)
 	# Do a test to see if this is really a libtool program.
 	if func_ltwrapper_script_p "$file"; then
@@ -1728,8 +2610,7 @@ func_mode_execute ()
 	;;
       esac
       # Quote arguments (to preserve shell metacharacters).
-      func_quote_for_eval "$file"
-      args="$args $func_quote_for_eval_result"
+      func_append_quoted args "$file"
     done
 
     if test "X$opt_dry_run" = Xfalse; then
@@ -1754,29 +2635,66 @@ func_mode_execute ()
       # Display what would be done.
       if test -n "$shlibpath_var"; then
 	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-	$ECHO "export $shlibpath_var"
+	echo "export $shlibpath_var"
       fi
       $ECHO "$cmd$args"
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$mode" = execute && func_mode_execute ${1+"$@"}
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
     $opt_debug
-    libdirs="$nonopt"
+    libs=
+    libdirs=
     admincmds=
 
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-	libdirs="$libdirs $dir"
-      done
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
 
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       for libdir in $libdirs; do
 	if test -n "$finish_cmds"; then
 	  # Do each command in the finish commands.
@@ -1786,7 +2704,7 @@ func_mode_finish ()
 	if test -n "$finish_eval"; then
 	  # Do the single finish_eval.
 	  eval cmds=\"$finish_eval\"
-	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
        $cmds"
 	fi
       done
@@ -1795,53 +2713,55 @@ func_mode_finish ()
     # Exit here if they wanted silent mode.
     $opt_silent && exit $EXIT_SUCCESS
 
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
-    $ECHO "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $ECHO "   $libdir"
-    done
-    $ECHO
-    $ECHO "If you ever happen to want to link against installed libraries"
-    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
-    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $ECHO "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $ECHO "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $ECHO "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
 
-      $ECHO "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $ECHO "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $ECHO
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
 
-    $ECHO "See any operating system documentation about shared libraries for"
-    case $host in
-      solaris2.[6789]|solaris2.1[0-9])
-        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-	$ECHO "pages."
-	;;
-      *)
-        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
-        ;;
-    esac
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
     exit $EXIT_SUCCESS
 }
 
-test "$mode" = finish && func_mode_finish ${1+"$@"}
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
@@ -1852,7 +2772,7 @@ func_mode_install ()
     # install_prog (especially on Windows NT).
     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
        # Allow the use of GNU shtool's install command.
-       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+       case $nonopt in *shtool*) :;; *) false;; esac; then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -1866,7 +2786,12 @@ func_mode_install ()
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
     func_quote_for_eval "$arg"
-    install_prog="$install_prog$func_quote_for_eval_result"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
 
     # We need to accept at least all the BSD install flags.
     dest=
@@ -1876,10 +2801,12 @@ func_mode_install ()
     install_type=
     isdir=no
     stripme=
+    no_mode=:
     for arg
     do
+      arg2=
       if test -n "$dest"; then
-	files="$files $dest"
+	func_append files " $dest"
 	dest=$arg
 	continue
       fi
@@ -1887,10 +2814,9 @@ func_mode_install ()
       case $arg in
       -d) isdir=yes ;;
       -f)
-	case " $install_prog " in
-	*[\\\ /]cp\ *) ;;
-	*) prev=$arg ;;
-	esac
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
 	;;
       -g | -m | -o)
 	prev=$arg
@@ -1904,6 +2830,10 @@ func_mode_install ()
       *)
 	# If the previous option needed an argument, then skip it.
 	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
 	  prev=
 	else
 	  dest=$arg
@@ -1914,7 +2844,11 @@ func_mode_install ()
 
       # Aesthetically quote the argument.
       func_quote_for_eval "$arg"
-      install_prog="$install_prog $func_quote_for_eval_result"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
     done
 
     test -z "$install_prog" && \
@@ -1923,6 +2857,13 @@ func_mode_install ()
     test -n "$prev" && \
       func_fatal_help "the \`$prev' option requires an argument"
 
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
     if test -z "$files"; then
       if test -z "$dest"; then
 	func_fatal_help "no file or destination specified"
@@ -1977,10 +2918,13 @@ func_mode_install ()
       case $file in
       *.$libext)
 	# Do the static libraries later.
-	staticlibs="$staticlibs $file"
+	func_append staticlibs " $file"
 	;;
 
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$file' is not a valid libtool archive"
@@ -1994,23 +2938,23 @@ func_mode_install ()
 	if test "X$destdir" = "X$libdir"; then
 	  case "$current_libdirs " in
 	  *" $libdir "*) ;;
-	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  *) func_append current_libdirs " $libdir" ;;
 	  esac
 	else
 	  # Note the libdir as a future libdir.
 	  case "$future_libdirs " in
 	  *" $libdir "*) ;;
-	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  *) func_append future_libdirs " $libdir" ;;
 	  esac
 	fi
 
 	func_dirname "$file" "/" ""
 	dir="$func_dirname_result"
-	dir="$dir$objdir"
+	func_append dir "$objdir"
 
 	if test -n "$relink_command"; then
 	  # Determine the prefix the user has applied to our future dir.
-	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
 
 	  # Don't allow the user to place us outside of our expected
 	  # location b/c this prevents finding dependent libraries that
@@ -2023,9 +2967,9 @@ func_mode_install ()
 
 	  if test -n "$inst_prefix_dir"; then
 	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
 	  else
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
 	  fi
 
 	  func_warning "relinking \`$file'"
@@ -2043,7 +2987,7 @@ func_mode_install ()
 	  test -n "$relink_command" && srcname="$realname"T
 
 	  # Install the shared library and build the symlinks.
-	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
 	      'exit $?'
 	  tstripme="$stripme"
 	  case $host_os in
@@ -2083,7 +3027,7 @@ func_mode_install ()
 	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
 	# Maybe install the static library, too.
-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
 	;;
 
       *.lo)
@@ -2183,7 +3127,7 @@ func_mode_install ()
 	    if test -f "$lib"; then
 	      func_source "$lib"
 	    fi
-	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
 	    if test -n "$libdir" && test ! -f "$libfile"; then
 	      func_warning "\`$lib' has not been installed in \`$libdir'"
 	      finalize=no
@@ -2202,7 +3146,7 @@ func_mode_install ()
 		file="$func_basename_result"
 	        outputname="$tmpdir/$file"
 	        # Replace the output file specification.
-	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
 	        $opt_silent || {
 	          func_quote_for_expand "$relink_command"
@@ -2221,7 +3165,7 @@ func_mode_install ()
 	    }
 	  else
 	    # Install the binary that we compiled earlier.
-	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
 	  fi
 	fi
 
@@ -2280,7 +3224,7 @@ func_mode_install ()
     fi
 }
 
-test "$mode" = install && func_mode_install ${1+"$@"}
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -2323,6 +3267,22 @@ func_generate_dlsyms ()
 extern \"C\" {
 #endif
 
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 /* External symbol declarations for the compiler. */\
 "
 
@@ -2332,10 +3292,11 @@ extern \"C\" {
 	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
 	  # Add our own program objects to the symbol list.
-	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	  for progfile in $progfiles; do
-	    func_verbose "extracting global C symbols from \`$progfile'"
-	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
 	  done
 
 	  if test -n "$exclude_expsyms"; then
@@ -2371,7 +3332,7 @@ extern \"C\" {
 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
 	      eval '$MV "$nlist"T "$nlist"'
 	      case $host in
-	        *cygwin | *mingw* | *cegcc* )
+	        *cygwin* | *mingw* | *cegcc* )
 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
 	          ;;
@@ -2384,10 +3345,52 @@ extern \"C\" {
 	  func_verbose "extracting global C symbols from \`$dlprefile'"
 	  func_basename "$dlprefile"
 	  name="$func_basename_result"
-	  $opt_dry_run || {
-	    eval '$ECHO ": $name " >> "$nlist"'
-	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-	  }
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
 	done
 
 	$opt_dry_run || {
@@ -2415,36 +3418,19 @@ extern \"C\" {
 	  if test -f "$nlist"S; then
 	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
 	  else
-	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
 	  fi
 
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
 typedef struct {
   const char *name;
   void *address;
 } lt_dlsymlist;
-"
-	  case $host in
-	  *cygwin* | *mingw* | *cegcc* )
-	    $ECHO >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs.  */"
-	    lt_dlsym_const= ;;
-	  *osf5*)
-	    echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
-	    lt_dlsym_const= ;;
-	  *)
-	    lt_dlsym_const=const ;;
-	  esac
-
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
+extern LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
+LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
 {\
   { \"$my_originator\", (void *) 0 },"
@@ -2457,7 +3443,7 @@ lt_${my_prefix}_LTX_preloaded_symbols[] =
 	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
 	    ;;
 	  esac
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
   {0, (void *) 0}
 };
 
@@ -2500,7 +3486,7 @@ static const void *lt_preloaded_setup() {
 	for arg in $LTCFLAGS; do
 	  case $arg in
 	  -pie | -fpie | -fPIE) ;;
-	  *) symtab_cflags="$symtab_cflags $arg" ;;
+	  *) func_append symtab_cflags " $arg" ;;
 	  esac
 	done
 
@@ -2515,16 +3501,16 @@ static const void *lt_preloaded_setup() {
 	case $host in
 	*cygwin* | *mingw* | *cegcc* )
 	  if test -f "$output_objdir/$my_outputname.def"; then
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
 	  else
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  fi
 	  ;;
 	*)
-	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  ;;
 	esac
 	;;
@@ -2538,8 +3524,8 @@ static const void *lt_preloaded_setup() {
       # really was required.
 
       # Nullify the symbol file.
-      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
     fi
 }
 
@@ -2549,6 +3535,7 @@ static const void *lt_preloaded_setup() {
 # Need a lot of goo to handle *both* DLLs and import libs
 # Has to be a shell function in order to 'eat' the argument
 # that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
   $opt_debug
@@ -2559,9 +3546,11 @@ func_win32_libid ()
     win32_libid_type="x86 archive import"
     ;;
   *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
 	$SED -n -e '
 	    1,100{
 		/ I /{
@@ -2590,6 +3579,131 @@ func_win32_libid ()
   $ECHO "$win32_libid_type"
 }
 
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
 
 
 # func_extract_an_archive dir oldlib
@@ -2598,7 +3712,18 @@ func_extract_an_archive ()
     $opt_debug
     f_ex_an_ar_dir="$1"; shift
     f_ex_an_ar_oldlib="$1"
-    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
      :
     else
@@ -2669,7 +3794,7 @@ func_extract_archives ()
 	    darwin_file=
 	    darwin_files=
 	    for darwin_file in $darwin_filelist; do
-	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
 	      $LIPO -create -output "$darwin_file" $darwin_files
 	    done # $darwin_filelist
 	    $RM -rf unfat-$$
@@ -2684,25 +3809,30 @@ func_extract_archives ()
         func_extract_an_archive "$my_xdir" "$my_xabs"
 	;;
       esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
     func_extract_archives_result="$my_oldobjs"
 }
 
 
-
-# func_emit_wrapper_part1 [arg=no]
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
 #
-# Emit the first part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part1 ()
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
 {
-	func_emit_wrapper_part1_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part1_arg1=$1
-	fi
+	func_emit_wrapper_arg1=${1-no}
 
 	$ECHO "\
 #! $SHELL
@@ -2718,7 +3848,6 @@ func_emit_wrapper_part1 ()
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
 # Be Bourne compatible
@@ -2749,31 +3878,132 @@ if test \"\$libtool_install_magic\" = \"$magic\"; then
 else
   # When we are sourced in execute mode, \$file and \$ECHO are already set.
   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    ECHO=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$ECHO works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$ECHO will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
 "
-	$ECHO "\
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  for lt_wr_arg
+  do
+    case \$lt_wr_arg in
+    --lt-*) ;;
+    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+    esac
+    shift
+  done
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
 
   # Find the directory that this script lives in.
-  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 
   # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
   while test -n \"\$file\"; do
-    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
 
     # If there was a directory component, then change thisdir.
     if test \"x\$destdir\" != \"x\$file\"; then
@@ -2783,30 +4013,13 @@ else
       esac
     fi
 
-    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
   done
-"
-}
-# end: func_emit_wrapper_part1
-
-# func_emit_wrapper_part2 [arg=no]
-#
-# Emit the second part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part2 ()
-{
-	func_emit_wrapper_part2_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part2_arg1=$1
-	fi
-
-	$ECHO "\
 
   # Usually 'no', except on cygwin/mingw when embedded into
   # the cwrapper.
-  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
   if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
     # special case for '.'
     if test \"\$thisdir\" = \".\"; then
@@ -2814,7 +4027,7 @@ func_emit_wrapper_part2 ()
     fi
     # remove .libs from thisdir
     case \"\$thisdir\" in
-    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
     $objdir )   thisdir=. ;;
     esac
   fi
@@ -2869,6 +4082,18 @@ func_emit_wrapper_part2 ()
 
   if test -f \"\$progdir/\$program\"; then"
 
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
 	# Export our shlibpath_var if we have one.
 	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
 	  $ECHO "\
@@ -2877,254 +4102,29 @@ func_emit_wrapper_part2 ()
 
     # Some systems cannot cope with colon-terminated $shlibpath_var
     # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
 
     export $shlibpath_var
 "
 	fi
 
-	# fixup the dll searchpath if we need to.
-	if test -n "$dllsearchpath"; then
-	  $ECHO "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
 	$ECHO "\
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
       # Run the actual program with our arguments.
-"
-	case $host in
-	# Backslashes separate directories on plain windows
-	*-*-mingw | *-*-os2* | *-cegcc*)
-	  $ECHO "\
-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
-	  ;;
-
-	*)
-	  $ECHO "\
-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
-	  ;;
-	esac
-	$ECHO "\
-      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-      exit 1
+      func_exec_program \${1+\"\$@\"}
     fi
   else
     # The program doesn't exist.
     \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
-    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
   fi
 fi\
 "
 }
-# end: func_emit_wrapper_part2
-
-
-# func_emit_wrapper [arg=no]
-#
-# Emit a libtool wrapper script on stdout.
-# Don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable.  Must ONLY be called from within
-# func_mode_link because it depends on a number of variables
-# set therein.
-#
-# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the $objdir directory.  This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
-	func_emit_wrapper_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_arg1=$1
-	fi
-
-	# split this up so that func_emit_cwrapperexe_src
-	# can call each part independently.
-	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
-	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
-}
 
 
-# func_to_host_path arg
-#
-# Convert paths to host format when used with build tools.
-# Intended for use with "native" mingw (where libtool itself
-# is running under the msys shell), or in the following cross-
-# build environments:
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-# where wine is equipped with the `winepath' executable.
-# In the native mingw case, the (msys) shell automatically
-# converts paths for any non-msys applications it launches,
-# but that facility isn't available from inside the cwrapper.
-# Similar accommodations are necessary for $host mingw and
-# $build cygwin.  Calling this function does no harm for other
-# $host/$build combinations not listed above.
-#
-# ARG is the path (on $build) that should be converted to
-# the proper representation for $host. The result is stored
-# in $func_to_host_path_result.
-func_to_host_path ()
-{
-  func_to_host_path_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        case $build in
-          *mingw* ) # actually, msys
-            # awkward: cmd appends spaces to result
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_path_tmp1=`cygpath -w "$1"`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # Unfortunately, winepath does not exit with a non-zero
-            # error code, so we are forced to check the contents of
-            # stdout. On the other hand, if the command is not
-            # found, the shell will set an exit code of 127 and print
-            # *an error message* to stdout. So we must check for both
-            # error code of zero AND non-empty stdout, which explains
-            # the odd construction:
-            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
-            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
-              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-                $SED -e "$lt_sed_naive_backslashify"`
-            else
-              # Allow warning below.
-              func_to_host_path_result=""
-            fi
-            ;;
-        esac
-        if test -z "$func_to_host_path_result" ; then
-          func_error "Could not determine host path corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback:
-          func_to_host_path_result="$1"
-        fi
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_path
-
-# func_to_host_pathlist arg
-#
-# Convert pathlists to host format when used with build tools.
-# See func_to_host_path(), above. This function supports the
-# following $build/$host combinations (but does no harm for
-# combinations not listed here):
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-#
-# Path separators are also converted from $build format to
-# $host format. If ARG begins or ends with a path separator
-# character, it is preserved (but converted to $host format)
-# on output.
-#
-# ARG is a pathlist (on $build) that should be converted to
-# the proper representation on $host. The result is stored
-# in $func_to_host_pathlist_result.
-func_to_host_pathlist ()
-{
-  func_to_host_pathlist_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        # Remove leading and trailing path separator characters from
-        # ARG. msys behavior is inconsistent here, cygpath turns them
-        # into '.;' and ';.', and winepath ignores them completely.
-        func_to_host_pathlist_tmp2="$1"
-        # Once set for this call, this variable should not be
-        # reassigned. It is used in tha fallback case.
-        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
-          $SED -e 's|^:*||' -e 's|:*$||'`
-        case $build in
-          *mingw* ) # Actually, msys.
-            # Awkward: cmd appends spaces to result.
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # unfortunately, winepath doesn't convert pathlists
-            func_to_host_pathlist_result=""
-            func_to_host_pathlist_oldIFS=$IFS
-            IFS=:
-            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
-              IFS=$func_to_host_pathlist_oldIFS
-              if test -n "$func_to_host_pathlist_f" ; then
-                func_to_host_path "$func_to_host_pathlist_f"
-                if test -n "$func_to_host_path_result" ; then
-                  if test -z "$func_to_host_pathlist_result" ; then
-                    func_to_host_pathlist_result="$func_to_host_path_result"
-                  else
-                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
-                  fi
-                fi
-              fi
-              IFS=:
-            done
-            IFS=$func_to_host_pathlist_oldIFS
-            ;;
-        esac
-        if test -z "$func_to_host_pathlist_result" ; then
-          func_error "Could not determine the host path(s) corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback. This may break if $1 contains DOS-style drive
-          # specifications. The fix is not to complicate the expression
-          # below, but for the user to provide a working wine installation
-          # with winepath so that path translation in the cross-to-mingw
-          # case works properly.
-          lt_replace_pathsep_nix_to_dos="s|:|;|g"
-          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
-            $SED -e "$lt_replace_pathsep_nix_to_dos"`
-        fi
-        # Now, add the leading and trailing path separators back
-        case "$1" in
-          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
-            ;;
-        esac
-        case "$1" in
-          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
-            ;;
-        esac
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_pathlist
-
 # func_emit_cwrapperexe_src
 # emit the source code for a wrapper executable on stdout
 # Must ONLY be called from within func_mode_link because
@@ -3141,41 +4141,71 @@ func_emit_cwrapperexe_src ()
 
    This wrapper executable should never be moved out of the build directory.
    If it is, it will not operate correctly.
-
-   Currently, it simply execs the wrapper *script* "$SHELL $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
 */
 EOF
 	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #ifdef _MSC_VER
 # include <direct.h>
 # include <process.h>
 # include <io.h>
-# define setmode _setmode
 #else
 # include <unistd.h>
 # include <stdint.h>
 # ifdef __CYGWIN__
 #  include <io.h>
-#  define HAVE_SETENV
-#  ifdef __STRICT_ANSI__
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
 char *realpath (const char *, char *);
 int putenv (char *);
 int setenv (const char *, const char *, int);
-#  endif
 # endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
 #endif
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
 
 #if defined(PATH_MAX)
 # define LT_PATHMAX PATH_MAX
@@ -3192,14 +4222,7 @@ int setenv (const char *, const char *, int);
 # define S_IXGRP 0
 #endif
 
-#ifdef _MSC_VER
-# define S_IXUSR _S_IEXEC
-# define stat _stat
-# ifndef _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#endif
-
+/* path handling portability macros */
 #ifndef DIR_SEPARATOR
 # define DIR_SEPARATOR '/'
 # define PATH_SEPARATOR ':'
@@ -3230,10 +4253,6 @@ int setenv (const char *, const char *, int);
 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
 #endif /* PATH_SEPARATOR_2 */
 
-#ifdef __CYGWIN__
-# define FOPEN_WB "wb"
-#endif
-
 #ifndef FOPEN_WB
 # define FOPEN_WB "w"
 #endif
@@ -3246,22 +4265,13 @@ int setenv (const char *, const char *, int);
   if (stale) { free ((void *) stale); stale = 0; } \
 } while (0)
 
-#undef LTWRAPPER_DEBUGPRINTF
-#if defined DEBUGWRAPPER
-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
-static void
-ltwrapper_debugprintf (const char *fmt, ...)
-{
-    va_list args;
-    va_start (args, fmt);
-    (void) vfprintf (stderr, fmt, args);
-    va_end (args);
-}
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
 #else
-# define LTWRAPPER_DEBUGPRINTF(args)
+static int lt_debug = 0;
 #endif
 
-const char *program_name = NULL;
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
 
 void *xmalloc (size_t num);
 char *xstrdup (const char *string);
@@ -3271,41 +4281,27 @@ char *chase_symlinks (const char *pathspec);
 int make_executable (const char *path);
 int check_executable (const char *path);
 char *strendzap (char *str, const char *pat);
-void lt_fatal (const char *message, ...);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
 void lt_setenv (const char *name, const char *value);
 char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-void lt_opt_process_env_set (const char *arg);
-void lt_opt_process_env_prepend (const char *arg);
-void lt_opt_process_env_append (const char *arg);
-int lt_split_name_value (const char *arg, char** name, char** value);
 void lt_update_exe_path (const char *name, const char *value);
 void lt_update_lib_path (const char *name, const char *value);
-
-static const char *script_text_part1 =
-EOF
-
-	    func_emit_wrapper_part1 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
-	    cat <<EOF
-
-static const char *script_text_part2 =
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
 EOF
-	    func_emit_wrapper_part2 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
 
 	    cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
+volatile const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
 	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-              func_to_host_pathlist "$temp_rpath"
+              func_to_host_path "$temp_rpath"
 	      cat <<EOF
-const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3314,10 +4310,10 @@ EOF
 	    fi
 
 	    if test -n "$dllsearchpath"; then
-              func_to_host_pathlist "$dllsearchpath:"
+              func_to_host_path "$dllsearchpath:"
 	      cat <<EOF
 const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3340,24 +4336,10 @@ EOF
 	    cat <<"EOF"
 
 #define LTWRAPPER_OPTION_PREFIX         "--lt-"
-#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
 
-static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
 static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-
 static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
-
-static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
-static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
-  /* argument is putenv-style "foo=bar", value of foo is set to bar */
-
-static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
-static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
-  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
-
-static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
-static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
-  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
 
 int
 main (int argc, char *argv[])
@@ -3374,10 +4356,13 @@ main (int argc, char *argv[])
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+  newargz = XMALLOC (char *, argc + 1);
 
-  /* very simple arg parsing; don't want to rely on getopt */
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
   for (i = 1; i < argc; i++)
     {
       if (strcmp (argv[i], dumpscript_opt) == 0)
@@ -3391,25 +4376,57 @@ EOF
 	      esac
 
 	    cat <<"EOF"
-	  printf ("%s", script_text_part1);
-	  printf ("%s", script_text_part2);
+	  lt_dump_script (stdout);
 	  return 0;
 	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
     }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
 
-  newargz = XMALLOC (char *, argc + 1);
   tmp_pathspec = find_executable (argv[0]);
   if (tmp_pathspec == NULL)
-    lt_fatal ("Couldn't find %s", argv[0]);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
-			  tmp_pathspec));
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
 
   actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
-			  actual_cwrapper_path));
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
   XFREE (tmp_pathspec);
 
-  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
   strendzap (actual_cwrapper_path, actual_cwrapper_name);
 
   /* wrapper name transforms */
@@ -3427,8 +4444,9 @@ EOF
   target_name = tmp_pathspec;
   tmp_pathspec = 0;
 
-  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
-			  target_name));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
 EOF
 
 	    cat <<EOF
@@ -3478,80 +4496,19 @@ EOF
 
   lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
   lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
   lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
 
-  newargc=0;
-  for (i = 1; i < argc; i++)
-    {
-      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
-        {
-          if (argv[i][env_set_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_set_opt_len + 1;
-              lt_opt_process_env_set (p);
-            }
-          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_set (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_set_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
-        {
-          if (argv[i][env_prepend_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_prepend_opt_len + 1;
-              lt_opt_process_env_prepend (p);
-            }
-          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_prepend_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
-        {
-          if (argv[i][env_append_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_append_opt_len + 1;
-              lt_opt_process_env_append (p);
-            }
-          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_append (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_append_opt);
-          continue;
-        }
-      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
-        {
-          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-             namespace, but it is not one of the ones we know about and
-             have already dealt with, above (inluding dump-script), then
-             report an error. Otherwise, targets might begin to believe
-             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-             namespace. The first time any user complains about this, we'll
-             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-             or a configure.ac-settable value.
-           */
-          lt_fatal ("Unrecognized option in %s namespace: '%s'",
-                    ltwrapper_option_prefix, argv[i]);
-        }
-      /* otherwise ... */
-      newargz[++newargc] = xstrdup (argv[i]);
-    }
-  newargz[++newargc] = NULL;
-
-  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
   for (i = 0; i < newargc; i++)
     {
-      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
     }
 
 EOF
@@ -3560,11 +4517,14 @@ EOF
 	      mingw*)
 		cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
   rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
-      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
       return 127;
     }
   return rval;
@@ -3586,7 +4546,7 @@ xmalloc (size_t num)
 {
   void *p = (void *) malloc (num);
   if (!p)
-    lt_fatal ("Memory exhausted");
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
 
   return p;
 }
@@ -3620,8 +4580,8 @@ check_executable (const char *path)
 {
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3638,8 +4598,8 @@ make_executable (const char *path)
   int rval = 0;
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3665,8 +4625,8 @@ find_executable (const char *wrapper)
   int tmp_len;
   char *concat_name;
 
-  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
-			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
 
   if ((wrapper == NULL) || (*wrapper == '\0'))
     return NULL;
@@ -3719,7 +4679,8 @@ find_executable (const char *wrapper)
 		{
 		  /* empty path: current directory */
 		  if (getcwd (tmp, LT_PATHMAX) == NULL)
-		    lt_fatal ("getcwd failed");
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
 		  tmp_len = strlen (tmp);
 		  concat_name =
 		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
@@ -3744,7 +4705,8 @@ find_executable (const char *wrapper)
     }
   /* Relative path | not found in path: prepend cwd */
   if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
   tmp_len = strlen (tmp);
   concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
   memcpy (concat_name, tmp, tmp_len);
@@ -3770,8 +4732,9 @@ chase_symlinks (const char *pathspec)
   int has_symlinks = 0;
   while (strlen (tmp_pathspec) && !has_symlinks)
     {
-      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
-			      tmp_pathspec));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
       if (lstat (tmp_pathspec, &s) == 0)
 	{
 	  if (S_ISLNK (s.st_mode) != 0)
@@ -3793,8 +4756,9 @@ chase_symlinks (const char *pathspec)
 	}
       else
 	{
-	  char *errstr = strerror (errno);
-	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
 	}
     }
   XFREE (tmp_pathspec);
@@ -3807,7 +4771,8 @@ chase_symlinks (const char *pathspec)
   tmp_pathspec = realpath (pathspec, buf);
   if (tmp_pathspec == 0)
     {
-      lt_fatal ("Could not follow symlinks for %s", pathspec);
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
     }
   return xstrdup (tmp_pathspec);
 #endif
@@ -3833,11 +4798,25 @@ strendzap (char *str, const char *pat)
   return str;
 }
 
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
 static void
-lt_error_core (int exit_status, const char *mode,
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
 	       const char *message, va_list ap)
 {
-  fprintf (stderr, "%s: %s: ", program_name, mode);
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
   vfprintf (stderr, message, ap);
   fprintf (stderr, ".\n");
 
@@ -3846,20 +4825,32 @@ lt_error_core (int exit_status, const char *mode,
 }
 
 void
-lt_fatal (const char *message, ...)
+lt_fatal (const char *file, int line, const char *message, ...)
 {
   va_list ap;
   va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
   va_end (ap);
 }
 
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
 void
 lt_setenv (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
   {
 #ifdef HAVE_SETENV
     /* always make a copy, for consistency with !HAVE_SETENV */
@@ -3904,95 +4895,12 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
   return new_value;
 }
 
-int
-lt_split_name_value (const char *arg, char** name, char** value)
-{
-  const char *p;
-  int len;
-  if (!arg || !*arg)
-    return 1;
-
-  p = strchr (arg, (int)'=');
-
-  if (!p)
-    return 1;
-
-  *value = xstrdup (++p);
-
-  len = strlen (arg) - strlen (*value);
-  *name = XMALLOC (char, len);
-  strncpy (*name, arg, len-1);
-  (*name)[len - 1] = '\0';
-
-  return 0;
-}
-
-void
-lt_opt_process_env_set (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
-    }
-
-  lt_setenv (name, value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_prepend (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 0);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_append (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 1);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
 void
 lt_update_exe_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4011,9 +4919,9 @@ lt_update_exe_path (const char *name, const char *value)
 void
 lt_update_lib_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4023,11 +4931,152 @@ lt_update_lib_path (const char *name, const char *value)
     }
 }
 
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+              $SED -e 's/\([\\"]\)/\\\1/g' \
+	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
 
+            cat <<"EOF"
+}
 EOF
 }
 # end: func_emit_cwrapperexe_src
 
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
 # func_mode_link arg...
 func_mode_link ()
 {
@@ -4072,6 +5121,7 @@ func_mode_link ()
     new_inherited_linker_flags=
 
     avoid_version=no
+    bindir=
     dlfiles=
     dlprefiles=
     dlself=no
@@ -4164,6 +5214,11 @@ func_mode_link ()
 	esac
 
 	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
 	dlfiles|dlprefiles)
 	  if test "$preload" = no; then
 	    # Add the symbol object into the linking commands.
@@ -4195,9 +5250,9 @@ func_mode_link ()
 	    ;;
 	  *)
 	    if test "$prev" = dlfiles; then
-	      dlfiles="$dlfiles $arg"
+	      func_append dlfiles " $arg"
 	    else
-	      dlprefiles="$dlprefiles $arg"
+	      func_append dlprefiles " $arg"
 	    fi
 	    prev=
 	    continue
@@ -4221,7 +5276,7 @@ func_mode_link ()
 	    *-*-darwin*)
 	      case "$deplibs " in
 		*" $qarg.ltframework "*) ;;
-		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
 		   ;;
 	      esac
 	      ;;
@@ -4240,7 +5295,7 @@ func_mode_link ()
 	    moreargs=
 	    for fil in `cat "$save_arg"`
 	    do
-#	      moreargs="$moreargs $fil"
+#	      func_append moreargs " $fil"
 	      arg=$fil
 	      # A libtool-controlled object.
 
@@ -4269,7 +5324,7 @@ func_mode_link ()
 
 		  if test "$prev" = dlfiles; then
 		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		      dlfiles="$dlfiles $pic_object"
+		      func_append dlfiles " $pic_object"
 		      prev=
 		      continue
 		    else
@@ -4281,7 +5336,7 @@ func_mode_link ()
 		  # CHECK ME:  I think I busted this.  -Ossama
 		  if test "$prev" = dlprefiles; then
 		    # Preload the old-style object.
-		    dlprefiles="$dlprefiles $pic_object"
+		    func_append dlprefiles " $pic_object"
 		    prev=
 		  fi
 
@@ -4351,12 +5406,12 @@ func_mode_link ()
 	  if test "$prev" = rpath; then
 	    case "$rpath " in
 	    *" $arg "*) ;;
-	    *) rpath="$rpath $arg" ;;
+	    *) func_append rpath " $arg" ;;
 	    esac
 	  else
 	    case "$xrpath " in
 	    *" $arg "*) ;;
-	    *) xrpath="$xrpath $arg" ;;
+	    *) func_append xrpath " $arg" ;;
 	    esac
 	  fi
 	  prev=
@@ -4368,28 +5423,28 @@ func_mode_link ()
 	  continue
 	  ;;
 	weak)
-	  weak_libs="$weak_libs $arg"
+	  func_append weak_libs " $arg"
 	  prev=
 	  continue
 	  ;;
 	xcclinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xcompiler)
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xlinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $wl$qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
 	  prev=
 	  func_append compile_command " $wl$qarg"
 	  func_append finalize_command " $wl$qarg"
@@ -4425,6 +5480,11 @@ func_mode_link ()
 	continue
 	;;
 
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
       -dlopen)
 	prev=dlfiles
 	continue
@@ -4475,15 +5535,16 @@ func_mode_link ()
 	;;
 
       -L*)
-	func_stripname '-L' '' "$arg"
-	dir=$func_stripname_result
-	if test -z "$dir"; then
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
 	  if test "$#" -gt 0; then
 	    func_fatal_error "require no space between \`-L' and \`$1'"
 	  else
 	    func_fatal_error "need path for \`-L' option"
 	  fi
 	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -4495,24 +5556,30 @@ func_mode_link ()
 	  ;;
 	esac
 	case "$deplibs " in
-	*" -L$dir "*) ;;
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
 	*)
-	  deplibs="$deplibs -L$dir"
-	  lib_search_path="$lib_search_path $dir"
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
 	  ;;
 	esac
 	case $host in
 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
 	  case :$dllsearchpath: in
 	  *":$dir:"*) ;;
 	  ::) dllsearchpath=$dir;;
-	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  *) func_append dllsearchpath ":$dir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -4522,7 +5589,7 @@ func_mode_link ()
       -l*)
 	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # These systems don't actually have a C or math library (as such)
 	    continue
 	    ;;
@@ -4536,7 +5603,7 @@ func_mode_link ()
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C and math libraries are in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    continue
 	    ;;
 	  *-*-sco3.2v5* | *-*-sco5v6*)
@@ -4556,7 +5623,7 @@ func_mode_link ()
 	   ;;
 	 esac
 	fi
-	deplibs="$deplibs $arg"
+	func_append deplibs " $arg"
 	continue
 	;;
 
@@ -4568,8 +5635,8 @@ func_mode_link ()
       # Tru64 UNIX uses -model [arg] to determine the layout of C++
       # classes, name mangling, and exception handling.
       # Darwin uses the -arch flag to determine output architecture.
-      -model|-arch|-isysroot)
-	compiler_flags="$compiler_flags $arg"
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	prev=xcompiler
@@ -4577,12 +5644,12 @@ func_mode_link ()
 	;;
 
       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-	compiler_flags="$compiler_flags $arg"
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	case "$new_inherited_linker_flags " in
 	    *" $arg "*) ;;
-	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
 	esac
 	continue
 	;;
@@ -4649,13 +5716,17 @@ func_mode_link ()
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
 	*)
 	  func_fatal_error "only absolute run-paths are allowed"
 	  ;;
 	esac
 	case "$xrpath " in
 	*" $dir "*) ;;
-	*) xrpath="$xrpath $dir" ;;
+	*) func_append xrpath " $dir" ;;
 	esac
 	continue
 	;;
@@ -4708,8 +5779,8 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4724,9 +5795,9 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
-	  linker_flags="$linker_flags $func_quote_for_eval_result"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4754,23 +5825,27 @@ func_mode_link ()
 	arg="$func_quote_for_eval_result"
 	;;
 
-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-      # +DA*, +DD* enable 64-bit mode on the HP compiler
-      # -q* pass through compiler args for the IBM compiler
-      # -m*, -t[45]*, -txscale* pass through architecture-specific
-      # compiler args for GCC
-      # -F/path gives path to uninstalled frameworks, gcc on darwin
-      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
-      # @file GCC response files
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
         func_quote_for_eval "$arg"
 	arg="$func_quote_for_eval_result"
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
-        compiler_flags="$compiler_flags $arg"
+        func_append compiler_flags " $arg"
         continue
         ;;
 
@@ -4782,7 +5857,7 @@ func_mode_link ()
 
       *.$objext)
 	# A standard object.
-	objs="$objs $arg"
+	func_append objs " $arg"
 	;;
 
       *.lo)
@@ -4813,7 +5888,7 @@ func_mode_link ()
 
 	    if test "$prev" = dlfiles; then
 	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		dlfiles="$dlfiles $pic_object"
+		func_append dlfiles " $pic_object"
 		prev=
 		continue
 	      else
@@ -4825,7 +5900,7 @@ func_mode_link ()
 	    # CHECK ME:  I think I busted this.  -Ossama
 	    if test "$prev" = dlprefiles; then
 	      # Preload the old-style object.
-	      dlprefiles="$dlprefiles $pic_object"
+	      func_append dlprefiles " $pic_object"
 	      prev=
 	    fi
 
@@ -4870,24 +5945,25 @@ func_mode_link ()
 
       *.$libext)
 	# An archive.
-	deplibs="$deplibs $arg"
-	old_deplibs="$old_deplibs $arg"
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
 	continue
 	;;
 
       *.la)
 	# A libtool-controlled library.
 
+	func_resolve_sysroot "$arg"
 	if test "$prev" = dlfiles; then
 	  # This library was specified with -dlopen.
-	  dlfiles="$dlfiles $arg"
+	  func_append dlfiles " $func_resolve_sysroot_result"
 	  prev=
 	elif test "$prev" = dlprefiles; then
 	  # The library was specified with -dlpreopen.
-	  dlprefiles="$dlprefiles $arg"
+	  func_append dlprefiles " $func_resolve_sysroot_result"
 	  prev=
 	else
-	  deplibs="$deplibs $arg"
+	  func_append deplibs " $func_resolve_sysroot_result"
 	fi
 	continue
 	;;
@@ -4925,7 +6001,7 @@ func_mode_link ()
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
     else
       shlib_search_path=
     fi
@@ -4934,6 +6010,8 @@ func_mode_link ()
 
     func_dirname "$output" "/" ""
     output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
     func_mkdir_p "$output_objdir"
 
@@ -4954,12 +6032,12 @@ func_mode_link ()
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      if $opt_duplicate_deps ; then
+      if $opt_preserve_dup_deps ; then
 	case "$libs " in
-	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	esac
       fi
-      libs="$libs $deplib"
+      func_append libs " $deplib"
     done
 
     if test "$linkmode" = lib; then
@@ -4972,9 +6050,9 @@ func_mode_link ()
       if $opt_duplicate_compiler_generated_deps; then
 	for pre_post_dep in $predeps $postdeps; do
 	  case "$pre_post_deps " in
-	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
 	  esac
-	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	  func_append pre_post_deps " $pre_post_dep"
 	done
       fi
       pre_post_deps=
@@ -5033,10 +6111,7 @@ func_mode_link ()
 	case $pass in
 	dlopen) libs="$dlfiles" ;;
 	dlpreopen) libs="$dlprefiles" ;;
-	link)
-	  libs="$deplibs %DEPLIBS%"
-	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
-	  ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
 	esac
       fi
       if test "$linkmode,$pass" = "lib,dlpreopen"; then
@@ -5044,17 +6119,19 @@ func_mode_link ()
 	for lib in $dlprefiles; do
 	  # Ignore non-libtool-libs
 	  dependency_libs=
+	  func_resolve_sysroot "$lib"
 	  case $lib in
-	  *.la)	func_source "$lib" ;;
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
 	  esac
 
 	  # Collect preopened libtool deplibs, except any this library
 	  # has declared as weak libs
 	  for deplib in $dependency_libs; do
-            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
 	    case " $weak_libs " in
 	    *" $deplib_base "*) ;;
-	    *) deplibs="$deplibs $deplib" ;;
+	    *) func_append deplibs " $deplib" ;;
 	    esac
 	  done
 	done
@@ -5075,11 +6152,11 @@ func_mode_link ()
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
 	  else
-	    compiler_flags="$compiler_flags $deplib"
+	    func_append compiler_flags " $deplib"
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5164,7 +6241,7 @@ func_mode_link ()
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5177,7 +6254,8 @@ func_mode_link ()
 	    test "$pass" = conv && continue
 	    newdependency_libs="$deplib $newdependency_libs"
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  prog)
 	    if test "$pass" = conv; then
@@ -5191,7 +6269,8 @@ func_mode_link ()
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    fi
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  *)
 	    func_warning "\`-L' is ignored for archives/objects"
@@ -5202,17 +6281,21 @@ func_mode_link ()
 	-R*)
 	  if test "$pass" = link; then
 	    func_stripname '-R' '' "$deplib"
-	    dir=$func_stripname_result
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
 	    # Make sure the xrpath contains only unique directories.
 	    case "$xrpath " in
 	    *" $dir "*) ;;
-	    *) xrpath="$xrpath $dir" ;;
+	    *) func_append xrpath " $dir" ;;
 	    esac
 	  fi
 	  deplibs="$deplib $deplibs"
 	  continue
 	  ;;
-	*.la) lib="$deplib" ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
 	*.$libext)
 	  if test "$pass" = conv; then
 	    deplibs="$deplib $deplibs"
@@ -5230,7 +6313,7 @@ func_mode_link ()
 		match_pattern*)
 		  set dummy $deplibs_check_method; shift
 		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
 		    | $EGREP "$match_pattern_regex" > /dev/null; then
 		    valid_a_lib=yes
 		  fi
@@ -5240,15 +6323,15 @@ func_mode_link ()
 		;;
 	      esac
 	      if test "$valid_a_lib" != yes; then
-		$ECHO
+		echo
 		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
-		$ECHO "*** that it is just a static archive that I should not use here."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
 	      else
-		$ECHO
+		echo
 		$ECHO "*** Warning: Linking the shared library $output against the"
 		$ECHO "*** static library $deplib is not portable!"
 		deplibs="$deplib $deplibs"
@@ -5275,11 +6358,11 @@ func_mode_link ()
 	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
 	      # If there is no dlopen support or we're linking statically,
 	      # we need to preload.
-	      newdlprefiles="$newdlprefiles $deplib"
+	      func_append newdlprefiles " $deplib"
 	      compile_deplibs="$deplib $compile_deplibs"
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    else
-	      newdlfiles="$newdlfiles $deplib"
+	      func_append newdlfiles " $deplib"
 	    fi
 	  fi
 	  continue
@@ -5321,20 +6404,20 @@ func_mode_link ()
 
 	# Convert "-framework foo" to "foo.ltframework"
 	if test -n "$inherited_linker_flags"; then
-	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
 	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
 	    case " $new_inherited_linker_flags " in
 	      *" $tmp_inherited_linker_flag "*) ;;
-	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
 	    esac
 	  done
 	fi
-	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	if test "$linkmode,$pass" = "lib,link" ||
 	   test "$linkmode,$pass" = "prog,scan" ||
 	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
 	fi
 
 	if test "$pass" = conv; then
@@ -5345,30 +6428,36 @@ func_mode_link ()
 	      func_fatal_error "cannot find name of link library for \`$lib'"
 	    fi
 	    # It is a libtool convenience library, so add in its objects.
-	    convenience="$convenience $ladir/$objdir/$old_library"
-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
-	    tmp_libs=
-	    for deplib in $dependency_libs; do
-	      deplibs="$deplib $deplibs"
-	      if $opt_duplicate_deps ; then
-		case "$tmp_libs " in
-		*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-		esac
-	      fi
-	      tmp_libs="$tmp_libs $deplib"
-	    done
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
 	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
 	    func_fatal_error "\`$lib' is not a convenience library"
 	  fi
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    deplibs="$deplib $deplibs"
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done
 	  continue
 	fi # $pass = conv
 
 
 	# Get the name of the library we link against.
 	linklib=
-	for l in $old_library $library_names; do
-	  linklib="$l"
-	done
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
 	if test -z "$linklib"; then
 	  func_fatal_error "cannot find name of link library for \`$lib'"
 	fi
@@ -5385,9 +6474,9 @@ func_mode_link ()
 	    # statically, we need to preload.  We also need to preload any
 	    # dependent libraries so libltdl's deplib preloader doesn't
 	    # bomb out in the load deplibs phase.
-	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	    func_append dlprefiles " $lib $dependency_libs"
 	  else
-	    newdlfiles="$newdlfiles $lib"
+	    func_append newdlfiles " $lib"
 	  fi
 	  continue
 	fi # $pass = dlopen
@@ -5409,14 +6498,14 @@ func_mode_link ()
 
 	# Find the relevant object directory and library name.
 	if test "X$installed" = Xyes; then
-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
 	    func_warning "library \`$lib' was moved."
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    libdir="$abs_ladir"
 	  else
-	    dir="$libdir"
-	    absdir="$libdir"
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
 	  fi
 	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
 	else
@@ -5424,12 +6513,12 @@ func_mode_link ()
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  else
 	    dir="$ladir/$objdir"
 	    absdir="$abs_ladir/$objdir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  fi
 	fi # $installed = yes
 	func_stripname 'lib' '.la' "$laname"
@@ -5440,20 +6529,46 @@ func_mode_link ()
 	  if test -z "$libdir" && test "$linkmode" = prog; then
 	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
 	  fi
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    newdlprefiles="$newdlprefiles $dir/$old_library"
-	    # Keep a list of preopened convenience libraries to check
-	    # that they are being used correctly in the link pass.
-	    test -z "$libdir" && \
-		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
-	  elif test -n "$dlname"; then
-	    newdlprefiles="$newdlprefiles $dir/$dlname"
-	  else
-	    newdlprefiles="$newdlprefiles $dir/$linklib"
-	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
 	fi # $pass = dlpreopen
 
 	if test -z "$libdir"; then
@@ -5471,7 +6586,7 @@ func_mode_link ()
 
 
 	if test "$linkmode" = prog && test "$pass" != link; then
-	  newlib_search_path="$newlib_search_path $ladir"
+	  func_append newlib_search_path " $ladir"
 	  deplibs="$lib $deplibs"
 
 	  linkalldeplibs=no
@@ -5484,7 +6599,8 @@ func_mode_link ()
 	  for deplib in $dependency_libs; do
 	    case $deplib in
 	    -L*) func_stripname '-L' '' "$deplib"
-	         newlib_search_path="$newlib_search_path $func_stripname_result"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
 		 ;;
 	    esac
 	    # Need to link against all dependency_libs?
@@ -5495,12 +6611,12 @@ func_mode_link ()
 	      # or/and link against static libraries
 	      newdependency_libs="$deplib $newdependency_libs"
 	    fi
-	    if $opt_duplicate_deps ; then
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $deplib"
 	  done # for deplib
 	  continue
 	fi # $linkmode = prog...
@@ -5515,7 +6631,7 @@ func_mode_link ()
 	      # Make sure the rpath contains only unique directories.
 	      case "$temp_rpath:" in
 	      *"$absdir:"*) ;;
-	      *) temp_rpath="$temp_rpath$absdir:" ;;
+	      *) func_append temp_rpath "$absdir:" ;;
 	      esac
 	    fi
 
@@ -5527,7 +6643,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5536,7 +6652,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5561,12 +6677,12 @@ func_mode_link ()
 	  case $host in
 	  *cygwin* | *mingw* | *cegcc*)
 	      # No point in relinking DLLs because paths are not encoded
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=no
 	    ;;
 	  *)
 	    if test "$installed" = no; then
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=yes
 	    fi
 	    ;;
@@ -5583,7 +6699,7 @@ func_mode_link ()
 	    fi
 	  done
 	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
-	    $ECHO
+	    echo
 	    if test "$linkmode" = prog; then
 	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
 	    else
@@ -5601,7 +6717,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5610,7 +6726,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5664,7 +6780,7 @@ func_mode_link ()
 	    linklib=$newlib
 	  fi # test -n "$old_archive_from_expsyms_cmds"
 
-	  if test "$linkmode" = prog || test "$mode" != relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5686,9 +6802,9 @@ func_mode_link ()
 		      if test "X$dlopenmodule" != "X$lib"; then
 			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
 			if test -z "$old_library" ; then
-			  $ECHO
-			  $ECHO "*** And there doesn't seem to be a static archive available"
-			  $ECHO "*** The link will probably fail, sorry"
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
 			else
 			  add="$dir/$old_library"
 			fi
@@ -5720,7 +6836,7 @@ func_mode_link ()
 		if test -n "$inst_prefix_dir"; then
 		  case $libdir in
 		    [\\/]*)
-		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
 		      ;;
 		  esac
 		fi
@@ -5742,7 +6858,7 @@ func_mode_link ()
 	    if test -n "$add_shlibpath"; then
 	      case :$compile_shlibpath: in
 	      *":$add_shlibpath:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
 	      esac
 	    fi
 	    if test "$linkmode" = prog; then
@@ -5756,13 +6872,13 @@ func_mode_link ()
 		 test "$hardcode_shlibpath_var" = yes; then
 		case :$finalize_shlibpath: in
 		*":$libdir:"*) ;;
-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
 		esac
 	      fi
 	    fi
 	  fi
 
-	  if test "$linkmode" = prog || test "$mode" = relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5776,7 +6892,7 @@ func_mode_link ()
 	    elif test "$hardcode_shlibpath_var" = yes; then
 	      case :$finalize_shlibpath: in
 	      *":$libdir:"*) ;;
-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
 	      esac
 	      add="-l$name"
 	    elif test "$hardcode_automatic" = yes; then
@@ -5793,7 +6909,7 @@ func_mode_link ()
 	      if test -n "$inst_prefix_dir"; then
 		case $libdir in
 		  [\\/]*)
-		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
 		    ;;
 		esac
 	      fi
@@ -5828,21 +6944,21 @@ func_mode_link ()
 
 	    # Just print a warning and add the library to dependency_libs so
 	    # that the program can be linked against the static library.
-	    $ECHO
+	    echo
 	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
-	    $ECHO "*** I have the capability to make that library automatically link in when"
-	    $ECHO "*** you link to this library.  But I can only do this if you have a"
-	    $ECHO "*** shared version of the library, which you do not appear to have."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
 	    if test "$module" = yes; then
-	      $ECHO "*** But as you try to build a module library, libtool will still create "
-	      $ECHO "*** a static module, that should work as long as the dlopening application"
-	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
 	      if test -z "$global_symbol_pipe"; then
-		$ECHO
-		$ECHO "*** However, this would only work if libtool was able to extract symbol"
-		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-		$ECHO "*** not find such a program.  So, this module is probably useless."
-		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	      fi
 	      if test "$build_old_libs" = no; then
 		build_libtool_libs=module
@@ -5870,27 +6986,33 @@ func_mode_link ()
 	           temp_xrpath=$func_stripname_result
 		   case " $xrpath " in
 		   *" $temp_xrpath "*) ;;
-		   *) xrpath="$xrpath $temp_xrpath";;
+		   *) func_append xrpath " $temp_xrpath";;
 		   esac;;
-	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      *) func_append temp_deplibs " $libdir";;
 	      esac
 	    done
 	    dependency_libs="$temp_deplibs"
 	  fi
 
-	  newlib_search_path="$newlib_search_path $absdir"
+	  func_append newlib_search_path " $absdir"
 	  # Link against this library
 	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
 	  # ... and its dependency_libs
 	  tmp_libs=
 	  for deplib in $dependency_libs; do
 	    newdependency_libs="$deplib $newdependency_libs"
-	    if $opt_duplicate_deps ; then
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $func_resolve_sysroot_result"
 	  done
 
 	  if test "$link_all_deplibs" != no; then
@@ -5900,8 +7022,10 @@ func_mode_link ()
 	      case $deplib in
 	      -L*) path="$deplib" ;;
 	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
 	        func_dirname "$deplib" "" "."
-		dir="$func_dirname_result"
+		dir=$func_dirname_result
 		# We need an absolute path.
 		case $dir in
 		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
@@ -5928,8 +7052,8 @@ func_mode_link ()
                       if test -z "$darwin_install_name"; then
                           darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
 		      path=
 		    fi
 		  fi
@@ -5962,7 +7086,7 @@ func_mode_link ()
 	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
 	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
 	else
-	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	fi
       fi
       dependency_libs="$newdependency_libs"
@@ -5979,7 +7103,7 @@ func_mode_link ()
 	  for dir in $newlib_search_path; do
 	    case "$lib_search_path " in
 	    *" $dir "*) ;;
-	    *) lib_search_path="$lib_search_path $dir" ;;
+	    *) func_append lib_search_path " $dir" ;;
 	    esac
 	  done
 	  newlib_search_path=
@@ -6037,10 +7161,10 @@ func_mode_link ()
 	    -L*)
 	      case " $tmp_libs " in
 	      *" $deplib "*) ;;
-	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      *) func_append tmp_libs " $deplib" ;;
 	      esac
 	      ;;
-	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    *) func_append tmp_libs " $deplib" ;;
 	    esac
 	  done
 	  eval $var=\"$tmp_libs\"
@@ -6056,7 +7180,7 @@ func_mode_link ()
 	  ;;
 	esac
 	if test -n "$i" ; then
-	  tmp_libs="$tmp_libs $i"
+	  func_append tmp_libs " $i"
 	fi
       done
       dependency_libs=$tmp_libs
@@ -6097,7 +7221,7 @@ func_mode_link ()
       # Now set the variables for building old libraries.
       build_libtool_libs=no
       oldlibs="$output"
-      objs="$objs$old_deplibs"
+      func_append objs "$old_deplibs"
       ;;
 
     lib)
@@ -6130,10 +7254,10 @@ func_mode_link ()
 	if test "$deplibs_check_method" != pass_all; then
 	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
 	else
-	  $ECHO
+	  echo
 	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
 	  $ECHO "*** objects $objs is not portable!"
-	  libobjs="$libobjs $objs"
+	  func_append libobjs " $objs"
 	fi
       fi
 
@@ -6198,7 +7322,7 @@ func_mode_link ()
 	    age="$number_minor"
 	    revision="$number_revision"
 	    ;;
-	  freebsd-aout|freebsd-elf|sunos)
+	  freebsd-aout|freebsd-elf|qnx|sunos)
 	    current="$number_major"
 	    revision="$number_minor"
 	    age="0"
@@ -6210,9 +7334,6 @@ func_mode_link ()
 	    revision="$number_minor"
 	    lt_irix_increment=no
 	    ;;
-	  *)
-	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
-	    ;;
 	  esac
 	  ;;
 	no)
@@ -6334,7 +7455,7 @@ func_mode_link ()
 	  done
 
 	  # Make executables depend on our current version.
-	  verstring="$verstring:${current}.0"
+	  func_append verstring ":${current}.0"
 	  ;;
 
 	qnx)
@@ -6402,10 +7523,10 @@ func_mode_link ()
       fi
 
       func_generate_dlsyms "$libname" "$libname" "yes"
-      libobjs="$libobjs $symfileobj"
+      func_append libobjs " $symfileobj"
       test "X$libobjs" = "X " && libobjs=
 
-      if test "$mode" != relink; then
+      if test "$opt_mode" != relink; then
 	# Remove our outputs, but don't remove object files since they
 	# may have been created when compiling PIC objects.
 	removelist=
@@ -6421,7 +7542,7 @@ func_mode_link ()
 		   continue
 		 fi
 	       fi
-	       removelist="$removelist $p"
+	       func_append removelist " $p"
 	       ;;
 	    *) ;;
 	  esac
@@ -6432,27 +7553,28 @@ func_mode_link ()
 
       # Now set the variables for building old libraries.
       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+	func_append oldlibs " $output_objdir/$libname.$libext"
 
 	# Transform .lo files to .o files.
-	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
       #for path in $notinst_path; do
-      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
-      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
-      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
       #done
 
       if test -n "$xrpath"; then
 	# If the user specified any rpath flags, then add them.
 	temp_xrpath=
 	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
 	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -6466,7 +7588,7 @@ func_mode_link ()
       for lib in $old_dlfiles; do
 	case " $dlprefiles $dlfiles " in
 	*" $lib "*) ;;
-	*) dlfiles="$dlfiles $lib" ;;
+	*) func_append dlfiles " $lib" ;;
 	esac
       done
 
@@ -6476,19 +7598,19 @@ func_mode_link ()
       for lib in $old_dlprefiles; do
 	case "$dlprefiles " in
 	*" $lib "*) ;;
-	*) dlprefiles="$dlprefiles $lib" ;;
+	*) func_append dlprefiles " $lib" ;;
 	esac
       done
 
       if test "$build_libtool_libs" = yes; then
 	if test -n "$rpath"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # these systems don't actually have a c library (as such)!
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C library is in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    ;;
 	  *-*-netbsd*)
 	    # Don't link with libc until the a.out ld.so is fixed.
@@ -6505,7 +7627,7 @@ func_mode_link ()
 	  *)
 	    # Add libc to deplibs on all other systems if necessary.
 	    if test "$build_libtool_need_lc" = "yes"; then
-	      deplibs="$deplibs -lc"
+	      func_append deplibs " -lc"
 	    fi
 	    ;;
 	  esac
@@ -6554,7 +7676,7 @@ EOF
 		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		  case " $predeps $postdeps " in
 		  *" $i "*)
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		    i=""
 		    ;;
 		  esac
@@ -6565,21 +7687,21 @@ EOF
 		  set dummy $deplib_matches; shift
 		  deplib_match=$1
 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		  else
 		    droppeddeps=yes
-		    $ECHO
+		    echo
 		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		    $ECHO "*** I have the capability to make that library automatically link in when"
-		    $ECHO "*** you link to this library.  But I can only do this if you have a"
-		    $ECHO "*** shared version of the library, which I believe you do not have"
-		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
-		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
 		  fi
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6597,7 +7719,7 @@ EOF
 		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		    case " $predeps $postdeps " in
 		    *" $i "*)
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		      i=""
 		      ;;
 		    esac
@@ -6608,29 +7730,29 @@ EOF
 		    set dummy $deplib_matches; shift
 		    deplib_match=$1
 		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		    else
 		      droppeddeps=yes
-		      $ECHO
+		      echo
 		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		      $ECHO "*** I have the capability to make that library automatically link in when"
-		      $ECHO "*** you link to this library.  But I can only do this if you have a"
-		      $ECHO "*** shared version of the library, which you do not appear to have"
-		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
-		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
 		    fi
 		  fi
 		else
 		  droppeddeps=yes
-		  $ECHO
+		  echo
 		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
-		  $ECHO "*** make it link in!  You will probably need to install it or some"
-		  $ECHO "*** library that it depends on before this library will be fully"
-		  $ECHO "*** functional.  Installing it before continuing would be even better."
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6647,15 +7769,27 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
 	      fi
 	      if test -n "$a_deplib" ; then
 		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
 		  for potent_lib in $potential_libs; do
 		      # Follow soft links.
 		      if ls -lLd "$potent_lib" 2>/dev/null |
@@ -6672,13 +7806,13 @@ EOF
 			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
 			case $potliblink in
 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
 			esac
 		      done
 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
 			 $SED -e 10q |
 			 $EGREP "$file_magic_regex" > /dev/null; then
-			newdeplibs="$newdeplibs $a_deplib"
+			func_append newdeplibs " $a_deplib"
 			a_deplib=""
 			break 2
 		      fi
@@ -6687,12 +7821,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
 		else
@@ -6703,7 +7837,7 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
@@ -6719,7 +7853,7 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
@@ -6730,9 +7864,9 @@ EOF
 		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
 		  for potent_lib in $potential_libs; do
 		    potlib="$potent_lib" # see symlink-check above in file_magic test
-		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
 		       $EGREP "$match_pattern_regex" > /dev/null; then
-		      newdeplibs="$newdeplibs $a_deplib"
+		      func_append newdeplibs " $a_deplib"
 		      a_deplib=""
 		      break 2
 		    fi
@@ -6741,12 +7875,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
 		else
@@ -6757,32 +7891,32 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
 	  ;;
 	none | unknown | *)
 	  newdeplibs=""
-	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
-	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
 	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 	    for i in $predeps $postdeps ; do
 	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
 	    done
 	  fi
-	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
-	     $GREP . >/dev/null; then
-	    $ECHO
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
 	    if test "X$deplibs_check_method" = "Xnone"; then
-	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
 	    else
-	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
 	    fi
-	    $ECHO "*** All declared inter-library dependencies are being dropped."
+	    echo "*** All declared inter-library dependencies are being dropped."
 	    droppeddeps=yes
-	  fi
+	    ;;
+	  esac
 	  ;;
 	esac
 	versuffix=$versuffix_save
@@ -6794,23 +7928,23 @@ EOF
 	case $host in
 	*-*-rhapsody* | *-*-darwin1.[012])
 	  # On Rhapsody replace the C library with the System framework
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
 	  ;;
 	esac
 
 	if test "$droppeddeps" = yes; then
 	  if test "$module" = yes; then
-	    $ECHO
-	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
 	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
-	    $ECHO "*** a static module, that should work as long as the dlopening"
-	    $ECHO "*** application is linked with the -dlopen flag."
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
 	    if test -z "$global_symbol_pipe"; then
-	      $ECHO
-	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
-	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      $ECHO "*** not find such a program.  So, this module is probably useless."
-	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	    fi
 	    if test "$build_old_libs" = no; then
 	      oldlibs="$output_objdir/$libname.$libext"
@@ -6820,16 +7954,16 @@ EOF
 	      build_libtool_libs=no
 	    fi
 	  else
-	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
-	    $ECHO "*** automatically added whenever a program is linked with this library"
-	    $ECHO "*** or is declared to -dlopen it."
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
 
 	    if test "$allow_undefined" = no; then
-	      $ECHO
-	      $ECHO "*** Since this library must not contain undefined symbols,"
-	      $ECHO "*** because either the platform does not support them or"
-	      $ECHO "*** it was explicitly requested with -no-undefined,"
-	      $ECHO "*** libtool will only create a static version of it."
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
 	      if test "$build_old_libs" = no; then
 		oldlibs="$output_objdir/$libname.$libext"
 		build_libtool_libs=module
@@ -6846,9 +7980,9 @@ EOF
       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
       case $host in
 	*-*-darwin*)
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	  ;;
       esac
 
@@ -6861,7 +7995,7 @@ EOF
 	*)
 	  case " $deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -6871,10 +8005,10 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       deplibs="$new_libs"
@@ -6891,10 +8025,12 @@ EOF
 	  hardcode_libdirs=
 	  dep_rpath=
 	  rpath="$finalize_rpath"
-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
 	  for libdir in $rpath; do
 	    if test -n "$hardcode_libdir_flag_spec"; then
 	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
 		if test -z "$hardcode_libdirs"; then
 		  hardcode_libdirs="$libdir"
 		else
@@ -6903,18 +8039,18 @@ EOF
 		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		    ;;
 		  *)
-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		    ;;
 		  esac
 		fi
 	      else
 		eval flag=\"$hardcode_libdir_flag_spec\"
-		dep_rpath="$dep_rpath $flag"
+		func_append dep_rpath " $flag"
 	      fi
 	    elif test -n "$runpath_var"; then
 	      case "$perm_rpath " in
 	      *" $libdir "*) ;;
-	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      *) func_apped perm_rpath " $libdir" ;;
 	      esac
 	    fi
 	  done
@@ -6932,7 +8068,7 @@ EOF
 	    # We should set the runpath_var.
 	    rpath=
 	    for dir in $perm_rpath; do
-	      rpath="$rpath$dir:"
+	      func_append rpath "$dir:"
 	    done
 	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
 	  fi
@@ -6940,7 +8076,7 @@ EOF
 	fi
 
 	shlibpath="$finalize_shlibpath"
-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
 	if test -n "$shlibpath"; then
 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
 	fi
@@ -6966,18 +8102,18 @@ EOF
 	linknames=
 	for link
 	do
-	  linknames="$linknames $link"
+	  func_append linknames " $link"
 	done
 
 	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	test "X$libobjs" = "X " && libobjs=
 
 	delfiles=
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
 	  export_symbols="$output_objdir/$libname.uexp"
-	  delfiles="$delfiles $export_symbols"
+	  func_append delfiles " $export_symbols"
 	fi
 
 	orig_export_symbols=
@@ -7008,13 +8144,45 @@ EOF
 	    $opt_dry_run || $RM $export_symbols
 	    cmds=$export_symbols_cmds
 	    save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
+	    for cmd1 in $cmds; do
 	      IFS="$save_ifs"
-	      eval cmd=\"$cmd\"
-	      func_len " $cmd"
-	      len=$func_len_result
-	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
 		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
 		skipped_export=false
 	      else
 		# The command line is too long to execute in one step.
@@ -7036,7 +8204,7 @@ EOF
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  tmp_export_symbols="$export_symbols"
 	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	fi
 
 	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
@@ -7048,7 +8216,7 @@ EOF
 	  # global variables. join(1) would be nice here, but unfortunately
 	  # isn't a blessed tool.
 	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	  export_symbols=$output_objdir/$libname.def
 	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	fi
@@ -7058,7 +8226,7 @@ EOF
 	  case " $convenience " in
 	  *" $test_deplib "*) ;;
 	  *)
-	    tmp_deplibs="$tmp_deplibs $test_deplib"
+	    func_append tmp_deplibs " $test_deplib"
 	    ;;
 	  esac
 	done
@@ -7078,21 +8246,21 @@ EOF
 	    test "X$libobjs" = "X " && libobjs=
 	  else
 	    gentop="$output_objdir/${outputname}x"
-	    generated="$generated $gentop"
+	    func_append generated " $gentop"
 
 	    func_extract_archives $gentop $convenience
-	    libobjs="$libobjs $func_extract_archives_result"
+	    func_append libobjs " $func_extract_archives_result"
 	    test "X$libobjs" = "X " && libobjs=
 	  fi
 	fi
 
 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
 	  eval flag=\"$thread_safe_flag_spec\"
-	  linker_flags="$linker_flags $flag"
+	  func_append linker_flags " $flag"
 	fi
 
 	# Make a backup of the uninstalled library when relinking
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
 	fi
 
@@ -7137,7 +8305,8 @@ EOF
 	    save_libobjs=$libobjs
 	  fi
 	  save_output=$output
-	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+	  func_basename "$output"
+	  output_la=$func_basename_result
 
 	  # Clear the reloadable object creation command queue and
 	  # initialize k to one.
@@ -7150,13 +8319,16 @@ EOF
 	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
 	    output=${output_objdir}/${output_la}.lnkscript
 	    func_verbose "creating GNU ld script: $output"
-	    $ECHO 'INPUT (' > $output
+	    echo 'INPUT (' > $output
 	    for obj in $save_libobjs
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    $ECHO ')' >> $output
-	    delfiles="$delfiles $output"
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
 	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
 	    output=${output_objdir}/${output_la}.lnk
 	    func_verbose "creating linker input file list: $output"
@@ -7170,10 +8342,12 @@ EOF
 	    fi
 	    for obj
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    delfiles="$delfiles $output"
-	    output=$firstobj\"$file_list_spec$output\"
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
 	  else
 	    if test -n "$save_libobjs"; then
 	      func_verbose "creating reloadable object files..."
@@ -7197,17 +8371,19 @@ EOF
 		  # command to the queue.
 		  if test "$k" -eq 1 ; then
 		    # The first file doesn't have a previous command to add.
-		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
 		  else
 		    # All subsequent reloadable object files will link in
 		    # the last one created.
-		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
 		  fi
 		  last_robj=$output_objdir/$output_la-${k}.$objext
 		  func_arith $k + 1
 		  k=$func_arith_result
 		  output=$output_objdir/$output_la-${k}.$objext
-		  objlist=$obj
+		  objlist=" $obj"
 		  func_len " $last_robj"
 		  func_arith $len0 + $func_len_result
 		  len=$func_arith_result
@@ -7217,11 +8393,12 @@ EOF
 	      # reloadable object file.  All subsequent reloadable object
 	      # files will link in the last one created.
 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
 	      if test -n "$last_robj"; then
 	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
 	      fi
-	      delfiles="$delfiles $output"
+	      func_append delfiles " $output"
 
 	    else
 	      output=
@@ -7255,7 +8432,7 @@ EOF
 		lt_exit=$?
 
 		# Restore the uninstalled library and exit
-		if test "$mode" = relink; then
+		if test "$opt_mode" = relink; then
 		  ( cd "$output_objdir" && \
 		    $RM "${realname}T" && \
 		    $MV "${realname}U" "$realname" )
@@ -7276,7 +8453,7 @@ EOF
 	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	      tmp_export_symbols="$export_symbols"
 	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	    fi
 
 	    if test -n "$orig_export_symbols"; then
@@ -7288,7 +8465,7 @@ EOF
 	      # global variables. join(1) would be nice here, but unfortunately
 	      # isn't a blessed tool.
 	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	      export_symbols=$output_objdir/$libname.def
 	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	    fi
@@ -7329,10 +8506,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  libobjs="$libobjs $func_extract_archives_result"
+	  func_append libobjs " $func_extract_archives_result"
 	  test "X$libobjs" = "X " && libobjs=
 	fi
 
@@ -7348,7 +8525,7 @@ EOF
 	    lt_exit=$?
 
 	    # Restore the uninstalled library and exit
-	    if test "$mode" = relink; then
+	    if test "$opt_mode" = relink; then
 	      ( cd "$output_objdir" && \
 	        $RM "${realname}T" && \
 		$MV "${realname}U" "$realname" )
@@ -7360,7 +8537,7 @@ EOF
 	IFS="$save_ifs"
 
 	# Restore the uninstalled library and exit
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
 	  if test -n "$convenience"; then
@@ -7441,18 +8618,21 @@ EOF
       if test -n "$convenience"; then
 	if test -n "$whole_archive_flag_spec"; then
 	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
 	else
 	  gentop="$output_objdir/${obj}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $convenience
 	  reload_conv_objs="$reload_objs $func_extract_archives_result"
 	fi
       fi
 
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
 
       output="$obj"
       func_execute_cmds "$reload_cmds" 'exit $?'
@@ -7512,8 +8692,8 @@ EOF
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
 	# On Rhapsody replace the C library is the System framework
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
 	;;
       esac
 
@@ -7524,14 +8704,14 @@ EOF
 	if test "$tagname" = CXX ; then
 	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
 	    10.[0123])
-	      compile_command="$compile_command ${wl}-bind_at_load"
-	      finalize_command="$finalize_command ${wl}-bind_at_load"
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
 	    ;;
 	  esac
 	fi
 	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	;;
       esac
 
@@ -7545,7 +8725,7 @@ EOF
 	*)
 	  case " $compile_deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -7555,17 +8735,17 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       compile_deplibs="$new_libs"
 
 
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
 
       if test -n "$rpath$xrpath"; then
 	# If the user specified any rpath flags, then add them.
@@ -7573,7 +8753,7 @@ EOF
 	  # This is the magic to use -rpath.
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
       fi
@@ -7592,18 +8772,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  *) func_append perm_rpath " $libdir" ;;
 	  esac
 	fi
 	case $host in
@@ -7612,12 +8792,12 @@ EOF
 	  case :$dllsearchpath: in
 	  *":$libdir:"*) ;;
 	  ::) dllsearchpath=$libdir;;
-	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  *) func_append dllsearchpath ":$libdir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -7643,18 +8823,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$finalize_perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
 	  esac
 	fi
       done
@@ -7668,8 +8848,8 @@ EOF
 
       if test -n "$libobjs" && test "$build_old_libs" = yes; then
 	# Transform all the library objects into standard objects.
-	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
       func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
@@ -7681,15 +8861,15 @@ EOF
 
       wrappers_required=yes
       case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
       *cygwin* | *mingw* )
         if test "$build_libtool_libs" != yes; then
           wrappers_required=no
         fi
         ;;
-      *cegcc)
-        # Disable wrappers for cegcc, we are cross compiling anyway.
-        wrappers_required=no
-        ;;
       *)
         if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
           wrappers_required=no
@@ -7698,13 +8878,19 @@ EOF
       esac
       if test "$wrappers_required" = no; then
 	# Replace the output file specification.
-	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	link_command="$compile_command$compile_rpath"
 
 	# We have no uninstalled library dependencies, so finalize right now.
 	exit_status=0
 	func_show_eval "$link_command" 'exit_status=$?'
 
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	# Delete the generated files.
 	if test -f "$output_objdir/${outputname}S.${objext}"; then
 	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
@@ -7727,7 +8913,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7735,7 +8921,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $finalize_perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7745,11 +8931,18 @@ EOF
 	# We don't need to create a wrapper script.
 	link_command="$compile_var$compile_command$compile_rpath"
 	# Replace the output file specification.
-	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	# Delete the old output file.
 	$opt_dry_run || $RM $output
 	# Link the executable and exit
 	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	exit $EXIT_SUCCESS
       fi
 
@@ -7764,7 +8957,7 @@ EOF
 	if test "$fast_install" != no; then
 	  link_command="$finalize_var$compile_command$finalize_rpath"
 	  if test "$fast_install" = yes; then
-	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
 	  else
 	    # fast_install is set to needless
 	    relink_command=
@@ -7776,13 +8969,19 @@ EOF
       fi
 
       # Replace the output file specification.
-      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
 
       # Delete the old output files.
       $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
 
       func_show_eval "$link_command" 'exit $?'
 
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
       # Now create the wrapper script.
       func_verbose "creating $output"
 
@@ -7800,18 +8999,7 @@ EOF
 	  fi
 	done
 	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $ECHO for shipping.
-      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
-	case $progpath in
-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-	esac
-	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       fi
 
       # Only actually do things if not in dry run mode.
@@ -7891,7 +9079,7 @@ EOF
 	else
 	  oldobjs="$old_deplibs $non_pic_objects"
 	  if test "$preload" = yes && test -f "$symfileobj"; then
-	    oldobjs="$oldobjs $symfileobj"
+	    func_append oldobjs " $symfileobj"
 	  fi
 	fi
 	addlibs="$old_convenience"
@@ -7899,10 +9087,10 @@ EOF
 
       if test -n "$addlibs"; then
 	gentop="$output_objdir/${outputname}x"
-	generated="$generated $gentop"
+	func_append generated " $gentop"
 
 	func_extract_archives $gentop $addlibs
-	oldobjs="$oldobjs $func_extract_archives_result"
+	func_append oldobjs " $func_extract_archives_result"
       fi
 
       # Do each command in the archive commands.
@@ -7913,10 +9101,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  oldobjs="$oldobjs $func_extract_archives_result"
+	  func_append oldobjs " $func_extract_archives_result"
 	fi
 
 	# POSIX demands no paths to be encoded in archives.  We have
@@ -7932,9 +9120,9 @@ EOF
 	    done | sort | sort -uc >/dev/null 2>&1); then
 	  :
 	else
-	  $ECHO "copying selected object files to avoid basename conflicts..."
+	  echo "copying selected object files to avoid basename conflicts..."
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 	  func_mkdir_p "$gentop"
 	  save_oldobjs=$oldobjs
 	  oldobjs=
@@ -7958,9 +9146,9 @@ EOF
 		esac
 	      done
 	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-	      oldobjs="$oldobjs $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
 	      ;;
-	    *) oldobjs="$oldobjs $obj" ;;
+	    *) func_append oldobjs " $obj" ;;
 	    esac
 	  done
 	fi
@@ -7970,6 +9158,16 @@ EOF
 	len=$func_len_result
 	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
 	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
 	else
 	  # the command line is too long to link in one step, link in parts
 	  func_verbose "using piecewise archive linking..."
@@ -8043,7 +9241,7 @@ EOF
       done
       # Quote the link command for shipping.
       relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       if test "$hardcode_automatic" = yes ; then
 	relink_command=
       fi
@@ -8066,9 +9264,19 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$deplib' is not a valid libtool archive"
-		newdependency_libs="$newdependency_libs $libdir/$name"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
 		;;
-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
 	      esac
 	    done
 	    dependency_libs="$newdependency_libs"
@@ -8082,9 +9290,9 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlfiles="$newdlfiles $libdir/$name"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
-	      *) newdlfiles="$newdlfiles $lib" ;;
+	      *) func_append newdlfiles " $lib" ;;
 	      esac
 	    done
 	    dlfiles="$newdlfiles"
@@ -8101,7 +9309,7 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlprefiles="$newdlprefiles $libdir/$name"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
 	      esac
 	    done
@@ -8113,7 +9321,7 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlfiles="$newdlfiles $abs"
+	      func_append newdlfiles " $abs"
 	    done
 	    dlfiles="$newdlfiles"
 	    newdlprefiles=
@@ -8122,15 +9330,33 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlprefiles="$newdlprefiles $abs"
+	      func_append newdlprefiles " $abs"
 	    done
 	    dlprefiles="$newdlprefiles"
 	  fi
 	  $RM $output
 	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
 	  tdlname=$dlname
 	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
 	  esac
 	  $ECHO > $output "\
 # $outputname - a libtool library file
@@ -8189,7 +9415,7 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
-{ test "$mode" = link || test "$mode" = relink; } &&
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
     func_mode_link ${1+"$@"}
 
 
@@ -8209,9 +9435,9 @@ func_mode_uninstall ()
     for arg
     do
       case $arg in
-      -f) RM="$RM $arg"; rmforce=yes ;;
-      -*) RM="$RM $arg" ;;
-      *) files="$files $arg" ;;
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
       esac
     done
 
@@ -8220,24 +9446,23 @@ func_mode_uninstall ()
 
     rmdirs=
 
-    origobjdir="$objdir"
     for file in $files; do
       func_dirname "$file" "" "."
       dir="$func_dirname_result"
       if test "X$dir" = X.; then
-	objdir="$origobjdir"
+	odir="$objdir"
       else
-	objdir="$dir/$origobjdir"
+	odir="$dir/$objdir"
       fi
       func_basename "$file"
       name="$func_basename_result"
-      test "$mode" = uninstall && objdir="$dir"
+      test "$opt_mode" = uninstall && odir="$dir"
 
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
 	case " $rmdirs " in
-	  *" $objdir "*) ;;
-	  *) rmdirs="$rmdirs $objdir" ;;
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
 	esac
       fi
 
@@ -8263,18 +9488,17 @@ func_mode_uninstall ()
 
 	  # Delete the libtool libraries and symlinks.
 	  for n in $library_names; do
-	    rmfiles="$rmfiles $objdir/$n"
+	    func_append rmfiles " $odir/$n"
 	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-	  case "$mode" in
+	  case "$opt_mode" in
 	  clean)
-	    case "  $library_names " in
-	    # "  " in the beginning catches empty $dlname
+	    case " $library_names " in
 	    *" $dlname "*) ;;
-	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
 	    esac
-	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
 	    ;;
 	  uninstall)
 	    if test -n "$library_names"; then
@@ -8302,19 +9526,19 @@ func_mode_uninstall ()
 	  # Add PIC object to the list of files to remove.
 	  if test -n "$pic_object" &&
 	     test "$pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$pic_object"
+	    func_append rmfiles " $dir/$pic_object"
 	  fi
 
 	  # Add non-PIC object to the list of files to remove.
 	  if test -n "$non_pic_object" &&
 	     test "$non_pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$non_pic_object"
+	    func_append rmfiles " $dir/$non_pic_object"
 	  fi
 	fi
 	;;
 
       *)
-	if test "$mode" = clean ; then
+	if test "$opt_mode" = clean ; then
 	  noexename=$name
 	  case $file in
 	  *.exe)
@@ -8324,7 +9548,7 @@ func_mode_uninstall ()
 	    noexename=$func_stripname_result
 	    # $file with .exe has already been added to rmfiles,
 	    # add $file without .exe
-	    rmfiles="$rmfiles $file"
+	    func_append rmfiles " $file"
 	    ;;
 	  esac
 	  # Do a test to see if this is a libtool program.
@@ -8333,7 +9557,7 @@ func_mode_uninstall ()
 	      func_ltwrapper_scriptname "$file"
 	      relink_command=
 	      func_source $func_ltwrapper_scriptname_result
-	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
 	    else
 	      relink_command=
 	      func_source $dir/$noexename
@@ -8341,12 +9565,12 @@ func_mode_uninstall ()
 
 	    # note $name still contains .exe if it was in $file originally
 	    # as does the version of $file that was added into $rmfiles
-	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
 	    if test "$fast_install" = yes && test -n "$relink_command"; then
-	      rmfiles="$rmfiles $objdir/lt-$name"
+	      func_append rmfiles " $odir/lt-$name"
 	    fi
 	    if test "X$noexename" != "X$name" ; then
-	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	      func_append rmfiles " $odir/lt-${noexename}.c"
 	    fi
 	  fi
 	fi
@@ -8354,7 +9578,6 @@ func_mode_uninstall ()
       esac
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
-    objdir="$origobjdir"
 
     # Try to remove the ${objdir}s in the directories where we deleted files
     for dir in $rmdirs; do
@@ -8366,16 +9589,16 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
     func_mode_uninstall ${1+"$@"}
 
-test -z "$mode" && {
+test -z "$opt_mode" && {
   help="$generic_help"
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$mode'"
+  func_fatal_help "invalid operation mode \`$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
diff --git a/spatialite-tools/makefile.vc b/spatialite-tools/makefile.vc
index ba5f2e7..cdbd3ad 100644
--- a/spatialite-tools/makefile.vc
+++ b/spatialite-tools/makefile.vc
@@ -4,15 +4,16 @@
 #
 !INCLUDE nmake.opt
 
-SPATIALITE_EXE         =	spatialite.exe
-EXIF_LOADER_EXE        =	exif_loader.exe
-SHP_DOCTOR_EXE         =	shp_doctor.exe
-SPATIALITE_NETWORK_EXE =	spatialite_network.exe
-SPATIALITE_TOOL_EXE    =	spatialite_tool.exe
-SPATIALITE_OSM_NET_EXE =    spatialite_osm_net.exe
-SPATIALITE_OSM_MAP_EXE =    spatialite_osm_map.exe
-SPATIALITE_OSM_RAW_EXE =    spatialite_osm_raw.exe
-SPATIALITE_GML_EXE     =    spatialite_gml.exe
+SPATIALITE_EXE            = spatialite.exe
+EXIF_LOADER_EXE           = exif_loader.exe
+SHP_DOCTOR_EXE            = shp_doctor.exe
+SPATIALITE_NETWORK_EXE    = spatialite_network.exe
+SPATIALITE_TOOL_EXE       = spatialite_tool.exe
+SPATIALITE_OSM_NET_EXE    = spatialite_osm_net.exe
+SPATIALITE_OSM_MAP_EXE    = spatialite_osm_map.exe
+SPATIALITE_OSM_RAW_EXE    = spatialite_osm_raw.exe
+SPATIALITE_OSM_FILTER_EXE = spatialite_osm_filter.exe
+SPATIALITE_GML_EXE        = spatialite_gml.exe
 
 CFLAGS	=	/nologo -IC:\OSGeo4W\include $(OPTFLAGS)
 
@@ -21,10 +22,11 @@ default:	all
 all: $(SPATIALITE_EXE) $(SHP_DOCTOR_EXE) $(SPATIALITE_TOOL_EXE) \
 	$(SPATIALITE_NETWORK_EXE) $(EXIF_LOADER_EXE) \
 	$(SPATIALITE_OSM_NET_EXE) $(SPATIALITE_OSM_MAP_EXE) \
-	$(SPATIALITE_GML_EXE) $(SPATIALITE_OSM_RAW_EXE)
+	$(SPATIALITE_GML_EXE) $(SPATIALITE_OSM_RAW_EXE) \
+	$(SPATIALITE_OSM_FILTER_EXE)
 
-$(SPATIALITE_EXE): shell.obj shapefiles.obj
-	cl shell.obj shapefiles.obj C:\OSGeo4W\lib\proj_i.lib \
+$(SPATIALITE_EXE): shell.obj
+	cl shell.obj C:\OSGeo4W\lib\proj_i.lib \
 		C:\OSGeo4W\lib\iconv.lib C:\OSGeo4W\lib\geos_c_i.lib \
 		C:\OSGeo4W\lib\spatialite_i.lib \
 		/Fe$(SPATIALITE_EXE)
@@ -53,8 +55,8 @@ $(SPATIALITE_NETWORK_EXE):	spatialite_network.obj
 		$(SPATIALITE_TOOL_EXE).manifest \
 		-outputresource:$(SPATIALITE_TOOL_EXE);1
 
-$(SPATIALITE_TOOL_EXE):	spatialite_tool.obj shapefiles.obj
-	cl spatialite_tool.obj shapefiles.obj C:\OSGeo4W\lib\proj_i.lib \
+$(SPATIALITE_TOOL_EXE):	spatialite_tool.obj
+	cl spatialite_tool.obj C:\OSGeo4W\lib\proj_i.lib \
 		C:\OSGeo4W\lib\iconv.lib C:\OSGeo4W\lib\geos_c_i.lib \
 		C:\OSGeo4W\lib\spatialite_i.lib
 	if exist $(SPATIALITE_TOOL_EXE).manifest mt -manifest \
@@ -96,6 +98,14 @@ $(SPATIALITE_OSM_RAW_EXE):	spatialite_osm_raw.obj
 		$(SPATIALITE_OSM_RAW_EXE).manifest \
 		-outputresource:$(SPATIALITE_OSM_RAW_EXE);1
 
+$(SPATIALITE_OSM_FILTER_EXE):	spatialite_osm_filter.obj
+	cl spatialite_osm_filter.obj C:\OSGeo4W\lib\proj_i.lib \
+		C:\OSGeo4W\lib\iconv.lib \
+		C:\OSGeo4W\lib\spatialite_i.lib
+	if exist $(SPATIALITE_OSM_FILTER_EXE).manifest mt -manifest \
+		$(SPATIALITE_OSM_FILTER_EXE).manifest \
+		-outputresource:$(SPATIALITE_OSM_FILTER_EXE);1
+
 clean:
 	del *.exe
 	del *.exp
diff --git a/spatialite-tools/shapefiles.c b/spatialite-tools/shapefiles.c
deleted file mode 100644
index 3e6f2f1..0000000
--- a/spatialite-tools/shapefiles.c
+++ /dev/null
@@ -1,2887 +0,0 @@
-/*
-
- shapefiles.c -- implements shapefile support [import - export]
-
- version 2.3, 2008 October 13
-
- Author: Sandro Furieri a.furieri at lqt.it
-
- -----------------------------------------------------------------------------
- 
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
- 
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
- 
-Software distributed under the License is distributed on an "AS IS" basis,
-WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-for the specific language governing rights and limitations under the
-License.
-
-The Original Code is the SpatiaLite library
-
-The Initial Developer of the Original Code is Alessandro Furieri
- 
-Portions created by the Initial Developer are Copyright (C) 2008
-the Initial Developer. All Rights Reserved.
-
-Contributor(s):
-
-Alternatively, the contents of this file may be used under the terms of
-either the GNU General Public License Version 2 or later (the "GPL"), or
-the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-in which case the provisions of the GPL or the LGPL are applicable instead
-of those above. If you wish to allow use of your version of this file only
-under the terms of either the GPL or the LGPL, and not to allow others to
-use your version of this file under the terms of the MPL, indicate your
-decision by deleting the provisions above and replace them with the notice
-and other provisions required by the GPL or the LGPL. If you do not delete
-the provisions above, a recipient may use your version of this file under
-the terms of any one of the MPL, the GPL or the LGPL.
- 
-*/
-
-#if defined(_WIN32) && !defined(__MINGW32__)
-/* MSVC strictly requires this include [off_t] */
-#include <sys/types.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef SPATIALITE_AMALGAMATION
-#include <spatialite/sqlite3.h>
-#else
-#include <sqlite3.h>
-#endif
-
-#include <spatialite/gaiaaux.h>
-#include <spatialite/gaiageo.h>
-#include <spatialite.h>
-
-#include <freexl.h>
-
-#if defined(_WIN32) && !defined(__MINGW32__)
-#define strcasecmp	_stricmp
-#endif
-
-struct dupl_column
-{
-/* a column value in a duplicated row */
-    int pos;
-    char *name;
-    int type;
-    sqlite3_int64 int_value;
-    double dbl_value;
-    const char *txt_value;
-    const void *blob;
-    int size;
-    int query_pos;
-    struct dupl_column *next;
-};
-
-struct dupl_row
-{
-/* a duplicated row with column values */
-    int count;
-    struct dupl_column *first;
-    struct dupl_column *last;
-    const char *table;
-};
-
-static void
-clean_dupl_row (struct dupl_row *str)
-{
-/* destroying a duplicated row struct */
-    struct dupl_column *p;
-    struct dupl_column *pn;
-    p = str->first;
-    while (p)
-      {
-	  pn = p->next;
-	  free (p->name);
-	  free (p);
-	  p = pn;
-      }
-}
-
-static void
-add_to_dupl_row (struct dupl_row *str, const char *name)
-{
-/* adding a column to the duplicated row struct */
-    int len;
-    struct dupl_column *p = malloc (sizeof (struct dupl_column));
-    p->pos = str->count;
-    len = strlen (name);
-    p->name = malloc (len + 1);
-    strcpy (p->name, name);
-    str->count++;
-    p->type = SQLITE_NULL;
-    p->next = NULL;
-    if (str->first == NULL)
-	str->first = p;
-    if (str->last)
-	str->last->next = p;
-    str->last = p;
-}
-
-static void
-set_int_value (struct dupl_row *str, int pos, sqlite3_int64 value)
-{
-/* setting up an integer value */
-    struct dupl_column *p = str->first;
-    while (p)
-      {
-	  if (p->pos == pos)
-	    {
-		p->type = SQLITE_INTEGER;
-		p->int_value = value;
-		return;
-	    }
-	  p = p->next;
-      }
-}
-
-static void
-set_double_value (struct dupl_row *str, int pos, double value)
-{
-/* setting up a double value */
-    struct dupl_column *p = str->first;
-    while (p)
-      {
-	  if (p->pos == pos)
-	    {
-		p->type = SQLITE_FLOAT;
-		p->dbl_value = value;
-		return;
-	    }
-	  p = p->next;
-      }
-}
-
-static void
-set_text_value (struct dupl_row *str, int pos, const char *value)
-{
-/* setting up a text value */
-    struct dupl_column *p = str->first;
-    while (p)
-      {
-	  if (p->pos == pos)
-	    {
-		p->type = SQLITE_TEXT;
-		p->txt_value = value;
-		return;
-	    }
-	  p = p->next;
-      }
-}
-
-static void
-set_blob_value (struct dupl_row *str, int pos, const void *blob, int size)
-{
-/* setting up a blob value */
-    struct dupl_column *p = str->first;
-    while (p)
-      {
-	  if (p->pos == pos)
-	    {
-		p->type = SQLITE_BLOB;
-		p->blob = blob;
-		p->size = size;
-		return;
-	    }
-	  p = p->next;
-      }
-}
-
-static void
-set_null_value (struct dupl_row *str, int pos)
-{
-/* setting up a NULL value */
-    struct dupl_column *p = str->first;
-    while (p)
-      {
-	  if (p->pos == pos)
-	    {
-		p->type = SQLITE_NULL;
-		return;
-	    }
-	  p = p->next;
-      }
-}
-
-static void
-reset_query_pos (struct dupl_row *str)
-{
-/* resetting QueryPos for BLOBs */
-    struct dupl_column *p = str->first;
-    while (p)
-      {
-	  p->query_pos = -1;
-	  p = p->next;
-      }
-}
-
-static int
-check_dupl_blob2 (struct dupl_column *ptr, const void *blob, int size)
-{
-/* checking a BLOB value */
-    if (ptr->type != SQLITE_BLOB)
-	return 0;
-    if (ptr->size != size)
-	return 0;
-    if (memcmp (ptr->blob, blob, size) != 0)
-	return 0;
-    return 1;
-}
-
-static int
-check_dupl_blob (struct dupl_row *str, int pos, const void *blob, int size)
-{
-/* checking a BLOB value */
-    struct dupl_column *p = str->first;
-    while (p)
-      {
-	  if (p->query_pos == pos)
-	    {
-		return check_dupl_blob2 (p, blob, size);
-	    }
-	  p = p->next;
-      }
-    return 0;
-}
-
-static gaiaDbfFieldPtr
-getDbfField (gaiaDbfListPtr list, char *name)
-{
-/* find a DBF attribute by name */
-    gaiaDbfFieldPtr fld = list->First;
-    while (fld)
-      {
-	  if (strcasecmp (fld->Name, name) == 0)
-	      return fld;
-	  fld = fld->Next;
-      }
-    return NULL;
-}
-
-SPATIALITE_DECLARE int
-load_shapefile (sqlite3 * sqlite, char *shp_path, char *table, char *charset,
-		int srid, char *column, int coerce2d, int compressed,
-		int verbose, int *rows)
-{
-    sqlite3_stmt *stmt = NULL;
-    int ret;
-    char *errMsg = NULL;
-    char sql[65536];
-    char dummyName[4096];
-    int already_exists = 0;
-    int metadata = 0;
-    int sqlError = 0;
-    gaiaShapefilePtr shp = NULL;
-    gaiaDbfFieldPtr dbf_field;
-    int cnt;
-    int col_cnt;
-    int seed;
-    int len;
-    int dup;
-    int idup;
-    int current_row;
-    char **col_name = NULL;
-    unsigned char *blob;
-    int blob_size;
-    char *geom_type;
-    char *txt_dims;
-    char *geo_column = column;
-    if (!geo_column)
-	geo_column = "Geometry";
-/* checking if TABLE already exists */
-    sprintf (sql,
-	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
-	     table);
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load shapefile error: <%s>\n",
-		   sqlite3_errmsg (sqlite));
-	  return 0;
-      }
-    while (1)
-      {
-	  /* scrolling the result set */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	      already_exists = 1;
-	  else
-	    {
-		fprintf (stderr, "load shapefile error: <%s>\n",
-			 sqlite3_errmsg (sqlite));
-		break;
-	    }
-      }
-    sqlite3_finalize (stmt);
-    if (already_exists)
-      {
-	  fprintf (stderr, "load shapefile error: table '%s' already exists\n",
-		   table);
-	  return 0;
-      }
-/* checking if MetaData GEOMETRY_COLUMNS exists */
-    strcpy (sql,
-	    "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'geometry_columns'");
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load shapefile error: <%s>\n",
-		   sqlite3_errmsg (sqlite));
-	  return 0;
-      }
-    while (1)
-      {
-	  /* scrolling the result set */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	      metadata = 1;
-	  else
-	    {
-		fprintf (stderr, "load shapefile error: <%s>\n",
-			 sqlite3_errmsg (sqlite));
-		break;
-	    }
-      }
-    sqlite3_finalize (stmt);
-    shp = gaiaAllocShapefile ();
-    gaiaOpenShpRead (shp, shp_path, charset, "UTF-8");
-    if (!(shp->Valid))
-      {
-	  fprintf (stderr, "load shapefile error: cannot open shapefile '%s'\n",
-		   shp_path);
-	  if (shp->LastError)
-	      fprintf (stderr, "\tcause: %s\n", shp->LastError);
-	  gaiaFreeShapefile (shp);
-	  return 0;
-      }
-/* checking for duplicate / illegal column names and antialising them */
-    col_cnt = 0;
-    dbf_field = shp->Dbf->First;
-    while (dbf_field)
-      {
-	  /* counting DBF fields */
-	  col_cnt++;
-	  dbf_field = dbf_field->Next;
-      }
-    col_name = malloc (sizeof (char *) * col_cnt);
-    cnt = 0;
-    seed = 0;
-    dbf_field = shp->Dbf->First;
-    while (dbf_field)
-      {
-	  /* preparing column names */
-	  strcpy (dummyName, dbf_field->Name);
-	  dup = 0;
-	  for (idup = 0; idup < cnt; idup++)
-	    {
-		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
-		    dup = 1;
-	    }
-	  if (strcasecmp (dummyName, "PK_UID") == 0)
-	      dup = 1;
-	  if (strcasecmp (dummyName, geo_column) == 0)
-	      dup = 1;
-	  if (dup)
-	      sprintf (dummyName, "COL_%d", seed++);
-	  len = strlen (dummyName);
-	  *(col_name + cnt) = malloc (len + 1);
-	  strcpy (*(col_name + cnt), dummyName);
-	  cnt++;
-	  dbf_field = dbf_field->Next;
-      }
-    if (verbose)
-	fprintf (stderr,
-		 "========\nLoading shapefile at '%s' into SQLite table '%s'\n",
-		 shp_path, table);
-/* starting a transaction */
-    if (verbose)
-	fprintf (stderr, "\nBEGIN;\n");
-    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
-	  sqlite3_free (errMsg);
-	  sqlError = 1;
-	  goto clean_up;
-      }
-/* creating the Table */
-    sprintf (sql, "CREATE TABLE %s", table);
-    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
-    cnt = 0;
-    dbf_field = shp->Dbf->First;
-    while (dbf_field)
-      {
-	  strcat (sql, ",\n\"");
-	  strcat (sql, *(col_name + cnt));
-	  cnt++;
-	  switch (dbf_field->Type)
-	    {
-	    case 'C':
-		strcat (sql, "\" TEXT");
-		break;
-	    case 'N':
-		fflush (stderr);
-		if (dbf_field->Decimals)
-		    strcat (sql, "\" DOUBLE");
-		else
-		  {
-		      if (dbf_field->Length <= 18)
-			  strcat (sql, "\" INTEGER");
-		      else
-			  strcat (sql, "\" DOUBLE");
-		  }
-		break;
-	    case 'D':
-		strcat (sql, "\" DOUBLE");
-		break;
-	    case 'F':
-		strcat (sql, "\" DOUBLE");
-		break;
-	    case 'L':
-		strcat (sql, "\" INTEGER");
-		break;
-	    };
-	  dbf_field = dbf_field->Next;
-      }
-    if (metadata)
-	strcat (sql, ")");
-    else
-      {
-	  strcat (sql, ",\n");
-	  strcat (sql, geo_column);
-	  strcat (sql, " BLOB)");
-      }
-    if (verbose)
-	fprintf (stderr, "%s;\n", sql);
-    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
-	  sqlite3_free (errMsg);
-	  sqlError = 1;
-	  goto clean_up;
-      }
-    if (metadata)
-      {
-	  /* creating Geometry column */
-	  switch (shp->Shape)
-	    {
-	    case GAIA_SHP_POINT:
-	    case GAIA_SHP_POINTM:
-	    case GAIA_SHP_POINTZ:
-		geom_type = "POINT";
-		break;
-	    case GAIA_SHP_MULTIPOINT:
-	    case GAIA_SHP_MULTIPOINTM:
-	    case GAIA_SHP_MULTIPOINTZ:
-		geom_type = "MULTIPOINT";
-		break;
-	    case GAIA_SHP_POLYLINE:
-	    case GAIA_SHP_POLYLINEM:
-	    case GAIA_SHP_POLYLINEZ:
-		gaiaShpAnalyze (shp);
-		if (shp->EffectiveType == GAIA_LINESTRING)
-		    geom_type = "LINESTRING";
-		else
-		    geom_type = "MULTILINESTRING";
-		break;
-	    case GAIA_SHP_POLYGON:
-	    case GAIA_SHP_POLYGONM:
-	    case GAIA_SHP_POLYGONZ:
-		gaiaShpAnalyze (shp);
-		if (shp->EffectiveType == GAIA_POLYGON)
-		    geom_type = "POLYGON";
-		else
-		    geom_type = "MULTIPOLYGON";
-		break;
-	    };
-	  if (coerce2d)
-	      shp->EffectiveDims = GAIA_XY;
-	  switch (shp->EffectiveDims)
-	    {
-	    case GAIA_XY_Z:
-		txt_dims = "XYZ";
-		break;
-	    case GAIA_XY_M:
-		txt_dims = "XYM";
-		break;
-	    case GAIA_XY_Z_M:
-		txt_dims = "XYZM";
-		break;
-	    default:
-		txt_dims = "XY";
-		break;
-	    };
-	  sprintf (sql, "SELECT AddGeometryColumn('%s', '%s', %d, '%s', '%s')",
-		   table, geo_column, srid, geom_type, txt_dims);
-	  if (verbose)
-	      fprintf (stderr, "%s;\n", sql);
-	  ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
-		sqlite3_free (errMsg);
-		sqlError = 1;
-		goto clean_up;
-	    }
-      }
-    else
-      {
-	  /* no Metadata */
-	  if (shp->Shape == GAIA_SHP_POLYLINE
-	      || shp->Shape == GAIA_SHP_POLYLINEM
-	      || shp->Shape == GAIA_SHP_POLYLINEZ
-	      || shp->Shape == GAIA_SHP_POLYGON
-	      || shp->Shape == GAIA_SHP_POLYGONM
-	      || shp->Shape == GAIA_SHP_POLYGONZ)
-	    {
-		/* fixing anyway the Geometry type for LINESTRING/MULTILINESTRING or POLYGON/MULTIPOLYGON */
-		gaiaShpAnalyze (shp);
-	    }
-      }
-    /* preparing the INSERT INTO parametrerized statement */
-    sprintf (sql, "INSERT INTO %s (PK_UID,", table);
-    cnt = 0;
-    dbf_field = shp->Dbf->First;
-    while (dbf_field)
-      {
-	  /* columns corresponding to some DBF attribute */
-	  strcat (sql, "\"");
-	  strcat (sql, *(col_name + cnt++));
-	  strcat (sql, "\" ,");
-	  dbf_field = dbf_field->Next;
-      }
-    strcat (sql, geo_column);	/* the GEOMETRY column */
-    strcat (sql, ")\nVALUES (?");
-    dbf_field = shp->Dbf->First;
-    while (dbf_field)
-      {
-	  /* column values */
-	  strcat (sql, ", ?");
-	  dbf_field = dbf_field->Next;
-      }
-    strcat (sql, ", ?)");	/* the GEOMETRY column */
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load shapefile error: <%s>\n",
-		   sqlite3_errmsg (sqlite));
-	  sqlError = 1;
-	  goto clean_up;
-      }
-    current_row = 0;
-    while (1)
-      {
-	  /* inserting rows from shapefile */
-	  ret = gaiaReadShpEntity (shp, current_row, srid);
-	  if (!ret)
-	    {
-		if (!(shp->LastError))	/* normal SHP EOF */
-		    break;
-		fprintf (stderr, "%s\n", shp->LastError);
-		sqlError = 1;
-		sqlite3_finalize (stmt);
-		goto clean_up;
-	    }
-	  current_row++;
-	  /* binding query params */
-	  sqlite3_reset (stmt);
-	  sqlite3_clear_bindings (stmt);
-	  sqlite3_bind_int (stmt, 1, current_row);
-	  cnt = 0;
-	  dbf_field = shp->Dbf->First;
-	  while (dbf_field)
-	    {
-		/* column values */
-		if (!(dbf_field->Value))
-		    sqlite3_bind_null (stmt, cnt + 2);
-		else
-		  {
-		      switch (dbf_field->Value->Type)
-			{
-			case GAIA_INT_VALUE:
-			    sqlite3_bind_int64 (stmt, cnt + 2,
-						dbf_field->Value->IntValue);
-			    break;
-			case GAIA_DOUBLE_VALUE:
-			    sqlite3_bind_double (stmt, cnt + 2,
-						 dbf_field->Value->DblValue);
-			    break;
-			case GAIA_TEXT_VALUE:
-			    sqlite3_bind_text (stmt, cnt + 2,
-					       dbf_field->Value->TxtValue,
-					       strlen (dbf_field->
-						       Value->TxtValue),
-					       SQLITE_STATIC);
-			    break;
-			default:
-			    sqlite3_bind_null (stmt, cnt + 2);
-			    break;
-			}
-		  }
-		cnt++;
-		dbf_field = dbf_field->Next;
-	    }
-	  if (shp->Dbf->Geometry)
-	    {
-		if (compressed)
-		    gaiaToCompressedBlobWkb (shp->Dbf->Geometry, &blob,
-					     &blob_size);
-		else
-		    gaiaToSpatiaLiteBlobWkb (shp->Dbf->Geometry, &blob,
-					     &blob_size);
-		sqlite3_bind_blob (stmt, cnt + 2, blob, blob_size, free);
-	    }
-	  else
-	    {
-		/* handling a NULL-Geometry */
-		sqlite3_bind_null (stmt, cnt + 2);
-	    }
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
-	      ;
-	  else
-	    {
-		fprintf (stderr, "load shapefile error: <%s>\n",
-			 sqlite3_errmsg (sqlite));
-		sqlite3_finalize (stmt);
-		sqlError = 1;
-		goto clean_up;
-	    }
-      }
-    sqlite3_finalize (stmt);
-  clean_up:
-    gaiaFreeShapefile (shp);
-    if (col_name)
-      {
-	  /* releasing memory allocation for column names */
-	  for (cnt = 0; cnt < col_cnt; cnt++)
-	      free (*(col_name + cnt));
-	  free (col_name);
-      }
-    if (sqlError)
-      {
-	  /* some error occurred - ROLLBACK */
-	  if (verbose)
-	      fprintf (stderr, "ROLLBACK;\n");
-	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
-		sqlite3_free (errMsg);
-	    }
-	  if (rows)
-	      *rows = current_row;
-	  return 0;
-      }
-    else
-      {
-	  /* ok - confirming pending transaction - COMMIT */
-	  if (verbose)
-	      fprintf (stderr, "COMMIT;\n");
-	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "load shapefile error: <%s>\n", errMsg);
-		sqlite3_free (errMsg);
-		return 0;
-	    }
-	  if (rows)
-	      *rows = current_row;
-	  if (verbose)
-	      fprintf (stderr,
-		       "\nInserted %d rows into '%s' from SHAPEFILE\n========\n",
-		       current_row, table);
-	  return 1;
-      }
-}
-
-static void
-output_prj_file (sqlite3 * sqlite, char *path, char *table, char *column)
-{
-/* exporting [if possible] a .PRJ file */
-    char **results;
-    int rows;
-    int columns;
-    int i;
-    char *errMsg = NULL;
-    int srid = -1;
-    char sql[1024];
-    char sql2[1024];
-    int ret;
-    int rs_srid = 0;
-    int rs_srs_wkt = 0;
-    const char *name;
-    char srsWkt[8192];
-    char dummy[8192];
-    FILE *out;
-
-/* step I: retrieving the SRID */
-    sprintf (sql,
-	     "SELECT srid FROM geometry_columns WHERE f_table_name = '%s' AND f_geometry_column = '%s'",
-	     table, column);
-    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
-	  sqlite3_free (errMsg);
-	  return;
-      }
-    for (i = 1; i <= rows; i++)
-      {
-	  srid = atoi (results[(i * columns) + 0]);
-      }
-    sqlite3_free_table (results);
-    if (srid < 0)
-      {
-	  /* srid still undefined, so we'll read VIEWS_GEOMETRY_COLUMNS */
-	  strcpy (sql, "SELECT srid FROM views_geometry_columns ");
-	  strcat (sql,
-		  "JOIN geometry_columns USING (f_table_name, f_geometry_column) ");
-	  sprintf (sql2, "WHERE view_name = '%s' AND view_geometry = '%s'",
-		   table, column);
-	  strcat (sql, sql2);
-	  ret =
-	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
-				 &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
-			 errMsg);
-		sqlite3_free (errMsg);
-		return;
-	    }
-	  for (i = 1; i <= rows; i++)
-	    {
-		srid = atoi (results[(i * columns) + 0]);
-	    }
-	  sqlite3_free_table (results);
-      }
-    if (srid < 0)
-	return;
-
-/* step II: checking if the SRS_WKT column actually exists */
-    ret =
-	sqlite3_get_table (sqlite, "PRAGMA table_info(spatial_ref_sys)",
-			   &results, &rows, &columns, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
-	  sqlite3_free (errMsg);
-	  return;
-      }
-    if (rows < 1)
-	;
-    else
-      {
-	  for (i = 1; i <= rows; i++)
-	    {
-		name = results[(i * columns) + 1];
-		if (strcasecmp (name, "srid") == 0)
-		    rs_srid = 1;
-		if (strcasecmp (name, "auth_name") == 0)
-		    rs_srs_wkt = 1;
-	    }
-      }
-    sqlite3_free_table (results);
-    if (rs_srid == 0 || rs_srs_wkt == 0)
-	return;
-
-/* step III: fetching WKT SRS */
-    *srsWkt = '\0';
-    sprintf (sql,
-	     "SELECT srs_wkt FROM spatial_ref_sys WHERE srid = %d AND srs_wkt IS NOT NULL",
-	     srid);
-    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "dump shapefile MetaData error: <%s>\n", errMsg);
-	  sqlite3_free (errMsg);
-	  return;
-      }
-    if (rows < 1)
-	;
-    else
-      {
-	  for (i = 1; i <= rows; i++)
-	    {
-		strcpy (srsWkt, results[(i * columns) + 0]);
-	    }
-      }
-    sqlite3_free_table (results);
-    if (strlen (srsWkt) == 0)
-	return;
-
-/* step IV: generating the .PRJ file */
-    sprintf (dummy, "%s.prj", path);
-    out = fopen (dummy, "wb");
-    if (!out)
-	goto no_file;
-    fprintf (out, "%s\r\n", srsWkt);
-    fclose (out);
-  no_file:
-    return;
-}
-
-static void
-double_quoted_sql (char *buf)
-{
-/* well-formatting a string to be used as an SQL name */
-    char tmp[1024];
-    char *in = tmp;
-    char *out = buf;
-    strcpy (tmp, buf);
-    *out++ = '"';
-    while (*in != '\0')
-      {
-	  if (*in == '"')
-	      *out++ = '"';
-	  *out++ = *in++;
-      }
-    *out++ = '"';
-    *out = '\0';
-}
-
-SPATIALITE_DECLARE int
-dump_shapefile (sqlite3 * sqlite, char *table, char *column, char *shp_path,
-		char *charset, char *geom_type, int verbose, int *xrows)
-{
-/* SHAPEFILE dump */
-    char sql[1024];
-    char dummy[1024];
-    int shape = -1;
-    int len;
-    int ret;
-    char *errMsg = NULL;
-    sqlite3_stmt *stmt;
-    int row1 = 0;
-    int n_cols = 0;
-    int offset = 0;
-    int i;
-    int rows = 0;
-    int type;
-    const unsigned char *char_value;
-    const void *blob_value;
-    gaiaShapefilePtr shp = NULL;
-    gaiaDbfListPtr dbf_export_list = NULL;
-    gaiaDbfListPtr dbf_list = NULL;
-    gaiaDbfListPtr dbf_write;
-    gaiaDbfFieldPtr dbf_field;
-    gaiaGeomCollPtr geom;
-    int *max_length = NULL;
-    int *sql_type = NULL;
-    if (geom_type)
-      {
-	  /* normalizing required geometry type */
-	  if (strcasecmp ((char *) geom_type, "POINT") == 0)
-	      shape = GAIA_POINT;
-	  if (strcasecmp ((char *) geom_type, "LINESTRING") == 0)
-	      shape = GAIA_LINESTRING;
-	  if (strcasecmp ((char *) geom_type, "POLYGON") == 0)
-	      shape = GAIA_POLYGON;
-	  if (strcasecmp ((char *) geom_type, "MULTIPOINT") == 0)
-	      shape = GAIA_POINT;
-      }
-    if (shape < 0)
-      {
-	  /* preparing SQL statement [no type was explicitly required, so we'll read GEOMETRY_COLUMNS */
-	  char **results;
-	  int rows;
-	  int columns;
-	  int i;
-	  char metatype[256];
-	  char metadims[256];
-	  sprintf (sql,
-		   "SELECT type, coord_dimension FROM geometry_columns WHERE f_table_name = '%s' AND f_geometry_column = '%s'",
-		   table, column);
-	  ret =
-	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
-				 &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
-			 errMsg);
-		sqlite3_free (errMsg);
-		return 0;
-	    }
-	  *metatype = '\0';
-	  *metadims = '\0';
-	  for (i = 1; i <= rows; i++)
-	    {
-		strcpy (metatype, results[(i * columns) + 0]);
-		strcpy (metadims, results[(i * columns) + 1]);
-	    }
-	  sqlite3_free_table (results);
-	  if (strcasecmp (metatype, "POINT") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_POINTZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_POINTM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_POINTZM;
-		else
-		    shape = GAIA_POINT;
-	    }
-	  if (strcasecmp (metatype, "MULTIPOINT") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_MULTIPOINTZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_MULTIPOINTM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_MULTIPOINTZM;
-		else
-		    shape = GAIA_MULTIPOINT;
-	    }
-	  if (strcasecmp (metatype, "LINESTRING") == 0
-	      || strcasecmp (metatype, "MULTILINESTRING") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_LINESTRINGZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_LINESTRINGM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_LINESTRINGZM;
-		else
-		    shape = GAIA_LINESTRING;
-	    }
-	  if (strcasecmp (metatype, "POLYGON") == 0
-	      || strcasecmp (metatype, "MULTIPOLYGON") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_POLYGONZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_POLYGONM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_POLYGONZM;
-		else
-		    shape = GAIA_POLYGON;
-	    }
-      }
-    if (shape < 0)
-      {
-	  /* preparing SQL statement [type still undefined, so we'll read VIEWS_GEOMETRY_COLUMNS */
-	  char **results;
-	  int rows;
-	  int columns;
-	  int i;
-	  char metatype[256];
-	  char metadims[256];
-	  char sql2[1024];
-	  strcpy (sql,
-		  "SELECT type, coord_dimension FROM views_geometry_columns ");
-	  strcat (sql,
-		  "JOIN geometry_columns USING (f_table_name, f_geometry_column) ");
-	  sprintf (sql2, "WHERE view_name = '%s' AND view_geometry = '%s'",
-		   table, column);
-	  strcat (sql, sql2);
-	  ret =
-	      sqlite3_get_table (sqlite, sql, &results, &rows, &columns,
-				 &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "dump shapefile MetaData error: <%s>\n",
-			 errMsg);
-		sqlite3_free (errMsg);
-		return 0;
-	    }
-	  *metatype = '\0';
-	  *metadims = '\0';
-	  for (i = 1; i <= rows; i++)
-	    {
-		strcpy (metatype, results[(i * columns) + 0]);
-		strcpy (metadims, results[(i * columns) + 1]);
-	    }
-	  sqlite3_free_table (results);
-	  if (strcasecmp (metatype, "POINT") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_POINTZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_POINTM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_POINTZM;
-		else
-		    shape = GAIA_POINT;
-	    }
-	  if (strcasecmp (metatype, "MULTIPOINT") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_MULTIPOINTZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_MULTIPOINTM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_MULTIPOINTZM;
-		else
-		    shape = GAIA_MULTIPOINT;
-	    }
-	  if (strcasecmp (metatype, "LINESTRING") == 0
-	      || strcasecmp (metatype, "MULTILINESTRING") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_LINESTRINGZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_LINESTRINGM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_LINESTRINGZM;
-		else
-		    shape = GAIA_LINESTRING;
-	    }
-	  if (strcasecmp (metatype, "POLYGON") == 0
-	      || strcasecmp (metatype, "MULTIPOLYGON") == 0)
-	    {
-		if (strcasecmp (metadims, "XYZ") == 0
-		    || strcmp (metadims, "3") == 0)
-		    shape = GAIA_POLYGONZ;
-		else if (strcasecmp (metadims, "XYM") == 0)
-		    shape = GAIA_POLYGONM;
-		else if (strcasecmp (metadims, "XYZM") == 0)
-		    shape = GAIA_POLYGONZM;
-		else
-		    shape = GAIA_POLYGON;
-	    }
-      }
-    if (shape < 0)
-      {
-	  fprintf (stderr,
-		   "Unable to detect GeometryType for \"%s\".\"%s\" ... sorry\n",
-		   table, column);
-	  return 0;
-      }
-    if (verbose)
-	fprintf (stderr,
-		 "========\nDumping SQLite table '%s' into shapefile at '%s'\n",
-		 table, shp_path);
-    /* preparing SQL statement */
-    sprintf (sql, "SELECT * FROM \"%s\" WHERE GeometryAliasType(\"%s\") = ",
-	     table, column);
-    if (shape == GAIA_LINESTRING || shape == GAIA_LINESTRINGZ
-	|| shape == GAIA_LINESTRINGM || shape == GAIA_LINESTRINGZM)
-      {
-	  strcat (sql, "'LINESTRING' OR GeometryAliasType(\"");
-	  strcat (sql, (char *) column);
-	  strcat (sql, "\") = 'MULTILINESTRING'");
-      }
-    else if (shape == GAIA_POLYGON || shape == GAIA_POLYGONZ
-	     || shape == GAIA_POLYGONM || shape == GAIA_POLYGONZM)
-      {
-	  strcat (sql, "'POLYGON' OR GeometryAliasType(\"");
-	  strcat (sql, (char *) column);
-	  strcat (sql, "\") = 'MULTIPOLYGON'");
-      }
-    else if (shape == GAIA_MULTIPOINT || shape == GAIA_MULTIPOINTZ
-	     || shape == GAIA_MULTIPOINTM || shape == GAIA_MULTIPOINTZM)
-      {
-	  strcat (sql, "'POINT' OR GeometryAliasType(\"");
-	  strcat (sql, (char *) column);
-	  strcat (sql, "\") = 'MULTIPOINT'");
-      }
-    else
-	strcat (sql, "'POINT'");
-/* fetching anyway NULL Geometries */
-    strcat (sql, " OR \"");
-    strcat (sql, (char *) column);
-    strcat (sql, "\" IS NULL");
-/* compiling SQL prepared statement */
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-	goto sql_error;
-    while (1)
-      {
-	  /* Pass I - scrolling the result set to compute real DBF attributes' sizes and types */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		/* processing a result set row */
-		row1++;
-		if (n_cols == 0)
-		  {
-		      /* this one is the first row, so we are going to prepare the DBF Fields list */
-		      n_cols = sqlite3_column_count (stmt);
-		      dbf_export_list = gaiaAllocDbfList ();
-		      max_length = malloc (sizeof (int) * n_cols);
-		      sql_type = malloc (sizeof (int) * n_cols);
-		      for (i = 0; i < n_cols; i++)
-			{
-			    /* initializes the DBF export fields */
-			    strcpy (dummy, sqlite3_column_name (stmt, i));
-			    gaiaAddDbfField (dbf_export_list, dummy, '\0', 0, 0,
-					     0);
-			    max_length[i] = 0;
-			    sql_type[i] = SQLITE_NULL;
-			}
-		  }
-		for (i = 0; i < n_cols; i++)
-		  {
-		      /* update the DBF export fields analyzing fetched data */
-		      type = sqlite3_column_type (stmt, i);
-		      if (type == SQLITE_NULL || type == SQLITE_BLOB)
-			  continue;
-		      if (type == SQLITE_TEXT)
-			{
-			    char_value = sqlite3_column_text (stmt, i);
-			    len = sqlite3_column_bytes (stmt, i);
-			    sql_type[i] = SQLITE_TEXT;
-			    if (len > max_length[i])
-				max_length[i] = len;
-			}
-		      else if (type == SQLITE_FLOAT
-			       && sql_type[i] != SQLITE_TEXT)
-			  sql_type[i] = SQLITE_FLOAT;	/* promoting a numeric column to be DOUBLE */
-		      else if (type == SQLITE_INTEGER &&
-			       (sql_type[i] == SQLITE_NULL
-				|| sql_type[i] == SQLITE_INTEGER))
-			  sql_type[i] = SQLITE_INTEGER;	/* promoting a null column to be INTEGER */
-		      if (type == SQLITE_INTEGER && max_length[i] < 18)
-			  max_length[i] = 18;
-		      if (type == SQLITE_FLOAT && max_length[i] < 24)
-			  max_length[i] = 24;
-		  }
-	    }
-	  else
-	      goto sql_error;
-      }
-    if (!row1)
-	goto empty_result_set;
-    i = 0;
-    offset = 0;
-    dbf_list = gaiaAllocDbfList ();
-    dbf_field = dbf_export_list->First;
-    while (dbf_field)
-      {
-	  /* preparing the final DBF attribute list */
-	  if (sql_type[i] == SQLITE_NULL)
-	    {
-		i++;
-		dbf_field = dbf_field->Next;
-		continue;
-	    }
-	  if (sql_type[i] == SQLITE_TEXT)
-	    {
-		gaiaAddDbfField (dbf_list, dbf_field->Name, 'C', offset,
-				 max_length[i], 0);
-		offset += max_length[i];
-	    }
-	  if (sql_type[i] == SQLITE_FLOAT)
-	    {
-		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 19, 6);
-		offset += 19;
-	    }
-	  if (sql_type[i] == SQLITE_INTEGER)
-	    {
-		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 18, 0);
-		offset += 18;
-	    }
-	  i++;
-	  dbf_field = dbf_field->Next;
-      }
-    free (max_length);
-    free (sql_type);
-    gaiaFreeDbfList (dbf_export_list);
-/* resetting SQLite query */
-    if (verbose)
-	fprintf (stderr, "\n%s;\n", sql);
-    ret = sqlite3_reset (stmt);
-    if (ret != SQLITE_OK)
-	goto sql_error;
-/* trying to open shapefile files */
-    shp = gaiaAllocShapefile ();
-    gaiaOpenShpWrite (shp, shp_path, shape, dbf_list, "UTF-8", charset);
-    if (!(shp->Valid))
-	goto no_file;
-/* trying to export the .PRJ file */
-    output_prj_file (sqlite, shp_path, table, column);
-    while (1)
-      {
-	  /* Pass II - scrolling the result set to dump data into shapefile */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		rows++;
-		geom = NULL;
-		dbf_write = gaiaCloneDbfEntity (dbf_list);
-		for (i = 0; i < n_cols; i++)
-		  {
-		      if (strcasecmp
-			  ((char *) column,
-			   (char *) sqlite3_column_name (stmt, i)) == 0)
-			{
-			    /* this one is the internal BLOB encoded GEOMETRY to be exported */
-			    if (sqlite3_column_type (stmt, i) != SQLITE_BLOB)
-			      {
-				  /* this one is a NULL Geometry */
-				  dbf_write->Geometry = NULL;
-			      }
-			    else
-			      {
-				  blob_value = sqlite3_column_blob (stmt, i);
-				  len = sqlite3_column_bytes (stmt, i);
-				  dbf_write->Geometry =
-				      gaiaFromSpatiaLiteBlobWkb (blob_value,
-								 len);
-			      }
-			}
-		      strcpy (dummy, sqlite3_column_name (stmt, i));
-		      dbf_field = getDbfField (dbf_write, dummy);
-		      if (!dbf_field)
-			  continue;
-		      if (sqlite3_column_type (stmt, i) == SQLITE_NULL)
-			{
-			    /* handling NULL values */
-			    gaiaSetNullValue (dbf_field);
-			}
-		      else
-			{
-			    switch (dbf_field->Type)
-			      {
-			      case 'N':
-				  if (sqlite3_column_type (stmt, i) ==
-				      SQLITE_INTEGER)
-				      gaiaSetIntValue (dbf_field,
-						       sqlite3_column_int64
-						       (stmt, i));
-				  else if (sqlite3_column_type (stmt, i) ==
-					   SQLITE_FLOAT)
-				      gaiaSetDoubleValue (dbf_field,
-							  sqlite3_column_double
-							  (stmt, i));
-				  else
-				      gaiaSetNullValue (dbf_field);
-				  break;
-			      case 'C':
-				  if (sqlite3_column_type (stmt, i) ==
-				      SQLITE_TEXT)
-				    {
-					strcpy (dummy,
-						(char *)
-						sqlite3_column_text (stmt, i));
-					gaiaSetStrValue (dbf_field, dummy);
-				    }
-				  else if (sqlite3_column_type (stmt, i) ==
-					   SQLITE_INTEGER)
-				    {
-#if defined(_WIN32) || defined(__MINGW32__)
-					/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
-					sprintf (dummy, "%I64d",
-						 sqlite3_column_int64 (stmt,
-								       i));
-#else
-					sprintf (dummy, "%lld",
-						 sqlite3_column_int64 (stmt,
-								       i));
-#endif
-					gaiaSetStrValue (dbf_field, dummy);
-				    }
-				  else if (sqlite3_column_type (stmt, i) ==
-					   SQLITE_FLOAT)
-				    {
-					sprintf (dummy, "%1.6f",
-						 sqlite3_column_double (stmt,
-									i));
-					gaiaSetStrValue (dbf_field, dummy);
-				    }
-				  else
-				      gaiaSetNullValue (dbf_field);
-				  break;
-			      };
-			}
-		  }
-		if (!gaiaWriteShpEntity (shp, dbf_write))
-		    fprintf (stderr, "shapefile write error\n");
-		gaiaFreeDbfList (dbf_write);
-	    }
-	  else
-	      goto sql_error;
-      }
-    sqlite3_finalize (stmt);
-    gaiaFlushShpHeaders (shp);
-    gaiaFreeShapefile (shp);
-    if (verbose)
-	fprintf (stderr, "\nExported %d rows into SHAPEFILE\n========\n", rows);
-    if (xrows)
-	*xrows = rows;
-    return 1;
-  sql_error:
-/* some SQL error occurred */
-    sqlite3_finalize (stmt);
-    if (dbf_export_list)
-	gaiaFreeDbfList (dbf_export_list);
-    if (dbf_list)
-	gaiaFreeDbfList (dbf_list);
-    if (shp)
-	gaiaFreeShapefile (shp);
-    fprintf (stderr, "SELECT failed: %s", sqlite3_errmsg (sqlite));
-    return 0;
-  no_file:
-/* shapefile can't be created/opened */
-    if (dbf_export_list)
-	gaiaFreeDbfList (dbf_export_list);
-    if (dbf_list)
-	gaiaFreeDbfList (dbf_list);
-    if (shp)
-	gaiaFreeShapefile (shp);
-    fprintf (stderr, "ERROR: unable to open '%s' for writing", shp_path);
-    return 0;
-  empty_result_set:
-/* the result set is empty - nothing to do */
-    sqlite3_finalize (stmt);
-    if (dbf_export_list)
-	gaiaFreeDbfList (dbf_export_list);
-    if (dbf_list)
-	gaiaFreeDbfList (dbf_list);
-    if (shp)
-	gaiaFreeShapefile (shp);
-    fprintf (stderr,
-	     "The SQL SELECT returned an empty result set ... there is nothing to export ...");
-    return 0;
-}
-
-SPATIALITE_DECLARE int
-load_dbf (sqlite3 * sqlite, char *dbf_path, char *table, char *charset,
-	  int verbose, int *rows)
-{
-    sqlite3_stmt *stmt;
-    int ret;
-    char *errMsg = NULL;
-    char sql[65536];
-    char dummyName[4096];
-    int already_exists = 0;
-    int sqlError = 0;
-    gaiaDbfPtr dbf = NULL;
-    gaiaDbfFieldPtr dbf_field;
-    int cnt;
-    int col_cnt;
-    int seed;
-    int len;
-    int dup;
-    int idup;
-    int current_row;
-    char **col_name = NULL;
-    int deleted;
-/* checking if TABLE already exists */
-    sprintf (sql,
-	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
-	     table);
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load DBF error: <%s>\n", sqlite3_errmsg (sqlite));
-	  return 0;
-      }
-    while (1)
-      {
-	  /* scrolling the result set */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	      already_exists = 1;
-	  else
-	    {
-		fprintf (stderr, "load DBF error: <%s>\n",
-			 sqlite3_errmsg (sqlite));
-		break;
-	    }
-      }
-    sqlite3_finalize (stmt);
-    if (already_exists)
-      {
-	  fprintf (stderr, "load DBF error: table '%s' already exists\n",
-		   table);
-	  return 0;
-      }
-    dbf = gaiaAllocDbf ();
-    gaiaOpenDbfRead (dbf, dbf_path, charset, "UTF-8");
-    if (!(dbf->Valid))
-      {
-	  fprintf (stderr, "load DBF error: cannot open '%s'\n", dbf_path);
-	  if (dbf->LastError)
-	      fprintf (stderr, "\tcause: %s\n", dbf->LastError);
-	  gaiaFreeDbf (dbf);
-	  return 0;
-      }
-/* checking for duplicate / illegal column names and antialising them */
-    col_cnt = 0;
-    dbf_field = dbf->Dbf->First;
-    while (dbf_field)
-      {
-	  /* counting DBF fields */
-	  col_cnt++;
-	  dbf_field = dbf_field->Next;
-      }
-    col_name = malloc (sizeof (char *) * col_cnt);
-    cnt = 0;
-    seed = 0;
-    dbf_field = dbf->Dbf->First;
-    while (dbf_field)
-      {
-	  /* preparing column names */
-	  strcpy (dummyName, dbf_field->Name);
-	  dup = 0;
-	  for (idup = 0; idup < cnt; idup++)
-	    {
-		if (strcasecmp (dummyName, *(col_name + idup)) == 0)
-		    dup = 1;
-	    }
-	  if (strcasecmp (dummyName, "PK_UID") == 0)
-	      dup = 1;
-	  if (dup)
-	      sprintf (dummyName, "COL_%d", seed++);
-	  len = strlen (dummyName);
-	  *(col_name + cnt) = malloc (len + 1);
-	  strcpy (*(col_name + cnt), dummyName);
-	  cnt++;
-	  dbf_field = dbf_field->Next;
-      }
-    if (verbose)
-	fprintf (stderr,
-		 "========\nLoading DBF at '%s' into SQLite table '%s'\n",
-		 dbf_path, table);
-/* starting a transaction */
-    if (verbose)
-	fprintf (stderr, "\nBEGIN;\n");
-    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load DBF error: <%s>\n", errMsg);
-	  sqlite3_free (errMsg);
-	  sqlError = 1;
-	  goto clean_up;
-      }
-/* creating the Table */
-    sprintf (sql, "CREATE TABLE %s", table);
-    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
-    cnt = 0;
-    dbf_field = dbf->Dbf->First;
-    while (dbf_field)
-      {
-	  strcat (sql, ",\n\"");
-	  strcat (sql, *(col_name + cnt));
-	  cnt++;
-	  switch (dbf_field->Type)
-	    {
-	    case 'C':
-		strcat (sql, "\" TEXT");
-		break;
-	    case 'N':
-		fflush (stderr);
-		if (dbf_field->Decimals)
-		    strcat (sql, "\" DOUBLE");
-		else
-		  {
-		      if (dbf_field->Length <= 18)
-			  strcat (sql, "\" INTEGER");
-		      else
-			  strcat (sql, "\" DOUBLE");
-		  }
-		break;
-	    case 'D':
-		strcat (sql, "\" DOUBLE");
-		break;
-	    case 'F':
-		strcat (sql, "\" DOUBLE");
-		break;
-	    case 'L':
-		strcat (sql, "\" INTEGER");
-		break;
-	    };
-	  dbf_field = dbf_field->Next;
-      }
-    strcat (sql, ")");
-    if (verbose)
-	fprintf (stderr, "%s;\n", sql);
-    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load DBF error: <%s>\n", errMsg);
-	  sqlite3_free (errMsg);
-	  sqlError = 1;
-	  goto clean_up;
-      }
-    /* preparing the INSERT INTO parametrerized statement */
-    sprintf (sql, "INSERT INTO %s (PK_UID", table);
-    cnt = 0;
-    dbf_field = dbf->Dbf->First;
-    while (dbf_field)
-      {
-	  /* columns corresponding to some DBF attribute */
-	  strcat (sql, ",\"");
-	  strcat (sql, *(col_name + cnt++));
-	  strcat (sql, "\"");
-	  dbf_field = dbf_field->Next;
-      }
-    strcat (sql, ")\nVALUES (?");
-    dbf_field = dbf->Dbf->First;
-    while (dbf_field)
-      {
-	  /* column values */
-	  strcat (sql, ", ?");
-	  dbf_field = dbf_field->Next;
-      }
-    strcat (sql, ")");
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load DBF error: <%s>\n", sqlite3_errmsg (sqlite));
-	  sqlError = 1;
-	  goto clean_up;
-      }
-    current_row = 0;
-    while (1)
-      {
-	  /* inserting rows from DBF */
-	  ret = gaiaReadDbfEntity (dbf, current_row, &deleted);
-	  if (!ret)
-	    {
-		if (!(dbf->LastError))	/* normal DBF EOF */
-		    break;
-		fprintf (stderr, "%s\n", dbf->LastError);
-		sqlError = 1;
-		goto clean_up;
-	    }
-	  current_row++;
-	  if (deleted)
-	    {
-		/* skipping DBF deleted row */
-		continue;
-	    }
-	  /* binding query params */
-	  sqlite3_reset (stmt);
-	  sqlite3_clear_bindings (stmt);
-	  sqlite3_bind_int (stmt, 1, current_row);
-	  cnt = 0;
-	  dbf_field = dbf->Dbf->First;
-	  while (dbf_field)
-	    {
-		/* column values */
-		if (!(dbf_field->Value))
-		    sqlite3_bind_null (stmt, cnt + 2);
-		else
-		  {
-		      switch (dbf_field->Value->Type)
-			{
-			case GAIA_INT_VALUE:
-			    sqlite3_bind_int64 (stmt, cnt + 2,
-						dbf_field->Value->IntValue);
-			    break;
-			case GAIA_DOUBLE_VALUE:
-			    sqlite3_bind_double (stmt, cnt + 2,
-						 dbf_field->Value->DblValue);
-			    break;
-			case GAIA_TEXT_VALUE:
-			    sqlite3_bind_text (stmt, cnt + 2,
-					       dbf_field->Value->TxtValue,
-					       strlen (dbf_field->
-						       Value->TxtValue),
-					       SQLITE_STATIC);
-			    break;
-			default:
-			    sqlite3_bind_null (stmt, cnt + 2);
-			    break;
-			}
-		  }
-		cnt++;
-		dbf_field = dbf_field->Next;
-	    }
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
-	      ;
-	  else
-	    {
-		fprintf (stderr, "load DBF error: <%s>\n",
-			 sqlite3_errmsg (sqlite));
-		sqlite3_finalize (stmt);
-		sqlError = 1;
-		goto clean_up;
-	    }
-      }
-    sqlite3_finalize (stmt);
-  clean_up:
-    gaiaFreeDbf (dbf);
-    if (col_name)
-      {
-	  /* releasing memory allocation for column names */
-	  for (cnt = 0; cnt < col_cnt; cnt++)
-	      free (*(col_name + cnt));
-	  free (col_name);
-      }
-    if (sqlError)
-      {
-	  /* some error occurred - ROLLBACK */
-	  if (verbose)
-	      fprintf (stderr, "ROLLBACK;\n");
-	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "load DBF error: <%s>\n", errMsg);
-		sqlite3_free (errMsg);
-	    }
-	  if (rows)
-	      *rows = current_row;
-	  return 0;
-      }
-    else
-      {
-	  /* ok - confirming pending transaction - COMMIT */
-	  if (verbose)
-	      fprintf (stderr, "COMMIT;\n");
-	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "load DBF error: <%s>\n", errMsg);
-		sqlite3_free (errMsg);
-		return 0;
-	    }
-	  if (rows)
-	      *rows = current_row;
-	  if (verbose)
-	      fprintf (stderr,
-		       "\nInserted %d rows into '%s' from DBF\n========\n",
-		       current_row, table);
-	  return 1;
-      }
-}
-
-SPATIALITE_DECLARE int
-dump_dbf (sqlite3 * sqlite, char *table, char *dbf_path, char *charset)
-{
-/* DBF dump */
-    int rows;
-    int i;
-    char sql[4096];
-    char xtable[4096];
-    sqlite3_stmt *stmt;
-    int row1 = 0;
-    int n_cols = 0;
-    int offset = 0;
-    int type;
-    const unsigned char *char_value;
-    gaiaDbfPtr dbf = NULL;
-    gaiaDbfListPtr dbf_export_list = NULL;
-    gaiaDbfListPtr dbf_list = NULL;
-    gaiaDbfListPtr dbf_write;
-    gaiaDbfFieldPtr dbf_field;
-    int *max_length = NULL;
-    int *sql_type = NULL;
-    char dummy[1024];
-    int len;
-    int ret;
-/*
-/ preparing SQL statement 
-*/
-    strcpy (xtable, table);
-    double_quoted_sql (xtable);
-    sprintf (sql, "SELECT * FROM %s", xtable);
-/*
-/ compiling SQL prepared statement 
-*/
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-	goto sql_error;
-    rows = 0;
-    while (1)
-      {
-	  /*
-	     / Pass I - scrolling the result set to compute real DBF attributes' sizes and types 
-	   */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		/* processing a result set row */
-		row1++;
-		if (n_cols == 0)
-		  {
-		      /* this one is the first row, so we are going to prepare the DBF Fields list */
-		      n_cols = sqlite3_column_count (stmt);
-		      dbf_export_list = gaiaAllocDbfList ();
-		      max_length = (int *) malloc (sizeof (int) * n_cols);
-		      sql_type = (int *) malloc (sizeof (int) * n_cols);
-		      for (i = 0; i < n_cols; i++)
-			{
-			    /* initializes the DBF export fields */
-			    strcpy (dummy, sqlite3_column_name (stmt, i));
-			    gaiaAddDbfField (dbf_export_list, dummy, '\0', 0, 0,
-					     0);
-			    max_length[i] = 0;
-			    sql_type[i] = SQLITE_NULL;
-			}
-		  }
-		for (i = 0; i < n_cols; i++)
-		  {
-		      /* update the DBF export fields analyzing fetched data */
-		      type = sqlite3_column_type (stmt, i);
-		      if (type == SQLITE_NULL || type == SQLITE_BLOB)
-			  continue;
-		      if (type == SQLITE_TEXT)
-			{
-			    char_value = sqlite3_column_text (stmt, i);
-			    len = sqlite3_column_bytes (stmt, i);
-			    sql_type[i] = SQLITE_TEXT;
-			    if (len > max_length[i])
-				max_length[i] = len;
-			}
-		      else if (type == SQLITE_FLOAT
-			       && sql_type[i] != SQLITE_TEXT)
-			  sql_type[i] = SQLITE_FLOAT;	/* promoting a numeric column to be DOUBLE */
-		      else if (type == SQLITE_INTEGER
-			       && (sql_type[i] == SQLITE_NULL
-				   || sql_type[i] == SQLITE_INTEGER))
-			  sql_type[i] = SQLITE_INTEGER;	/* promoting a null column to be INTEGER */
-		      if (type == SQLITE_INTEGER && max_length[i] < 18)
-			  max_length[i] = 18;
-		      if (type == SQLITE_FLOAT && max_length[i] < 24)
-			  max_length[i] = 24;
-		  }
-	    }
-	  else
-	      goto sql_error;
-      }
-    if (!row1)
-	goto empty_result_set;
-    i = 0;
-    offset = 0;
-    dbf_list = gaiaAllocDbfList ();
-    dbf_field = dbf_export_list->First;
-    while (dbf_field)
-      {
-	  /* preparing the final DBF attribute list */
-	  if (sql_type[i] == SQLITE_NULL || sql_type[i] == SQLITE_BLOB)
-	    {
-		i++;
-		dbf_field = dbf_field->Next;
-		continue;
-	    }
-	  if (sql_type[i] == SQLITE_TEXT)
-	    {
-		gaiaAddDbfField (dbf_list, dbf_field->Name, 'C', offset,
-				 max_length[i], 0);
-		offset += max_length[i];
-	    }
-	  if (sql_type[i] == SQLITE_FLOAT)
-	    {
-		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 19, 6);
-		offset += 19;
-	    }
-	  if (sql_type[i] == SQLITE_INTEGER)
-	    {
-		gaiaAddDbfField (dbf_list, dbf_field->Name, 'N', offset, 18, 0);
-		offset += 18;
-	    }
-	  i++;
-	  dbf_field = dbf_field->Next;
-      }
-    free (max_length);
-    free (sql_type);
-    gaiaFreeDbfList (dbf_export_list);
-    dbf_export_list = NULL;
-/* resetting SQLite query */
-    ret = sqlite3_reset (stmt);
-    if (ret != SQLITE_OK)
-	goto sql_error;
-/* trying to open the DBF file */
-    dbf = gaiaAllocDbf ();
-/* xfering export-list ownership */
-    dbf->Dbf = dbf_list;
-    dbf_list = NULL;
-    gaiaOpenDbfWrite (dbf, dbf_path, "UTF-8", charset);
-    if (!(dbf->Valid))
-	goto no_file;
-    while (1)
-      {
-	  /* Pass II - scrolling the result set to dump data into DBF */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		rows++;
-		dbf_write = gaiaCloneDbfEntity (dbf->Dbf);
-		for (i = 0; i < n_cols; i++)
-		  {
-		      strcpy (dummy, sqlite3_column_name (stmt, i));
-		      dbf_field = getDbfField (dbf_write, dummy);
-		      if (!dbf_field)
-			  continue;
-		      if (sqlite3_column_type (stmt, i) == SQLITE_NULL
-			  || sqlite3_column_type (stmt, i) == SQLITE_BLOB)
-			{
-			    /* handling NULL values */
-			    gaiaSetNullValue (dbf_field);
-			}
-		      else
-			{
-			    switch (dbf_field->Type)
-			      {
-			      case 'N':
-				  if (sqlite3_column_type (stmt, i) ==
-				      SQLITE_INTEGER)
-				      gaiaSetIntValue (dbf_field,
-						       sqlite3_column_int64
-						       (stmt, i));
-				  else if (sqlite3_column_type (stmt, i) ==
-					   SQLITE_FLOAT)
-				      gaiaSetDoubleValue (dbf_field,
-							  sqlite3_column_double
-							  (stmt, i));
-				  else
-				      gaiaSetNullValue (dbf_field);
-				  break;
-			      case 'C':
-				  if (sqlite3_column_type (stmt, i) ==
-				      SQLITE_TEXT)
-				    {
-					strcpy (dummy,
-						(char *)
-						sqlite3_column_text (stmt, i));
-					gaiaSetStrValue (dbf_field, dummy);
-				    }
-				  else if (sqlite3_column_type (stmt, i) ==
-					   SQLITE_INTEGER)
-				    {
-#if defined(_WIN32) || defined(__MINGW32__)
-					/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
-					sprintf (dummy, "%I64d",
-						 sqlite3_column_int64 (stmt,
-								       i));
-#else
-					sprintf (dummy, "%lld",
-						 sqlite3_column_int64 (stmt,
-								       i));
-#endif
-					gaiaSetStrValue (dbf_field, dummy);
-				    }
-				  else if (sqlite3_column_type (stmt, i) ==
-					   SQLITE_FLOAT)
-				    {
-					sprintf (dummy, "%1.6f",
-						 sqlite3_column_double (stmt,
-									i));
-					gaiaSetStrValue (dbf_field, dummy);
-				    }
-				  else
-				      gaiaSetNullValue (dbf_field);
-				  break;
-			      };
-			}
-		  }
-		if (!gaiaWriteDbfEntity (dbf, dbf_write))
-		    fprintf (stderr, "DBF write error\n");
-		gaiaFreeDbfList (dbf_write);
-	    }
-	  else
-	      goto sql_error;
-      }
-    sqlite3_finalize (stmt);
-    gaiaFlushDbfHeader (dbf);
-    gaiaFreeDbf (dbf);
-    fprintf (stderr, "Exported %d rows into the DBF file\n", rows);
-    return 1;
-  sql_error:
-/* some SQL error occurred */
-    sqlite3_finalize (stmt);
-    if (dbf_export_list)
-	gaiaFreeDbfList (dbf_export_list);
-    if (dbf_list)
-	gaiaFreeDbfList (dbf_list);
-    if (dbf)
-	gaiaFreeDbf (dbf);
-    fprintf (stderr, "dump DBF file error: %s\n", sqlite3_errmsg (sqlite));
-    return 0;
-  no_file:
-/* DBF can't be created/opened */
-    if (dbf_export_list)
-	gaiaFreeDbfList (dbf_export_list);
-    if (dbf_list)
-	gaiaFreeDbfList (dbf_list);
-    if (dbf)
-	gaiaFreeDbf (dbf);
-    fprintf (stderr, "ERROR: unable to open '%s' for writing\n", dbf_path);
-    return 0;
-  empty_result_set:
-/* the result set is empty - nothing to do */
-    sqlite3_finalize (stmt);
-    if (dbf_export_list)
-	gaiaFreeDbfList (dbf_export_list);
-    if (dbf_list)
-	gaiaFreeDbfList (dbf_list);
-    if (dbf)
-	gaiaFreeDbf (dbf);
-    fprintf (stderr,
-	     "The SQL SELECT returned an empty result set ... there is nothing to export ...\n");
-    return 0;
-}
-
-SPATIALITE_DECLARE int
-is_kml_constant (sqlite3 * sqlite, char *table, char *column)
-{
-/* checking a possible column name for KML dump */
-    char sql[1024];
-    int ret;
-    int k = 1;
-    const char *name;
-    char **results;
-    int rows;
-    int columns;
-    int i;
-    char *errMsg = NULL;
-
-    sprintf (sql, "PRAGMA table_info(%s)", table);
-    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
-    if (ret != SQLITE_OK)
-	return 1;
-    if (rows < 1)
-	;
-    else
-      {
-	  for (i = 1; i <= rows; i++)
-	    {
-		name = results[(i * columns) + 1];
-		if (strcasecmp (name, column) == 0)
-		    k = 0;
-	    }
-      }
-    sqlite3_free_table (results);
-    return k;
-}
-
-SPATIALITE_DECLARE int
-dump_kml (sqlite3 * sqlite, char *table, char *geom_col, char *kml_path,
-	  char *name_col, char *desc_col, int precision)
-{
-/* dumping a  geometry table as KML */
-    char sql[4096];
-    char xname[1024];
-    char xdesc[1024];
-    sqlite3_stmt *stmt = NULL;
-    FILE *out = NULL;
-    int ret;
-    int rows = 0;
-    int is_const = 1;
-
-/* opening/creating the KML file */
-    out = fopen (kml_path, "wb");
-    if (!out)
-	goto no_file;
-
-/* preparing SQL statement */
-    if (name_col == NULL)
-	strcpy (xname, "'name'");
-    else
-      {
-	  is_const = is_kml_constant (sqlite, table, name_col);
-	  if (is_const)
-	      sprintf (xname, "'%s'", name_col);
-	  else
-	      strcpy (xname, name_col);
-      }
-    if (desc_col == NULL)
-	strcpy (xdesc, "'description'");
-    else
-      {
-	  is_const = is_kml_constant (sqlite, table, desc_col);
-	  if (is_const)
-	      sprintf (xdesc, "'%s'", desc_col);
-	  else
-	      strcpy (xdesc, desc_col);
-      }
-    sprintf (sql, "SELECT AsKML(%s, %s, %s, %d) FROM %s ", xname, xdesc,
-	     geom_col, precision, table);
-/* excluding NULL Geometries */
-    strcat (sql, "WHERE ");
-    strcat (sql, geom_col);
-    strcat (sql, " IS NOT NULL");
-/* compiling SQL prepared statement */
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-	goto sql_error;
-
-    while (1)
-      {
-	  /* scrolling the result set */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		/* processing a result set row */
-		if (rows == 0)
-		  {
-		      fprintf (out,
-			       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
-		      fprintf (out,
-			       "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\r\n");
-		      fprintf (out, "<Document>\r\n");
-		  }
-		rows++;
-		fprintf (out, "\t%s\r\n", sqlite3_column_text (stmt, 0));
-	    }
-	  else
-	      goto sql_error;
-      }
-    if (!rows)
-	goto empty_result_set;
-
-
-    fprintf (out, "</Document>\r\n");
-    fprintf (out, "</kml>\r\n");
-    sqlite3_finalize (stmt);
-    fclose (out);
-    return 1;
-
-  sql_error:
-/* some SQL error occurred */
-    if (stmt)
-	sqlite3_finalize (stmt);
-    if (out)
-	fclose (out);
-    sqlite3_finalize (stmt);
-    fprintf (stderr, "Dump KML error: %s\n", sqlite3_errmsg (sqlite));
-    return 0;
-  no_file:
-/* KML file can't be created/opened */
-    if (stmt)
-	sqlite3_finalize (stmt);
-    if (out)
-	fclose (out);
-    fprintf (stderr, "ERROR: unable to open '%s' for writing\n", kml_path);
-    return 0;
-  empty_result_set:
-/* the result set is empty - nothing to do */
-    if (stmt)
-	sqlite3_finalize (stmt);
-    if (out)
-	fclose (out);
-    fprintf (stderr,
-	     "The SQL SELECT returned an empty result set\n... there is nothing to export ...\n");
-    return 0;
-}
-
-static int
-is_table (sqlite3 * sqlite, const char *table)
-{
-/* check if this one really is a TABLE */
-    char sql[8192];
-    int ret;
-    char **results;
-    int rows;
-    int columns;
-    char *errMsg = NULL;
-    int ok = 0;
-
-    strcpy (sql, "SELECT tbl_name FROM sqlite_master ");
-    strcat (sql, "WHERE type = 'table' AND tbl_name LIKE '");
-    strcat (sql, table);
-    strcat (sql, "'");
-    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
-	  sqlite3_free (errMsg);
-	  return ok;
-      }
-    if (rows < 1)
-	;
-    else
-	ok = 1;
-    sqlite3_free_table (results);
-    return ok;
-}
-
-SPATIALITE_DECLARE void
-check_duplicated_rows (sqlite3 * sqlite, char *table)
-{
-/* Checking a Table for Duplicate rows */
-    char sql[8192];
-    char col_list[4196];
-    int first = 1;
-    char xname[1024];
-    int pk;
-    int ret;
-    char **results;
-    int rows;
-    int columns;
-    int i;
-    char *errMsg = NULL;
-    sqlite3_stmt *stmt = NULL;
-    int count = 0;
-
-    if (is_table (sqlite, table) == 0)
-      {
-	  fprintf (stderr, ".chkdupl %s: no such table\n", table);
-	  return;
-      }
-/* extracting the column names (excluding any Primary Key) */
-    sprintf (sql, "PRAGMA table_info(%s)", table);
-    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
-	  sqlite3_free (errMsg);
-	  return;
-      }
-    if (rows < 1)
-	;
-    else
-      {
-	  *col_list = '\0';
-	  for (i = 1; i <= rows; i++)
-	    {
-		strcpy (xname, results[(i * columns) + 1]);
-		pk = atoi (results[(i * columns) + 5]);
-		if (!pk)
-		  {
-		      if (first)
-			  first = 0;
-		      else
-			  strcat (col_list, ", ");
-		      double_quoted_sql (xname);
-		      strcat (col_list, xname);
-		  }
-	    }
-      }
-    sqlite3_free_table (results);
-    /* preparing the SQL statement */
-    strcpy (sql, "SELECT Count(*) AS \"[dupl-count]\", ");
-    strcat (sql, col_list);
-    strcat (sql, "\nFROM ");
-    strcat (sql, table);
-    strcat (sql, "\nGROUP BY ");
-    strcat (sql, col_list);
-    strcat (sql, "\nHAVING \"[dupl-count]\" > 1");
-    strcat (sql, "\nORDER BY \"[dupl-count]\" DESC");
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
-	  return;
-      }
-    while (1)
-      {
-	  /* fetching the result set rows */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		/* fetching a row */
-		count += sqlite3_column_int (stmt, 0) - 1;
-	    }
-	  else
-	    {
-		fprintf (stderr, "SQL error: %s", sqlite3_errmsg (sqlite));
-		sqlite3_finalize (stmt);
-		return;
-	    }
-      }
-    sqlite3_finalize (stmt);
-    if (count)
-	fprintf (stderr, "%d duplicated rows found !!!\n", count);
-    else
-	fprintf (stderr, "No duplicated rows have been identified\n");
-}
-
-static int
-do_delete_duplicates2 (sqlite3 * sqlite, sqlite3_stmt * stmt1,
-		       struct dupl_row *value_list, int *count)
-{
-/* deleting duplicate rows [actual delete] */
-    int cnt = 0;
-    int row_no = 0;
-    char sql[8192];
-    char where[4196];
-    char condition[1024];
-    int ret;
-    sqlite3_stmt *stmt2 = NULL;
-    struct dupl_column *col;
-    int first = 1;
-    int qcnt = 0;
-    int param = 1;
-    int match;
-    int n_cols;
-    int col_no;
-
-    *count = 0;
-    reset_query_pos (value_list);
-
-/* preparing the query statement */
-    strcpy (sql, "SELECT ROWID");
-    strcpy (where, "\nWHERE ");
-    col = value_list->first;
-    while (col)
-      {
-	  if (col->type == SQLITE_BLOB)
-	    {
-		strcat (sql, ", ");
-		strcat (sql, col->name);
-		col->query_pos = qcnt++;
-	    }
-	  else if (col->type == SQLITE_NULL)
-	    {
-		if (first)
-		  {
-		      first = 0;
-		      strcpy (condition, col->name);
-		  }
-		else
-		  {
-		      strcpy (condition, " AND ");
-		      strcat (condition, col->name);
-		  }
-		strcat (condition, " IS NULL");
-		strcat (where, condition);
-	    }
-	  else
-	    {
-		if (first)
-		  {
-		      first = 0;
-		      strcpy (condition, col->name);
-		  }
-		else
-		  {
-		      strcpy (condition, " AND ");
-		      strcat (condition, col->name);
-		  }
-		strcat (condition, " = ?");
-		strcat (where, condition);
-		col->query_pos = param++;
-	    }
-	  col = col->next;
-      }
-    strcat (sql, "\nFROM ");
-    strcat (sql, value_list->table);
-    strcat (sql, where);
-
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt2, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
-	  goto error;
-      }
-
-    sqlite3_reset (stmt2);
-    sqlite3_clear_bindings (stmt2);
-    col = value_list->first;
-    while (col)
-      {
-	  /* binding query params */
-	  if (col->type == SQLITE_INTEGER)
-	      sqlite3_bind_int64 (stmt2, col->query_pos, col->int_value);
-	  if (col->type == SQLITE_FLOAT)
-	      sqlite3_bind_double (stmt2, col->query_pos, col->dbl_value);
-	  if (col->type == SQLITE_TEXT)
-	      sqlite3_bind_text (stmt2, col->query_pos, col->txt_value,
-				 strlen (col->txt_value), SQLITE_STATIC);
-	  col = col->next;
-      }
-
-    while (1)
-      {
-	  /* fetching the result set rows */
-	  ret = sqlite3_step (stmt2);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		/* fetching a row */
-		match = 1;
-		n_cols = sqlite3_column_count (stmt2);
-		for (col_no = 1; col_no < n_cols; col_no++)
-		  {
-		      /* checking blob columns */
-		      if (sqlite3_column_type (stmt2, col_no) == SQLITE_BLOB)
-			{
-			    const void *blob =
-				sqlite3_column_blob (stmt2, col_no);
-			    int blob_size =
-				sqlite3_column_bytes (stmt2, col_no);
-			    if (check_dupl_blob
-				(value_list, col_no - 1, blob, blob_size) == 0)
-				match = 0;
-			}
-		      else
-			  match = 0;
-		      if (match == 0)
-			  break;
-		  }
-		if (match == 0)
-		    continue;
-		row_no++;
-		if (row_no > 1)
-		  {
-		      /* deleting any duplicated row except the first one */
-		      sqlite3_reset (stmt1);
-		      sqlite3_clear_bindings (stmt1);
-		      sqlite3_bind_int64 (stmt1, 1,
-					  sqlite3_column_int64 (stmt2, 0));
-		      ret = sqlite3_step (stmt1);
-		      if (ret == SQLITE_DONE || ret == SQLITE_ROW)
-			  cnt++;
-		      else
-			{
-			    fprintf (stderr, "SQL error: %s\n",
-				     sqlite3_errmsg (sqlite));
-			    goto error;
-			}
-		  }
-	    }
-	  else
-	    {
-		fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
-		goto error;
-	    }
-      }
-    if (stmt2)
-	sqlite3_finalize (stmt2);
-    *count = cnt;
-    return 1;
-
-  error:
-    if (stmt2)
-	sqlite3_finalize (stmt2);
-    *count = 0;
-
-    return 0;
-}
-
-static int
-do_delete_duplicates (sqlite3 * sqlite, const char *sql1, const char *sql2,
-		      struct dupl_row *value_list, int *count)
-{
-/* deleting duplicate rows */
-    sqlite3_stmt *stmt1 = NULL;
-    sqlite3_stmt *stmt2 = NULL;
-    int ret;
-    int xcnt;
-    int cnt = 0;
-    int n_cols;
-    int col_no;
-    char *sql_err = NULL;
-
-    *count = 0;
-
-/* the complete operation is handled as an unique SQL Transaction */
-    ret = sqlite3_exec (sqlite, "BEGIN", NULL, NULL, &sql_err);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err);
-	  sqlite3_free (sql_err);
-	  return 0;
-      }
-/* preparing the main SELECT statement */
-    ret = sqlite3_prepare_v2 (sqlite, sql1, strlen (sql1), &stmt1, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
-	  return 0;
-      }
-/* preparing the DELETE statement */
-    ret = sqlite3_prepare_v2 (sqlite, sql2, strlen (sql2), &stmt2, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
-	  goto error;
-      }
-
-    while (1)
-      {
-	  /* fetching the result set rows */
-	  ret = sqlite3_step (stmt1);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	    {
-		/* fetching a row */
-		sqlite3_reset (stmt2);
-		sqlite3_clear_bindings (stmt2);
-		n_cols = sqlite3_column_count (stmt1);
-		for (col_no = 1; col_no < n_cols; col_no++)
-		  {
-		      /* saving column values */
-		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_INTEGER)
-			  set_int_value (value_list, col_no - 1,
-					 sqlite3_column_int64 (stmt1, col_no));
-		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_FLOAT)
-			  set_double_value (value_list, col_no - 1,
-					    sqlite3_column_double (stmt1,
-								   col_no));
-		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_TEXT)
-			{
-			    const char *xtext =
-				(const char *) sqlite3_column_text (stmt1,
-								    col_no);
-			    set_text_value (value_list, col_no - 1, xtext);
-			}
-		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_BLOB)
-			{
-			    const void *blob =
-				sqlite3_column_blob (stmt1, col_no);
-			    int blob_size =
-				sqlite3_column_bytes (stmt1, col_no);
-			    set_blob_value (value_list, col_no - 1, blob,
-					    blob_size);
-			}
-		      if (sqlite3_column_type (stmt1, col_no) == SQLITE_NULL)
-			  set_null_value (value_list, col_no - 1);
-		  }
-		if (do_delete_duplicates2 (sqlite, stmt2, value_list, &xcnt))
-		    cnt += xcnt;
-		else
-		    goto error;
-	    }
-	  else
-	    {
-		fprintf (stderr, "SQL error: %s\n", sqlite3_errmsg (sqlite));
-		goto error;
-	    }
-      }
-
-    sqlite3_finalize (stmt1);
-    sqlite3_finalize (stmt2);
-
-/* confirm the still pending Transaction */
-    ret = sqlite3_exec (sqlite, "COMMIT", NULL, NULL, &sql_err);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err);
-	  sqlite3_free (sql_err);
-	  return 0;
-      }
-
-    *count = cnt;
-    return 1;
-
-  error:
-    *count = 0;
-    if (stmt1)
-	sqlite3_finalize (stmt1);
-    if (stmt2)
-	sqlite3_finalize (stmt2);
-
-/* performing a ROLLBACK anyway */
-    ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, NULL, &sql_err);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "ROLLBACK TRANSACTION error: %s\n", sql_err);
-	  sqlite3_free (sql_err);
-	  return 0;
-      }
-
-    return 0;
-}
-
-SPATIALITE_DECLARE void
-remove_duplicated_rows (sqlite3 * sqlite, char *table)
-{
-/* attempting do delete Duplicate rows from a table */
-    struct dupl_row value_list;
-    char sql[8192];
-    char sql2[1024];
-    char col_list[4196];
-    int first = 1;
-    char xname[1024];
-    int pk;
-    int ret;
-    char **results;
-    int rows;
-    int columns;
-    int i;
-    char *errMsg = NULL;
-    int count;
-
-    value_list.count = 0;
-    value_list.first = NULL;
-    value_list.last = NULL;
-    value_list.table = table;
-
-    if (is_table (sqlite, table) == 0)
-      {
-	  fprintf (stderr, ".remdupl %s: no such table\n", table);
-	  return;
-      }
-/* extracting the column names (excluding any Primary Key) */
-    sprintf (sql, "PRAGMA table_info(%s)", table);
-    ret = sqlite3_get_table (sqlite, sql, &results, &rows, &columns, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQLite SQL error: %s\n", errMsg);
-	  sqlite3_free (errMsg);
-	  return;
-      }
-    if (rows < 1)
-	;
-    else
-      {
-	  *col_list = '\0';
-	  for (i = 1; i <= rows; i++)
-	    {
-		strcpy (xname, results[(i * columns) + 1]);
-		pk = atoi (results[(i * columns) + 5]);
-		if (!pk)
-		  {
-		      if (first)
-			  first = 0;
-		      else
-			  strcat (col_list, ", ");
-		      double_quoted_sql (xname);
-		      strcat (col_list, xname);
-		      add_to_dupl_row (&value_list, xname);
-		  }
-	    }
-      }
-    sqlite3_free_table (results);
-/* preparing the SQL statement (identifying duplicated rows) */
-    strcpy (sql, "SELECT Count(*) AS \"[dupl-count]\", ");
-    strcat (sql, col_list);
-    strcat (sql, "\nFROM ");
-    strcat (sql, table);
-    strcat (sql, "\nGROUP BY ");
-    strcat (sql, col_list);
-    strcat (sql, "\nHAVING \"[dupl-count]\" > 1");
-/* preparing the SQL statement [delete] */
-    strcpy (sql2, "DELETE FROM ");
-    strcat (sql2, table);
-    strcat (sql2, " WHERE ROWID = ?");
-
-    if (do_delete_duplicates (sqlite, sql, sql2, &value_list, &count))
-      {
-	  if (!count)
-	      fprintf (stderr, "No duplicated rows have been identified\n");
-	  else
-	      fprintf (stderr, "%d duplicated rows deleted from: %s\n", count,
-		       table);
-      }
-    clean_dupl_row (&value_list);
-}
-
-SPATIALITE_DECLARE void
-load_XL (sqlite3 * sqlite, const char *path, const char *table,
-	 unsigned int worksheetIndex, int first_titles)
-{
-/* loading an XL spreadsheet as a new DB table */
-    sqlite3_stmt *stmt;
-    unsigned int current_row;
-    int ret;
-    char *errMsg = NULL;
-    char xname[1024];
-    char dummyName[4096];
-    char sql[65536];
-    int sqlError = 0;
-    const void *xl_handle;
-    unsigned int info;
-    unsigned int rows;
-    unsigned short columns;
-    unsigned short col;
-    unsigned char type;
-    int int_value;
-    double dbl_value;
-    const char *text_value;
-    int already_exists = 0;
-/* checking if TABLE already exists */
-    sprintf (sql,
-	     "SELECT name FROM sqlite_master WHERE type = 'table' AND name LIKE '%s'",
-	     table);
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load XL error: <%s>\n", sqlite3_errmsg (sqlite));
-	  return;
-      }
-    while (1)
-      {
-	  /* scrolling the result set */
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE)
-	      break;		/* end of result set */
-	  if (ret == SQLITE_ROW)
-	      already_exists = 1;
-	  else
-	    {
-		fprintf (stderr, "load XL error: <%s>\n",
-			 sqlite3_errmsg (sqlite));
-		break;
-	    }
-      }
-    sqlite3_finalize (stmt);
-    if (already_exists)
-      {
-	  fprintf (stderr, "load XL error: table '%s' already exists\n", table);
-	  return;
-      }
-/* opening the .XLS file [Workbook] */
-    ret = freexl_open (path, &xl_handle);
-    if (ret != FREEXL_OK)
-	goto error;
-/* checking if Password protected */
-    ret = freexl_get_info (xl_handle, FREEXL_BIFF_PASSWORD, &info);
-    if (ret != FREEXL_OK)
-	goto error;
-    if (info != FREEXL_BIFF_PLAIN)
-	goto error;
-/* Worksheet entries */
-    ret = freexl_get_info (xl_handle, FREEXL_BIFF_SHEET_COUNT, &info);
-    if (ret != FREEXL_OK)
-	goto error;
-    if (info == 0)
-	goto error;
-    if (worksheetIndex < info)
-	;
-    else
-	goto error;
-    ret = freexl_select_active_worksheet (xl_handle, worksheetIndex);
-    if (ret != FREEXL_OK)
-	goto error;
-    ret = freexl_worksheet_dimensions (xl_handle, &rows, &columns);
-    if (ret != FREEXL_OK)
-	goto error;
-/* starting a transaction */
-    ret = sqlite3_exec (sqlite, "BEGIN", NULL, 0, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load XL error: %s\n", errMsg);
-	  sqlite3_free (errMsg);
-	  sqlError = 1;
-	  goto clean_up;
-      }
-/* creating the Table */
-    strcpy (xname, table);
-    double_quoted_sql (xname);
-    sprintf (sql, "CREATE TABLE %s", xname);
-    strcat (sql, " (\nPK_UID INTEGER PRIMARY KEY AUTOINCREMENT");
-    for (col = 0; col < columns; col++)
-      {
-	  if (first_titles)
-	    {
-		// fetching comun names 
-		for (col = 0; col < columns; col++)
-		  {
-		      ret =
-			  freexl_get_cell_value (xl_handle, 0, col, &type,
-						 &int_value, &dbl_value,
-						 &text_value);
-		      if (ret != FREEXL_OK)
-			  sprintf (dummyName, "col_%d", col);
-		      else
-			{
-			    if (type == FREEXL_CELL_INT)
-				sprintf (dummyName, "%d", int_value);
-			    else if (type == FREEXL_CELL_DOUBLE)
-				sprintf (dummyName, "%1.2f", dbl_value);
-			    else if (type == FREEXL_CELL_TEXT
-				     || type == FREEXL_CELL_SST_TEXT
-				     || type == FREEXL_CELL_DATE
-				     || type == FREEXL_CELL_DATETIME
-				     || type == FREEXL_CELL_TIME)
-			      {
-				  int len = strlen (text_value);
-				  if (len < 256)
-				      strcpy (dummyName, text_value);
-				  else
-				      sprintf (dummyName, "col_%d", col);
-			      }
-			    else
-				sprintf (dummyName, "col_%d", col);
-			}
-		      double_quoted_sql (dummyName);
-		      strcat (sql, ", ");
-		      strcat (sql, dummyName);
-		  }
-	    }
-	  else
-	    {
-		/* setting default column names */
-		for (col = 0; col < columns; col++)
-		  {
-		      sprintf (dummyName, "col_%d", col);
-		      double_quoted_sql (dummyName);
-		      strcat (sql, ", ");
-		      strcat (sql, dummyName);
-		  }
-	    }
-      }
-    strcat (sql, ")");
-    ret = sqlite3_exec (sqlite, sql, NULL, 0, &errMsg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load XL error: %s\n", errMsg);
-	  sqlite3_free (errMsg);
-	  sqlError = 1;
-	  goto clean_up;
-      }
-// preparing the INSERT INTO parameterized statement
-    strcpy (xname, table);
-    double_quoted_sql (xname);
-    sprintf (sql, "INSERT INTO %s (PK_UID", xname);
-    for (col = 0; col < columns; col++)
-      {
-	  if (first_titles)
-	    {
-		ret =
-		    freexl_get_cell_value (xl_handle, 0, col, &type, &int_value,
-					   &dbl_value, &text_value);
-		if (ret != FREEXL_OK)
-		    sprintf (dummyName, "col_%d", col);
-		else
-		  {
-		      if (type == FREEXL_CELL_INT)
-			  sprintf (dummyName, "%d", int_value);
-		      else if (type == FREEXL_CELL_DOUBLE)
-			  sprintf (dummyName, "%1.2f", dbl_value);
-		      else if (type == FREEXL_CELL_TEXT
-			       || type == FREEXL_CELL_SST_TEXT
-			       || type == FREEXL_CELL_DATE
-			       || type == FREEXL_CELL_DATETIME
-			       || type == FREEXL_CELL_TIME)
-			{
-			    int len = strlen (text_value);
-			    if (len < 256)
-				strcpy (dummyName, text_value);
-			    else
-				sprintf (dummyName, "col_%d", col);
-			}
-		      else
-			  sprintf (dummyName, "col_%d", col);
-		  }
-		double_quoted_sql (dummyName);
-		strcat (sql, ", ");
-		strcat (sql, dummyName);
-	    }
-	  else
-	    {
-		// setting default column names 
-		sprintf (dummyName, "col_%d", col);
-		double_quoted_sql (dummyName);
-		strcat (sql, ", ");
-		strcat (sql, dummyName);
-	    }
-      }
-    strcat (sql, ")\nVALUES (NULL");
-    for (col = 0; col < columns; col++)
-      {
-	  /* column values */
-	  strcat (sql, ", ?");
-      }
-    strcat (sql, ")");
-    ret = sqlite3_prepare_v2 (sqlite, sql, strlen (sql), &stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "load XL error: %s\n", sqlite3_errmsg (sqlite));
-	  sqlError = 1;
-	  goto clean_up;
-      }
-    if (first_titles)
-	current_row = 1;
-    else
-	current_row = 0;
-    while (current_row < rows)
-      {
-	  /* binding query params */
-	  sqlite3_reset (stmt);
-	  sqlite3_clear_bindings (stmt);
-	  for (col = 0; col < columns; col++)
-	    {
-		/* column values */
-		ret =
-		    freexl_get_cell_value (xl_handle, current_row, col, &type,
-					   &int_value, &dbl_value, &text_value);
-		if (ret != FREEXL_OK)
-		    sqlite3_bind_null (stmt, col + 1);
-		else
-		  {
-		      switch (type)
-			{
-			case FREEXL_CELL_INT:
-			    sqlite3_bind_int (stmt, col + 1, int_value);
-			    break;
-			case FREEXL_CELL_DOUBLE:
-			    sqlite3_bind_double (stmt, col + 1, dbl_value);
-			    break;
-			case FREEXL_CELL_TEXT:
-			case FREEXL_CELL_SST_TEXT:
-			case FREEXL_CELL_DATE:
-			case FREEXL_CELL_DATETIME:
-			case FREEXL_CELL_TIME:
-			    sqlite3_bind_text (stmt, col + 1, text_value,
-					       strlen (text_value),
-					       SQLITE_STATIC);
-			    break;
-			default:
-			    sqlite3_bind_null (stmt, col + 1);
-			    break;
-			};
-		  }
-	    }
-	  ret = sqlite3_step (stmt);
-	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
-	      ;
-	  else
-	    {
-		fprintf (stderr, "load XL error: %s\n",
-			 sqlite3_errmsg (sqlite));
-		sqlite3_finalize (stmt);
-		sqlError = 1;
-		goto clean_up;
-	    }
-	  current_row++;
-      }
-    sqlite3_finalize (stmt);
-  clean_up:
-    if (sqlError)
-      {
-	  /* some error occurred - ROLLBACK */
-	  ret = sqlite3_exec (sqlite, "ROLLBACK", NULL, 0, &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "load XL error: %s\n", errMsg);
-		sqlite3_free (errMsg);
-	    }
-	  fprintf (stderr,
-		   "XL not loaded\n\n\na ROLLBACK was automatically performed\n");
-      }
-    else
-      {
-	  /* ok - confirming pending transaction - COMMIT */
-	  ret = sqlite3_exec (sqlite, "COMMIT", NULL, 0, &errMsg);
-	  if (ret != SQLITE_OK)
-	    {
-		fprintf (stderr, "load XL error: %s\n", errMsg);
-		sqlite3_free (errMsg);
-		return;
-	    }
-	  fprintf (stderr, "XL loaded\n\n%d inserted rows\n", rows);
-      }
-    freexl_close (xl_handle);
-    return;
-
-  error:
-    freexl_close (xl_handle);
-    fprintf (stderr, "XL datasource '%s' is not valid\n", path);
-}
diff --git a/spatialite-tools/shell.c b/spatialite-tools/shell.c
index 6df4c45..5934a4a 100644
--- a/spatialite-tools/shell.c
+++ b/spatialite-tools/shell.c
@@ -83,6 +83,7 @@
 #include <io.h>
 #define isatty	_isatty
 #define access	_access
+#define strcasecmp	_stricmp
 #else
 /* Make sure isatty() has a prototype.
 */
@@ -531,7 +532,7 @@ convert_from_utf8 (char *buf, int maxlen)
 {
 /* converting from UTF8 to locale charset */
     char *utf8buf = 0;
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
 #else
     char *pBuf;
@@ -569,7 +570,7 @@ convert_to_utf8 (char *buf, int maxlen)
 {
 /* converting from locale charset to UTF8 */
     char *utf8buf = 0;
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
 #else
     char *pBuf;
@@ -607,7 +608,7 @@ convert_input_to_utf8 (char *buf, int maxlen)
 {
 /* converting from required charset to UTF8 */
     char *utf8buf = 0;
-#ifdef __MINGW32__
+#if !defined(__MINGW32__) && defined(_WIN32)
     const char *pBuf;
 #else
     char *pBuf;
@@ -1071,6 +1072,8 @@ output_csv (struct callback_data *p, const char *z, int bSep)
 static void
 interrupt_handler (int NotUsed)
 {
+    if (NotUsed != 0)
+	NotUsed = 0;		/* suppressing stupid compiler warnings */
     seenInterrupt = 1;
     if (db)
 	sqlite3_interrupt (db);
@@ -1823,6 +1826,9 @@ static char zHelp[] =
     "                         which one charset is used on your Command Prompt]\n\n"
     ".chkdupl <table>  Check a TABLE for duplicated rows\n\n"
     ".remdupl <table>  Removes any duplicated row from a TABLE\n\n"
+    ".elemgeo <args>   derives a new table from the original one, so to ensure that\n"
+    "                  only elementary Geometries (one for each row) will be present\n"
+    "                  arg_list: in_tbl geom out_tbl out_pk out_old_id\n\n"
     ".loadshp <args>   Loads a SHAPEFILE into a SpatiaLite table\n"
     "                  arg_list: shp_path table_name charset [SRID] [column_name]\n"
     "                      [2d | 3d] [compressed]\n\n"
@@ -1839,6 +1845,11 @@ static char zHelp[] =
     ".dumpkml <args>   Dumps a SpatiaLite table as a KML file\n"
     "                  arg_list: table_name geom_column kml_path\n"
     "                      [precision] [name_column] [desc_column]\n\n"
+    ".dumpgeojson <args>  Dumps a SpatiaLite table as a GeoJSON file\n"
+    "                  arg_list: table_name geom_column geojson_path\n"
+    "                      [format] [precision]\n"
+    "                  format={ none | MBR | withShortCRS | MBRwithShortCRS\n"
+    "                           | withLongCRS | MBRwithLongCRS }\n\n"
     ".read <args>      Execute an SQL script\n"
     "                  arg_list: script_path charset\n"
 /* end Sandro Furieri 2008-06-20 */
@@ -2047,10 +2058,12 @@ do_meta_command (char *zLine, struct callback_data *p)
 	  char *shp_path = azArg[3];
 	  char *outCS = azArg[4];
 	  char *type = NULL;
+	  int rows;
 	  if (nArg == 6)
 	      type = azArg[5];
 	  open_db (p);
-	  dump_shapefile (p->db, table, column, shp_path, outCS, type, 1, NULL);
+	  dump_shapefile (p->db, table, column, shp_path, outCS, type, 1, &rows,
+			  NULL);
       }
     else if (c == 'd' && n > 1 && strncmp (azArg[0], "dumpdbf", n) == 0
 	     && (nArg == 4))
@@ -2060,7 +2073,7 @@ do_meta_command (char *zLine, struct callback_data *p)
 	  char *dbf_path = azArg[2];
 	  char *outCS = azArg[3];
 	  open_db (p);
-	  dump_dbf (p->db, table, dbf_path, outCS);
+	  dump_dbf (p->db, table, dbf_path, outCS, NULL);
       }
     else if (c == 'd' && n > 1 && strncmp (azArg[0], "dumpkml", n) == 0
 	     && (nArg == 4 || nArg == 5 || nArg == 6 || nArg == 7))
@@ -2081,6 +2094,38 @@ do_meta_command (char *zLine, struct callback_data *p)
 	  open_db (p);
 	  dump_kml (p->db, table, geom, kml_path, name, desc, precision);
       }
+    else if (c == 'd' && n > 1 && strncmp (azArg[0], "dumpgeojson", n) == 0
+	     && (nArg == 4 || nArg == 5 || nArg == 6))
+      {
+	  /* 
+	     dumping a spatial table as file of GeoJSON 
+	     2011-11-09 Brad Hards
+	   */
+	  char *table = azArg[1];
+	  char *geom = azArg[2];
+	  char *gml_path = azArg[3];
+	  int format = 0;
+	  int precision = 8;
+	  if (nArg >= 5)
+	    {
+		if (strcmp (azArg[4], "none") == 0)
+		    format = 0;
+		else if (strcmp (azArg[4], "MBR") == 0)
+		    format = 1;
+		else if (strcmp (azArg[4], "withShortCRS") == 0)
+		    format = 2;
+		else if (strcmp (azArg[4], "MBRwithShortCRS") == 0)
+		    format = 3;
+		else if (strcmp (azArg[4], "withLongCRS") == 0)
+		    format = 4;
+		else if (strcmp (azArg[4], "MBRwithLongCRS") == 0)
+		    format = 5;
+	    }
+	  if (nArg == 6)
+	      precision = atoi (azArg[5]);
+	  open_db (p);
+	  dump_geojson (p->db, table, geom, gml_path, precision, format);
+      }
     else if (c == 'l' && n > 1 && strncmp (azArg[0], "loadshp", n) == 0
 	     && (nArg == 4 || nArg == 5 || nArg == 6 || nArg == 7 || nArg == 8))
       {
@@ -2091,6 +2136,7 @@ do_meta_command (char *zLine, struct callback_data *p)
 	  int coerce2d = 0;
 	  int compressed = 0;
 	  char *column = NULL;
+	  int rows;
 	  if (nArg >= 5)
 	      srid = atoi (azArg[4]);
 	  if (nArg >= 6)
@@ -2104,7 +2150,7 @@ do_meta_command (char *zLine, struct callback_data *p)
 	      compressed = 1;
 	  open_db (p);
 	  load_shapefile (p->db, shp_path, table, inCS, srid, column, coerce2d,
-			  compressed, 1, NULL);
+			  compressed, 1, 0, &rows, NULL);
       }
     else if (c == 'l' && n > 1 && strncmp (azArg[0], "loaddbf", n) == 0
 	     && nArg == 4)
@@ -2112,12 +2158,14 @@ do_meta_command (char *zLine, struct callback_data *p)
 	  char *dbf_path = azArg[1];
 	  char *table = azArg[2];
 	  char *inCS = azArg[3];
+	  int rows;
 	  open_db (p);
-	  load_dbf (p->db, dbf_path, table, inCS, 1, NULL);
+	  load_dbf (p->db, dbf_path, table, inCS, 1, &rows, NULL);
       }
     else if (c == 'l' && n > 1 && strncmp (azArg[0], "loadxl", n) == 0
 	     && (nArg == 3 || nArg == 4 || nArg == 5))
       {
+	  unsigned int rows;
 	  char *xl_path = azArg[1];
 	  char *table = azArg[2];
 	  unsigned int worksheet = 0;
@@ -2130,7 +2178,7 @@ do_meta_command (char *zLine, struct callback_data *p)
 		    firstLine = 1;
 	    }
 	  open_db (p);
-	  load_XL (p->db, xl_path, table, worksheet, firstLine);
+	  load_XL (p->db, xl_path, table, worksheet, firstLine, &rows, NULL);
       }
     else if (c == 'r' && strncmp (azArg[0], "read", n) == 0)
       {
@@ -2154,9 +2202,10 @@ do_meta_command (char *zLine, struct callback_data *p)
       }
     else if (c == 'c' && strncmp (azArg[0], "chkdupl", n) == 0 && nArg == 2)
       {
+	  int rows;
 	  char *table = azArg[1];
 	  open_db (p);
-	  check_duplicated_rows (p->db, table);
+	  check_duplicated_rows (p->db, table, &rows);
       }
     else if (c == 'r' && strncmp (azArg[0], "remdupl", n) == 0 && nArg == 2)
       {
@@ -2164,6 +2213,16 @@ do_meta_command (char *zLine, struct callback_data *p)
 	  open_db (p);
 	  remove_duplicated_rows (p->db, table);
       }
+    else if (c == 'e' && strncmp (azArg[0], "elemgeo", n) == 0 && nArg == 6)
+      {
+	  char *inTable = azArg[1];
+	  char *geom = azArg[2];
+	  char *outTable = azArg[3];
+	  char *pKey = azArg[4];
+	  char *multiId = azArg[5];
+	  open_db (p);
+	  elementary_geometries (p->db, inTable, geom, outTable, pKey, multiId);
+      }
     else if (c == 'b' && n > 1 && strncmp (azArg[0], "bail", n) == 0
 	     && nArg > 1)
       {
@@ -2294,7 +2353,7 @@ do_meta_command (char *zLine, struct callback_data *p)
       }
     else if (c == 'h' && strncmp (azArg[0], "help", n) == 0)
       {
-	  fprintf (stderr, zHelp);
+	  fprintf (stderr, "%s", zHelp);
       }
     else if (c == 'i' && strncmp (azArg[0], "import", n) == 0 && nArg >= 3)
       {
diff --git a/spatialite-tools/shp_doctor.c b/spatialite-tools/shp_doctor.c
index 5c327df..f07aadd 100644
--- a/spatialite-tools/shp_doctor.c
+++ b/spatialite-tools/shp_doctor.c
@@ -60,8 +60,6 @@ do_analyze (char *base_path, int ignore_shape, int ignore_extent)
     char path[1024];
     int rd;
     unsigned char buf_shx[256];
-    int size_shp;
-    int size_shx;
     unsigned char *buf_shp = NULL;
     int buf_size = 1024;
     int shape;
@@ -162,7 +160,6 @@ do_analyze (char *base_path, int ignore_shape, int ignore_extent)
 	  printf (err_header, "SHX");
 	  goto error;
       }
-    size_shx = gaiaImport32 (buf_shx + 24, GAIA_BIG_ENDIAN, endian_arch);
 /* reading SHP file header */
     buf_shp = malloc (sizeof (unsigned char) * buf_size);
     rd = fread (buf_shp, sizeof (unsigned char), 100, fl_shp);
@@ -176,7 +173,6 @@ do_analyze (char *base_path, int ignore_shape, int ignore_extent)
 	  printf (err_header, "SHP");
 	  goto error;
       }
-    size_shp = gaiaImport32 (buf_shp + 24, GAIA_BIG_ENDIAN, endian_arch);
     shape = gaiaImport32 (buf_shp + 32, GAIA_LITTLE_ENDIAN, endian_arch);
     if (shape == GAIA_SHP_POINT || shape == GAIA_SHP_POINTM
 	|| shape == GAIA_SHP_POINTZ || shape == GAIA_SHP_POLYLINE
@@ -692,7 +688,6 @@ do_analyze_no_shx (char *base_path, int ignore_shape, int ignore_extent)
     FILE *fl_dbf = NULL;
     char path[1024];
     int rd;
-    int size_shp;
     unsigned char *buf_shp = NULL;
     int buf_size = 1024;
     int shape;
@@ -788,7 +783,6 @@ do_analyze_no_shx (char *base_path, int ignore_shape, int ignore_extent)
 	  printf (err_header, "SHP");
 	  goto error;
       }
-    size_shp = gaiaImport32 (buf_shp + 24, GAIA_BIG_ENDIAN, endian_arch);
     shape = gaiaImport32 (buf_shp + 32, GAIA_LITTLE_ENDIAN, endian_arch);
     if (shape == GAIA_SHP_POINT || shape == GAIA_SHP_POINTM
 	|| shape == GAIA_SHP_POINTM || shape == GAIA_SHP_POLYLINE
diff --git a/spatialite-tools/spatialite_gml.c b/spatialite-tools/spatialite_gml.c
index d5f59e9..334e67e 100644
--- a/spatialite-tools/spatialite_gml.c
+++ b/spatialite-tools/spatialite_gml.c
@@ -173,7 +173,6 @@ check_start_fid (struct gml_params *params, const char *el, const char **attr)
 /* checking if this element contains a "FID" attribute */
     int count = 0;
     const char *k;
-    const char *v;
     const char **attrib = attr;
     char prefix[1024];
     char name[1024];
@@ -184,7 +183,6 @@ check_start_fid (struct gml_params *params, const char *el, const char **attr)
 	      k = *attrib;
 	  else
 	    {
-		v = *attrib;
 		if (strcasecmp (k, "fid") == 0)
 		  {
 		      split_fid (el, prefix, name);
@@ -1598,7 +1596,6 @@ main (int argc, char *argv[])
     const char *db_path = NULL;
     const char *table = NULL;
     int in_memory = 0;
-    int spatial_index = 1;
     int error = 0;
     char Buff[BUFFSIZE];
     int done = 0;
@@ -1701,13 +1698,11 @@ main (int argc, char *argv[])
 	    }
 	  if (strcasecmp (argv[i], "-n") == 0)
 	    {
-		spatial_index = 0;
 		next_arg = ARG_NONE;
 		continue;
 	    }
 	  if (strcasecmp (argv[i], "-no-spatial-index") == 0)
 	    {
-		spatial_index = 0;
 		next_arg = ARG_NONE;
 		continue;
 	    }
diff --git a/spatialite-tools/spatialite_network.c b/spatialite-tools/spatialite_network.c
index 870b436..451c5c4 100644
--- a/spatialite-tools/spatialite_network.c
+++ b/spatialite-tools/spatialite_network.c
@@ -1110,24 +1110,19 @@ validate (char *path, char *table, char *from_column, char *to_column,
     int to_text = 0;
     int to_blob = 0;
     int cost_null = 0;
-    int cost_int = 0;
-    int cost_double = 0;
     int cost_text = 0;
     int cost_blob = 0;
     int tofrom_null = 0;
-    int tofrom_int = 0;
     int tofrom_double = 0;
     int tofrom_text = 0;
     int tofrom_blob = 0;
     int fromto_null = 0;
-    int fromto_int = 0;
     int fromto_double = 0;
     int fromto_text = 0;
     int fromto_blob = 0;
     int geom_null = 0;
     int geom_not_linestring = 0;
     int col_n;
-    int cost_n;
     int fromto_n;
     int tofrom_n;
     sqlite3_int64 rowid;
@@ -1324,7 +1319,6 @@ validate (char *path, char *table, char *from_column, char *to_column,
       {
 	  sprintf (sql2, ", \"%s\"", cost_column);
 	  strcat (sql, sql2);
-	  cost_n = col_n;
 	  col_n++;
       }
     if (oneway_tofrom)
@@ -1414,10 +1408,6 @@ validate (char *path, char *table, char *from_column, char *to_column,
 		      col_n++;
 		      if (type == SQLITE_NULL)
 			  cost_null = 1;
-		      if (type == SQLITE_INTEGER)
-			  cost_int = 1;
-		      if (type == SQLITE_FLOAT)
-			  cost_double = 1;
 		      if (type == SQLITE_TEXT)
 			  cost_text = 1;
 		      if (type == SQLITE_BLOB)
@@ -1430,8 +1420,6 @@ validate (char *path, char *table, char *from_column, char *to_column,
 		      col_n++;
 		      if (type == SQLITE_NULL)
 			  fromto_null = 1;
-		      if (type == SQLITE_INTEGER)
-			  fromto_int = 1;
 		      if (type == SQLITE_FLOAT)
 			  fromto_double = 1;
 		      if (type == SQLITE_TEXT)
@@ -1446,8 +1434,6 @@ validate (char *path, char *table, char *from_column, char *to_column,
 		      col_n++;
 		      if (type == SQLITE_NULL)
 			  tofrom_null = 1;
-		      if (type == SQLITE_INTEGER)
-			  tofrom_int = 1;
 		      if (type == SQLITE_FLOAT)
 			  tofrom_double = 1;
 		      if (type == SQLITE_TEXT)
diff --git a/spatialite-tools/spatialite_osm_filter.c b/spatialite-tools/spatialite_osm_filter.c
new file mode 100644
index 0000000..803890b
--- /dev/null
+++ b/spatialite-tools/spatialite_osm_filter.c
@@ -0,0 +1,1825 @@
+/* 
+/ spatialite_osm_filter
+/
+/ a tool loading OSM-XML maps into a SpatiaLite DB
+/
+/ version 1.0, 2011 October 31
+/
+/ Author: Sandro Furieri a.furieri at lqt.it
+/
+/ Copyright (C) 2011  Alessandro Furieri
+/
+/    This program is free software: you can redistribute it and/or modify
+/    it under the terms of the GNU General Public License as published by
+/    the Free Software Foundation, either version 3 of the License, or
+/    (at your option) any later version.
+/
+/    This program is distributed in the hope that it will be useful,
+/    but WITHOUT ANY WARRANTY; without even the implied warranty of
+/    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+/    GNU General Public License for more details.
+/
+/    You should have received a copy of the GNU General Public License
+/    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+/
+*/
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+/* MSVC strictly requires this include [off_t] */
+#include <sys/types.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPATIALITE_AMALGAMATION
+#include <spatialite/sqlite3.h>
+#else
+#include <sqlite3.h>
+#endif
+
+#include <spatialite/gaiageo.h>
+#include <spatialite.h>
+
+
+#define ARG_NONE		0
+#define ARG_OSM_PATH	1
+#define ARG_DB_PATH		2
+#define ARG_CACHE_SIZE	3
+#define ARG_MASK_PATH	4
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+#define strcasecmp	_stricmp
+#endif /* not WIN32 */
+
+static char *
+clean_xml (const char *in)
+{
+/* well formatting XML text strings */
+    int len = 0;
+    char *buf;
+    char *p_o;
+    const char *p_i = in;
+    while (*p_i != '\0')
+      {
+	  /* calculating the output len */
+	  if (*p_i == '"')
+	    {
+		len += 6;
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '\'')
+	    {
+		len += 6;
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '&')
+	    {
+		len += 5;
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '<')
+	    {
+		len += 4;
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '>')
+	    {
+		len += 4;
+		p_i++;
+		continue;
+	    }
+	  len++;
+	  p_i++;
+      }
+
+    buf = malloc (len + 1);
+    p_o = buf;
+    p_i = in;
+    while (*p_i != '\0')
+      {
+	  if (*p_i == '"')
+	    {
+		*p_o++ = '&';
+		*p_o++ = 'q';
+		*p_o++ = 'u';
+		*p_o++ = 'o';
+		*p_o++ = 't';
+		*p_o++ = ';';
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '\'')
+	    {
+		*p_o++ = '&';
+		*p_o++ = 'a';
+		*p_o++ = 'p';
+		*p_o++ = 'o';
+		*p_o++ = 's';
+		*p_o++ = ';';
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '&')
+	    {
+		*p_o++ = '&';
+		*p_o++ = 'a';
+		*p_o++ = 'm';
+		*p_o++ = 'p';
+		*p_o++ = ';';
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '<')
+	    {
+		*p_o++ = '&';
+		*p_o++ = 'l';
+		*p_o++ = 't';
+		*p_o++ = ';';
+		p_i++;
+		continue;
+	    }
+	  if (*p_i == '>')
+	    {
+		*p_o++ = '&';
+		*p_o++ = 'g';
+		*p_o++ = 't';
+		*p_o++ = ';';
+		p_i++;
+		continue;
+	    }
+	  *p_o++ = *p_i++;
+      }
+    *p_o = '\0';
+    return buf;
+}
+
+static int
+do_output_nodes (FILE * out, sqlite3 * handle)
+{
+/* exporting any OSM node */
+    char sql[1024];
+    int ret;
+    int first;
+    int close_node;
+    sqlite3_stmt *node_query = NULL;
+    sqlite3_stmt *query = NULL;
+
+/* preparing the QUERY filtered-NODES statement */
+    strcpy (sql, "SELECT node_id FROM osm_nodes WHERE filtered = 1");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &node_query, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  return 0;
+      }
+
+/* preparing the QUERY NODES statement */
+    strcpy (sql, "SELECT n.node_id, n.version, n.timestamp, ");
+    strcat (sql, "n.uid, n.user, n.changeset, ST_X(n.Geometry), ");
+    strcat (sql, "ST_Y(n.Geometry), t.k, t.v ");
+    strcat (sql, "FROM osm_nodes AS n ");
+    strcat (sql, "LEFT JOIN osm_node_tags AS t ON (t.node_id = n.node_id) ");
+    strcat (sql, "WHERE n.node_id = ? ");
+    strcat (sql, "ORDER BY n.node_id, t.sub");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  goto stop;
+      }
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (node_query);
+	  if (ret == SQLITE_DONE)
+	    {
+		/* there are no more rows to fetch - we can stop looping */
+		break;
+	    }
+	  if (ret == SQLITE_ROW)
+	    {
+		/* ok, we've just fetched a valid row */
+		sqlite3_int64 id = sqlite3_column_int64 (node_query, 0);
+
+		sqlite3_reset (query);
+		sqlite3_clear_bindings (query);
+		sqlite3_bind_int64 (query, 1, id);
+		first = 1;
+		close_node = 0;
+		while (1)
+		  {
+		      /* scrolling the result set */
+		      ret = sqlite3_step (query);
+		      if (ret == SQLITE_DONE)
+			{
+			    /* there are no more rows to fetch - we can stop looping */
+			    break;
+			}
+		      if (ret == SQLITE_ROW)
+			{
+			    /* ok, we've just fetched a valid row */
+			    sqlite3_int64 id = sqlite3_column_int64 (query, 0);
+			    int version = sqlite3_column_int (query, 1);
+			    const char *p_timestamp =
+				(const char *) sqlite3_column_text (query, 2);
+			    int uid = sqlite3_column_int (query, 3);
+			    const char *p_user =
+				(const char *) sqlite3_column_text (query, 4);
+			    const char *p_changeset =
+				(const char *) sqlite3_column_text (query, 5);
+			    double x = sqlite3_column_double (query, 6);
+			    double y = sqlite3_column_double (query, 7);
+			    char *k = NULL;
+			    char *v = NULL;
+			    if (sqlite3_column_type (query, 8) != SQLITE_NULL)
+				k = clean_xml ((const char *)
+					       sqlite3_column_text (query, 8));
+			    if (sqlite3_column_type (query, 9) != SQLITE_NULL)
+				v = clean_xml ((const char *)
+					       sqlite3_column_text (query, 9));
+
+			    if (first)
+			      {
+				  /* first NODE row */
+				  char *timestamp = clean_xml (p_timestamp);
+				  char *changeset = clean_xml (p_changeset);
+				  char *user = NULL;
+				  if (p_user)
+				      user = clean_xml (p_user);
+				  first = 0;
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+				  fprintf (out, "\t<node id=\"%I64d\"", id);
+#else
+				  fprintf (out, "\t<node id=\"%lld\"", id);
+#endif
+				  if (!user)
+				      fprintf (out,
+					       " lat=\"%1.7f\" lon=\"%1.7f\" version=\"%d\" changeset=\"%s\" uid=\"%d\" timestamp=\"%s\"",
+					       y, x, version, changeset, uid,
+					       timestamp);
+				  else
+				      fprintf (out,
+					       " lat=\"%1.7f\" lon=\"%1.7f\" version=\"%d\" changeset=\"%s\" user=\"%s\" uid=\"%d\" timestamp=\"%s\"",
+					       y, x, version, changeset, user,
+					       uid, timestamp);
+				  free (changeset);
+				  if (user)
+				      free (user);
+				  free (timestamp);
+				  if (k == NULL && v == NULL)
+				      fprintf (out, "/>\n");
+				  else
+				      fprintf (out, ">\n");
+			      }
+			    if (k != NULL && v != NULL)
+			      {
+				  /* NODE tag */
+				  fprintf (out,
+					   "\t\t<tag k=\"%s\" v=\"%s\"/>\n", k,
+					   v);
+				  close_node = 1;
+			      }
+			    if (k)
+				free (k);
+			    if (v)
+				free (v);
+			}
+		      else
+			{
+			    /* some unexpected error occurred */
+			    fprintf (stderr, "sqlite3_step() error: %s\n",
+				     sqlite3_errmsg (handle));
+			    goto stop;
+			}
+		  }
+		if (close_node)
+		    fprintf (out, "\t</node>\n");
+	    }
+	  else
+	    {
+		/* some unexpected error occurred */
+		fprintf (stderr, "sqlite3_step() error: %s\n",
+			 sqlite3_errmsg (handle));
+		goto stop;
+	    }
+      }
+    sqlite3_finalize (node_query);
+    sqlite3_finalize (query);
+
+    return 1;
+
+  stop:
+    sqlite3_finalize (node_query);
+    if (query)
+	sqlite3_finalize (query);
+    return 0;
+}
+
+static int
+do_output_ways (FILE * out, sqlite3 * handle)
+{
+/* exporting any OSM way */
+    char sql[1024];
+    int ret;
+    int first;
+    sqlite3_stmt *way_query = NULL;
+    sqlite3_stmt *query = NULL;
+    sqlite3_stmt *query_tag = NULL;
+
+/* preparing the QUERY filtered-WAYS statement */
+    strcpy (sql, "SELECT way_id FROM osm_ways WHERE filtered = 1");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &way_query, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  return 0;
+      }
+
+/* preparing the QUERY WAY/NODES statement */
+    strcpy (sql, "SELECT w.way_id, w.version, w.timestamp, w.uid, ");
+    strcat (sql, "w.user, w.changeset, n.node_id ");
+    strcat (sql, "FROM osm_ways AS w ");
+    strcat (sql, "JOIN osm_way_refs AS n ON (n.way_id = w.way_id) ");
+    strcat (sql, "WHERE w.way_id = ? ");
+    strcat (sql, "ORDER BY w.way_id, n.sub");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  goto stop;
+      }
+
+/* preparing the QUERY WAY/TAGS statement */
+    strcpy (sql, "SELECT t.k, t.v ");
+    strcat (sql, "FROM osm_ways AS w ");
+    strcat (sql, "JOIN osm_way_tags AS t ON (t.way_id = w.way_id) ");
+    strcat (sql, "WHERE w.way_id = ? ");
+    strcat (sql, "ORDER BY w.way_id, t.sub");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query_tag, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  goto stop;
+      }
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (way_query);
+	  if (ret == SQLITE_DONE)
+	    {
+		/* there are no more rows to fetch - we can stop looping */
+		break;
+	    }
+	  if (ret == SQLITE_ROW)
+	    {
+		/* ok, we've just fetched a valid row */
+		sqlite3_int64 id = sqlite3_column_int64 (way_query, 0);
+
+		sqlite3_reset (query);
+		sqlite3_clear_bindings (query);
+		sqlite3_bind_int64 (query, 1, id);
+		first = 1;
+		while (1)
+		  {
+		      /* scrolling the result set */
+		      ret = sqlite3_step (query);
+		      if (ret == SQLITE_DONE)
+			{
+			    /* there are no more rows to fetch - we can stop looping */
+			    break;
+			}
+		      if (ret == SQLITE_ROW)
+			{
+			    /* ok, we've just fetched a valid row */
+			    sqlite3_int64 id = sqlite3_column_int64 (query, 0);
+			    int version = sqlite3_column_int (query, 1);
+			    const char *p_timestamp =
+				(const char *) sqlite3_column_text (query, 2);
+			    int uid = sqlite3_column_int (query, 3);
+			    const char *p_user =
+				(const char *) sqlite3_column_text (query, 4);
+			    const char *p_changeset =
+				(const char *) sqlite3_column_text (query, 5);
+			    sqlite3_int64 node_id =
+				sqlite3_column_int64 (query, 6);
+
+			    if (first)
+			      {
+				  /* first WAY row */
+				  char *timestamp = clean_xml (p_timestamp);
+				  char *changeset = clean_xml (p_changeset);
+				  char *user = NULL;
+				  if (p_user)
+				      user = clean_xml (p_user);
+				  first = 0;
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+				  fprintf (out, "\t<way id=\"%I64d\"", id);
+#else
+				  fprintf (out, "\t<way id=\"%lld\"", id);
+#endif
+				  if (!user)
+				      fprintf (out,
+					       " version=\"%d\" changeset=\"%s\" uid=\"%d\" timestamp=\"%s\">\n",
+					       version, changeset, uid,
+					       timestamp);
+				  else
+				      fprintf (out,
+					       " version=\"%d\" changeset=\"%s\" user=\"%s\" uid=\"%d\" timestamp=\"%s\">\n",
+					       version, changeset, user, uid,
+					       timestamp);
+				  free (changeset);
+				  if (user)
+				      free (user);
+				  free (timestamp);
+			      }
+			    /* NODE REF tag */
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+			    fprintf (out, "\t\t<nd ref=\"%I64d\"/>\n", node_id);
+#else
+			    fprintf (out, "\t\t<nd ref=\"%lld\"/>\n", node_id);
+#endif
+			}
+		      else
+			{
+			    /* some unexpected error occurred */
+			    fprintf (stderr, "sqlite3_step() error: %s\n",
+				     sqlite3_errmsg (handle));
+			    goto stop;
+			}
+		  }
+		if (!first)
+		  {
+		      /* exporting WAY tags */
+		      sqlite3_reset (query_tag);
+		      sqlite3_clear_bindings (query_tag);
+		      sqlite3_bind_int64 (query_tag, 1, id);
+		      while (1)
+			{
+			    /* scrolling the result set */
+			    ret = sqlite3_step (query_tag);
+			    if (ret == SQLITE_DONE)
+			      {
+				  /* there are no more rows to fetch - we can stop looping */
+				  break;
+			      }
+			    if (ret == SQLITE_ROW)
+			      {
+				  /* ok, we've just fetched a valid row */
+				  char *k =
+				      clean_xml ((const char *)
+						 sqlite3_column_text (query_tag,
+								      0));
+				  char *v =
+				      clean_xml ((const char *)
+						 sqlite3_column_text (query_tag,
+								      1));
+				  fprintf (out,
+					   "\t\t<tag k=\"%s\" v=\"%s\"/>\n", k,
+					   v);
+				  free (k);
+				  free (v);
+			      }
+			    else
+			      {
+				  /* some unexpected error occurred */
+				  fprintf (stderr, "sqlite3_step() error: %s\n",
+					   sqlite3_errmsg (handle));
+				  goto stop;
+			      }
+			}
+		  }
+		fprintf (out, "\t</way>\n");
+	    }
+	  else
+	    {
+		/* some unexpected error occurred */
+		fprintf (stderr, "sqlite3_step() error: %s\n",
+			 sqlite3_errmsg (handle));
+		goto stop;
+	    }
+      }
+    sqlite3_finalize (way_query);
+    sqlite3_finalize (query);
+    sqlite3_finalize (query_tag);
+
+    return 1;
+
+  stop:
+    sqlite3_finalize (way_query);
+    if (query)
+	sqlite3_finalize (query);
+    if (query_tag)
+	sqlite3_finalize (query_tag);
+    return 0;
+}
+
+static int
+do_output_relations (FILE * out, sqlite3 * handle)
+{
+/* exporting any OSM relation */
+    char sql[1024];
+    int ret;
+    int first;
+    sqlite3_stmt *rel_query = NULL;
+    sqlite3_stmt *query_nd = NULL;
+    sqlite3_stmt *query_way = NULL;
+    sqlite3_stmt *query_rel = NULL;
+    sqlite3_stmt *query_tag = NULL;
+
+/* preparing the QUERY filtered-RELATIONS statement */
+    strcpy (sql, "SELECT rel_id FROM osm_relations WHERE filtered = 1");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &rel_query, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  return 0;
+      }
+
+/* preparing the QUERY RELATION/NODES statement */
+    strcpy (sql, "SELECT r.rel_id, r.version, r.timestamp, r.uid, ");
+    strcat (sql, "r.user, r.changeset, n.role, n.ref ");
+    strcat (sql, "FROM osm_relations AS r ");
+    strcat (sql,
+	    "JOIN osm_relation_refs AS n ON (n.type = 'N' AND n.rel_id = r.rel_id) ");
+    strcat (sql, "WHERE r.rel_id = ? ");
+    strcat (sql, "ORDER BY r.rel_id, n.sub");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query_nd, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  goto stop;
+      }
+
+/* preparing the QUERY RELATION/WAYS statement */
+    strcpy (sql, "SELECT r.rel_id, r.version, r.timestamp, r.uid, ");
+    strcat (sql, "r.user, r.changeset, w.role, w.ref ");
+    strcat (sql, "FROM osm_relations AS r ");
+    strcat (sql,
+	    "JOIN osm_relation_refs AS w ON (w.type = 'W' AND w.rel_id = r.rel_id) ");
+    strcat (sql, "WHERE r.rel_id = ? ");
+    strcat (sql, "ORDER BY r.rel_id, w.sub");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query_way, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  goto stop;
+      }
+
+/* preparing the QUERY RELATION/RELATIONS statement */
+    strcpy (sql, "SELECT r.rel_id, r.version, r.timestamp, r.uid, ");
+    strcat (sql, "r.user, r.changeset, x.role, x.ref ");
+    strcat (sql, "FROM osm_relations AS r ");
+    strcat (sql,
+	    "JOIN osm_relation_refs AS x ON (x.type = 'R' AND x.rel_id = r.rel_id) ");
+    strcat (sql, "WHERE r.rel_id = ? ");
+    strcat (sql, "ORDER BY r.rel_id, x.sub");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query_rel, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  goto stop;
+      }
+
+/* preparing the QUERY RELATION/TAGS statement */
+    strcpy (sql, "SELECT t.k, t.v ");
+    strcat (sql, "FROM osm_relations AS r ");
+    strcat (sql, "JOIN osm_relation_tags AS t ON (t.rel_id = r.rel_id) ");
+    strcat (sql, "WHERE r.rel_id = ? ");
+    strcat (sql, "ORDER BY r.rel_id, t.sub");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query_tag, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  goto stop;
+      }
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (rel_query);
+	  if (ret == SQLITE_DONE)
+	    {
+		/* there are no more rows to fetch - we can stop looping */
+		break;
+	    }
+	  if (ret == SQLITE_ROW)
+	    {
+		/* ok, we've just fetched a valid row */
+		sqlite3_int64 id = sqlite3_column_int64 (rel_query, 0);
+
+		sqlite3_reset (query_way);
+		sqlite3_clear_bindings (query_way);
+		sqlite3_bind_int64 (query_way, 1, id);
+		first = 1;
+		while (1)
+		  {
+		      /* scrolling the result set */
+		      ret = sqlite3_step (query_way);
+		      if (ret == SQLITE_DONE)
+			{
+			    /* there are no more rows to fetch - we can stop looping */
+			    break;
+			}
+		      if (ret == SQLITE_ROW)
+			{
+			    /* ok, we've just fetched a valid row */
+			    sqlite3_int64 id =
+				sqlite3_column_int64 (query_way, 0);
+			    int version = sqlite3_column_int (query_way, 1);
+			    const char *p_timestamp =
+				(const char *) sqlite3_column_text (query_way,
+								    2);
+			    int uid = sqlite3_column_int (query_way, 3);
+			    const char *p_user =
+				(const char *) sqlite3_column_text (query_way,
+								    4);
+			    const char *p_changeset =
+				(const char *) sqlite3_column_text (query_way,
+								    5);
+			    char *role =
+				clean_xml ((const char *)
+					   sqlite3_column_text (query_way, 6));
+			    sqlite3_int64 way_id =
+				sqlite3_column_int64 (query_way, 7);
+
+			    if (first)
+			      {
+				  /* first WAY row */
+				  char *timestamp = clean_xml (p_timestamp);
+				  char *changeset = clean_xml (p_changeset);
+				  char *user = NULL;
+				  if (p_user)
+				      user = clean_xml (p_user);
+				  first = 0;
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+				  fprintf (out, "\t<relation id=\"%I64d\"", id);
+#else
+				  fprintf (out, "\t<relation id=\"%lld\"", id);
+#endif
+				  if (!user)
+				      fprintf (out,
+					       " version=\"%d\" changeset=\"%s\" uid=\"%d\" timestamp=\"%s\">\n",
+					       version, changeset, uid,
+					       timestamp);
+				  else
+				      fprintf (out,
+					       " version=\"%d\" changeset=\"%s\" user=\"%s\" uid=\"%d\" timestamp=\"%s\">\n",
+					       version, changeset, user, uid,
+					       timestamp);
+				  free (changeset);
+				  free (user);
+				  free (timestamp);
+			      }
+			    /* NODE REF tag */
+#if defined(_WIN32) || defined(__MINGW32__)
+/* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */
+			    fprintf (out,
+				     "\t\t<member type=\"way\" ref=\"%I64d\" role=\"%s\"/>\n",
+				     way_id, role);
+#else
+			    fprintf (out,
+				     "\t\t<member type = \"way\" ref=\"%lld\" role=\"%s\"/>\n",
+				     way_id, role);
+#endif
+			    free (role);
+			}
+		      else
+			{
+			    /* some unexpected error occurred */
+			    fprintf (stderr, "sqlite3_step() error: %s\n",
+				     sqlite3_errmsg (handle));
+			    goto stop;
+			}
+		  }
+		if (!first)
+		  {
+		      /* exporting WAY tags */
+		      sqlite3_reset (query_tag);
+		      sqlite3_clear_bindings (query_tag);
+		      sqlite3_bind_int64 (query_tag, 1, id);
+		      while (1)
+			{
+			    /* scrolling the result set */
+			    ret = sqlite3_step (query_tag);
+			    if (ret == SQLITE_DONE)
+			      {
+				  /* there are no more rows to fetch - we can stop looping */
+				  break;
+			      }
+			    if (ret == SQLITE_ROW)
+			      {
+				  /* ok, we've just fetched a valid row */
+				  char *k =
+				      clean_xml ((const char *)
+						 sqlite3_column_text (query_tag,
+								      0));
+				  char *v =
+				      clean_xml ((const char *)
+						 sqlite3_column_text (query_tag,
+								      1));
+				  fprintf (out,
+					   "\t\t<tag k=\"%s\" v=\"%s\"/>\n", k,
+					   v);
+				  free (k);
+				  free (v);
+			      }
+			    else
+			      {
+				  /* some unexpected error occurred */
+				  fprintf (stderr, "sqlite3_step() error: %s\n",
+					   sqlite3_errmsg (handle));
+				  goto stop;
+			      }
+			}
+		  }
+		fprintf (out, "\t</relation>\n");
+	    }
+	  else
+	    {
+		/* some unexpected error occurred */
+		fprintf (stderr, "sqlite3_step() error: %s\n",
+			 sqlite3_errmsg (handle));
+		goto stop;
+	    }
+      }
+    sqlite3_finalize (rel_query);
+    sqlite3_finalize (query_nd);
+    sqlite3_finalize (query_way);
+    sqlite3_finalize (query_rel);
+    sqlite3_finalize (query_tag);
+
+    return 1;
+
+  stop:
+    sqlite3_finalize (rel_query);
+    if (query_nd)
+	sqlite3_finalize (query_nd);
+    if (query_way)
+	sqlite3_finalize (query_way);
+    if (query_rel)
+	sqlite3_finalize (query_rel);
+    if (query_tag)
+	sqlite3_finalize (query_tag);
+    return 0;
+}
+
+static int
+reset_filtered (sqlite3 * handle)
+{
+/* resetting NODES, WAYS and RELATIONS */
+    char sql[1024];
+    int ret;
+    char *sql_err = NULL;
+
+/* disabling transactions */
+    strcpy (sql, "PRAGMA journal_mode=OFF");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "PRAGMA journal_mode=OFF: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+/* resetting NODES */
+    strcpy (sql, "UPDATE osm_nodes SET filtered = 0");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "RESET osm_nodes error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+/* resetting WAYS */
+    strcpy (sql, "UPDATE osm_ways SET filtered = 0");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "RESET osm_ways error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+/* resetting RELATIONS */
+    strcpy (sql, "UPDATE osm_relations SET filtered = 0");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "RESET osm_relations error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+/* enabling again transactions */
+    strcpy (sql, "PRAGMA journal_mode=DELETE");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "PRAGMA journal_mode=DELETE: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+    return 1;
+}
+
+static int
+filter_rel_relations (sqlite3 * handle)
+{
+/* selecting any RELATION required by other selected RELATIONS */
+    char sql[1024];
+    int ret;
+    char *sql_err = NULL;
+
+    strcpy (sql, "UPDATE osm_relations SET filtered = 1 ");
+    strcat (sql, "WHERE rel_id IN (");
+    strcat (sql, "SELECT x.ref ");
+    strcat (sql, "FROM osm_relations AS r ");
+    strcat (sql,
+	    "JOIN osm_relation_refs AS x ON (x.type = 'R' AND r.rel_id = x.rel_id) ");
+    strcat (sql, "WHERE r.filtered = 1)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "UPDATE osm_relations error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+filter_way_relations (sqlite3 * handle)
+{
+/* selecting any WAY required by selected RELATIONS */
+    char sql[1024];
+    int ret;
+    char *sql_err = NULL;
+
+    strcpy (sql, "UPDATE osm_ways SET filtered = 1 ");
+    strcat (sql, "WHERE way_id IN ( ");
+    strcat (sql, "SELECT w.ref ");
+    strcat (sql, "FROM osm_relations AS r ");
+    strcat (sql,
+	    "JOIN osm_relation_refs AS w ON (w.type = 'W' AND r.rel_id = w.rel_id) ");
+    strcat (sql, "WHERE r.filtered = 1)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "UPDATE osm_ways error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+filter_node_relations (sqlite3 * handle)
+{
+/* selecting any NODE required by selected RELATIONS */
+    char sql[1024];
+    int ret;
+    char *sql_err = NULL;
+
+    strcpy (sql, "UPDATE osm_nodes SET filtered = 1 ");
+    strcat (sql, "WHERE node_id IN ( ");
+    strcat (sql, "SELECT n.ref ");
+    strcat (sql, "FROM osm_relations AS r ");
+    strcat (sql,
+	    "JOIN osm_relation_refs AS n ON (n.type = 'N' AND r.rel_id = n.rel_id) ");
+    strcat (sql, "WHERE r.filtered = 1)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "UPDATE osm_nodes error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+filter_node_ways (sqlite3 * handle)
+{
+/* selecting any NODE required by selected WAYS */
+    char sql[1024];
+    int ret;
+    char *sql_err = NULL;
+
+    strcpy (sql, "UPDATE osm_nodes SET filtered = 1 ");
+    strcat (sql, "WHERE node_id IN ( SELECT n.node_id ");
+    strcat (sql, "FROM osm_ways AS w ");
+    strcat (sql, "JOIN osm_way_refs AS n ON (w.way_id = n.way_id) ");
+    strcat (sql, "WHERE w.filtered = 1)");
+    ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "UPDATE osm_nodes error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+    return 1;
+}
+
+static int
+filter_nodes (sqlite3 * handle, void *mask, int mask_len)
+{
+/* filtering any NODE to be exported */
+    char sql[1024];
+    int ret;
+    sqlite3_stmt *query = NULL;
+    sqlite3_stmt *stmt_nodes = NULL;
+    sqlite3_stmt *stmt_ways = NULL;
+    sqlite3_stmt *stmt_rels = NULL;
+    char *sql_err = NULL;
+
+/* the complete INSERT operation is handled as an unique SQL Transaction */
+    ret = sqlite3_exec (handle, "BEGIN", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+
+/* preparing the UPDATE NODES statement */
+    strcpy (sql, "UPDATE osm_nodes SET filtered = 1 WHERE node_id = ?");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt_nodes, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  return 0;
+      }
+
+/* preparing the UPDATE WAYS statement */
+    strcpy (sql, "UPDATE osm_ways SET filtered = 1 WHERE way_id IN (");
+    strcat (sql, "SELECT way_id FROM osm_way_refs WHERE node_id = ?)");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt_ways, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  return 0;
+      }
+
+/* preparing the UPDATE RELATIONS statement */
+    strcpy (sql, "UPDATE osm_relations SET filtered = 1 WHERE rel_id IN (");
+    strcat (sql,
+	    "SELECT rel_id FROM osm_relation_refs WHERE type = 'N' AND ref = ?)");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt_rels, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  return 0;
+      }
+
+/* preparing the QUERY NODES statement */
+    strcpy (sql, "SELECT node_id FROM osm_nodes ");
+    strcat (sql, "WHERE MbrIntersects(Geometry, ?) = 1 ");
+    strcat (sql, "AND ST_Intersects(Geometry, ?) = 1");
+    ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle));
+	  return 0;
+      }
+    sqlite3_bind_blob (query, 1, mask, mask_len, SQLITE_STATIC);
+    sqlite3_bind_blob (query, 2, mask, mask_len, SQLITE_STATIC);
+
+    while (1)
+      {
+	  /* scrolling the result set */
+	  ret = sqlite3_step (query);
+	  if (ret == SQLITE_DONE)
+	    {
+		/* there are no more rows to fetch - we can stop looping */
+		break;
+	    }
+	  if (ret == SQLITE_ROW)
+	    {
+		/* ok, we've just fetched a valid row */
+		sqlite3_int64 id = sqlite3_column_int64 (query, 0);
+
+		/* marking this NODE as filtered */
+		sqlite3_reset (stmt_nodes);
+		sqlite3_clear_bindings (stmt_nodes);
+		sqlite3_bind_int64 (stmt_nodes, 1, id);
+		ret = sqlite3_step (stmt_nodes);
+		if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+		    ;
+		else
+		  {
+		      fprintf (stderr, "sqlite3_step() error: UPDATE NODES\n");
+		      goto stop;
+		  }
+
+		/* marking any dependent WAY as filtered */
+		sqlite3_reset (stmt_ways);
+		sqlite3_clear_bindings (stmt_ways);
+		sqlite3_bind_int64 (stmt_ways, 1, id);
+		ret = sqlite3_step (stmt_ways);
+		if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+		    ;
+		else
+		  {
+		      fprintf (stderr, "sqlite3_step() error: UPDATE WAYS\n");
+		      goto stop;
+		  }
+
+		/* marking any dependent RELATION as filtered */
+		sqlite3_reset (stmt_rels);
+		sqlite3_clear_bindings (stmt_rels);
+		sqlite3_bind_int64 (stmt_rels, 1, id);
+		ret = sqlite3_step (stmt_rels);
+		if (ret == SQLITE_DONE || ret == SQLITE_ROW)
+		    ;
+		else
+		  {
+		      fprintf (stderr,
+			       "sqlite3_step() error: UPDATE RELATIONS\n");
+		      goto stop;
+		  }
+	    }
+	  else
+	    {
+		/* some unexpected error occurred */
+		fprintf (stderr, "sqlite3_step() error: %s\n",
+			 sqlite3_errmsg (handle));
+		goto stop;
+	    }
+      }
+    sqlite3_finalize (query);
+    sqlite3_finalize (stmt_nodes);
+    sqlite3_finalize (stmt_ways);
+    sqlite3_finalize (stmt_rels);
+
+/* committing the still pending SQL Transaction */
+    ret = sqlite3_exec (handle, "COMMIT", NULL, NULL, &sql_err);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err);
+	  sqlite3_free (sql_err);
+	  return 0;
+      }
+    return 1;
+
+  stop:
+    if (query)
+	sqlite3_finalize (query);
+    if (stmt_nodes)
+	sqlite3_finalize (stmt_nodes);
+    if (stmt_ways)
+	sqlite3_finalize (stmt_ways);
+    if (stmt_rels)
+	sqlite3_finalize (stmt_rels);
+    return 0;
+}
+
+static int
+parse_wkt_mask (const char *wkt_path, void **mask, int *mask_len)
+{
+/* acquiring the WKT mask */
+    int cnt = 0;
+    char *wkt_buf = NULL;
+    char *p;
+    int c;
+    gaiaGeomCollPtr geom = NULL;
+
+/* opening the text file containing the WKT mask */
+    FILE *in = fopen (wkt_path, "r");
+    if (in == NULL)
+      {
+	  fprintf (stderr, "Unable to open: %s\n", wkt_path);
+	  return 0;
+      }
+
+/* counting how many chars are there */
+    while (getc (in) != EOF)
+	cnt++;
+    if (cnt == 0)
+      {
+	  fprintf (stderr, "Empty file: %s\n", wkt_path);
+	  fclose (in);
+	  return 0;
+      }
+
+/* allocating the WKT buffer */
+    wkt_buf = malloc (cnt + 1);
+    memset (wkt_buf, '\0', cnt + 1);
+    p = wkt_buf;
+/* restarting the text file */
+    rewind (in);
+
+    while ((c = getc (in)) != EOF)
+      {
+	  /* loading the WKT buffer */
+	  if ((p - wkt_buf) <= cnt)
+	      *p++ = c;
+      }
+    *p = '\0';
+    fclose (in);
+
+/* attempting to parse the WKT expression */
+    geom = gaiaParseWkt ((unsigned char *) wkt_buf, -1);
+    free (wkt_buf);
+    if (!geom)
+	return 0;
+
+/* converting to Binary Blob */
+    gaiaToSpatiaLiteBlobWkb (geom, (unsigned char **) mask, mask_len);
+    gaiaFreeGeomColl (geom);
+    return 1;
+}
+
+static void
+open_db (const char *path, sqlite3 ** handle, int cache_size)
+{
+/* opening the DB */
+    sqlite3 *db_handle;
+    int ret;
+    char sql[1024];
+    int spatialite_rs = 0;
+    int spatialite_gc = 0;
+    int rs_srid = 0;
+    int auth_name = 0;
+    int auth_srid = 0;
+    int ref_sys_name = 0;
+    int proj4text = 0;
+    int f_table_name = 0;
+    int f_geometry_column = 0;
+    int coord_dimension = 0;
+    int gc_srid = 0;
+    int type = 0;
+    int spatial_index_enabled = 0;
+    int node_id = 0;
+    int version = 0;
+    int timestamp = 0;
+    int uid = 0;
+    int user = 0;
+    int changeset = 0;
+    int filtered = 0;
+    int geometry = 0;
+    int sub = 0;
+    int k = 0;
+    int v = 0;
+    int way_id = 0;
+    int rel_id = 0;
+    int role = 0;
+    int ref = 0;
+    const char *name;
+    int i;
+    char **results;
+    int rows;
+    int columns;
+
+    *handle = NULL;
+    spatialite_init (0);
+    printf ("SQLite version: %s\n", sqlite3_libversion ());
+    printf ("SpatiaLite version: %s\n\n", spatialite_version ());
+
+    ret = sqlite3_open_v2 (path, &db_handle, SQLITE_OPEN_READWRITE, NULL);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "cannot open '%s': %s\n", path,
+		   sqlite3_errmsg (db_handle));
+	  sqlite3_close (db_handle);
+	  return;
+      }
+    if (cache_size > 0)
+      {
+	  /* setting the CACHE-SIZE */
+	  sprintf (sql, "PRAGMA cache_size=%d", cache_size);
+	  sqlite3_exec (db_handle, sql, NULL, NULL, NULL);
+      }
+
+/* checking the GEOMETRY_COLUMNS table */
+    strcpy (sql, "PRAGMA table_info(geometry_columns)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "f_table_name") == 0)
+		    f_table_name = 1;
+		if (strcasecmp (name, "f_geometry_column") == 0)
+		    f_geometry_column = 1;
+		if (strcasecmp (name, "coord_dimension") == 0)
+		    coord_dimension = 1;
+		if (strcasecmp (name, "srid") == 0)
+		    gc_srid = 1;
+		if (strcasecmp (name, "type") == 0)
+		    type = 1;
+		if (strcasecmp (name, "spatial_index_enabled") == 0)
+		    spatial_index_enabled = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (f_table_name && f_geometry_column && type && coord_dimension
+	&& gc_srid && spatial_index_enabled)
+	spatialite_gc = 1;
+
+/* checking the SPATIAL_REF_SYS table */
+    strcpy (sql, "PRAGMA table_info(spatial_ref_sys)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "srid") == 0)
+		    rs_srid = 1;
+		if (strcasecmp (name, "auth_name") == 0)
+		    auth_name = 1;
+		if (strcasecmp (name, "auth_srid") == 0)
+		    auth_srid = 1;
+		if (strcasecmp (name, "ref_sys_name") == 0)
+		    ref_sys_name = 1;
+		if (strcasecmp (name, "proj4text") == 0)
+		    proj4text = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rs_srid && auth_name && auth_srid && ref_sys_name && proj4text)
+	spatialite_rs = 1;
+/* verifying the MetaData format */
+    if (spatialite_gc && spatialite_rs)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_NODES table */
+    strcpy (sql, "PRAGMA table_info(osm_nodes)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "node_id") == 0)
+		    node_id = 1;
+		if (strcasecmp (name, "version") == 0)
+		    version = 1;
+		if (strcasecmp (name, "timestamp") == 0)
+		    timestamp = 1;
+		if (strcasecmp (name, "uid") == 0)
+		    uid = 1;
+		if (strcasecmp (name, "user") == 0)
+		    user = 1;
+		if (strcasecmp (name, "changeset") == 0)
+		    changeset = 1;
+		if (strcasecmp (name, "filtered") == 0)
+		    filtered = 1;
+		if (strcasecmp (name, "Geometry") == 0)
+		    geometry = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (node_id && version && timestamp && uid && user && changeset && filtered
+	&& geometry)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_NODE_TAGS table */
+    strcpy (sql, "PRAGMA table_info(osm_node_tags)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  node_id = 0;
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "node_id") == 0)
+		    node_id = 1;
+		if (strcasecmp (name, "sub") == 0)
+		    sub = 1;
+		if (strcasecmp (name, "k") == 0)
+		    k = 1;
+		if (strcasecmp (name, "v") == 0)
+		    v = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (node_id && sub && k && v)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_WAYS table */
+    strcpy (sql, "PRAGMA table_info(osm_ways)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  version = 0;
+	  timestamp = 0;
+	  uid = 0;
+	  user = 0;
+	  changeset = 0;
+	  filtered = 0;
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "way_id") == 0)
+		    way_id = 1;
+		if (strcasecmp (name, "version") == 0)
+		    version = 1;
+		if (strcasecmp (name, "timestamp") == 0)
+		    timestamp = 1;
+		if (strcasecmp (name, "uid") == 0)
+		    uid = 1;
+		if (strcasecmp (name, "user") == 0)
+		    user = 1;
+		if (strcasecmp (name, "changeset") == 0)
+		    changeset = 1;
+		if (strcasecmp (name, "filtered") == 0)
+		    filtered = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (way_id && version && timestamp && uid && user && changeset && filtered)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_WAY_TAGS table */
+    strcpy (sql, "PRAGMA table_info(osm_way_tags)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  way_id = 0;
+	  sub = 0;
+	  k = 0;
+	  v = 0;
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "way_id") == 0)
+		    way_id = 1;
+		if (strcasecmp (name, "sub") == 0)
+		    sub = 1;
+		if (strcasecmp (name, "k") == 0)
+		    k = 1;
+		if (strcasecmp (name, "v") == 0)
+		    v = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (way_id && sub && k && v)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_WAY_REFS table */
+    strcpy (sql, "PRAGMA table_info(osm_way_refs)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  way_id = 0;
+	  sub = 0;
+	  node_id = 0;
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "way_id") == 0)
+		    way_id = 1;
+		if (strcasecmp (name, "sub") == 0)
+		    sub = 1;
+		if (strcasecmp (name, "node_id") == 0)
+		    node_id = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (way_id && sub && node_id)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_RELATIONS table */
+    strcpy (sql, "PRAGMA table_info(osm_relations)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  version = 0;
+	  timestamp = 0;
+	  uid = 0;
+	  user = 0;
+	  changeset = 0;
+	  filtered = 0;
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "rel_id") == 0)
+		    rel_id = 1;
+		if (strcasecmp (name, "version") == 0)
+		    version = 1;
+		if (strcasecmp (name, "timestamp") == 0)
+		    timestamp = 1;
+		if (strcasecmp (name, "uid") == 0)
+		    uid = 1;
+		if (strcasecmp (name, "user") == 0)
+		    user = 1;
+		if (strcasecmp (name, "changeset") == 0)
+		    changeset = 1;
+		if (strcasecmp (name, "filtered") == 0)
+		    filtered = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rel_id && version && timestamp && uid && user && changeset && filtered)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_RELATION_TAGS table */
+    strcpy (sql, "PRAGMA table_info(osm_relation_tags)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  rel_id = 0;
+	  sub = 0;
+	  k = 0;
+	  v = 0;
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "rel_id") == 0)
+		    rel_id = 1;
+		if (strcasecmp (name, "sub") == 0)
+		    sub = 1;
+		if (strcasecmp (name, "k") == 0)
+		    k = 1;
+		if (strcasecmp (name, "v") == 0)
+		    v = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rel_id && sub && k && v)
+	;
+    else
+	goto unknown;
+
+/* checking the OSM_RELATION_REFS table */
+    strcpy (sql, "PRAGMA table_info(osm_relation_refs)");
+    ret = sqlite3_get_table (db_handle, sql, &results, &rows, &columns, NULL);
+    if (ret != SQLITE_OK)
+	goto unknown;
+    if (rows < 1)
+	;
+    else
+      {
+	  rel_id = 0;
+	  sub = 0;
+	  type = 0;
+	  for (i = 1; i <= rows; i++)
+	    {
+		name = results[(i * columns) + 1];
+		if (strcasecmp (name, "rel_id") == 0)
+		    rel_id = 1;
+		if (strcasecmp (name, "sub") == 0)
+		    sub = 1;
+		if (strcasecmp (name, "type") == 0)
+		    type = 1;
+		if (strcasecmp (name, "ref") == 0)
+		    ref = 1;
+		if (strcasecmp (name, "role") == 0)
+		    role = 1;
+	    }
+      }
+    sqlite3_free_table (results);
+    if (rel_id && sub && type && ref && role)
+	;
+    else
+	goto unknown;
+
+    *handle = db_handle;
+    return;
+
+  unknown:
+    if (db_handle)
+	sqlite3_close (db_handle);
+    fprintf (stderr, "DB '%s'\n", path);
+    fprintf (stderr, "doesn't seems to contain valid OSM-RAW data ...\n\n");
+    return;
+}
+
+static void
+do_help ()
+{
+/* printing the argument list */
+    fprintf (stderr, "\n\nusage: spatialite_osm_filter ARGLIST\n");
+    fprintf (stderr,
+	     "==============================================================\n");
+    fprintf (stderr,
+	     "-h or --help                    print this help message\n");
+    fprintf (stderr,
+	     "-o or --osm-path pathname       the OSM-XML [output] file path\n");
+    fprintf (stderr,
+	     "-w or --wkt-mask-path pathname       path of text file [WKT mask]\n");
+    fprintf (stderr,
+	     "-d or --db-path  pathname       the SpatiaLite DB path\n\n");
+    fprintf (stderr, "you can specify the following options as well\n");
+    fprintf (stderr,
+	     "-cs or --cache-size    num      DB cache size (how many pages)\n");
+    fprintf (stderr,
+	     "-m or --in-memory               using IN-MEMORY database\n");
+}
+
+int
+main (int argc, char *argv[])
+{
+/* the MAIN function simply perform arguments checking */
+    sqlite3 *handle;
+    int i;
+    int next_arg = ARG_NONE;
+    const char *osm_path = NULL;
+    const char *wkt_path = NULL;
+    const char *db_path = NULL;
+    int in_memory = 0;
+    int cache_size = 0;
+    int error = 0;
+    void *mask = NULL;
+    int mask_len = 0;
+    FILE *out = NULL;
+
+    for (i = 1; i < argc; i++)
+      {
+	  /* parsing the invocation arguments */
+	  if (next_arg != ARG_NONE)
+	    {
+		switch (next_arg)
+		  {
+		  case ARG_OSM_PATH:
+		      osm_path = argv[i];
+		      break;
+		  case ARG_MASK_PATH:
+		      wkt_path = argv[i];
+		      break;
+		  case ARG_DB_PATH:
+		      db_path = argv[i];
+		      break;
+		  case ARG_CACHE_SIZE:
+		      cache_size = atoi (argv[i]);
+		      break;
+		  };
+		next_arg = ARG_NONE;
+		continue;
+	    }
+	  if (strcasecmp (argv[i], "--help") == 0
+	      || strcmp (argv[i], "-h") == 0)
+	    {
+		do_help ();
+		return -1;
+	    }
+	  if (strcmp (argv[i], "-o") == 0)
+	    {
+		next_arg = ARG_OSM_PATH;
+		continue;
+	    }
+	  if (strcasecmp (argv[i], "--osm-path") == 0)
+	    {
+		next_arg = ARG_OSM_PATH;
+		continue;
+	    }
+	  if (strcmp (argv[i], "-w") == 0)
+	    {
+		next_arg = ARG_MASK_PATH;
+		continue;
+	    }
+	  if (strcasecmp (argv[i], "--wkt-mask-path") == 0)
+	    {
+		next_arg = ARG_MASK_PATH;
+		continue;
+	    }
+	  if (strcmp (argv[i], "-d") == 0)
+	    {
+		next_arg = ARG_DB_PATH;
+		continue;
+	    }
+	  if (strcasecmp (argv[i], "--db-path") == 0)
+	    {
+		next_arg = ARG_DB_PATH;
+		continue;
+	    }
+	  if (strcasecmp (argv[i], "--cache-size") == 0
+	      || strcmp (argv[i], "-cs") == 0)
+	    {
+		next_arg = ARG_CACHE_SIZE;
+		continue;
+	    }
+	  if (strcasecmp (argv[i], "-m") == 0)
+	    {
+		in_memory = 1;
+		next_arg = ARG_NONE;
+		continue;
+	    }
+	  if (strcasecmp (argv[i], "-in-memory") == 0)
+	    {
+		in_memory = 1;
+		next_arg = ARG_NONE;
+		continue;
+	    }
+	  fprintf (stderr, "unknown argument: %s\n", argv[i]);
+	  error = 1;
+      }
+    if (error)
+      {
+	  do_help ();
+	  return -1;
+      }
+
+/* checking the arguments */
+    if (!osm_path)
+      {
+	  fprintf (stderr,
+		   "did you forget setting the --osm-path argument ?\n");
+	  error = 1;
+      }
+    if (!db_path)
+      {
+	  fprintf (stderr, "did you forget setting the --db-path argument ?\n");
+	  error = 1;
+      }
+    if (!wkt_path)
+      {
+	  fprintf (stderr,
+		   "did you forget setting the --wkt-mask-path argument ?\n");
+	  error = 1;
+      }
+
+    if (error)
+      {
+	  do_help ();
+	  return -1;
+      }
+
+    if (!parse_wkt_mask (wkt_path, &mask, &mask_len))
+      {
+	  fprintf (stderr,
+		   "ERROR: Invalid WKT mask [not a valid WKT expression]\n");
+	  return -1;
+      }
+
+/* opening the DB */
+    if (in_memory)
+	cache_size = 0;
+    open_db (db_path, &handle, cache_size);
+    if (!handle)
+	return -1;
+    if (in_memory)
+      {
+	  /* loading the DB in-memory */
+	  sqlite3 *mem_db_handle;
+	  sqlite3_backup *backup;
+	  int ret;
+	  ret =
+	      sqlite3_open_v2 (":memory:", &mem_db_handle,
+			       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
+			       NULL);
+	  if (ret != SQLITE_OK)
+	    {
+		fprintf (stderr, "cannot open 'MEMORY-DB': %s\n",
+			 sqlite3_errmsg (mem_db_handle));
+		sqlite3_close (mem_db_handle);
+		return -1;
+	    }
+	  backup = sqlite3_backup_init (mem_db_handle, "main", handle, "main");
+	  if (!backup)
+	    {
+		fprintf (stderr, "cannot load 'MEMORY-DB'\n");
+		sqlite3_close (handle);
+		sqlite3_close (mem_db_handle);
+		return -1;
+	    }
+	  while (1)
+	    {
+		ret = sqlite3_backup_step (backup, 1024);
+		if (ret == SQLITE_DONE)
+		    break;
+	    }
+	  ret = sqlite3_backup_finish (backup);
+	  sqlite3_close (handle);
+	  handle = mem_db_handle;
+	  printf ("\nusing IN-MEMORY database\n");
+      }
+
+    out = fopen (osm_path, "wb");
+    if (out == NULL)
+	goto stop;
+
+    fprintf (stderr, "Evvai reset\n");
+/* resetting filtered nodes, ways and relations */
+    if (!reset_filtered (handle))
+	goto stop;
+
+    fprintf (stderr, "Evvai nodes\n");
+/* identifying filtered nodes */
+    if (!filter_nodes (handle, mask, mask_len))
+	goto stop;
+
+    fprintf (stderr, "Evvai rel-rels\n");
+/* identifying relations depending on other relations */
+    if (!filter_rel_relations (handle))
+	goto stop;
+
+    fprintf (stderr, "Evvai way-rels\n");
+/* identifying ways depending on relations */
+    if (!filter_way_relations (handle))
+	goto stop;
+
+    fprintf (stderr, "Evvai node-rels\n");
+/* identifying nodes depending on relations */
+    if (!filter_node_relations (handle))
+	goto stop;
+
+    fprintf (stderr, "Evvai node-ways\n");
+/* identifying nodes depending on ways */
+    if (!filter_node_ways (handle))
+	goto stop;
+
+/* writing the OSM header */
+    fprintf (out, "<?xml version='1.0' encoding='UTF-8'?>\n");
+    fprintf (out, "<osm version=\"0.6\" generator=\"splite2osm\">\n");
+
+    fprintf (stderr, "OutNodes\n");
+/* exporting OSM NODES */
+    if (!do_output_nodes (out, handle))
+      {
+	  fprintf (stderr, "\nThe output OSM file is corrupted !!!\n");
+	  goto stop;
+      }
+
+    fprintf (stderr, "OutWays\n");
+/* exporting OSM WAYS */
+    if (!do_output_ways (out, handle))
+      {
+	  fprintf (stderr, "\nThe output OSM file is corrupted !!!\n");
+	  goto stop;
+      }
+
+    fprintf (stderr, "OutRelations\n");
+/* exporting OSM RELATIONS */
+    if (!do_output_relations (out, handle))
+      {
+	  fprintf (stderr, "\nThe output OSM file is corrupted !!!\n");
+	  goto stop;
+      }
+
+/* writing the OSM footer */
+    fprintf (out, "</osm>\n");
+
+  stop:
+    free (mask);
+    sqlite3_close (handle);
+    if (out != NULL)
+	fclose (out);
+    return 0;
+}
diff --git a/spatialite-tools/spatialite_osm_map.c b/spatialite-tools/spatialite_osm_map.c
index 8d04e0a..75e5e0a 100644
--- a/spatialite-tools/spatialite_osm_map.c
+++ b/spatialite-tools/spatialite_osm_map.c
@@ -1055,6 +1055,75 @@ eval_way (struct aux_params *params, int area, unsigned char *blob,
       }
 }
 
+static int
+is_areal_layer ()
+{
+    struct tag *p_tag;
+    const char *p;
+    int i = 0;
+    const char *layer_name = NULL;
+    if (glob_way.first == NULL)
+	return;
+    while (1)
+      {
+	  p = base_layers[i++].name;
+	  if (!p)
+	      break;
+	  p_tag = glob_way.first;
+	  while (p_tag)
+	    {
+		if (strcmp (p_tag->k, p) == 0)
+		    layer_name = p;
+		p_tag = p_tag->next;
+	    }
+	  if (layer_name)
+	      break;
+      }
+    if (layer_name)
+      {
+	  /* possible "areal" layers */
+	  if (strcmp (layer_name, "amenity") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "building") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "historic") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "landuse") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "leisure") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "natural") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "parking") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "place") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "shop") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "sport") == 0)
+	      return 1;
+	  if (strcmp (layer_name, "tourism") == 0)
+	      return 1;
+      }
+    return 0;
+}
+
+static int
+is_closed (gaiaGeomCollPtr geom)
+{
+    gaiaLinestringPtr ln = geom->FirstLinestring;
+    double x0;
+    double y0;
+    double x1;
+    double y1;
+    int last = ln->Points - 1;
+    gaiaGetPoint (ln->Coords, 0, &x0, &y0);
+    gaiaGetPoint (ln->Coords, last, &x1, &y1);
+    if (x0 == x1 && y0 == y1)
+	return 1;
+    return 0;
+}
+
 static gaiaGeomCollPtr
 convert_to_polygon (gaiaGeomCollPtr old)
 {
@@ -1088,7 +1157,7 @@ end_way (struct aux_params *params)
     struct nd *p_nd2;
     unsigned char *blob;
     int blob_size;
-    int area;
+    int area = 0;
 
     gaiaGeomCollPtr geom = build_linestring (params->db_handle);
     if (geom)
@@ -1105,6 +1174,11 @@ end_way (struct aux_params *params)
 		    area = 1;
 		p_tag = p_tag->next;
 	    }
+
+	  /* attempting to recover undeclared areas */
+	  if (is_areal_layer () && is_closed (geom))
+	      area = 1;
+
 	  if (area)
 	    {
 		free (blob);
@@ -1519,7 +1593,6 @@ build_multipolygon (sqlite3 * db_handle)
     char sql[8192];
     sqlite3_stmt *stmt;
     sqlite3_int64 id;
-    int area;
 
     const unsigned char *blob = NULL;
     int blob_size;
@@ -1608,7 +1681,6 @@ build_multipolygon (sqlite3 * db_handle)
 		  {
 		      /* ok, we've just fetched a valid row */
 		      id = sqlite3_column_int64 (stmt, 0);
-		      area = sqlite3_column_int (stmt, 1);
 		      blob = sqlite3_column_blob (stmt, 2);
 		      blob_size = sqlite3_column_bytes (stmt, 2);
 		      org_geom = gaiaFromSpatiaLiteBlobWkb (blob, blob_size);
@@ -2540,6 +2612,8 @@ main (int argc, char *argv[])
     XML_Parser parser;
     struct aux_params params;
     FILE *xml_file;
+    int last_line_no = 0;
+    int curr_line_no = 0;
 
 /* initializing the aux-struct */
     params.db_handle = NULL;
@@ -2661,7 +2735,6 @@ main (int argc, char *argv[])
     open_db (db_path, &handle, cache_size);
     if (!handle)
 	return -1;
-    params.db_handle = handle;
     if (in_memory)
       {
 	  /* loading the DB in-memory */
@@ -2698,6 +2771,7 @@ main (int argc, char *argv[])
 	  handle = mem_db_handle;
 	  printf ("\nusing IN-MEMORY database\n");
       }
+    params.db_handle = handle;
 
 /* creating SQL prepared statements */
     create_sql_stmts (&params);
@@ -2737,9 +2811,17 @@ main (int argc, char *argv[])
 		sqlite3_close (handle);
 		return -1;
 	    }
+	  curr_line_no = (int) XML_GetCurrentLineNumber (parser);
+	  if ((curr_line_no - last_line_no) > 1000)
+	    {
+		last_line_no = curr_line_no;
+		printf ("Parsing XML line: %d\r", curr_line_no);
+		fflush (stdout);
+	    }
       }
     XML_ParserFree (parser);
     fclose (xml_file);
+    printf ("                                                         \r");
 
 /* finalizing SQL prepared statements */
     finalize_sql_stmts (&params);
diff --git a/spatialite-tools/spatialite_osm_raw.c b/spatialite-tools/spatialite_osm_raw.c
index 3e7036b..aba986c 100644
--- a/spatialite-tools/spatialite_osm_raw.c
+++ b/spatialite-tools/spatialite_osm_raw.c
@@ -77,22 +77,18 @@ struct aux_params
     sqlite3_stmt *ins_node_tags_stmt;
     sqlite3_stmt *ins_ways_stmt;
     sqlite3_stmt *ins_way_tags_stmt;
-    sqlite3_stmt *ins_way_node_refs_stmt;
+    sqlite3_stmt *ins_way_refs_stmt;
     sqlite3_stmt *ins_relations_stmt;
     sqlite3_stmt *ins_relation_tags_stmt;
-    sqlite3_stmt *ins_relation_node_refs_stmt;
-    sqlite3_stmt *ins_relation_way_refs_stmt;
-    sqlite3_stmt *ins_relation_relation_refs_stmt;
+    sqlite3_stmt *ins_relation_refs_stmt;
     int wr_nodes;
     int wr_node_tags;
     int wr_ways;
     int wr_way_tags;
-    int wr_way_node_refs;
+    int wr_way_refs;
     int wr_relations;
     int wr_rel_tags;
-    int wr_rel_node_refs;
-    int wr_rel_way_refs;
-    int wr_rel_rel_refs;
+    int wr_rel_refs;
     int current_tag;
 };
 
@@ -138,18 +134,12 @@ struct way
     struct node_ref *last_node;
 } glob_way;
 
-struct way_ref
+struct multi_ref
 {
-    sqlite3_int64 way_id;
-    char *role;
-    struct way_ref *next;
-};
-
-struct rel_ref
-{
-    sqlite3_int64 rel_id;
+    sqlite3_int64 id;
+    char type;
     char *role;
-    struct rel_ref *next;
+    struct multi_ref *next;
 };
 
 struct relation
@@ -162,12 +152,8 @@ struct relation
     sqlite3_int64 changeset;
     struct tag *first;
     struct tag *last;
-    struct node_ref *first_node;
-    struct node_ref *last_node;
-    struct way_ref *first_way;
-    struct way_ref *last_way;
-    struct rel_ref *first_rel;
-    struct rel_ref *last_rel;
+    struct multi_ref *first_rel;
+    struct multi_ref *last_rel;
 } glob_relation;
 
 static void
@@ -310,22 +296,22 @@ insert_way (struct aux_params *params)
     nr = glob_way.first_node;
     while (nr)
       {
-	  sqlite3_reset (params->ins_way_node_refs_stmt);
-	  sqlite3_clear_bindings (params->ins_way_node_refs_stmt);
-	  sqlite3_bind_int64 (params->ins_way_node_refs_stmt, 1, glob_way.id);
-	  sqlite3_bind_int (params->ins_way_node_refs_stmt, 2, sub);
+	  sqlite3_reset (params->ins_way_refs_stmt);
+	  sqlite3_clear_bindings (params->ins_way_refs_stmt);
+	  sqlite3_bind_int64 (params->ins_way_refs_stmt, 1, glob_way.id);
+	  sqlite3_bind_int (params->ins_way_refs_stmt, 2, sub);
 	  sub++;
-	  sqlite3_bind_int64 (params->ins_way_node_refs_stmt, 3, nr->node_id);
-	  ret = sqlite3_step (params->ins_way_node_refs_stmt);
+	  sqlite3_bind_int64 (params->ins_way_refs_stmt, 3, nr->node_id);
+	  ret = sqlite3_step (params->ins_way_refs_stmt);
 	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
 	      ;
 	  else
 	    {
 		fprintf (stderr,
-			 "sqlite3_step() error: INSERT INTO osm_way_node_refs\n");
+			 "sqlite3_step() error: INSERT INTO osm_way_refs\n");
 		return;
 	    }
-	  params->wr_way_node_refs += 1;
+	  params->wr_way_refs += 1;
 	  nr = nr->next;
       }
 }
@@ -336,9 +322,7 @@ insert_relation (struct aux_params *params)
     int ret;
     int sub = 0;
     struct tag *p_tag;
-    struct node_ref *nr;
-    struct way_ref *wr;
-    struct rel_ref *rr;
+    struct multi_ref *mr;
     sqlite3_reset (params->ins_relations_stmt);
     sqlite3_clear_bindings (params->ins_relations_stmt);
     sqlite3_bind_int64 (params->ins_relations_stmt, 1, glob_relation.id);
@@ -399,93 +383,44 @@ insert_relation (struct aux_params *params)
       }
 
     sub = 0;
-    nr = glob_relation.first_node;
-    while (nr)
-      {
-	  sqlite3_reset (params->ins_relation_node_refs_stmt);
-	  sqlite3_clear_bindings (params->ins_relation_node_refs_stmt);
-	  sqlite3_bind_int64 (params->ins_relation_node_refs_stmt, 1,
-			      glob_relation.id);
-	  sqlite3_bind_int (params->ins_relation_node_refs_stmt, 2, sub);
-	  sub++;
-	  sqlite3_bind_int64 (params->ins_relation_node_refs_stmt, 3,
-			      nr->node_id);
-	  if (nr->role == NULL)
-	      sqlite3_bind_null (params->ins_relation_node_refs_stmt, 4);
-	  else
-	      sqlite3_bind_text (params->ins_relation_node_refs_stmt, 4,
-				 nr->role, strlen (nr->role), SQLITE_STATIC);
-	  ret = sqlite3_step (params->ins_relation_node_refs_stmt);
-	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
-	      ;
-	  else
-	    {
-		fprintf (stderr,
-			 "sqlite3_step() error: INSERT INTO osm_relation_node_refs\n");
-		return;
-	    }
-	  params->wr_rel_node_refs += 1;
-	  nr = nr->next;
-      }
-
-    sub = 0;
-    wr = glob_relation.first_way;
-    while (wr)
+    mr = glob_relation.first_rel;
+    while (mr)
       {
-	  sqlite3_reset (params->ins_relation_way_refs_stmt);
-	  sqlite3_clear_bindings (params->ins_relation_way_refs_stmt);
-	  sqlite3_bind_int64 (params->ins_relation_way_refs_stmt, 1,
+	  sqlite3_reset (params->ins_relation_refs_stmt);
+	  sqlite3_clear_bindings (params->ins_relation_refs_stmt);
+	  sqlite3_bind_int64 (params->ins_relation_refs_stmt, 1,
 			      glob_relation.id);
-	  sqlite3_bind_int (params->ins_relation_way_refs_stmt, 2, sub);
+	  sqlite3_bind_int (params->ins_relation_refs_stmt, 2, sub);
 	  sub++;
-	  sqlite3_bind_int64 (params->ins_relation_way_refs_stmt, 3,
-			      wr->way_id);
-	  if (wr->role == NULL)
-	      sqlite3_bind_null (params->ins_relation_way_refs_stmt, 4);
+	  if (mr->type == 'N')
+	      sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "N", 1,
+				 SQLITE_STATIC);
+	  else if (mr->type == 'W')
+	      sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "W", 1,
+				 SQLITE_STATIC);
+	  else if (mr->type == 'R')
+	      sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "R", 1,
+				 SQLITE_STATIC);
 	  else
-	      sqlite3_bind_text (params->ins_relation_way_refs_stmt, 4,
-				 wr->role, strlen (wr->role), SQLITE_STATIC);
-	  ret = sqlite3_step (params->ins_relation_way_refs_stmt);
-	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
-	      ;
-	  else
-	    {
-		fprintf (stderr,
-			 "sqlite3_step() error: INSERT INTO osm_relation_way_refs\n");
-		return;
-	    }
-	  params->wr_rel_way_refs += 1;
-	  wr = wr->next;
-      }
-
-    sub = 0;
-    rr = glob_relation.first_rel;
-    while (rr)
-      {
-	  sqlite3_reset (params->ins_relation_relation_refs_stmt);
-	  sqlite3_clear_bindings (params->ins_relation_relation_refs_stmt);
-	  sqlite3_bind_int64 (params->ins_relation_relation_refs_stmt, 1,
-			      glob_relation.id);
-	  sqlite3_bind_int (params->ins_relation_relation_refs_stmt, 2, sub);
-	  sub++;
-	  sqlite3_bind_int64 (params->ins_relation_relation_refs_stmt, 3,
-			      rr->rel_id);
-	  if (rr->role == NULL)
-	      sqlite3_bind_null (params->ins_relation_relation_refs_stmt, 4);
+	      sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "?", 1,
+				 SQLITE_STATIC);
+	  sqlite3_bind_int64 (params->ins_relation_refs_stmt, 4, mr->id);
+	  if (mr->role == NULL)
+	      sqlite3_bind_null (params->ins_relation_refs_stmt, 5);
 	  else
-	      sqlite3_bind_text (params->ins_relation_relation_refs_stmt, 4,
-				 rr->role, strlen (rr->role), SQLITE_STATIC);
-	  ret = sqlite3_step (params->ins_relation_relation_refs_stmt);
+	      sqlite3_bind_text (params->ins_relation_refs_stmt, 5,
+				 mr->role, strlen (mr->role), SQLITE_STATIC);
+	  ret = sqlite3_step (params->ins_relation_refs_stmt);
 	  if (ret == SQLITE_DONE || ret == SQLITE_ROW)
 	      ;
 	  else
 	    {
 		fprintf (stderr,
-			 "sqlite3_step() error: INSERT INTO osm_relation_relation_refs\n");
+			 "sqlite3_step() error: INSERT INTO osm_relation_refs\n");
 		return;
 	    }
-	  params->wr_rel_rel_refs += 1;
-	  rr = rr->next;
+	  params->wr_rel_refs += 1;
+	  mr = mr->next;
       }
 }
 
@@ -560,12 +495,8 @@ clean_relation ()
 /* cleaning the current relation */
     struct tag *pt;
     struct tag *ptn;
-    struct node_ref *nr;
-    struct node_ref *nrn;
-    struct way_ref *wr;
-    struct way_ref *wrn;
-    struct rel_ref *rr;
-    struct rel_ref *rrn;
+    struct multi_ref *mr;
+    struct multi_ref *mrn;
     if (glob_relation.timestamp)
 	free (glob_relation.timestamp);
     if (glob_relation.user)
@@ -581,41 +512,19 @@ clean_relation ()
 	  free (pt);
 	  pt = ptn;
       }
-    nr = glob_relation.first_node;
-    while (nr)
-      {
-	  nrn = nr->next;
-	  if (nr->role)
-	      free (nr->role);
-	  free (nr);
-	  nr = nrn;
-      }
-    wr = glob_relation.first_way;
-    while (wr)
+    mr = glob_relation.first_rel;
+    while (mr)
       {
-	  wrn = wr->next;
-	  if (wr->role)
-	      free (wr->role);
-	  free (wr);
-	  wr = wrn;
-      }
-    rr = glob_relation.first_rel;
-    while (rr)
-      {
-	  rrn = rr->next;
-	  if (rr->role)
-	      free (rr->role);
-	  free (rr);
-	  rr = rrn;
+	  mrn = mr->next;
+	  if (mr->role)
+	      free (mr->role);
+	  free (mr);
+	  mr = mrn;
       }
     glob_relation.timestamp = NULL;
     glob_relation.user = NULL;
     glob_relation.first = NULL;
     glob_relation.last = NULL;
-    glob_relation.first_node = NULL;
-    glob_relation.last_node = NULL;
-    glob_relation.first_way = NULL;
-    glob_relation.last_way = NULL;
     glob_relation.first_rel = NULL;
     glob_relation.last_rel = NULL;
 }
@@ -855,9 +764,7 @@ start_member (struct aux_params *params, const char **attr)
     int is_way = 0;
     int is_node = 0;
     int is_rel = 0;
-    struct node_ref *nr;
-    struct way_ref *wr;
-    struct rel_ref *rr;
+    struct multi_ref *mr;
     for (i = 0; attr[i]; i += 2)
       {
 	  if (strcmp (attr[i], "type") == 0)
@@ -874,70 +781,31 @@ start_member (struct aux_params *params, const char **attr)
 	  if (strcmp (attr[i], "role") == 0)
 	      role = attr[i + 1];
       }
-    if (is_node)
-      {
-/* appending a new node-ref-id to the current item */
-	  if (params->current_tag == CURRENT_TAG_IS_RELATION)
-	    {
-		nr = malloc (sizeof (struct node_ref));
-		if (glob_relation.first_node == NULL)
-		    glob_relation.first_node = nr;
-		if (glob_relation.last_node != NULL)
-		    glob_relation.last_node->next = nr;
-		glob_relation.last_node = nr;
-		nr->next = NULL;
-		nr->node_id = id;
-		nr->role = NULL;
-		if (role)
-		  {
-		      len = strlen (role);
-		      nr->role = malloc (len + 1);
-		      strcpy (nr->role, role);
-		  }
-	    }
-      }
-    if (is_way)
-      {
-/* appending a new way-ref-id to the current item */
-	  if (params->current_tag == CURRENT_TAG_IS_RELATION)
-	    {
-		wr = malloc (sizeof (struct way_ref));
-		if (glob_relation.first_way == NULL)
-		    glob_relation.first_way = wr;
-		if (glob_relation.last_way != NULL)
-		    glob_relation.last_way->next = wr;
-		glob_relation.last_way = wr;
-		wr->next = NULL;
-		wr->way_id = id;
-		wr->role = NULL;
-		if (role)
-		  {
-		      len = strlen (role);
-		      wr->role = malloc (len + 1);
-		      strcpy (wr->role, role);
-		  }
-	    }
-      }
-    if (is_rel)
+
+    if (params->current_tag == CURRENT_TAG_IS_RELATION)
       {
-/* appending a new relation-ref-id to the current item */
-	  if (params->current_tag == CURRENT_TAG_IS_RELATION)
+	  /* appending a new relation-ref-id to the current item */
+	  mr = malloc (sizeof (struct multi_ref));
+	  if (glob_relation.first_rel == NULL)
+	      glob_relation.first_rel = mr;
+	  if (glob_relation.last_rel != NULL)
+	      glob_relation.last_rel->next = mr;
+	  glob_relation.last_rel = mr;
+	  mr->next = NULL;
+	  mr->type = '?';
+	  if (is_node)
+	      mr->type = 'N';
+	  if (is_way)
+	      mr->type = 'W';
+	  if (is_rel)
+	      mr->type = 'R';
+	  mr->id = id;
+	  mr->role = NULL;
+	  if (role)
 	    {
-		rr = malloc (sizeof (struct rel_ref));
-		if (glob_relation.first_rel == NULL)
-		    glob_relation.first_rel = rr;
-		if (glob_relation.last_rel != NULL)
-		    glob_relation.last_rel->next = rr;
-		glob_relation.last_rel = rr;
-		rr->next = NULL;
-		rr->rel_id = id;
-		rr->role = NULL;
-		if (role)
-		  {
-		      len = strlen (role);
-		      rr->role = malloc (len + 1);
-		      strcpy (rr->role, role);
-		  }
+		len = strlen (role);
+		mr->role = malloc (len + 1);
+		strcpy (mr->role, role);
 	    }
       }
 }
@@ -986,18 +854,14 @@ finalize_sql_stmts (struct aux_params *params)
 	sqlite3_finalize (params->ins_ways_stmt);
     if (params->ins_way_tags_stmt != NULL)
 	sqlite3_finalize (params->ins_way_tags_stmt);
-    if (params->ins_way_node_refs_stmt != NULL)
-	sqlite3_finalize (params->ins_way_node_refs_stmt);
+    if (params->ins_way_refs_stmt != NULL)
+	sqlite3_finalize (params->ins_way_refs_stmt);
     if (params->ins_relations_stmt != NULL)
 	sqlite3_finalize (params->ins_relations_stmt);
     if (params->ins_relation_tags_stmt != NULL)
 	sqlite3_finalize (params->ins_relation_tags_stmt);
-    if (params->ins_relation_node_refs_stmt != NULL)
-	sqlite3_finalize (params->ins_relation_node_refs_stmt);
-    if (params->ins_relation_way_refs_stmt != NULL)
-	sqlite3_finalize (params->ins_relation_way_refs_stmt);
-    if (params->ins_relation_relation_refs_stmt != NULL)
-	sqlite3_finalize (params->ins_relation_relation_refs_stmt);
+    if (params->ins_relation_refs_stmt != NULL)
+	sqlite3_finalize (params->ins_relation_refs_stmt);
 
 /* committing the still pending SQL Transaction */
     ret = sqlite3_exec (params->db_handle, "COMMIT", NULL, NULL, &sql_err);
@@ -1016,12 +880,10 @@ create_sql_stmts (struct aux_params *params)
     sqlite3_stmt *ins_node_tags_stmt;
     sqlite3_stmt *ins_ways_stmt;
     sqlite3_stmt *ins_way_tags_stmt;
-    sqlite3_stmt *ins_way_node_refs_stmt;
+    sqlite3_stmt *ins_way_refs_stmt;
     sqlite3_stmt *ins_relations_stmt;
     sqlite3_stmt *ins_relation_tags_stmt;
-    sqlite3_stmt *ins_relation_node_refs_stmt;
-    sqlite3_stmt *ins_relation_way_refs_stmt;
-    sqlite3_stmt *ins_relation_relation_refs_stmt;
+    sqlite3_stmt *ins_relation_refs_stmt;
     char sql[1024];
     int ret;
     char *sql_err = NULL;
@@ -1035,8 +897,8 @@ create_sql_stmts (struct aux_params *params)
 	  return;
       }
     strcpy (sql,
-	    "INSERT INTO osm_nodes (node_id, version, timestamp, uid, user, changeset, Geometry) ");
-    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, ?)");
+	    "INSERT INTO osm_nodes (node_id, version, timestamp, uid, user, changeset, filtered, Geometry) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, 0, ?)");
     ret =
 	sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql),
 			    &ins_nodes_stmt, NULL);
@@ -1060,8 +922,8 @@ create_sql_stmts (struct aux_params *params)
 	  return;
       }
     strcpy (sql,
-	    "INSERT INTO osm_ways (way_id, version, timestamp, uid, user, changeset) ");
-    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?)");
+	    "INSERT INTO osm_ways (way_id, version, timestamp, uid, user, changeset, filtered) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, 0)");
     ret =
 	sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql),
 			    &ins_ways_stmt, NULL);
@@ -1084,11 +946,11 @@ create_sql_stmts (struct aux_params *params)
 	  finalize_sql_stmts (params);
 	  return;
       }
-    strcpy (sql, "INSERT INTO osm_way_node_refs (way_id, sub, node_id) ");
+    strcpy (sql, "INSERT INTO osm_way_refs (way_id, sub, node_id) ");
     strcat (sql, "VALUES (?, ?, ?)");
     ret =
 	sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql),
-			    &ins_way_node_refs_stmt, NULL);
+			    &ins_way_refs_stmt, NULL);
     if (ret != SQLITE_OK)
       {
 	  fprintf (stderr, "SQL error: %s\n%s\n", sql,
@@ -1097,8 +959,8 @@ create_sql_stmts (struct aux_params *params)
 	  return;
       }
     strcpy (sql,
-	    "INSERT INTO osm_relations (rel_id, version, timestamp, uid, user, changeset) ");
-    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?)");
+	    "INSERT INTO osm_relations (rel_id, version, timestamp, uid, user, changeset, filtered) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?, ?, 0)");
     ret =
 	sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql),
 			    &ins_relations_stmt, NULL);
@@ -1122,37 +984,11 @@ create_sql_stmts (struct aux_params *params)
 	  return;
       }
     strcpy (sql,
-	    "INSERT INTO osm_relation_node_refs (rel_id, sub, node_id, role) ");
-    strcat (sql, "VALUES (?, ?, ?, ?)");
-    ret =
-	sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql),
-			    &ins_relation_node_refs_stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQL error: %s\n%s\n", sql,
-		   sqlite3_errmsg (params->db_handle));
-	  finalize_sql_stmts (params);
-	  return;
-      }
-    strcpy (sql,
-	    "INSERT INTO osm_relation_way_refs (rel_id, sub, way_id, role) ");
-    strcat (sql, "VALUES (?, ?, ?, ?)");
-    ret =
-	sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql),
-			    &ins_relation_way_refs_stmt, NULL);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "SQL error: %s\n%s\n", sql,
-		   sqlite3_errmsg (params->db_handle));
-	  finalize_sql_stmts (params);
-	  return;
-      }
-    strcpy (sql,
-	    "INSERT INTO osm_relation_relation_refs (rel_id, sub, relation_id, role) ");
-    strcat (sql, "VALUES (?, ?, ?, ?)");
+	    "INSERT INTO osm_relation_refs (rel_id, sub, type, ref, role) ");
+    strcat (sql, "VALUES (?, ?, ?, ?, ?)");
     ret =
 	sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql),
-			    &ins_relation_relation_refs_stmt, NULL);
+			    &ins_relation_refs_stmt, NULL);
     if (ret != SQLITE_OK)
       {
 	  fprintf (stderr, "SQL error: %s\n%s\n", sql,
@@ -1165,12 +1001,10 @@ create_sql_stmts (struct aux_params *params)
     params->ins_node_tags_stmt = ins_node_tags_stmt;
     params->ins_ways_stmt = ins_ways_stmt;
     params->ins_way_tags_stmt = ins_way_tags_stmt;
-    params->ins_way_node_refs_stmt = ins_way_node_refs_stmt;
+    params->ins_way_refs_stmt = ins_way_refs_stmt;
     params->ins_relations_stmt = ins_relations_stmt;
     params->ins_relation_tags_stmt = ins_relation_tags_stmt;
-    params->ins_relation_node_refs_stmt = ins_relation_node_refs_stmt;
-    params->ins_relation_way_refs_stmt = ins_relation_way_refs_stmt;
-    params->ins_relation_relation_refs_stmt = ins_relation_relation_refs_stmt;
+    params->ins_relation_refs_stmt = ins_relation_refs_stmt;
 }
 
 static void
@@ -1335,7 +1169,8 @@ open_db (const char *path, sqlite3 ** handle, int cache_size)
     strcat (sql, "timestamp TEXT,\n");
     strcat (sql, "uid INTEGER NOT NULL,\n");
     strcat (sql, "user TEXT,\n");
-    strcat (sql, "changeset INTEGER NOT NULL)\n");
+    strcat (sql, "changeset INTEGER NOT NULL,\n");
+    strcat (sql, "filtered INTEGER NOT NULL)\n");
     ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
     if (ret != SQLITE_OK)
       {
@@ -1378,7 +1213,8 @@ open_db (const char *path, sqlite3 ** handle, int cache_size)
     strcat (sql, "timestamp TEXT,\n");
     strcat (sql, "uid INTEGER NOT NULL,\n");
     strcat (sql, "user TEXT,\n");
-    strcat (sql, "changeset INTEGER NOT NULL)\n");
+    strcat (sql, "changeset INTEGER NOT NULL,\n");
+    strcat (sql, "filtered INTEGER NOT NULL)\n");
     ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
     if (ret != SQLITE_OK)
       {
@@ -1405,7 +1241,7 @@ open_db (const char *path, sqlite3 ** handle, int cache_size)
 	  return;
       }
 /* creating the OSM "raw" way-node refs */
-    strcpy (sql, "CREATE TABLE osm_way_node_refs (\n");
+    strcpy (sql, "CREATE TABLE osm_way_refs (\n");
     strcat (sql, "way_id INTEGER NOT NULL,\n");
     strcat (sql, "sub INTEGER NOT NULL,\n");
     strcat (sql, "node_id INTEGER NOT NULL,\n");
@@ -1415,7 +1251,17 @@ open_db (const char *path, sqlite3 ** handle, int cache_size)
     ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
     if (ret != SQLITE_OK)
       {
-	  fprintf (stderr, "CREATE TABLE 'osm_way_node_refs' error: %s\n",
+	  fprintf (stderr, "CREATE TABLE 'osm_way_refs' error: %s\n", err_msg);
+	  sqlite3_free (err_msg);
+	  sqlite3_close (db_handle);
+	  return;
+      }
+/* creating an index supporting osm_way_refs.node_id */
+    strcpy (sql, "CREATE INDEX idx_osm_ref_way ON osm_way_refs (node_id)");
+    ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
+    if (ret != SQLITE_OK)
+      {
+	  fprintf (stderr, "CREATE INDEX 'idx_osm_node_way' error: %s\n",
 		   err_msg);
 	  sqlite3_free (err_msg);
 	  sqlite3_close (db_handle);
@@ -1428,7 +1274,8 @@ open_db (const char *path, sqlite3 ** handle, int cache_size)
     strcat (sql, "timestamp TEXT,\n");
     strcat (sql, "uid INTEGER NOT NULL,\n");
     strcat (sql, "user TEXT,\n");
-    strcat (sql, "changeset INTEGER NOT NULL)\n");
+    strcat (sql, "changeset INTEGER NOT NULL,\n");
+    strcat (sql, "filtered INTEGER NOT NULL)\n");
     ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
     if (ret != SQLITE_OK)
       {
@@ -1456,10 +1303,11 @@ open_db (const char *path, sqlite3 ** handle, int cache_size)
 	  return;
       }
 /* creating the OSM "raw" relation-node refs */
-    strcpy (sql, "CREATE TABLE osm_relation_node_refs (\n");
+    strcpy (sql, "CREATE TABLE osm_relation_refs (\n");
     strcat (sql, "rel_id INTEGER NOT NULL,\n");
     strcat (sql, "sub INTEGER NOT NULL,\n");
-    strcat (sql, "node_id INTEGER NOT NULL,\n");
+    strcat (sql, "type TEXT NOT NULL,\n");
+    strcat (sql, "ref INTEGER NOT NULL,\n");
     strcat (sql, "role TEXT,");
     strcat (sql, "CONSTRAINT pk_osm_relnoderefs PRIMARY KEY (rel_id, sub),\n");
     strcat (sql, "CONSTRAINT fk_osm_relnoderefs FOREIGN KEY (rel_id) ");
@@ -1467,44 +1315,19 @@ open_db (const char *path, sqlite3 ** handle, int cache_size)
     ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
     if (ret != SQLITE_OK)
       {
-	  fprintf (stderr, "CREATE TABLE 'osm_relation_node_refs' error: %s\n",
-		   err_msg);
-	  sqlite3_free (err_msg);
-	  sqlite3_close (db_handle);
-	  return;
-      }
-/* creating the OSM "raw" relation-way refs */
-    strcpy (sql, "CREATE TABLE osm_relation_way_refs (\n");
-    strcat (sql, "rel_id INTEGER NOT NULL,\n");
-    strcat (sql, "sub INTEGER NOT NULL,\n");
-    strcat (sql, "way_id INTEGER NOT NULL,\n");
-    strcat (sql, "role TEXT,");
-    strcat (sql, "CONSTRAINT pk_osm_relwayrefs PRIMARY KEY (rel_id, sub),\n");
-    strcat (sql, "CONSTRAINT fk_osm_relwayrefs FOREIGN KEY (rel_id) ");
-    strcat (sql, "REFERENCES osm_relations (rel_id))\n");
-    ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
-    if (ret != SQLITE_OK)
-      {
-	  fprintf (stderr, "CREATE TABLE 'osm_relation_way_refs' error: %s\n",
+	  fprintf (stderr, "CREATE TABLE 'osm_relation_refs' error: %s\n",
 		   err_msg);
 	  sqlite3_free (err_msg);
 	  sqlite3_close (db_handle);
 	  return;
       }
-/* creating the OSM "raw" relation-relation refs */
-    strcpy (sql, "CREATE TABLE osm_relation_relation_refs (\n");
-    strcat (sql, "rel_id INTEGER NOT NULL,\n");
-    strcat (sql, "sub INTEGER NOT NULL,\n");
-    strcat (sql, "relation_id INTEGER NOT NULL,\n");
-    strcat (sql, "role TEXT,");
-    strcat (sql, "CONSTRAINT pk_osm_relrelrefs PRIMARY KEY (rel_id, sub),\n");
-    strcat (sql, "CONSTRAINT fk_osm_relrelrefs FOREIGN KEY (rel_id) ");
-    strcat (sql, "REFERENCES osm_relations (rel_id))\n");
+/* creating an index supporting osm_relation_refs.ref */
+    strcpy (sql,
+	    "CREATE INDEX idx_osm_ref_relation ON osm_relation_refs (type, ref)");
     ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg);
     if (ret != SQLITE_OK)
       {
-	  fprintf (stderr,
-		   "CREATE TABLE 'osm_relation_relation_refs' error: %s\n",
+	  fprintf (stderr, "CREATE INDEX 'idx_osm_relation' error: %s\n",
 		   err_msg);
 	  sqlite3_free (err_msg);
 	  sqlite3_close (db_handle);
@@ -1567,22 +1390,18 @@ main (int argc, char *argv[])
     params.ins_node_tags_stmt = NULL;
     params.ins_ways_stmt = NULL;
     params.ins_way_tags_stmt = NULL;
-    params.ins_way_node_refs_stmt = NULL;
+    params.ins_way_refs_stmt = NULL;
     params.ins_relations_stmt = NULL;
     params.ins_relation_tags_stmt = NULL;
-    params.ins_relation_node_refs_stmt = NULL;
-    params.ins_relation_way_refs_stmt = NULL;
-    params.ins_relation_relation_refs_stmt = NULL;
+    params.ins_relation_refs_stmt = NULL;
     params.wr_nodes = 0;
     params.wr_node_tags = 0;
     params.wr_ways = 0;
     params.wr_way_tags = 0;
-    params.wr_way_node_refs = 0;
+    params.wr_way_refs = 0;
     params.wr_relations = 0;
     params.wr_rel_tags = 0;
-    params.wr_rel_node_refs = 0;
-    params.wr_rel_way_refs = 0;
-    params.wr_rel_rel_refs = 0;
+    params.wr_rel_refs = 0;
     params.current_tag = CURRENT_TAG_UNKNOWN;
 
     glob_node.timestamp = NULL;
@@ -1601,10 +1420,6 @@ main (int argc, char *argv[])
     glob_relation.user = NULL;
     glob_relation.first = NULL;
     glob_relation.last = NULL;
-    glob_relation.first_node = NULL;
-    glob_relation.last_node = NULL;
-    glob_relation.first_way = NULL;
-    glob_relation.last_way = NULL;
     glob_relation.first_rel = NULL;
     glob_relation.last_rel = NULL;
 
@@ -1794,12 +1609,10 @@ main (int argc, char *argv[])
     printf ("\t%d tags\n", params.wr_node_tags);
     printf ("inserted %d ways\n", params.wr_ways);
     printf ("\t%d tags\n", params.wr_way_tags);
-    printf ("\t%d node-refs\n", params.wr_way_node_refs);
+    printf ("\t%d node-refs\n", params.wr_way_refs);
     printf ("inserted %d relations\n", params.wr_relations);
     printf ("\t%d tags\n", params.wr_rel_tags);
-    printf ("\t%d node-refs\n", params.wr_rel_node_refs);
-    printf ("\t%d way-refs\n", params.wr_rel_way_refs);
-    printf ("\t%d relation-refs\n", params.wr_rel_rel_refs);
+    printf ("\t%d refs\n", params.wr_rel_refs);
 
     if (in_memory)
       {
diff --git a/spatialite-tools/spatialite_tool.c b/spatialite-tools/spatialite_tool.c
index 3919d6f..19a7566 100644
--- a/spatialite-tools/spatialite_tool.c
+++ b/spatialite-tools/spatialite_tool.c
@@ -126,7 +126,7 @@ do_import_dbf (char *db_path, char *dbf_path, char *table, char *charset)
 	  return;
       }
     spatialite_autocreate (handle);
-    if (load_dbf (handle, dbf_path, table, charset, 0, &rows))
+    if (load_dbf (handle, dbf_path, table, charset, 0, &rows, NULL))
 	fprintf (stderr, "Inserted %d rows into '%s' from '%s'\n", rows, table,
 		 dbf_path);
     else
@@ -166,7 +166,7 @@ do_import_shp (char *db_path, char *shp_path, char *table, char *charset,
     spatialite_autocreate (handle);
     if (load_shapefile
 	(handle, shp_path, table, charset, srid, column, coerce2d, compressed,
-	 0, &rows))
+	 0, 0, &rows, NULL))
 	fprintf (stderr, "Inserted %d rows into '%s' from '%s.shp'\n", rows,
 		 table, shp_path);
     else
@@ -202,7 +202,7 @@ do_export (char *db_path, char *shp_path, char *table, char *column,
 	  return;
       }
     if (dump_shapefile
-	(handle, table, column, shp_path, charset, type, 0, &rows))
+	(handle, table, column, shp_path, charset, type, 0, &rows, NULL))
 	fprintf (stderr, "Exported %d rows into '%s.shp' from '%s'\n", rows,
 		 shp_path, table);
     else

-- 
geospatial extension for SQLite



More information about the Pkg-grass-devel mailing list